import mysql.connector
import time
import threading
from tinkerforge.ip_connection import IPConnection
from tinkerforge.bricklet_industrial_quad_relay import IndustrialQuadRelay
from tinkerforge.bricklet_remote_switch import RemoteSwitch
class light:
def __init__(self, parent_ipcon=None, keep_connection=False):
#Hardware
if (parent_ipcon==None):
self.ipcon = IPConnection()
else:
self.ipcon = parent_ipcon
self.ein = IndustrialQuadRelay("Ein1", self.ipcon) #UIDS anpassen, Hinweis im Blogeintrag lesen
self.aus = IndustrialQuadRelay("Aus1", self.ipcon)
self.rem = RemoteSwitch("Rem", self.ipcon)
if (parent_ipcon==None):
self.ipcon.connect("127.0.0.1", 4223)
self.id = -1
self.receiver = False
#Software
config = {
'user': 'root', #Benutzername und Passwort anpassen!
'password': 'Passwort',
'host': '127.0.0.1',
'database': 'hausautomatisierung',
'buffered': 'True',
}
self.cnx = mysql.connector.connect(**config)
self.cnx.reconnect(1000, delay=0)
self.keep_connection = keep_connection
self.keepme = threading.Thread(target = self.keep_sql).start()
def keep_sql (self):
time.sleep (5)
while (self.keep_connection == True):
try:
self.cnx.commit()
cursor = self.cnx.cursor('i')
query = ("SELECT `id`, `title`, `type`, `group`, `dimmable`, `code`, `button`, `state` FROM remote_receivers")
cursor.execute(query)
results = {}
for (id, title, type, group, dimmable, code, button, state) in cursor:
results[id] = {'title' : title, 'type' : type, 'group' : group, 'type' : type, 'dimmable' : dimmable, 'code' : code, 'button' : button, 'state' : state}
cursor.close()
time.sleep(3600)
except:
print ("No connection")
time.sleep (5)
def set (self, id):
self.id = id
self.receiver = self.state(id)
def state (self, id=-1):
try:
self.cnx.commit()
cursor = self.cnx.cursor('i')
if (id == -1):
query = ("SELECT `id`, `title`, `type`, `group`, `dimmable`, `code`, `button`, `state` FROM remote_receivers")
else:
query = ("SELECT `id`, `title`, `type`, `group`, `dimmable`, `code`, `button`, `state` FROM remote_receivers WHERE id=" + str(id))
cursor.execute(query)
results = {}
for (id, title, type, group, dimmable, code, button, state) in cursor:
results[id] = {'title' : title, 'type' : type, 'group' : group, 'type' : type, 'dimmable' : dimmable, 'code' : code, 'button' : button, 'state' : state}
cursor.close()
return (results)
except:
print ("Error: No MySQL Connection")
def mask (self):
n = 0
mask = 1
while (n < 0):
mask = mask * 2
n = n + 1
return (mask)
def learn (self, send):
if (self.receiver[self.id]["type"] == "relay"):
if (send == True):
self.is_useable()
cursor = self.cnx.cursor('i')
query = "UPDATE remote_receivers Set state='1' WHERE id = '" + str(self.id) + "'"
cursor.execute(query)
self.cnx.commit()
cursor.close()
self.ein.set_value(1 << self.receiver[self.id]["button"])
elif (send == False):
self.ein.set_value(0 << self.receiver[self.id]["button"])
def on (self):
self.is_useable()
if (self.state(self.id)[self.id]["state"] == 0):
cursor = self.cnx.cursor('i')
query = "UPDATE remote_receivers Set state='1' WHERE id = '" + str(self.id) + "'"
cursor.execute(query)
self.cnx.commit()
cursor.close()
if (self.receiver[self.id]["type"] == "relay"):
self.ein.set_value(1 << self.receiver[self.id]["button"])
time.sleep (1)
self.ein.set_value(0 << self.receiver[self.id]["button"])
elif (self.receiver[self.id]["type"] == "remote"):
self.rem.switch_socket_a(self.receiver[self.id]["code"], self.receiver[self.id]["button"], RemoteSwitch.SWITCH_TO_ON)
time.sleep(1)
return ("success")
else:
return ("already")
def off (self):
self.is_useable()
if (self.state(self.id)[self.id]["state"] > 0):
cursor = self.cnx.cursor('i')
query = "UPDATE remote_receivers Set state='0' WHERE id = '" + str(self.id) + "'"
cursor.execute(query)
self.cnx.commit()
cursor.close()
if (self.receiver[self.id]["type"] == "relay"):
self.aus.set_value(1 << self.receiver[self.id]["button"])
time.sleep (1)
self.aus.set_value(0 << self.receiver[self.id]["button"])
elif (self.receiver[self.id]["type"] == "remote"):
self.rem.switch_socket_a(self.receiver[self.id]["code"], self.receiver[self.id]["button"], RemoteSwitch.SWITCH_TO_OFF)
time.sleep(1)
return ("success")
else:
return ("already")
def is_useable (self):
while (self.ein.get_value() > 0 or self.aus.get_value() > 0 or self.rem.get_switching_state() > 0):
time.sleep (1)
return (True)
def switch (self):
state = self.state(self.id)
if (state[self.id]["state"] == 0):
self.on()
else:
self.off()
return ("success")
def any_on (self):
any = False
self.cnx.commit() #Never forget to commit!!!!!!!!!!!
cursor = self.cnx.cursor('i')
query = "SELECT `id` FROM remote_receivers WHERE state > 0 LIMIT 1"
cursor.execute(query)
for (id) in cursor:
any = True
cursor.close()
return (any)
def all_off (self):
original_id = self.id
self.cnx.commit()
cursor = self.cnx.cursor(buffered=True)
query = "SELECT `id`, `button` FROM remote_receivers WHERE state > 0"
cursor.execute(query)
for (id, button) in cursor:
self.set (id)
self.off()
cursor.close()
self.set (original_id)
def close (self):
self.cnx.close()
self.keep_connection = False
licht = light()
licht.set(1)
licht.on()