Automatischer Upload von Verbrauchsdaten auf waermepumpen-verbrauchsdatenbank.de

Begonnen von 300P, 01 September 2025, 20:15:48

Vorheriges Thema - Nächstes Thema

300P

Auf der Seite waermepumpen-verbrauchsdatenbank kann an einer Sammlung von Wärmepumpenverbrauchs- und Erzeugungswerten inkl. JAZ-Bildung und einem dadurch möglichen Vergleich zu anderen Wärmepumpen in einer Datenbank händisch hinterlegt werden.

Näheres dazu bitte dieser Webseite entnehmen.

PS:
Ich bin weder Admin, Eigentümer noch Betreiber dieser Datenbank / des Servers)


Jetzt zurück zum Thema:

Im August bin ich zufällig durch einen Beitrag in einem anderen Forum auf die Seite gestoßen und hab mich kurzentschlossen dort angemeldet.

Neben den Allgemeindaten der Anlage etc. (siehe Webseite) muss man monatlich folgende Daten der WP (Wärmepumpe) kennen / ab- oder auslesen / messen können.

Dies sind
  • A - Energiegesamtverbrauch pro Monat
    Wert in kWh inklusive aller Heizungs-Pumpen und sonstiger direkter Verbraucher
  • B - Wärmemengenerzeugung pro Monat
    Wert in kWh - ist aus einem Wärmemengenzählers ablesbar / auslesbar (meist in WP enthalten) 
  • C - Betriebsstunden des Kompressors pro Monat
    Wert in Stunden - ist aus der WP ablesbar / auslesbar) 

Die ersten Daten habe ich per Hand eingetippelt.
Aber dann habe ich erfahren, dass man auch die Daten "übergeben" kann wenn man den Admin anschreibt und um eine persönlichen Key bittet.
Da ich schon WP-Werte per BBQKees-ESP-Modul auslese und ein Energiemeter im WP-Verteilerkasten habe war der Gedanke dies zu automatisieren schnell da.

Kurzum - hier meine Lösung um die Daten automatisch zu übermitteln - natürlich funktioniert das nur wenn man einen speziellen persönlichen Key vom Admin nach einer Mailanfrage erhalten hat und eine Anlage angelegt hat.

Zur Nutzung des automatischen Importes in die Datenbank hier meine Codesscnipsel:
Es werden täglich nach Mitternacht die aktuellsten Monats- und (evtl. schon bekannten) Vormonatswerte übermittelt.
 (=>>hab keinen Monatswechsel berücksichtigt  :o )

################################
Integration in ein FHEM-System
################################

A. AT-Device im raw-modus hinzufügen:

Diese 6 Reading für die Variablen (lfd. Monat / letzter Monat)

- $strom(last) ->> Energieverbrauch WP        -- in kWh   z.B 123.05
- $WMZ(last)   ->> WMZ (Ertrag)     WP        -- in kWh   z.B 333.08
- $bs(last)    ->> Kompressor Betriebsstunden -- in kWh   z.B 132.05

müssen natürlich schon irgendwo in einem FHEM-Device ermittelt worden sein / bereitstehen und so angepasst werden, damit die "richtigen" Werte an das Skript übergeben werden können.

defmod at_WP_Daten_UPLOAD at *00:45:00 {\
my $strom = ReadingsNum('Dum.Energy','WPGridConsumptionMonth','0');;;;\
my $wmz = ReadingsNum('di_counter_25_03','MQTT_EMSwp.boiler_data_nrgtotal.month','0');;;; \
my $bs = ReadingsNum('di_counter_25_03','MQTT_EMSwp.user_boiler_data_uptimecontrol.month','0');;;; \
{system("/opt/fhem/uploadWP_month.sh",$strom,$wmz,$bs)};;;; \
my $stromlast = ReadingsNum('Dum.Energy','WPGridConsumptionPMonth','0');;;; \
my $wmzlast = ReadingsNum('di_counter_25_03','MQTT_EMSwp.boiler_data_nrgtotal.last_month','0');;;;  \
my $bslast = ReadingsNum('di_counter_25_03','MQTT_EMSwp.user_boiler_data_uptimecontrol.last_month','0');;;;  \
{system("/opt/fhem/uploadWP_lastmonth.sh",$stromlast,$wmzlast,$bslast)};;;;  \
}\

