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', {
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':
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):
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)), })
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):
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':
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)), })
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)
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)), })
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',
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