Compare commits

..

No commits in common. "lukario" and "master" have entirely different histories.

4 changed files with 62 additions and 65 deletions

View File

@ -10,38 +10,38 @@ import schedule
import paho.mqtt.client as mqtt import paho.mqtt.client as mqtt
class Room: class Zimmer:
name = None name = None
automatic = None automatic = None
temperatureSet = None temperaturSet = None
statusActual = None statusActual = None
rooms = [Room(), Room(), Room(), Room(), Room(), Room()] zimmer = [Zimmer, Zimmer]
roomName =["alexander", "livingroom", "bathroom", "christina", "kitchen", "simon"] zimmerName =["alexander", "wohnzimmer"]
for i in range(len(rooms)): for i in range(len(zimmer)):
rooms[i].name = roomName[i] zimmer[i].name = zimmerName[i]
rooms[i].automatic = 0 zimmer[i].automatic = 0
rooms[i].temperatureSet = 0.0 zimmer[i].temperaturSet = 0.0
rooms[i].statusActual = 0 zimmer[i].statusActual = 0
def on_connect(client, userdata, flags, rc): def on_connect(client, userdata, flags, rc):
log.debug("Connected with result code " + str(rc)) log.debug("Connected with result code " + str(rc))
for room in rooms: for i in zimmer:
client.subscribe("room/" + room.name + "/heating/control/automatic") client.subscribe("zimmer/" + i.name + "/heizung/homeassistant/automatic")
client.subscribe("room/" + room.name + "/heating/control/temperature") client.subscribe("zimmer/" + i.name + "/heizung/homeassistant/temperatur")
client.subscribe("room/" + room.name + "/heating/control/status") client.subscribe("zimmer/" + i.name + "/heizung/homeassistant/status")
client.subscribe("room/" + room.name + "/heating/actor/temperature") client.subscribe("zimmer/" + i.name + "/heizung/temperatur")
client.subscribe("room/" + room.name + "/heating/actor/status") client.subscribe("zimmer/" + i.name + "/heizung/status")
# client.subscribe("room/" + room.name + "/sensoren/tuer/status") # client.subscribe("zimmer/" + i.name + "/sensoren/tuer/status")
# client.subscribe("room/" + room.name + "/sensoren/fenster/status") # client.subscribe("zimmer/" + i.name + "/sensoren/fenster/status")
# client.subscribe("room/" + room.name + "/sensoren/temperature") # client.subscribe("zimmer/" + i.name + "/sensoren/temperatur")
sendReadings() sendReadings()
@ -56,32 +56,31 @@ def on_message(client, userdata, message):
msg = message.payload.decode("utf-8") msg = message.payload.decode("utf-8")
log.debug('received message: %s from %s', format(msg), format(message.topic)) log.debug('received message: %s from %s', format(msg), format(message.topic))
if message.topic.split("/", -1)[2] == "heating": if message.topic.split("/", -1)[2] == "heizung":
if message.topic.split("/", -1)[3] == "control": if message.topic.split("/", -1)[3] == "homeassistant":
if message.topic.split("/", -1)[4] == "automatic": if message.topic.split("/", -1)[4] == "automatic":
for room in rooms: for i in zimmer:
if message.topic.split("/", -1)[1] == room.name: if message.topic.split("/", -1)[1] == i.name:
room.automatic = bool(msg) i.automatic = bool(msg)
if message.topic.split("/", -1)[4] == "temperature": if message.topic.split("/", -1)[4] == "temperatur":
for room in rooms: for i in zimmer:
if message.topic.split("/", -1)[1] == room.name: if message.topic.split("/", -1)[1] == i.name:
room.temperatureSet = round(float(msg),1) i.temperaturSet = round(float(msg),1)
if message.topic.split("/", -1)[3] == "actor": if message.topic.split("/", -1)[3] == "status":
if message.topic.split("/", -1)[4] == "status": for i in zimmer:
for room in rooms: if message.topic.split("/", -1)[1] == i.name:
if message.topic.split("/", -1)[1] == room.name: i.statusActual = bool(msg)
room.statusActual = bool(msg)
sendReadings() sendReadings()
def sendReadings(): def sendReadings():
for room in rooms: for i in zimmer:
if room.automatic: if i.automatic:
client.publish("room/" + room.name + "/heating/actor/temperature", room.temperatureSet, qos=1, retain=True) client.publish("zimmer/" + i.name + "/heizung/temperatur", i.temperaturSet, qos=1, retain=True)
client.publish("room/" + room.name + "/heating/control/status", room.statusActual, qos=1, retain=True) client.publish("zimmer/" + i.name + "/heizung/homeassistant/status", i.statusActual, qos=1, retain=True)
log.debug('sent readings') log.debug('sent readings')
@ -108,7 +107,7 @@ def getArgs():
if __name__ == '__main__': if __name__ == '__main__':
signal.signal(signal.SIGINT, terminate) signal.signal(signal.SIGINT, terminate)
args = getArgs() args = getArgs()
logging.basicConfig(filename='/var/log/heizberry/heizberry_control.log', level=logging.WARN, format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s') logging.basicConfig(filename='/var/log/homeassistant_services/heizberry_control.log', level=logging.DEBUG, format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s')
log = logging.getLogger('heizberry') log = logging.getLogger('heizberry')
if args.verbose: if args.verbose:
log.setLevel(logging.DEBUG) log.setLevel(logging.DEBUG)