attr at_WP_Daten_UPLOAD comment per Linux händisch so mal testen und nachsehen ob die Daten im aktuellen Monat eingetragen werden\
"bash /opt/fhem/WP_month.sh 206.8 613.10 121.50"\

attr at_WP_Daten_UPLOAD room EnergieWP
attr at_WP_Daten_UPLOAD verbose 2

B. 2 Script-Dateien im Verzeichnis ... anlegen:
Unbedingt dort diese notwendigen Daten mit den persönlichen bzw. aktuellen Monatswerten ersetzen.

- "anlage=9999"
- "importkey=1111111112222222222222"
- "personenjahr=9"

Diese Daten im Code so lassen :

- "&strom=$1&wmz=$2&bs=$3&monat=aktuell"

/opt/fhem/uploadWP_lastmonth.sh
Inhalt der Script-Datei:
wget --quiet - "https://www.waermepumpen-verbrauchsdatenbank.de/import/import.php?anlage=9999&importkey=1111111112222222222222&personenjahr=9&strom=$1&wmz=$2&bs=$3"


/opt/fhem/uploadWP_month.sh
Inhalt der Script-Datei:
wget --quiet - "https://www.waermepumpen-verbrauchsdatenbank.de/import/import.php?anlage=9999&importkey=1111111112222222222222&personenjahr=9&strom=$1&wmz=$2&bs=$3&monat=aktuell"


Damit sollte es dann eigentlich klappen 😉🤓

Sollte jemand einen anderen / kürzeren / einfacheren Weg kennen - gern raus damit.

Gruß
300P

FHEM 6.4|RPi|SMAEM|SMAInverter|SolarForecast|DbLog|DbRep|MariaDB|Buderus-MQTT_EMS|
Fritzbox|fhempy|JsonMod|HTTPMOD|Modbus ser+TCP|ESP32-Digitizer-AI_on_the_Edge|ESP32CAM usw.

betateilchen

  • Die Shell-skripte, die nichts weiter tun, als einen http-request abzusetzen, braucht man nicht, wenn man die FHEM-eigenen Bordmitteln aus HTTPutils.pm verwendet.
  • den gesamten code würde ich nicht in das at packen, sondern in eine Funktion in der 99_myUtils.pm. Im at wird dann lediglich die Funktion aufgerufen. Das Ganze wird dadurch einfacher zu lesen und besser zu pflegen.

Aber das ist nur meine persönliche Meinung.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

300P

Danke dir für den Schubser in die richtige Richtung. ;D

Hatte wohl wegen der Vorgabe aus der Mail von dem Seitenbetreuer mit 'Bitte mit "wget ....." oder "curl ....." übertragen' nicht großartig nachgedacht und mich somit in die falsche Ecke gebracht.

Ein simples manuelles:
{  GetFileFromURL('https://www.waermepumpen-verbrauchsdatenbank.de/import/import.php?anlage=9999&importkey=11111111111111222222222&personenjahr=99&strom=1230.4&wmz=4560.7&bs=998.9&monat=aktuell') }

(natürlich mit den "richtigen Daten  ;) "
wird fehlerfrei ausgeführt. ;D
Import User: XXXXXXYYYYY <br />Jahr Monat: 2025 09 <br />Jahr Vormonat: 2025 09 (sep) <br />Datensatz Anlage 9999 aus dem Jahr 2025 vorhanden -> Update <br />Daten: seps 1230.4 sepw 4560.7 sepbs 998.9 <br /><br />Import Ende

Jetzt noch die passenden Werte aus den anderen Devices per Variable übergeben und fertig ist die Angelegenheit ohne die o.g. Script-Nutzung. O:-)

DANKESCHÖN !!

PS:
sollte ich es vielleicht noch in den Anfängerfragen verschieben (lassen) oder hier bei den Heizungsanwendungen lassen ???
Gruß
300P

