def test_adding_new_reading(self):
        from core.data.influx import get_influxdb_parameters
        from core.data.influx import get_influxdb_client
        from core.config.crawlers_config import get_flukso_sensors, get_socomec_sensors
        from bin.sensors_crawler import new_socomec_reading
        from core.data.influx import db_last_sensors_updates

        with requests_mock.Mocker(real_http=True) as m:

            parameters = get_influxdb_parameters()
            db_client = get_influxdb_client()

            socomec_sensors = get_socomec_sensors()

            for socomec_sensor in socomec_sensors:
                new_socomec_reading(socomec_sensor)

            last_sensor_updates = db_last_sensors_updates()

            self.assertEqual(len(last_sensor_updates), 1)

            for sensor_reading in last_sensor_updates:
                self.assertIn(sensor_reading.get("sensor"),
                              ['wattmeter_condensator'])
                self.assertGreaterEqual(sensor_reading.get("last_value"), 42)
                self.assertLessEqual(sensor_reading.get("last_value"), 42)
                self.assertIn(sensor_reading.get("location"), ['B232'])
                self.assertIn(sensor_reading.get("unit"), ['W'])
                self.assertIn(sensor_reading.get("sensor_type"), ['wattmeter'])

                reading_date = arrow.get(sensor_reading.get("time"))
                self.assertLessEqual(abs(reading_date.timestamp - time.time()),
                                     120)
Пример #2
0
def detect_unresponsive_temperature_sensors():
    print("Detecting unresponsive temperature detectors")

    last_updates = db_last_sensors_updates()
    sensors_arrays_with_children = get_sensors_arrays_with_children()
    now_time = time.time()

    for sensors_array_key, sensors_array in sensors_arrays_with_children.items(
    ):
        for child in sensors_array["children"]:
            child_last_update = [
                x for x in last_updates if x.get("sensor") == child.get("name")
            ]
            if len(child_last_update) > 0:
                last_update_since_epoch = int(
                    time.mktime(
                        parser.parse(child_last_update[0]
                                     ["time"]).timetuple())) - time.timezone
                time_since_last_update_secs = now_time - last_update_since_epoch

                if time_since_last_update_secs > 40:
                    print(
                        "%s is unresponsive since %s seconds: I increment his error counter"
                        % (child.get("name"), time_since_last_update_secs))
                    redis_increment_sensor_error_count(child.get("name"))
Пример #3
0
    def test_adding_new_reading(self):
        from core.data.influx import get_influxdb_parameters
        from core.data.influx import get_influxdb_client
        from core.config.crawlers_config import get_modbus_sensors
        from bin.modbus_crawler import new_modbus_reading
        from core.data.influx import db_last_sensors_updates

        expected_values = {
            "inrow_group_cool_output": 4200,  # big_endian_int32
            "inrow_group_cool_output2": 1200,  # little_endian_uint32
            "inrow_group_cool_output3": 6400,  # big_endian_int16
            "inrow_group_cool_output4": 12800,  # little_endian_uint16
            "inrow_group_cool_output5": 25600,  # big_endian_float32
            "inrow_group_cool_output_little": 4200,  # big_endian_int32
            "inrow_group_cool_output2_little": 1200,  # little_endian_uint32
            "inrow_group_cool_output3_little": 6400,  # big_endian_int16
            "inrow_group_cool_output4_little": 12800,  # little_endian_uint16
            "inrow_group_cool_output5_little": 25600,  # big_endian_float32
        }

        # with requests_mock.Mocker(real_http=True) as m:

        parameters = get_influxdb_parameters()
        db_client = get_influxdb_client()

        modbus_sensors = get_modbus_sensors()

        for modbus_sensor in modbus_sensors:
            new_modbus_reading(modbus_sensor)

        last_sensor_updates = db_last_sensors_updates()

        self.assertEqual(len(last_sensor_updates),
                         len(list(expected_values.keys())))

        for sensor_reading in last_sensor_updates:

            expected_value = expected_values.get(sensor_reading.get("sensor"))

            self.assertIn(sensor_reading.get("sensor"),
                          list(expected_values.keys()))
            self.assertGreaterEqual(sensor_reading.get("last_value"),
                                    expected_value)
            self.assertLessEqual(sensor_reading.get("last_value"),
                                 expected_value)
            self.assertIn(sensor_reading.get("location"), ["not\\ specified"])
            self.assertIn(sensor_reading.get("unit"), ['W'])
            self.assertIn(sensor_reading.get("sensor_type"), ['wattmeter'])

            reading_date = arrow.get(sensor_reading.get("time"))
            self.assertLessEqual(abs(reading_date.timestamp - time.time()),
                                 120)
    def test_adding_new_reading(self):
        from core.data.influx import get_influxdb_parameters
        from core.data.influx import get_influxdb_client
        from core.config.crawlers_config import get_flukso_sensors
        from bin.sensors_crawler import new_flukso_reading
        from core.data.influx import db_last_sensors_updates

        with requests_mock.Mocker(real_http=True) as m:

            now = int(time.time())
            now_60s_later = now + 60

            fake_response = [[ts, random.choice([7, 8])]
                             for ts in range(now, now_60s_later)]

            m.get(
                'http://192.168.1.3:8080/sensor/c6a2caade50d7532ee3a3292238fd587?version=1.0&interval=minute&unit=watt',
                json=fake_response)

            parameters = get_influxdb_parameters()
            db_client = get_influxdb_client()

            flukso_sensors = get_flukso_sensors()

            for flukso_sensor in flukso_sensors:
                new_flukso_reading(flukso_sensor)

            last_sensor_updates = db_last_sensors_updates()

            self.assertEqual(len(last_sensor_updates), 1)

            for sensor_reading in last_sensor_updates:
                self.assertIn(sensor_reading.get("sensor"),
                              ['watt_cooler_b232_1'])
                self.assertGreaterEqual(sensor_reading.get("last_value"), 7)
                self.assertLessEqual(sensor_reading.get("last_value"), 8)
                self.assertIn(sensor_reading.get("location"), ['B232'])
                self.assertIn(sensor_reading.get("unit"), ['W'])
                self.assertIn(sensor_reading.get("sensor_type"), ['wattmeter'])

                reading_date = arrow.get(sensor_reading.get("time"))
                self.assertGreaterEqual(reading_date.timestamp, now)
                self.assertLessEqual(reading_date.timestamp, now_60s_later)
