import web
from requests import post
import json
import time
import re
import threading
import tellcore.telldus as td
import tellcore.constants as const
#*********************************************
#['class:command', 'protocol:arctech', 'model:selflearning', 'house:48801126', 'unit:1', 'group:0', 'method:turnon', '']
#['class:command', 'protocol:arctech', 'model:selflearning', 'house:15632982', 'unit:10', 'group:0', 'method:turnoff', '']
urls = (
'/pantry_door', 'index'
)
old_value = "Closed"
old_sensor = "sensor.skafferidrr"
def raw_event(data, controller_id, cid):
global old_value
global old_sensor
splitedData = str(data).split(';');
if(len(splitedData) == 8):
if(splitedData[0]=='class:command' and splitedData[1]=='protocol:arctech' and splitedData[2]=='model:selflearning'):
if(splitedData[3]=='house:48801126' and splitedData[4]=='unit:1'):
old_value = 'Open'
old_sensor = 'sensor.skafferidrr'
sendNewStateToHass('sensor.skafferidrr', 'Open')
elif(splitedData[3]=='house:15632982' and splitedData[4]=='unit:10'):
old_value = 'Closed'
old_sensor = 'sensor.skafferidrr'
sendNewStateToHass('sensor.skafferidrr', 'Closed')
string = "[RAW] {0} <- {1}".format(controller_id, data)
print(string)
def sendNewStateToHass(entity_id, value):
headers = {'x-ha-access': 'kaffeKAKA2015',
'content-type': 'application/json'}
data = {"state": str(value)}
response = post(url, data=json.dumps(data), headers=headers)
print(response.text)
class MyWebserver(threading.Thread):
def run (self):
app = web.application(urls, globals())
app.run()
class index():
def GET(self):
global old_value
return '{ "return_value" : "'+old_value+'" }'
try:
import asyncio
loop = asyncio.get_event_loop()
dispatcher = td.AsyncioCallbackDispatcher(loop)
except ImportError:
loop = None
dispatcher = td.QueuedCallbackDispatcher()
core = td.TelldusCore(callback_dispatcher=dispatcher)
callbacks = []
callbacks.append(core.register_raw_device_event(raw_event))
if __name__ == "__main__":
MyWebserver().start()
while True:
core.callback_dispatcher.process_pending_callbacks()
time.sleep(0.5)