hc2mqtt: create a thread per device
This commit is contained in:
34
hc2mqtt
34
hc2mqtt
@@ -1,11 +1,12 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# Contact a Bosh-Siemens Home Connect device
|
# Contact Bosh-Siemens Home Connect devices
|
||||||
# and connect it to the mqtt server
|
# and connect their messages to the mqtt server
|
||||||
import sys
|
import sys
|
||||||
import json
|
import json
|
||||||
import re
|
import re
|
||||||
import time
|
import time
|
||||||
import io
|
import io
|
||||||
|
from threading import Thread
|
||||||
from HCSocket import HCSocket, now
|
from HCSocket import HCSocket, now
|
||||||
from HCDevice import HCDevice
|
from HCDevice import HCDevice
|
||||||
import paho.mqtt.client as mqtt
|
import paho.mqtt.client as mqtt
|
||||||
@@ -14,11 +15,6 @@ mqtt_prefix = "homeconnect/"
|
|||||||
client = mqtt.Client()
|
client = mqtt.Client()
|
||||||
client.connect("dashboard", 1883, 70)
|
client.connect("dashboard", 1883, 70)
|
||||||
|
|
||||||
device_name = 'dishwasher'
|
|
||||||
|
|
||||||
if len(sys.argv) > 1:
|
|
||||||
device_name = sys.argv[1]
|
|
||||||
|
|
||||||
devices = {
|
devices = {
|
||||||
'clothes': {
|
'clothes': {
|
||||||
"host": '10.1.0.145',
|
"host": '10.1.0.145',
|
||||||
@@ -32,14 +28,7 @@ devices = {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
device = devices.get(device_name, None)
|
# Map their value names to easier state names
|
||||||
|
|
||||||
if not device:
|
|
||||||
print(device_name, " not known", file=sys.stderr)
|
|
||||||
exit(1)
|
|
||||||
|
|
||||||
mqtt_topic = mqtt_prefix + device_name
|
|
||||||
|
|
||||||
topics = {
|
topics = {
|
||||||
"OperationState": "state",
|
"OperationState": "state",
|
||||||
"DoorState": "door",
|
"DoorState": "door",
|
||||||
@@ -51,13 +40,19 @@ topics = {
|
|||||||
"FatalErrorOccured": "error",
|
"FatalErrorOccured": "error",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def client_connect(device_name, device):
|
||||||
|
mqtt_topic = mqtt_prefix + device_name
|
||||||
|
host = device["host"]
|
||||||
|
|
||||||
state = {}
|
state = {}
|
||||||
for topic in topics:
|
for topic in topics:
|
||||||
state[topics[topic]] = None
|
state[topics[topic]] = None
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
ws = HCSocket(device["host"], device["psk64"], device["iv64"])
|
ws = HCSocket(host, device["psk64"], device["iv64"])
|
||||||
dev = HCDevice(ws)
|
dev = HCDevice(ws)
|
||||||
|
|
||||||
#ws.debug = True
|
#ws.debug = True
|
||||||
@@ -85,6 +80,11 @@ while True:
|
|||||||
client.publish(mqtt_topic + "/state", msg)
|
client.publish(mqtt_topic + "/state", msg)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print("ERROR", device["host"], e, file=sys.stderr)
|
print("ERROR", host, e, file=sys.stderr)
|
||||||
|
|
||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
|
|
||||||
|
for device in devices:
|
||||||
|
thread = Thread(target=client_connect, args=(device, devices[device]))
|
||||||
|
thread.start()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user