FHEM 6.4|RPi|SMAEM|SMAInverter|SolarForecast|DbLog|DbRep|MariaDB|Buderus-MQTT_EMS|
Fritzbox|fhempy|JsonMod|HTTPMOD|Modbus ser+TCP|ESP32-Digitizer-AI_on_the_Edge|ESP32CAM usw.

300P

#3
Hier nun meine jetzt bei mir laufende Lösung:

defmod at.Verbrauchsdatenupload_Waermepumpe.Tag at *23:55:00 {\
\
## aktueller Monat am jeweiligen Abend senden\
my $strom = ReadingsNum('di_counter_25_03','SMA_Elgris_EM2.Bezug_Wirkleistung_Zaehler.month','0');;;;\
my $wmz = ReadingsNum('di_counter_25_03','MQTT_EMSwp.boiler_data_nrgtotal.month','0');;;; \
my $bs = ReadingsNum('di_counter_25_03','MQTT_EMSwp.user_boiler_data_uptimecontrol.month','0');;;; \
GetFileFromURL("https://www.waermepumpen-verbrauchsdatenbank.de/import/import.php?anlage=9999&importkey=11111111111111222222222&personenjahr=99&strom=$strom&wmz=$wmz&bs=$bs&monat=aktuell");;;;\
\
## letzter Monat - nur am 1. des Monats noch die letzten 5 Minuten vom letzten Tag aktualisieren\
if($mday < 2)\
   {\
    my $stromlast = ReadingsNum('di_counter_25_03','SMA_Elgris_EM2.Bezug_Wirkleistung_Zaehler.last_month','0');;;; \
    my $wmzlast = ReadingsNum('di_counter_25_03','MQTT_EMSwp.boiler_data_nrgtotal.last_month','0');;;;  \
    my $bslast = ReadingsNum('di_counter_25_03','MQTT_EMSwp.user_boiler_data_uptimecontrol.last_month','0');;;;  \
    GetFileFromURL("https://www.waermepumpen-verbrauchsdatenbank.de/import/import.php?anlage=9999&importkey=11111111111111222222222&personenjahr=99&strom=$stromlast&wmz=$wmzlast&bs=$bslast&monat");;;;\
   }\
}\

Gruß
300P

FHEM 6.4|RPi|SMAEM|SMAInverter|SolarForecast|DbLog|DbRep|MariaDB|Buderus-MQTT_EMS|
Fritzbox|fhempy|JsonMod|HTTPMOD|Modbus ser+TCP|ESP32-Digitizer-AI_on_the_Edge|ESP32CAM usw.

betateilchen

Was sollen eigentlich die eckigen Klammern um das GetFileFromUrl()? Die gehören da m.E. nicht hin.

Zitat von: 300P am 02 September 2025, 08:52:30PS:
sollte ich es vielleicht noch in den Anfängerfragen verschieben (lassen) oder hier bei den Heizungsanwendungen lassen ???

In den Anfängerfragen wäre das noch falscher als hier.
Verschiebe das am Besten in den Bereich "Codeschnipsel", den Button zum Verschieben findest Du unten links auf dieser Seite.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

300P

Zitat von: betateilchen am 02 September 2025, 17:22:32Was sollen eigentlich die eckigen Klammern um das GetFileFromUrl()? Die gehören da m.E. nicht hin.

Zitat von: 300P am 02 September 2025, 08:52:30Sorry - die haben sich irgendwie beim "Userdatenunkenntlichmachen" und dem Kopieren eingeschlichen - hat ja nix mit einem Array zu tun



EDIT:
Verschoben von Heizungssteuerung/Raumklima ->>> nach Codeschnipsel
Gruß
300P

FHEM 6.4|RPi|SMAEM|SMAInverter|SolarForecast|DbLog|DbRep|MariaDB|Buderus-MQTT_EMS|
Fritzbox|fhempy|JsonMod|HTTPMOD|Modbus ser+TCP|ESP32-Digitizer-AI_on_the_Edge|ESP32CAM usw.