Seite 1 von 1

Fritzbox Daten zu Volkszähler senden

Verfasst: 18. Jul 2020 12:49
von Morph.
Hallo,
ich bin auf ein Problem gestoßen, das mit dem AVM Fritzbox-Bindung und Externen Datengebern zu tun hat.
In meinem Setup habe ich auf einem Raspi Openhab am laufen, auf einem zweiten läuft das System Volkszähler, der mit meinem Smartmeter die Datenerfassung Stromverbrauch etc. macht. Im openhab hole ich mir per Http den aktuellen Verbrauchswert aus dem Volksmeter (middleware raus).
Da mein Stromverbrauch die letzten zwei Jahre sprunghaft angestiegen ist ( 800KW im Jahr) suche ich den Fehler und habe im Volkszähler ein Pythonscript, der bei der Fritzbox einen Aktor alle 4 Minuten abfragt, welche Leistung dort verbraucht wird, und diese in die Middleware mit schreibt.

Anscheinend ist hier das Problem, das nach ca. einen 1/2 Tag die Kommunikation von Openhab zur Fritzbox unterbrochen wird und keine Daten mehr zu Openhab fließen und auch sonst gewissen Rules in Openhab nicht mehr greifen (kein Telegram push etc.).

Ich habe den Fehler soweit eingegrenzt, das sobald das PyDect200 Script nicht mehr läuft, openhab wie gewohnt läuft.
Soweit gut;
Nun würde ich gerne die andere Variante probieren, und zwar die Messdaten aus Openhab in die Middelware zu schreiben, dafür fehlt mir aber im Moment das Verständnis :roll:

Im Ganzen müsste eine "rule" erstellt werden die; Trigger bei Update von meiner FritzSteckdose : Power, dann diesen Wert als POST HTTP an die Middelware schicken

POST https://192.168.2.220/middleware/data/X ... 150&value=??

Wobei das "ts" optional wäre, denn die Middleware generiert wohl aus dem POST einen Zeitstempel; in einer weiteren Ausbaustufe könnte man den Mittelwert über 5 Minuten übertragen, das reduziert die Netzwerklast ein wenig, oder?

Vielleicht hat jemand hier eine smarte Lösung für die Rule, gerade wie man den Wert eines ITEMs in ein JSON Objekt wandelt.

Mit freundlichen Grüßen

Re: Fritzbox Daten zu Volkszähler senden

Verfasst: 18. Jul 2020 18:15
von Morph.
Nun habe ich ein Ansatz, der leider Fehlerbehaftet ist:

Code: Alles auswählen

rule "Fritz Steckdose Power Messung"
when
    Item Khlschrank_Leistung changed
then
sendHttpPostRequest("https://192.168.2.220/middleware/data/16c78500-bdfa-11ea-9bd4-b3b36bde7fcf.json?value=" + Khlschrank_Leistung.toString)
end
Da bekomme ich die Fehlermeldung:
Rule 'Fritz Steckdose Power Messung': Illegal character in query at index 105: https://192.168.2.220/middleware/data/1 ... k_Leistung (Type=NumberItem, State=165.080 W, Label=Verbrauch, Category=null)

Ich denke die Transformation ist dort nicht korrekt, ich müsste ja nur die STATE Information übertragen..??

Re: Fritzbox Daten zu Volkszähler senden

Verfasst: 18. Jul 2020 18:36
von Darkwin101
Khlschrank_Leistung.state.toString versuche s doch mal so

Re: Fritzbox Daten zu Volkszähler senden

Verfasst: 18. Jul 2020 20:04
von Morph.
Hallo Darkwin101,

coole Idee, ein Schritt weiter gekommen; nun kommt diese Fehlermeldung:

Rule 'Fritz Steckdose Power Messung': Illegal character in query at index 92: https://192.168.2.220/middleware/data/1 ... lue=74.950 W

Der illegal character ist sicherlich das " W"; wie kann ich in Java/Rules hier das Item trimmen; ich denke nicht, das ich das wie in der linux-Bash machen kann, oder?

Re: Fritzbox Daten zu Volkszähler senden

Verfasst: 18. Jul 2020 20:37
von Darkwin101

Code: Alles auswählen

 var Number Kuehlschrankleistung = 0                // wird am Anfang der Datei Geschrieben
 rule "Fritz Steckdose Power Messung"
when
    Item Khlschrank_Leistung changed
then
Kuelschrankleistung = (Khlschrank_Leistung.state  as Number).floatValue
sendHttpPostRequest("https://192.168.2.220/middleware/data/16c78500-bdfa-11ea-9bd4-b3b36bde7fcf.json?value=" + Kuehlschrankleistung.toString)
end
Versuche es mal so

Re: Fritzbox Daten zu Volkszähler senden

Verfasst: 18. Jul 2020 23:11
von Morph.
Das sieht schon sehr gut aus, vielen Dank für den Denkanstoss; die Daten werden zwar an die Middelware übertragen, im Log habe ich jedoch diese Fehlermeldungen.

Code: Alles auswählen

2020-07-18 21:00:38.815 [ERROR] [.smarthome.model.script.actions.HTTP] - Fatal transport error: java.util.concurrent.TimeoutException: Total timeout 1000 ms elapsed
2020-07-18 21:30:38.775 [ERROR] [.smarthome.model.script.actions.HTTP] - Fatal transport error: java.util.concurrent.TimeoutException: Total timeout 1000 ms elapsed
2020-07-18 22:21:19.182 [ERROR] [.smarthome.model.script.actions.HTTP] - Fatal transport error: java.util.concurrent.TimeoutException: Total timeout 1000 ms elapsed
2020-07-18 22:40:39.213 [ERROR] [.smarthome.model.script.actions.HTTP] - Fatal transport error: java.util.concurrent.TimeoutException: Total timeout 1000 ms elapsed
2020-07-18 22:44:39.378 [ERROR] [.smarthome.model.script.actions.HTTP] - Fatal transport error: java.util.concurrent.TimeoutException: Total timeout 1000 ms elapsed
2020-07-18 23:06:19.331 [ERROR] [.smarthome.model.script.actions.HTTP] - Fatal transport error: java.util.concurrent.TimeoutException: Total timeout 1000 ms elapsed
Leider sehe ich keinen Periodische Zeit, woran man das fest machen kann..?

Aber erstmal Danke für den Tipp und den Lösungsansatz!!!

Re: Fritzbox Daten zu Volkszähler senden

Verfasst: 18. Jul 2020 23:46
von Tokamak
Der Timeout kommt vom sentHttp...Request(). Der hat einen Standard-Timeout von 1000ms. Das scheint in deinem Fall häufig, aber eben nicht immer zu reichen.
Gib als gemäß https://www.openhab.org/docs/configurat ... tp-actions fünften, bisher nicht angegebenen Parameter etwa 2000 für 2 Sekunden an. Das dürfte die Zahl der Timeouts nochmal reduzieren. Die Parameter 2 bis 4 würde ich versuchsweise als NULL, ggf als leere Strings "" übergeben. Als dritter Parameter könnte "{}" notwendig sein.

Bei mir gibt es einen ähnlichen Fall bei einem Get. Der geht in der Default-Konfiguration ab und an schief, mit 2000 (ms) seither nicht mehr.