Пример #1
0
from flask_restx import abort
from flask_restx import fields

from mycodo.databases.models import Unit
from mycodo.mycodo_flask.api import api
from mycodo.mycodo_flask.api import default_responses
from mycodo.mycodo_flask.utils import utils_general
from mycodo.utils.influx import read_influxdb_list
from mycodo.utils.influx import read_influxdb_single
from mycodo.utils.influx import valid_date_str
from mycodo.utils.influx import write_influxdb_value
from mycodo.utils.system_pi import add_custom_units

logger = logging.getLogger(__name__)

ns_measurement = api.namespace('measurements',
                               description='Measurement operations')

measurement_create_fields = ns_measurement.model(
    'Measurement Create Fields', {
        'timestamp':
        fields.DateTime(
            description=
            'The timestamp of the measurement, in %Y-%m-%dT%H:%M:%S.%fZ format '
            '(e.g. 2019-04-15T18:07:00.392Z). (Optional; exclude to create a '
            'measurement with a timestamp of the current time)',
            dt_format='iso8601',
            required=False)
    })

measurement_fields = ns_measurement.model(
    'Measurement Fields', {
Пример #2
0
from mycodo.databases.models import Output
from mycodo.databases.models.measurement import DeviceMeasurementsSchema
from mycodo.databases.models.output import OutputSchema
from mycodo.mycodo_client import DaemonControl
from mycodo.mycodo_flask.api import api
from mycodo.mycodo_flask.api import default_responses
from mycodo.mycodo_flask.api.sql_schema_fields import device_measurement_fields
from mycodo.mycodo_flask.api.sql_schema_fields import output_fields
from mycodo.mycodo_flask.api.utils import get_from_db
from mycodo.mycodo_flask.api.utils import return_list_of_dictionaries
from mycodo.mycodo_flask.utils import utils_general
from mycodo.mycodo_flask.utils.utils_output import get_all_output_states

logger = logging.getLogger(__name__)

ns_output = api.namespace('outputs', description='Output operations')

output_states_fields = ns_output.model('Output States Fields', {
    'unique_id': fields.String,
    'state': fields.String
})

output_list_fields = api.model(
    'Output Fields List', {
        'output settings': fields.List(fields.Nested(output_fields)),
        'output states': fields.Nested(output_states_fields)
    })

output_unique_id_fields = ns_output.model(
    'Output Status Fields', {
        'output settings':
Пример #3
0
from mycodo.databases.models import DeviceMeasurements
from mycodo.databases.models import Input
from mycodo.databases.models.input import InputSchema
from mycodo.databases.models.measurement import DeviceMeasurementsSchema
from mycodo.mycodo_client import DaemonControl
from mycodo.mycodo_flask.api import api
from mycodo.mycodo_flask.api import default_responses
from mycodo.mycodo_flask.api.sql_schema_fields import device_measurement_fields
from mycodo.mycodo_flask.api.sql_schema_fields import input_fields
from mycodo.mycodo_flask.api.utils import get_from_db
from mycodo.mycodo_flask.api.utils import return_list_of_dictionaries
from mycodo.mycodo_flask.utils import utils_general

logger = logging.getLogger(__name__)

ns_input = api.namespace('inputs', description='Input operations')

input_single_fields = api.model('Input Status Fields', {
    'input settings': fields.Nested(input_fields),
    'device measurements': fields.List(
        fields.Nested(device_measurement_fields)),
})

input_list_fields = api.model('Input Fields List', {
    'input settings': fields.List(fields.Nested(input_fields)),
})


@ns_input.route('/')
@ns_input.doc(security='apikey', responses=default_responses)
class Inputs(Resource):
Пример #4
0
from mycodo.databases.models import DeviceMeasurements
from mycodo.databases.models import Math
from mycodo.databases.models.math import MathSchema
from mycodo.databases.models.measurement import DeviceMeasurementsSchema
from mycodo.mycodo_flask.api import api
from mycodo.mycodo_flask.api import default_responses
from mycodo.mycodo_flask.api.sql_schema_fields import device_measurement_fields
from mycodo.mycodo_flask.api.sql_schema_fields import math_fields
from mycodo.mycodo_flask.api.utils import get_from_db
from mycodo.mycodo_flask.api.utils import return_list_of_dictionaries
from mycodo.mycodo_flask.utils import utils_general

logger = logging.getLogger(__name__)

ns_math = api.namespace('maths', description='Math operations')

math_single_fields = api.model(
    'Math Status Fields', {
        'math settings':
        fields.Nested(math_fields),
        'device measurements':
        fields.List(fields.Nested(device_measurement_fields)),
    })

math_list_fields = api.model(
    'Math Fields List', {
        'math settings': fields.List(fields.Nested(math_fields)),
    })

Пример #5
0
import traceback

import flask_login
from flask_accept import accept
from flask_restplus import Resource
from flask_restplus import abort
from flask_restplus import fields

from mycodo.mycodo_client import DaemonControl
from mycodo.mycodo_flask.api import api
from mycodo.mycodo_flask.api import default_responses
from mycodo.mycodo_flask.utils import utils_general

logger = logging.getLogger(__name__)

ns_daemon = api.namespace('daemon', description='Daemon operations')

daemon_status_fields = ns_daemon.model(
    'Daemon Status Fields', {
        'is_running': fields.Boolean,
        'RAM': fields.Float,
        'python_virtual_env': fields.Boolean
    })

daemon_terminate_fields = ns_daemon.model('Daemon Terminate Fields',
                                          {'terminated': fields.Boolean})


@ns_daemon.route('/')
@ns_daemon.doc(security='apikey', responses=default_responses)
class DaemonStatus(Resource):
Пример #6
0
from mycodo.databases.models import Input
from mycodo.databases.models import Measurement
from mycodo.databases.models import Output
from mycodo.databases.models import OutputChannel
from mycodo.databases.models import PID
from mycodo.databases.models import Unit
from mycodo.mycodo_flask.api import api
from mycodo.mycodo_flask.api import default_responses
from mycodo.mycodo_flask.utils import utils_general
from mycodo.utils.outputs import parse_output_information
from mycodo.utils.system_pi import add_custom_measurements
from mycodo.utils.system_pi import add_custom_units

logger = logging.getLogger(__name__)

ns_choices = api.namespace('choices', description='Form choice operations')

choices_item_value_fields = ns_choices.model('Choices Controller Fields', {
    'item': fields.String,
    'value': fields.String
})

choices_controllers_list_fields = ns_choices.model(
    'Choices Controller Fields List', {
        'choices controllers':
        fields.List(fields.Nested(choices_item_value_fields)),
    })

choices_inputs_measurements_list_fields = ns_choices.model(
    'Choices Inputs Measurements Fields List', {
        'choices inputs measurements':
Пример #7
0
from mycodo.databases.models import DeviceMeasurements
from mycodo.databases.models import PID
from mycodo.databases.models.measurement import DeviceMeasurementsSchema
from mycodo.databases.models.pid import PIDSchema
from mycodo.mycodo_flask.api import api
from mycodo.mycodo_flask.api import default_responses
from mycodo.mycodo_flask.api.sql_schema_fields import device_measurement_fields
from mycodo.mycodo_flask.api.sql_schema_fields import pid_fields
from mycodo.mycodo_flask.api.utils import get_from_db
from mycodo.mycodo_flask.api.utils import return_list_of_dictionaries
from mycodo.mycodo_flask.utils import utils_general

logger = logging.getLogger(__name__)

ns_pid = api.namespace('pids', description='PID operations')

pid_single_fields = api.model(
    'PID Status Fields', {
        'pid settings':
        fields.Nested(pid_fields),
        'device measurements':
        fields.List(fields.Nested(device_measurement_fields)),
    })

pid_list_fields = api.model(
    'PID Fields List', {
        'pid settings': fields.List(fields.Nested(pid_fields)),
    })

Пример #8
0
from mycodo.databases.models import FunctionChannel
from mycodo.databases.models.controller import FunctionChannelSchema
from mycodo.databases.models.controller import FunctionSchema
from mycodo.databases.models.measurement import DeviceMeasurementsSchema
from mycodo.mycodo_flask.api import api
from mycodo.mycodo_flask.api import default_responses
from mycodo.mycodo_flask.api.sql_schema_fields import device_measurement_fields
from mycodo.mycodo_flask.api.sql_schema_fields import function_channel_fields
from mycodo.mycodo_flask.api.sql_schema_fields import function_fields
from mycodo.mycodo_flask.api.utils import get_from_db
from mycodo.mycodo_flask.api.utils import return_list_of_dictionaries
from mycodo.mycodo_flask.utils import utils_general

logger = logging.getLogger(__name__)

ns_function = api.namespace('functions', description='Function operations')

function_single_fields = api.model('Function Status Fields', {
    'function settings': fields.Nested(function_fields),
    'function channels': fields.List(fields.Nested(function_channel_fields)),
    'device measurements': fields.List(fields.Nested(device_measurement_fields)),
})

function_list_fields = api.model('Function Fields List', {
    'function settings': fields.List(fields.Nested(function_fields)),
    'function channels': fields.List(fields.Nested(function_channel_fields))
})


@ns_function.route('/')
@ns_function.doc(security='apikey', responses=default_responses)
Пример #9
0
from mycodo.mycodo_flask.api.sql_schema_fields import device_measurement_fields
from mycodo.mycodo_flask.api.sql_schema_fields import input_fields
from mycodo.mycodo_flask.api.sql_schema_fields import math_fields
from mycodo.mycodo_flask.api.sql_schema_fields import measurement_fields
from mycodo.mycodo_flask.api.sql_schema_fields import output_fields
from mycodo.mycodo_flask.api.sql_schema_fields import pid_fields
from mycodo.mycodo_flask.api.sql_schema_fields import trigger_fields
from mycodo.mycodo_flask.api.sql_schema_fields import unit_fields
from mycodo.mycodo_flask.api.sql_schema_fields import user_fields
from mycodo.mycodo_flask.api.utils import get_from_db
from mycodo.mycodo_flask.api.utils import return_list_of_dictionaries
from mycodo.mycodo_flask.utils import utils_general

logger = logging.getLogger(__name__)

ns_settings = api.namespace('settings', description='Settings operations')

device_measurement_list_fields = ns_settings.model(
    'Device Measurement Settings Fields List', {
        'device measurement settings': fields.List(fields.Nested(
            device_measurement_fields)),
    }
)

input_list_fields = ns_settings.model('Input Settings Fields List', {
    'input settings': fields.List(fields.Nested(input_fields)),
})

math_list_fields = ns_settings.model('Math Settings Fields List', {
    'math settings': fields.List(fields.Nested(math_fields)),
})
Пример #10
0
import traceback

import flask_login
from flask_accept import accept
from flask_restx import Resource
from flask_restx import abort
from flask_restx import fields

from mycodo.mycodo_client import DaemonControl
from mycodo.mycodo_flask.api import api
from mycodo.mycodo_flask.api import default_responses
from mycodo.mycodo_flask.utils import utils_general

logger = logging.getLogger(__name__)

ns_controller = api.namespace('controllers',
                              description='Controller operations')

controller_status_fields = ns_controller.model('Controller Status Fields',
                                               {'is_active': fields.Boolean})

controller_set_fields = ns_controller.model(
    'Controller Modulation Fields', {
        'activate':
        fields.Boolean(
            description='Activate (1) or deactivate (0) a controller.',
            required=True)
    })


@ns_controller.route('/<string:unique_id>')
@ns_controller.doc(security='apikey',
Пример #11
0
import flask_login
from flask import send_file
from flask_accept import accept
from flask_restx import Resource
from flask_restx import abort

from mycodo.config import PATH_CAMERAS
from mycodo.databases.models import Camera
from mycodo.mycodo_flask.api import api
from mycodo.mycodo_flask.api import default_responses
from mycodo.mycodo_flask.utils import utils_general
from mycodo.utils.system_pi import assure_path_exists

logger = logging.getLogger(__name__)

ns_camera = api.namespace('cameras', description='Camera operations')


@ns_camera.route('/last_image/<string:unique_id>/<string:img_type>')
@ns_camera.doc(security='apikey',
               responses=default_responses,
               params={
                   'unique_id':
                   'The unique ID of the camera',
                   'img_type':
                   'The type of image to return, either "still" or "timelapse"'
               })
class CameraGetLastImage(Resource):
    """Returns the last image acquired by a camera"""
    @accept('application/vnd.mycodo.v1+json')
    @flask_login.login_required