Пример #5
0
def sensors():
    last_updates = db_last_sensors_updates()
    sensors_arrays_with_children = get_sensors_arrays_with_children()
    now_time = time.time()

    for (sensors_array_name, sensors_array) in sensors_arrays_with_children.items():
        for child in sensors_array["children"]:
            child_last_update = [x for x in last_updates if x.get("sensor") == child.get("name")]
            if len(child_last_update) > 0:
                last_update_since_epoch = int(
                    time.mktime(parser.parse(child_last_update[0]["time"]).timetuple())) - time.timezone
                time_since_last_update_secs = now_time - last_update_since_epoch
                displayed_time_text = _display_time(time_since_last_update_secs)
                child_last_update[0]["nice_last_udpate_text"] = displayed_time_text
                child["last_update"] = child_last_update[0]
            else:
                child["last_update"] = None
    return render_template("sensors.html.jinja2",
                           last_updates=last_updates,
                           sensors_arrays_with_children=sensors_arrays_with_children)
Пример #6
0
    def test_adding_new_reading(self):
        from core.data.influx import get_influxdb_parameters
        from core.data.influx import get_influxdb_client
        from bin.temperature_registerer import flush_records
        from core.data.influx import db_last_sensors_updates

        parameters = get_influxdb_parameters()
        db_client = get_influxdb_client()

        import requests
        requests.post("http://127.0.0.1:5500/temperature/list",
                      json=[{
                          "sensor": "3b96f85809fc2c27",
                          "v": 42.1
                      }, {
                          "sensor": "3ba6b75809fc0c6f",
                          "v": 42.2
                      }])

        time.sleep(2)

        last_sensor_updates = db_last_sensors_updates()

        self.assertEqual(len(last_sensor_updates), 2)

        for sensor_reading in last_sensor_updates:
            self.assertIn(sensor_reading.get("sensor"),
                          ['3b96f85809fc2c27', '3ba6b75809fc0c6f'])
            self.assertGreaterEqual(sensor_reading.get("last_value"), 42.1)
            self.assertLessEqual(sensor_reading.get("last_value"), 42.2)
            self.assertIn(sensor_reading.get("location"), ["room\\ exterior"])
            self.assertIn(sensor_reading.get("unit"), ['celsius'])
            self.assertIn(sensor_reading.get("sensor_type"), ['temperature'])

            reading_date = arrow.get(sensor_reading.get("time"))
            self.assertLessEqual(abs(reading_date.timestamp - time.time()),
                                 120)
Пример #7
0
def last_sensors_updates():
    last_updates = db_last_sensors_updates()
    return jsonify(last_updates)