View File

@ -4,7 +4,7 @@ After=network-online.target
[Service] [Service]
Type=simple Type=simple
ExecStart=/srv/heizberry/heizberry_control.py ExecStart=/srv/homeassistent_services/heizberry_control.py
Restart=always Restart=always
RestartSec=20 RestartSec=20

View File

@ -11,26 +11,26 @@ import paho.mqtt.client as mqtt
from eq3bt import Thermostat from eq3bt import Thermostat
class Room: class Zimmer:
name = None name = None
thermostat = None thermostat = None
rooms = [Room(), Room(), Room(), Room(), Room(), Room()] zimmer = [Zimmer, Zimmer]
roomName = ["alexander", "livingroom", "bathroom", "kitchen", "christina", "simon"] zimmerName = ["alexander", "wohnzimmer" ]
roomThermostat = ["00:1A:22:16:4B:B4", "00:1A:22:16:25:C3", "00:1A:22:16:2C:20", "00:1A:22:16:26:06", "00:1A:22:16:26:75", "00:1A:22:16:2C:85"] zimmerThermostat = [Thermostat('00:1A:22:16:4B:B4'), Thermostat('00:1A:22:16:25:C3)]
for i in range(len(rooms)): for i in range(len(zimmer)):
rooms[i].name = roomName[i] zimmer[i].name = zimmerName[i]
rooms[i].thermostat = roomThermostat[i] zimmer[i].thermostat = zimmerThermostat[i]
def on_connect(client, userdata, flags, rc): def on_connect(client, userdata, flags, rc):
log.debug("Connected with result code " + str(rc)) log.debug("Connected with result code " + str(rc))
for room in rooms: for i in zimmer:
client.subscribe("room/" + room.name + "/heating/actor/temperature") client.subscribe("zimmer/" + i.name + "/heizung/temperatur")
client.subscribe("room/" + room.name + "/heating/actor/status") client.subscribe("zimmer/" + i.name + "/heizung/status")
sendReadings() sendReadings()
@ -44,31 +44,29 @@ def on_message(client, userdata, message):
msg = message.payload.decode("utf-8") msg = message.payload.decode("utf-8")
log.debug('received message: %s from %s', format(msg), format(message.topic)) log.debug('received message: %s from %s', format(msg), format(message.topic))
for room in rooms: if message.topic.split("/", -1)[2] == "heizung":
tmpThermostat = Thermostat(room.thermostat) if message.topic.split("/", -1)[3] == "temperatur":
if message.topic.split("/", -1)[2] == "heating": for i in zimmer:
if message.topic.split("/", -1)[3] == "actor": if message.topic.split("/", -1)[1] == i.name:
if message.topic.split("/", -1)[4] == "temperature": i.thermostat.mode= 3
if message.topic.split("/", -1)[1] == room.name: i.thermostat.target_temperature = round(float(msg),1)
tmpThermostat.mode= 3
tmpThermostat.target_temperature = round(float(msg),1)
sendReadings() sendReadings()
def sendReadings(): def sendReadings():
log.debug('read target temperature from thermostat') log.debug('read target temperature from thermostats')
for room in rooms: for i in zimmer:
tmpThermostat = Thermostat(room.thermostat)
tmpThermostat.update() i.thermostat.update()
if tmpThermostat.target_temperature > 17.0: if i.thermostat.target_temperature > 17.0:
client.publish("room/" + room.name + "/heating/actor/status", 1, qos=1, retain=True) client.publish("zimmer/" + i.name + "/heizung/status", 1, qos=1, retain=True)
else: else:
client.publish("room/" + room.name + "/heating/actor/status", 0, qos=1, retain=True) client.publish("zimmer/" + i.name + "/heizung/status", 0, qos=1, retain=True)
log.debug('sent readings') log.debug('sent readings')
@ -95,7 +93,7 @@ def getArgs():
if __name__ == '__main__': if __name__ == '__main__':
signal.signal(signal.SIGINT, terminate) signal.signal(signal.SIGINT, terminate)
args = getArgs() args = getArgs()
logging.basicConfig(filename='/var/log/heizberry/heizberry_io.log', level=logging.WARN, format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s') logging.basicConfig(filename='/var/log/homeassistant_services/heizberry_io.log', level=logging.DEBUG, format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s')
log = logging.getLogger('heizberry') log = logging.getLogger('heizberry')
if args.verbose: if args.verbose:
log.setLevel(logging.DEBUG) log.setLevel(logging.DEBUG)

View File

@ -4,7 +4,7 @@ After=network-online.target
[Service] [Service]
Type=simple Type=simple
ExecStart=/srv/heizberry/heizberry_io.py ExecStart=/srv/homeassistent_services/heizberry_io.py
Restart=always Restart=always
RestartSec=20 RestartSec=20