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()