This commit is contained in:
2025-04-12 14:49:06 +01:00
parent 1cb68fa011
commit a46405f4fd
3 changed files with 252 additions and 8 deletions

View File

@@ -4,16 +4,17 @@ from mqtt_manager import MqttManager
if __name__ == "__main__":
tevolve = Tevolve()
devices = tevolve.get_devices()
mqtt_manager = MqttManager()
mqtt_manager.client.connect(heaters=devices["nodes"])
tevolve.get_token()
tevolve.get_dev()
devices = tevolve.get_devices()
mqtt_manager = MqttManager(devices["nodes"])
mqtt_manager.publish_discovery()

238
src/main_old.py Normal file
View File

@@ -0,0 +1,238 @@
import time
from pytevolve import Tevolve
import paho.mqtt.client as mqtt
import threading
import json
broker_address = "192.168.0.100"
def on_disconnect(client, userdata, rc):
client.connect(broker_address)
def on_connect(client, userdata, flags, rc):
try:
# client.username_pw_set("admin", "bK2F2ZPjyyngmsN6R32s")
# client.username_pw_set(username="admin", password ="bK2F2ZPjyyngmsN6R32s")
client.connect(broker_address)
except:
time.sleep(10)
client.connect(client)
def on_message(client, userdata, message):
new_topic = str(message.topic)
if new_topic == "hallway/heater/settemp":
tevolve.set_temperature("3", str(message.payload.decode("utf-8")))
# Assume set temp success (Prevent debounce)
client.publish("hallway/heater/currentsettemp", payload=str(message.payload.decode("utf-8")), qos=0, retain=False)
if new_topic == "hallway/heater/setmode":
if str(message.payload.decode("utf-8")) == "heat":
mode = "manual"
# client.publish("hallway/heater/idleaction", payload="heating", qos=0, retain=False)
client.publish("hallway/heater/currentmode", payload="heat", qos=0, retain=False)
else:
mode = "off"
client.publish("hallway/heater/currentmode", payload="off", qos=0, retain=False)
client.publish("hallway/heater/idleaction", payload="off", qos=0, retain=False)
if mode == "manual":
if float(Tevolve.hallway_current_temp) > float(Tevolve.hallway_set_temp):
client.publish("hallway/heater/idleaction", payload="idle", qos=0, retain=False)
else:
client.publish("hallway/heater/idleaction", payload="heating", qos=0, retain=False)
Tevolve.setmode = mode
tevolve.set_mode("3")
if new_topic == "livingroom/heater/settemp":
tevolve.set_temperature("2", str(message.payload.decode("utf-8")))
# Assume set temp success (Prevent debounce)
client.publish("livingroom/heater/currentsettemp", payload=str(message.payload.decode("utf-8")), qos=0,
retain=False)
if new_topic == "livingroom/heater/setmode":
# print(str(message.payload.decode("utf-8")))
if str(message.payload.decode("utf-8")) == "heat":
mode = "manual"
client.publish("livingroom/heater/idleaction", payload="heating", qos=0, retain=False)
client.publish("livingroom/heater/currentmode", payload="heat", qos=0, retain=False)
else:
mode = "off"
client.publish("livingroom/heater/currentmode", payload="off", qos=0, retain=False)
client.publish("livingroom/heater/idleaction", payload="off", qos=0, retain=False)
if mode == "manual":
if float(Tevolve.livingroom_current_temp) > float(Tevolve.livingroom_set_temp):
client.publish("livingroom/heater/idleaction", payload="idle", qos=0, retain=False)
else:
client.publish("livingroom/heater/idleaction", payload="heating", qos=0, retain=False)
Tevolve.setmode = mode
tevolve.set_mode("2")
if __name__ == '__main__':
tevolve = Tevolve()
tevolve.post_websocket()
time.sleep(1)
t = threading.Thread(target=tevolve.create_websocket, daemon=True, args=())
t.start()
client = mqtt.Client("ryan-heating")
# client.username_pw_set("admin", "bK2F2ZPjyyngmsN6R32s")
client.connect(broker_address)
client.on_message = on_message
client.on_disconnect = on_disconnect
client.loop_start()
client.subscribe("hallway/heater/settemp")
client.subscribe("hallway/heater/setmode")
client.subscribe("livingroom/heater/settemp")
client.subscribe("livingroom/heater/setmode")
livingroom_status = tevolve.get_status("2")
hallway_status = tevolve.get_status("3")
Tevolve.hallway_active = hallway_status["active"]
Tevolve.hallway_mode = hallway_status["mode"]
Tevolve.hallway_set_temp = hallway_status["stemp"]
Tevolve.hallway_current_temp = hallway_status["mtemp"]
# Tevolve.livingroom_active = livingroom_status["active"]
# Tevolve.livingroom_mode = livingroom_status["mode"]
# Tevolve.livingroom_set_temp = livingroom_status["stemp"]
# Tevolve.livingroom_current_temp = livingroom_status["mtemp"]
if Tevolve.livingroom_mode == "manual":
Tevolve.livingroom_mode = "heat"
if Tevolve.hallway_mode == "manual":
Tevolve.hallway_mode = "heat"
client.publish("hallway/heater/currenttemp", payload=Tevolve.hallway_current_temp, qos=0, retain=False)
client.publish("livingroom/heater/currenttemp", payload=Tevolve.livingroom_current_temp, qos=0, retain=False)
client.publish("hallway/heater/currentmode", payload=Tevolve.hallway_mode, qos=0, retain=False)
client.publish("livingroom/heater/currentmode", payload=Tevolve.livingroom_mode, qos=0, retain=False)
client.publish("hallway/heater/currentsettemp", payload=Tevolve.hallway_set_temp, qos=0, retain=False)
client.publish("livingroom/heater/currentsettemp", payload=Tevolve.livingroom_set_temp, qos=0, retain=False)
# Setup initial hallway heater values
if Tevolve.hallway_mode == "off":
client.publish("hallway/heater/setmode", payload="off", qos=0, retain=False)
# client.publish("hallway/heater/idleaction", payload="idle", qos=0, retain=False)
if Tevolve.hallway_mode == "manual":
if float(Tevolve.hallway_current_temp) >= float(Tevolve.hallway_set_temp):
client.publish("hallway/heater/idleaction", payload="idle", qos=0, retain=False)
if float(Tevolve.hallway_set_temp) > float(Tevolve.hallway_current_temp):
client.publish("hallway/heater/idleaction", payload="heating", qos=0, retain=False)
# Setup initial living room heater values
if Tevolve.livingroom_mode == "off":
client.publish("livingroom/heater/setmode", payload="off", qos=0, retain=False)
if Tevolve.livingroom_mode == "manual":
if float(Tevolve.livingroom_current_temp) >= float(Tevolve.livingroom_set_temp):
client.publish("livingroom/heater/idleaction", payload="idle", qos=0, retain=False)
if float(Tevolve.livingroom_set_temp) > float(Tevolve.livingroom_current_temp):
client.publish("livignroom/heater/idleaction", payload="heating", qos=0, retain=False)
while True:
if Tevolve.websocket_message != "":
if "/api/v2" in Tevolve.websocket_message:
print(Tevolve.websocket_message[30:-1])
m = json.loads(Tevolve.websocket_message[30:-1])
# print(m)
if m["path"] == "/htr/3/status":
Tevolve.hallway_active = m["body"]["active"]
Tevolve.hallway_mode = m["body"]["mode"]
Tevolve.hallway_set_temp = m["body"]["stemp"]
Tevolve.hallway_current_temp = m["body"]["mtemp"]
if Tevolve.hallway_mode == "off":
client.publish("hallway/heater/setmode", payload="off", qos=0, retain=False)
# client.publish("hallway/heater/idleaction", payload="idle", qos=0, retain=False)
if Tevolve.hallway_mode == "manual":
if float(Tevolve.hallway_set_temp) > float(Tevolve.hallway_current_temp):
client.publish("hallway/heater/idleaction", payload="heating", qos=0, retain=False)
client.publish("hallway/heater/currentmode", payload="heat", qos=0, retain=False)
if float(Tevolve.hallway_set_temp) <= float(Tevolve.hallway_current_temp):
client.publish("hallway/heater/idleaction", payload="idle", qos=0, retain=False)
client.publish("hallway/heater/currentmode", payload="heat", qos=0, retain=False)
client.publish("hallway/heater/currentsettemp", payload=m["body"]["stemp"], qos=0, retain=False)
# Publish hallway current temperature
client.publish("hallway/heater/currenttemp", payload=m["body"]["mtemp"], qos=0, retain=False)
if m["path"] == "/htr/2/status":
Tevolve.livingroom_active = m["body"]["active"]
Tevolve.livingroom_mode = m["body"]["mode"]
Tevolve.livingroom_set_temp = m["body"]["stemp"]
Tevolve.livingroom_current_temp = m["body"]["mtemp"]
if Tevolve.livingroom_mode == "off":
client.publish("livingroom/heater/setmode", payload="off", qos=0, retain=False)
if Tevolve.livingroom_mode == "manual":
if float(Tevolve.livingroom_set_temp) > float(Tevolve.livingroom_current_temp):
client.publish("livingroom/heater/idleaction", payload="heating", qos=0, retain=False)
client.publish("livingroom/heater/currentmode", payload="heat", qos=0, retain=False)
if float(Tevolve.livingroom_set_temp) <= float(Tevolve.livingroom_current_temp):
client.publish("livingroom/heater/idleaction", payload="idle", qos=0, retain=False)
client.publish("livingroom/heater/currentmode", payload="heat", qos=0, retain=False)
client.publish("livingroom/heater/currentsettemp", payload=m["body"]["stemp"], qos=0, retain=False)
# Publish hallway current temperature
client.publish("livingroom/heater/currenttemp", payload=m["body"]["mtemp"], qos=0, retain=False)
Tevolve.websocket_message = ""
time.sleep(1)

View File

@@ -4,12 +4,12 @@ import paho.mqtt.client as mqtt
class MqttManager:
def __init__(self, heaters):
def __init__(self):
self.host = "192.168.0.100"
self.username = "connorroy"
self.password = "arkreactor7"
self.object_ids = heaters
self.object_ids = None
self.client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)
self.client.on_connect = self.on_connect
@@ -17,11 +17,16 @@ class MqttManager:
self.client.username_pw_set(username=self.username, password=self.password)
self.client.connect(self.host, 1883, 60)
# self.client.connect(self.host, 1883, 60)
self.client.loop_forever()
def on_connect(self, client, userdata, flags, reason_code, properties):
def mqtt_connect(self):
pass
def on_connect(self, client, userdata, flags, reason_code, properties, heaters=None):
self.object_ids = heaters
print(f"Connected with result code {reason_code}")
discovery_topic = "homeassistant/climate/"