Exemplo n.º 1
0
	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)
Exemplo n.º 2
0
def _getSensors():
  tdc = TelldusCore()
  return tdc.sensors()
Exemplo n.º 3
0
def _getSensors():
    tdc = TelldusCore()
    return tdc.sensors()
Exemplo n.º 4
0
    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)
Exemplo n.º 6
0
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: