From 88f12208bbb9ac552de650dbbf87cee5048e9d9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Sch=C3=B6dl?= Date: Thu, 27 Feb 2025 11:01:14 +0000 Subject: [PATCH] smart.py aktualisiert --- smart.py | 57 ++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 47 insertions(+), 10 deletions(-) diff --git a/smart.py b/smart.py index 353ce2a..47d6617 100644 --- a/smart.py +++ b/smart.py @@ -9,7 +9,7 @@ from bs4 import BeautifulSoup import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) import random -from paho.mqtt import client as mqtt_client +import paho.mqtt.publish as publish # General config user= '1707910897002706169923_ECPR0002108185' @@ -20,7 +20,7 @@ meter-id= '1EFR2375175891' # MQTT config broker= 'homeassistant' -port= 1883 +mqttport= 1883 mqttuser= 'mqtt' mqttpass= 'mqtt1234' @@ -51,14 +51,51 @@ res= s.post(url, data=post_data,cookies=cookies,verify=False) soup = BeautifulSoup(res.content, 'html.parser') table_data = soup.find('table', id="metervalue") -result_data = { - 'value': table_data.find(id="table_metervalues_col_wert").string, - 'unit': table_data.find(id="table_metervalues_col_einheit").string, - 'timestamp': table_data.find(id="table_metervalues_col_timestamp").string, - 'isvalid': table_data.find(id="table_metervalues_col_istvalide").string, - 'name': table_data.find(id="table_metervalues_col_name").string, - 'obis': table_data.find(id="table_metervalues_col_obis").string + +# Listen, um die Daten zu speichern +results = [] + +# Alle Zeilen der Tabelle finden (außer der Kopfzeile) +rows = table_data.find_all('tr')[1:] # Überspringe die erste Zeile, da es eine Kopfzeile gibt + +for row in rows: + result_data = { + 'value': table_data.find(id="table_metervalues_col_wert").string, + 'unit': table_data.find(id="table_metervalues_col_einheit").string, + 'timestamp': table_data.find(id="table_metervalues_col_timestamp").string, + 'isvalid': table_data.find(id="table_metervalues_col_istvalide").string, + 'name': table_data.find(id="table_metervalues_col_name").string, + 'obis': table_data.find(id="table_metervalues_col_obis").string + } + msgs = [ + { + 'topic': f"homeassistant/sensor/{meter_id}_{result_data['obis']}_value", + 'payload': result_data['value'], 'qos':1, 'retain': False + }, + { + 'topic': f"homeassistant/sensor/{meter_id}_{result_data['obis']}_unit", + 'payload': result_data['unit'], 'qos':1, 'retain': False + }, + { + 'topic': f"homeassistant/sensor/{meter_id}_{result_data['obis']}_timestamp", + 'payload': result_data['timestamp'], 'qos':1, 'retain': False + }, + { + 'topic': f"homeassistant/sensor/{meter_id}_{result_data['obis']}_isvalid", + 'payload': result_data['isvalid'], 'qos':1, 'retain': False + }, + { + 'topic': f"homeassistant/sensor/{meter_id}_{result_data['obis']}_name", + 'payload': result_data['name'], 'qos':1, 'retain': False } -print(result_data['timestamp']+ " " + result_data['value']+ " " + result_data['unit']) + ] + results.append(result_data) + publish.multiple(msgs, hostname= broker, port= mqttport,retained=False, auth={'username': mqttuser, 'password':mqttpass}) + +# Ergebnisse ausgeben +for result in results: + print(result['timestamp']+ " " + result['value']+ " " + result['unit']) + + s.close()