def run(self): core = TelldusCore() sensorDb = SensorDB(database = 'ha', user = '******', password = '******') while True: listOfSensors = core.sensors() timestamp = 0 for sensor in listOfSensors: if debug: sys.stdout.write("Found sensor: " + str(sensor.id) + "\n") if sensor.has_temperature(): if debug: sys.stdout.write("... sensor supports temperature\n") sensorTemperature = sensor.temperature() timestamp = sensorTemperature.timestamp else: if debug: sys.stdout.write(".. sensor does not support temperature\n") sensorTemperature = SensorValue(const.TELLSTICK_TEMPERATURE, -100.0, 0) if sensor.has_humidity(): if debug: sys.stdout.write("... sensor supports humidity\n") sensorHumidity = sensor.humidity() timestamp = sensorHumidity.timestamp else: if debug: sys.stdout.write(".. sensor does not support humidity\n") sensorHumidity = SensorValue(const.TELLSTICK_HUMIDITY, 0, 0) if timestamp > 0: if sensor.id > 0: sensorDb.insertSensorData(sensor.id, sensorTemperature.value, sensorHumidity.value, timestamp) else: if debug: sys.stdout.write("E: sensor id is not in allowed range\n") else: if debug: sys.stdout.write("Not able to setup timestamp for sensor values\n") if debug: sys.stdout.flush() time.sleep(300)
def _getSensors(): tdc = TelldusCore() return tdc.sensors()
def test_sensors(self): self.sensor_index = 0 def tdSensor(protocol, p_len, model, m_len, id, datatypes): sensors = [{'protocol': b"proto_1", 'model': b"model_1", 'id': 1, 'datatypes': TELLSTICK_TEMPERATURE}, {'protocol': b"proto_2", 'model': b"model_2", 'id': 2, 'datatypes': TELLSTICK_HUMIDITY}, {'protocol': b"proto_3", 'model': b"model_3", 'id': 3, 'datatypes': TELLSTICK_RAINRATE}, {'protocol': b"proto_4", 'model': b"model_4", 'id': 4, 'datatypes': TELLSTICK_RAINTOTAL}, {'protocol': b"proto_5", 'model': b"model_5", 'id': 5, 'datatypes': TELLSTICK_WINDDIRECTION}, {'protocol': b"proto_6", 'model': b"model_6", 'id': 6, 'datatypes': TELLSTICK_WINDAVERAGE}, {'protocol': b"proto_7", 'model': b"model_7", 'id': 7, 'datatypes': TELLSTICK_WINDGUST}] if self.sensor_index < len(sensors): sensor = sensors[self.sensor_index] self.sensor_index += 1 protocol.value = sensor['protocol'] model.value = sensor['model'] try: id._obj.value = sensor['id'] datatypes._obj.value = sensor['datatypes'] except AttributeError: # With pypy we must use contents instead of _obj id.contents.value = sensor['id'] datatypes.contents.value = sensor['datatypes'] return TELLSTICK_SUCCESS else: self.sensor_index = 0 return TELLSTICK_ERROR_DEVICE_NOT_FOUND self.mocklib.tdSensor = tdSensor def tdSensorValue(protocol, model, id, datatype, value, v_len, times): if datatype == 1 << (id - 1): value.value = self.encode_string("%d" % (id * 100 + datatype)) return TELLSTICK_SUCCESS else: return TELLSTICK_ERROR_METHOD_NOT_SUPPORTED self.mocklib.tdSensorValue = tdSensorValue core = TelldusCore() sensors = core.sensors() self.assertEqual(7, len(sensors)) self.assertEqual(["proto_%d" % i for i in range(1, 8)], [s.protocol for s in sensors]) self.assertEqual(["model_%d" % i for i in range(1, 8)], [s.model for s in sensors]) self.assertEqual(list(range(1, 8)), [s.id for s in sensors]) self.assertEqual([TELLSTICK_TEMPERATURE, TELLSTICK_HUMIDITY, TELLSTICK_RAINRATE, TELLSTICK_RAINTOTAL, TELLSTICK_WINDDIRECTION, TELLSTICK_WINDAVERAGE, TELLSTICK_WINDGUST], [s.datatypes for s in sensors]) self.assertEqual([False] * 0 + [True] + [False] * 6, [s.has_temperature() for s in sensors]) self.assertEqual([False] * 1 + [True] + [False] * 5, [s.has_humidity() for s in sensors]) self.assertEqual([False] * 2 + [True] + [False] * 4, [s.has_rainrate() for s in sensors]) self.assertEqual([False] * 3 + [True] + [False] * 3, [s.has_raintotal() for s in sensors]) self.assertEqual([False] * 4 + [True] + [False] * 2, [s.has_winddirection() for s in sensors]) self.assertEqual([False] * 5 + [True] + [False] * 1, [s.has_windaverage() for s in sensors]) self.assertEqual([False] * 6 + [True] + [False] * 0, [s.has_windgust() for s in sensors]) self.assertEqual("%d" % (100 + TELLSTICK_TEMPERATURE), sensors[0].temperature().value) self.assertEqual("%d" % (200 + TELLSTICK_HUMIDITY), sensors[1].humidity().value) self.assertEqual("%d" % (300 + TELLSTICK_RAINRATE), sensors[2].rainrate().value) self.assertEqual("%d" % (400 + TELLSTICK_RAINTOTAL), sensors[3].raintotal().value) self.assertEqual("%d" % (500 + TELLSTICK_WINDDIRECTION), sensors[4].winddirection().value) self.assertEqual("%d" % (600 + TELLSTICK_WINDAVERAGE), sensors[5].windaverage().value) self.assertEqual("%d" % (700 + TELLSTICK_WINDGUST), sensors[6].windgust().value)
from Reporters import EmonCMS_Reporter, Console_Reporter reporter1 = EmonCMS_Reporter("https://emoncms.org", apikey="YOUR_API_KEY", node="MY_NODE_NAME", only_mapped=True) #reporter2 = EmonCMS_Reporter("http://yourserver.me:8080",apikey="YOUR_API_KEY2",node="MY_NODE_NAME2",only_mapped=True) reporter3 = Console_Reporter(only_mapped=False) reporters = [reporter1, reporter3] #How frequently to pull sensor data from Telldus Core (in seconds) reporting_interval = 60 from Sensor_record import Sensor_record stop_time = time.time() while True: start_time = stop_time Sensor_records = map(Sensor_record, core.sensors()) for reporter in reporters: #By first buffering all the sensors and flushing at the end, we will only get one timeout in case the server #is not available. map(reporter.report_async, Sensor_records) reporter.flush_buffer() stop_time = time.time() time_left_next_report = reporting_interval - (stop_time - start_time) if (time_left_next_report > 0): time.sleep(time_left_next_report)
from tellcore.telldus import TelldusCore from enum import Enum BEDROOM = 151 BALCONY = 135 KTICHEN = 167 offset_bedroom = 0.5 core = TelldusCore() conn = sqlite3.connect( '/home/pi/projects/sensor_webbapp/sensor_reading/sensordata.db') curs = conn.cursor() while (True): try: list_sensors = core.sensors() print(len(list_sensors)) if list_sensors is not None: for sens in list_sensors: dev_id = sens.id temp = sens.value(1).value hum = sens.value(2).value if dev_id == BEDROOM: curs.execute( "INSERT INTO sensor_data VALUES (datetime('now'), ?, ?,?)", (float(temp) + offset_bedroom, hum, dev_id)) print( "Added reading for bedroom, dev_id: {} temp: {}, hum: {}" .format(dev_id, hum, float(temp) + offset_bedroom)) elif dev_id == BALCONY: