Kostal Plenticore Bilanz

Begonnen von ch.eick, 05 April 2020, 10:36:25

Vorheriges Thema - Nächstes Thema

ch.eick

#15
Diese Meldung ist normal und wird auch bleiben.
Somit arbeitet das DOIF bereits und startet jede Stunde die Statistik Abfrage :-)
Die readings mit den IP-Adresse hast Du ach bereits richtig angelegt und die Adressen stimmen auch.

2020.08.25 07:33:24 2: PV_Schedule: {system("/usr/bin/python3 /opt/fhem/python/bin/plenticore_statistic.py ".ReadingsVal("WR_Plenticore","IP-Address_Plenticore","?")." ".ReadingsVal("WR_Plenticore","IP-Address_FHEM","?")." &")}: -1


Diese Meldungen kommen vom plenticore_statistic.py Skript.

### Die Anmeldung ist gelaufen und es wird "/api/vi/info/version" abgefragt. Du hast den default Namen von SCB auf Hermet im Plenticore geändert, ansonsten sind unsere Versionen identisch.
Connected to the inverter PUCK RESTful API/Hermet with SW-Version 01.15.04581 and API-Version 0.2.0

### Ab hier scheint die Kommunikation zum Fhem noch nicht sauber zu sein, oder es kommt von einem anderen Device ???
### Weiter unten bekommst Du ja schon eine Rückmeldung vom Plenticore (s.u.)
CSRF token not available!
CSRF token requested for server that doesn't know CSRF
CSRF token requested for server that doesn't know CSRF



Das hier liegt daran, weil Du keine Werte für Statistic_* bekommen hast. Also einfach überlesen und später sollten sie dann weg sein

(ReadingsVal("WR_Plenticore","Statistic_EnergyHomePv_Year","")+ReadingsVal("WR_Plenticore","Statistic_EnergyHomeBat_Year","")+ReadingsVal("WR_Plenticore","Statistic_EnergyHomeGrid_Year","") )/1000,2)}
2020.08.25 07:33:24 1: PERL WARNING: Argument "" isn't numeric in addition (+) at (eval 2101105) line 1.
2020.08.25 07:33:24 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 2101088) line 1.
2020.08.25 07:33:24 3: eval: {round( ReadingsVal("WR_Plenticore","Statistic_Yield_Day", "")/1000 ,2)}
2020.08.25 07:33:24 1: PERL WARNING: Argument "" isn't numeric in division (/) at (eval 2101087) line 1.



Diese Readings sind die Rückmeldung vom Plenticore, somit hat die Kopplung vom Python Skript bereits geklappt. Die CSRF Meldungen kommen dann nicht von diesen Devices.

statistics_clean {"statistics": [], "modulehermet:statistic:EnergyFlow"}]
statistics_output [{"processdata": [], "moduleid": "hermet:statistic:EnergyFlow"}]


"statistics_output" ist der JSON String der vom Plenticore gekommen ist, ich vermute durch Deine Namensänderung hat sich auch die Moduleid verändert.
Bitte prüfe und ändere folgende Zeile im Skript, denn da ist der Name mit drin :-(

alt: request = '/processdata/scb:statistic:EnergyFlow'

neu: request = '/processdata/hermet:statistic:EnergyFlow'


"statistics_clean" wird durch das userreading aus dem PV_Anlage_1 Device erzeugt und es arbeitet ebenfalls schon :-) Jedock garbage in gibt garbage out :-)
Des weiteren kommt hier auch wieder Deine Namensänderung zum tragen, bitte ändere das userreading und ersetze "scb" durch ".*" . Im ersten post ändere ich das dann auch noch.

statistics_clean:statistics_output.* { my $x =  ReadingsVal($NAME,"statistics_output",0);; $x =~ s/\{"moduleid": ".*:statistic:EnergyFlow", "processdata": \[|id": "|, "unit": "", "value"|^\[|\]\}\]$//g;; $x =~ s/moduleid/statistics_00_moduleid/g;; $x =~ s/processdata/statistics/g;; $x =~ s/\}\, \{/\, /g;; return $x }


Ich denke, das hilft jetzt wieder weiter. Im statistics_output sollte später so etwas wie dies hier stehen.
Wenn Du das in das reading schreibst, sollte das userreading es in statistics_clean umwandel.
Als nächstes erledigt dann "Plenticore_Statistics" seine Arbeitet und wandelt das JSON in einzelne Readings um.

[{"moduleid": "scb:statistic:EnergyFlow", "processdata": [{"id": "Statistic:Autarky:Day", "unit": "", "value": 99.6919677162}, {"id": "Statistic:Autarky:Month", "unit": "", "value": 99.7246557431}, {"id": "Statistic:Autarky:Total", "unit": "", "value": 65.6140392962}, {"id": "Statistic:Autarky:Year", "unit": "", "value": 77.3596096492}, {"id": "Statistic:CO2Saving:Day", "unit": "", "value": 10704.3006626863}, {"id": "Statistic:CO2Saving:Month", "unit": "", "value": 686394.2485287965}, {"id": "Statistic:CO2Saving:Total", "unit": "", "value": 5955983.828972261}, {"id": "Statistic:CO2Saving:Year", "unit": "", "value": 5641830.747554813}, {"id": "Statistic:EnergyHome:Day", "unit": "", "value": 7752.3548381243}, {"id": "Statistic:EnergyHome:Month", "unit": "", "value": 361046.7609239225}, {"id": "Statistic:EnergyHome:Total", "unit": "", "value": 5974726.2243373245}, {"id": "Statistic:EnergyHome:Year", "unit": "", "value": 4521121.1624692}, {"id": "Statistic:EnergyHomeBat:Day", "unit": "", "value": 2630.1575911424}, {"id": "Statistic:EnergyHomeBat:Month", "unit": "", "value": 117455.2500878764}, {"id": "Statistic:EnergyHomeBat:Total", "unit": "", "value": 1173864.8793304889}, {"id": "Statistic:EnergyHomeBat:Year", "unit": "", "value": 1027927.0100875347}, {"id": "Statistic:EnergyHomeGrid:Day", "unit": "", "value": 23.4391181523}, {"id": "Statistic:EnergyHomeGrid:Month", "unit": "", "value": 989.6937225771}, {"id": "Statistic:EnergyHomeGrid:Total", "unit": "", "value": 2069061.0860175206}, {"id": "Statistic:EnergyHomeGrid:Year", "unit": "", "value": 1025701.7678753391}, {"id": "Statistic:EnergyHomePv:Day", "unit": "", "value": 5098.385426528}, {"id": "Statistic:EnergyHomePv:Month", "unit": "", "value": 242595.4949888238}, {"id": "Statistic:EnergyHomePv:Total", "unit": "", "value": 2746389.3044861364}, {"id": "Statistic:EnergyHomePv:Year", "unit": "", "value": 2469595.567303522}, {"id": "Statistic:OwnConsumptionRate:Day", "unit": "", "value": 50.5398038434}, {"id": "Statistic:OwnConsumptionRate:Month", "unit": "", "value": 36.7189626257}, {"id": "Statistic:OwnConsumptionRate:Total", "unit": "", "value": 46.0743603017}, {"id": "Statistic:OwnConsumptionRate:Year", "unit": "", "value": 43.3948710567}, {"id": "Statistic:Yield:Day", "unit": "", "value": 15291.8580895519}, {"id": "Statistic:Yield:Month", "unit": "", "value": 980563.212183995}, {"id": "Statistic:Yield:Total", "unit": "", "value": 8508548.327103231}, {"id": "Statistic:Yield:Year", "unit": "", "value": 8059758.21079259}]}]


Viele Grüße
     Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Mumpitz

#16
Zitat von: ch.eick am 25 August 2020, 13:50:48
Diese Meldung ist normal und wird auch bleiben.
Somit arbeitet das DOIF bereits und startet jede Stunde die Statistik Abfrage :-)
Die readings mit den IP-Adresse hast Du ach bereits richtig angelegt und die Adressen stimmen auch.

2020.08.25 07:33:24 2: PV_Schedule: {system("/usr/bin/python3 /opt/fhem/python/bin/plenticore_statistic.py ".ReadingsVal("WR_Plenticore","IP-Address_Plenticore","?")." ".ReadingsVal("WR_Plenticore","IP-Address_FHEM","?")." &")}: -1


Besten Dank für deine Hilfe. Leider klappt es immernoch nicht. Ich denke ich habe noch 2 Probleme:

1:
Ich glaube hier stimmt noch was nicht ganz. Das sind meine beiden Readings im WR_Plenticore:

statistics_clean {"statistics": [], "moduleHermet:statistic:EnergyFlow"}]
statistics_output [{"processdata": [], "moduleid": "Hermet:statistic:EnergyFlow"}]


Diese entstehen durch den Aufruf wie du mir geschrieben hast:
statistics_clean:statistics_output.* { my $x =  ReadingsVal($NAME,"statistics_output",0);; $x =~ s/\{"moduleid": ".*:statistic:EnergyFlow", "processdata": \[|id": "|, "unit": "", "value"|^\[|\]\}\]$//g;; $x =~ s/moduleid/statistics_00_moduleid/g;; $x =~ s/processdata/statistics/g;; $x =~ s/\}\, \{/\, /g;; return $x }


2:
Das zweite Problem ist der Aufruf aus Fhem das noch nicht ganz alles sauber ist. Was soll ich noch versuchen? Wenn ich den Aufruf direkt aus der Konsole mache erscheint der CSRF Fehler ebenfalls. Meiner Meinung nach müsste er hier bereits die Werte anzeigen, odern nicht?

root@FHEM:~# /usr/bin/python3 /opt/fhem/python/bin/plenticore_statistic.py 192.168.17.30 192.168.17.5
Connected to the inverter PUCK RESTful API/Hermet with SW-Version 01.15.04581 and API-Version 0.2.0
CSRF token requested for server that doesn't know CSRF
CSRF token requested for server that doesn't know CSRF
CSRF token not available!


Besten Dank nochmals für deine Hilfe. Ich glaube wir sind nicht mehr weit vom Problem entfernt (hoff)

Update 1657 Uhr: Testweise habe ich jetzt auf 8083 das Attribut CSRF Token = none entfernt. Nun läuft der Befehl in der Konsole durch ohne Fehler.
Allerdings zeigt er mir weiter nichts in FHEM an, aber möglicherweise weil bei Punkt 1 noch was im argen liegt?

ch.eick

Zitat von: Mumpitz am 25 August 2020, 16:14:19
Besten Dank für deine Hilfe. Leider klappt es immernoch nicht. Ich denke ich habe noch 2 Probleme:

1:
Ich glaube hier stimmt noch was nicht ganz. Das sind meine beiden Readings im WR_Plenticore:

statistics_clean {"statistics": [], "moduleHermet:statistic:EnergyFlow"}]
statistics_output [{"processdata": [], "moduleid": "Hermet:statistic:EnergyFlow"}]


Diese entstehen durch den Aufruf wie du mir geschrieben hast:
statistics_clean:statistics_output.* { my $x =  ReadingsVal($NAME,"statistics_output",0);; $x =~ s/\{"moduleid": ".*:statistic:EnergyFlow", "processdata": \[|id": "|, "unit": "", "value"|^\[|\]\}\]$//g;; $x =~ s/moduleid/statistics_00_moduleid/g;; $x =~ s/processdata/statistics/g;; $x =~ s/\}\, \{/\, /g;; return $x }


2:
Das zweite Problem ist der Aufruf aus Fhem das noch nicht ganz alles sauber ist. Was soll ich noch versuchen? Wenn ich den Aufruf direkt aus der Konsole mache erscheint der CSRF Fehler ebenfalls. Meiner Meinung nach müsste er hier bereits die Werte anzeigen, odern nicht?

root@FHEM:~# /usr/bin/python3 /opt/fhem/python/bin/plenticore_statistic.py 192.168.17.30 192.168.17.5
Connected to the inverter PUCK RESTful API/Hermet with SW-Version 01.15.04581 and API-Version 0.2.0
CSRF token requested for server that doesn't know CSRF
CSRF token requested for server that doesn't know CSRF
CSRF token not available!


Besten Dank nochmals für deine Hilfe. Ich glaube wir sind nicht mehr weit vom Problem entfernt (hoff)

Update 1657 Uhr: Testweise habe ich jetzt auf 8083 das Attribut CSRF Token = none entfernt. Nun läuft der Befehl in der Konsole durch ohne Fehler.
Allerdings zeigt er mir weiter nichts in FHEM an, aber möglicherweise weil bei Punkt 1 noch was im argen liegt?

Zu 2:
Das hätte ich jetzt auch vermutet, bei ist nur http ohne Key konfiguriert, da kannst Du ja noch mal anderweitig weiter testen.

Zu 1:
Die Daten werden ja bereits übertragen, nur kommt vom Plenticore noch nichts an Werten.
An dem userreading habe ich das Problem bereits erkannt, das werde ich aber erst zu Ende der Woche bearbeiten können.

Wenn Du meine test Daten in das statistics_output schreibst, sollte das jedoch schon laufen. Das kommando wird einfach komplett in die Kommandozeile von Fhem geschrieben.

setreading PV_Anlage_1 statistics_output [{"moduleid": "scb:statistic:EnergyFlow", "processdata": [{"id": "Statistic:Autarky:Day", "unit": "", "value": 99.6919677162}, {"id": "Statistic:Autarky:Month", "unit": "", "value": 99.7246557431}, {"id": "Statistic:Autarky:Total", "unit": "", "value": 65.6140392962}, {"id": "Statistic:Autarky:Year", "unit": "", "value": 77.3596096492}, {"id": "Statistic:CO2Saving:Day", "unit": "", "value": 10704.3006626863}, {"id": "Statistic:CO2Saving:Month", "unit": "", "value": 686394.2485287965}, {"id": "Statistic:CO2Saving:Total", "unit": "", "value": 5955983.828972261}, {"id": "Statistic:CO2Saving:Year", "unit": "", "value": 5641830.747554813}, {"id": "Statistic:EnergyHome:Day", "unit": "", "value": 7752.3548381243}, {"id": "Statistic:EnergyHome:Month", "unit": "", "value": 361046.7609239225}, {"id": "Statistic:EnergyHome:Total", "unit": "", "value": 5974726.2243373245}, {"id": "Statistic:EnergyHome:Year", "unit": "", "value": 4521121.1624692}, {"id": "Statistic:EnergyHomeBat:Day", "unit": "", "value": 2630.1575911424}, {"id": "Statistic:EnergyHomeBat:Month", "unit": "", "value": 117455.2500878764}, {"id": "Statistic:EnergyHomeBat:Total", "unit": "", "value": 1173864.8793304889}, {"id": "Statistic:EnergyHomeBat:Year", "unit": "", "value": 1027927.0100875347}, {"id": "Statistic:EnergyHomeGrid:Day", "unit": "", "value": 23.4391181523}, {"id": "Statistic:EnergyHomeGrid:Month", "unit": "", "value": 989.6937225771}, {"id": "Statistic:EnergyHomeGrid:Total", "unit": "", "value": 2069061.0860175206}, {"id": "Statistic:EnergyHomeGrid:Year", "unit": "", "value": 1025701.7678753391}, {"id": "Statistic:EnergyHomePv:Day", "unit": "", "value": 5098.385426528}, {"id": "Statistic:EnergyHomePv:Month", "unit": "", "value": 242595.4949888238}, {"id": "Statistic:EnergyHomePv:Total", "unit": "", "value": 2746389.3044861364}, {"id": "Statistic:EnergyHomePv:Year", "unit": "", "value": 2469595.567303522}, {"id": "Statistic:OwnConsumptionRate:Day", "unit": "", "value": 50.5398038434}, {"id": "Statistic:OwnConsumptionRate:Month", "unit": "", "value": 36.7189626257}, {"id": "Statistic:OwnConsumptionRate:Total", "unit": "", "value": 46.0743603017}, {"id": "Statistic:OwnConsumptionRate:Year", "unit": "", "value": 43.3948710567}, {"id": "Statistic:Yield:Day", "unit": "", "value": 15291.8580895519}, {"id": "Statistic:Yield:Month", "unit": "", "value": 980563.212183995}, {"id": "Statistic:Yield:Total", "unit": "", "value": 8508548.327103231}, {"id": "Statistic:Yield:Year", "unit": "", "value": 8059758.21079259}]}]



Nun zu dem eigentlichen Problem. Hast Du im Skript bereits die Zeile mit "scb:statistic:EnergyFlow" in "Hermet:statistic:EnergyFlow" umgeändert?
Wenn das schon erledigt ist, dann schau Dir im Python mal einen print() Befehl an und füge die dann im Skript ein, um Dir Zwischenergebnisse anzuzeigen.

Ich bin jetzt erst mal bis übermorgen unterwegs :-)
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Mumpitz

#18
Zitat von: ch.eick am 25 August 2020, 19:56:18


Wenn Du meine test Daten in das statistics_output schreibst, sollte das jedoch schon laufen. Das kommando wird einfach komplett in die Kommandozeile von Fhem geschrieben.


Hat perfekt funktioniert. Alle Werte werden berechnet und angezeigt!


Nun zu dem eigentlichen Problem. Hast Du im Skript bereits die Zeile mit "scb:statistic:EnergyFlow" in "Hermet:statistic:EnergyFlow" umgeändert?

Ja. Hatte ich gemacht. Nachdem ich die Print Befehle am Schluss aktiviert habe musste ich feststellen, dass keinerlei Werte kamen, nur der Name des API. Aus Plausch habe ich nochmals scb eingetragen, und sieht da, die Werte kommen!!! Kann mir das nicht erklären, warum er da den alten Namen eingetragen lässt.

Das heisst nun, ich habe die Werte in fhem in den beiden Readings. Leider gehen sie von da aber nicht weiter in die Statistik_ Readings. Dort verbleiben aber deine Werte. Ich kann den Energy Dummy updaten wie ich will, es passiert einfach nix.

Hier die beiden Readings, welche nach Dem ausführen des Scripts aktualisiert werden:

statistics_clean
{"statistics": [{"Statistic:Autarky:Day": 99.5931898904, "Statistic:Autarky:Month": 99.6635714096, "Statistic:Autarky:Total": 99.6635714096, "Statistic:Autarky:Year": 99.6635714096, "Statistic:CO2Saving:Day": 26528.5249077122, "Statistic:CO2Saving:Month": 149143.9487200841, "Statistic:CO2Saving:Total": 149143.9487200841, "Statistic:CO2Saving:Year": 149143.9487200841, "Statistic:EnergyHome:Day": 10226.7764666189, "Statistic:EnergyHome:Month": 104543.4346882987, "Statistic:EnergyHome:Total": 104543.4346882987, "Statistic:EnergyHome:Year": 104543.4346882987, "Statistic:EnergyHomeBat:Day": 3291.2464926297, "Statistic:EnergyHomeBat:Month": 24571.3268830336, "Statistic:EnergyHomeBat:Total": 24571.3268830336, "Statistic:EnergyHomeBat:Year": 24571.3268830336, "Statistic:EnergyHomeGrid:Day": 41.614506264, "Statistic:EnergyHomeGrid:Month": 351.9681873088, "Statistic:EnergyHomeGrid:Total": 351.9681873088, "Statistic:EnergyHomeGrid:Year": 351.9681873088, "Statistic:EnergyHomePv:Day": 6893.3934287837, "Statistic:EnergyHomePv:Month": 79618.1765724283, "Statistic:EnergyHomePv:Total": 79618.1765724283, "Statistic:EnergyHomePv:Year": 79618.1765724283, "Statistic:OwnConsumptionRate:Day": 26.8753014314, "Statistic:OwnConsumptionRate:Month": 48.9018864695, "Statistic:OwnConsumptionRate:Total": 48.9018864695, "Statistic:OwnConsumptionRate:Year": 48.9018864695, "Statistic:Yield:Day": 37897.8927253031, "Statistic:Yield:Month": 213062.7838858345, "Statistic:Yield:Total": 213062.7838858345, "Statistic:Yield:Year": 213062.7838858345}], "modulescb:statistic:EnergyFlow"}]

2020-08-25 20:49:00

statistics_output
[{"processdata": [{"id": "Statistic:Autarky:Day", "unit": "", "value": 99.5931898904}, {"id": "Statistic:Autarky:Month", "unit": "", "value": 99.6635714096}, {"id": "Statistic:Autarky:Total", "unit": "", "value": 99.6635714096}, {"id": "Statistic:Autarky:Year", "unit": "", "value": 99.6635714096}, {"id": "Statistic:CO2Saving:Day", "unit": "", "value": 26528.5249077122}, {"id": "Statistic:CO2Saving:Month", "unit": "", "value": 149143.9487200841}, {"id": "Statistic:CO2Saving:Total", "unit": "", "value": 149143.9487200841}, {"id": "Statistic:CO2Saving:Year", "unit": "", "value": 149143.9487200841}, {"id": "Statistic:EnergyHome:Day", "unit": "", "value": 10226.7764666189}, {"id": "Statistic:EnergyHome:Month", "unit": "", "value": 104543.4346882987}, {"id": "Statistic:EnergyHome:Total", "unit": "", "value": 104543.4346882987}, {"id": "Statistic:EnergyHome:Year", "unit": "", "value": 104543.4346882987}, {"id": "Statistic:EnergyHomeBat:Day", "unit": "", "value": 3291.2464926297}, {"id": "Statistic:EnergyHomeBat:Month", "unit": "", "value": 24571.3268830336}, {"id": "Statistic:EnergyHomeBat:Total", "unit": "", "value": 24571.3268830336}, {"id": "Statistic:EnergyHomeBat:Year", "unit": "", "value": 24571.3268830336}, {"id": "Statistic:EnergyHomeGrid:Day", "unit": "", "value": 41.614506264}, {"id": "Statistic:EnergyHomeGrid:Month", "unit": "", "value": 351.9681873088}, {"id": "Statistic:EnergyHomeGrid:Total", "unit": "", "value": 351.9681873088}, {"id": "Statistic:EnergyHomeGrid:Year", "unit": "", "value": 351.9681873088}, {"id": "Statistic:EnergyHomePv:Day", "unit": "", "value": 6893.3934287837}, {"id": "Statistic:EnergyHomePv:Month", "unit": "", "value": 79618.1765724283}, {"id": "Statistic:EnergyHomePv:Total", "unit": "", "value": 79618.1765724283}, {"id": "Statistic:EnergyHomePv:Year", "unit": "", "value": 79618.1765724283}, {"id": "Statistic:OwnConsumptionRate:Day", "unit": "", "value": 26.8753014314}, {"id": "Statistic:OwnConsumptionRate:Month", "unit": "", "value": 48.9018864695}, {"id": "Statistic:OwnConsumptionRate:Total", "unit": "", "value": 48.9018864695}, {"id": "Statistic:OwnConsumptionRate:Year", "unit": "", "value": 48.9018864695}, {"id": "Statistic:Yield:Day", "unit": "", "value": 37897.8927253031}, {"id": "Statistic:Yield:Month", "unit": "", "value": 213062.7838858345}, {"id": "Statistic:Yield:Total", "unit": "", "value": 213062.7838858345}, {"id": "Statistic:Yield:Year", "unit": "", "value": 213062.7838858345}], "moduleid": "scb:statistic:EnergyFlow"}]


Wie kriegen wir das noch hin??

ch.eick

#19
So, da bin ich wieder :-)

Zitat von: Mumpitz am 25 August 2020, 21:23:07
Ja. Hatte ich gemacht. Nachdem ich die Print Befehle am Schluss aktiviert habe musste ich feststellen, dass keinerlei Werte kamen, nur der Name des API. Aus Plausch habe ich nochmals scb eingetragen, und sieht da, die Werte kommen!!! Kann mir das nicht erklären, warum er da den alten Namen eingetragen lässt.
Die API ist nach meiner Meinung sehr intolerant gegen die geringsten Änderungen :-( , das heißt ich habe keine Ahnung :-) . So sei es, aber jetzt hast Du ja Daten.

Komischer Weise ist der JSON String bei Dir geringfügig anders als bei mir, obwohl wir die selbe FW Version haben. Ich habe dann mal mein userreading verändert und nun sollte es aber klappen.
Bitte tausche diesen Teil aus:

statistics_clean:statistics_output.* { my $x =  ReadingsVal($NAME,"statistics_output",0);; $x =~ s/"moduleid": "scb:statistic:EnergyFlow", |, "moduleid": "scb:statistic:EnergyFlow"|"processdata": \[//g;; $x =~ s/id": "|, "unit": "", "value"|^\[|\]\}\]$//g;; $x =~ s/moduleid/statistics_00_moduleid/g;; $x =~ s/processdata/statistics/g;; $x =~ s/\}\, \{/\, /g;; $x =~ s/\{\{/\{/g;; return $x }


Zur Erklärung, ich habe im Fhem noch nicht das passende gefunden, um diesen JSON String korrekt in readings einzulesen und auch noch passende readingsnamen zu vergeben. Das ist der Grund, warum ich hier mit Perl und suchen/ersetzen den JSON String für das FHEM expandJSON Modul lesbar gemacht habe.
Im einzelnen werden folgende Strings verändert, also gelöscht, ersetzt und einzelne Zeichen modifiziert, damit es wieder JSON ist:

1. Schritt   $x =~ s/"moduleid": "scb:statistic:EnergyFlow", |, "moduleid": "scb:statistic:EnergyFlow"|"processdata": \[//g
# Die "" sind hier teil des Strings und werden auch gelöscht!
"moduleid": "scb:statistic:EnergyFlow",
, "moduleid": "scb:statistic:EnergyFlow"
"processdata": \[

2. Schritt  $x =~ s/id": "|, "unit": "", "value"|^\[|\]\}\]$//g
# Bei einer Regex maskiert ein \ das nächste Zeichen, damit es nicht als Steuerzeichen erkannt wird
# Es wird einiges gelöscht...
id": "
, "unit": "", "value"
^\[                               # Die [ am Anfang des Strings
\]\}\]$                          # Die restlichen Klammern am Ende des Strings

3. Schritt  $x =~ s/moduleid/statistics_00_moduleid/g
Aus moduleid wird statistics_00_moduleid

4. Schritt  $x =~ s/processdata/statistics/g
Aus processdata wird statistics

5. Schritt  $x =~ s/\}\, \{/\, /g
Einige Zeichen so umsetzen, dass wieder ein JSON Syntax entsteht

6. Schritt  $x =~ s/\{\{/\{/g
Aus {{ am Anfang wieder { machen

Das ist natürlich hart kodierte Stringmanipulation, die für jeden Einzelfall überprüft werden muss!!
Sollte jemand sich mit den Möglichkeiten zu JSON im FHEM auskennen, ist er gerne eingeladen sich hier zu verwirklichen :-)

Für das Testen kann man das Device Plenticore_Statistics disablen, damit nicht fehlerhafte Statistic_* readings in die LogDb geschrieben werden. Sollte man das Vergessen, steht ein Aufräumen in der Datenbank an :-)

attr Plenticore_Statistics disable 1


Viele Grüße
     Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Mumpitz

Zitat von: ch.eick am 27 August 2020, 09:28:31
So, da bin ich wieder :-)
Die API ist nach meiner Meinung sehr intolerant gegen die geringsten Änderungen :-( , das heißt ich habe keine Ahnung :-) . So sei es, aber jetzt hast Du ja Daten.

Komischer Weise ist der JSON String bei Dir geringfügig anders als bei mir, obwohl wir die selbe FW Version haben. Ich habe dann mal mein userreading verändert und nun sollte es aber klappen.
Bitte tausche diesen Teil aus:

statistics_clean:statistics_output.* { my $x =  ReadingsVal($NAME,"statistics_output",0);; $x =~ s/"moduleid": "scb:statistic:EnergyFlow", |, "moduleid": "scb:statistic:EnergyFlow"|"processdata": \[//g;; $x =~ s/id": "|, "unit": "", "value"|^\[|\]\}\]$//g;; $x =~ s/moduleid/statistics_00_moduleid/g;; $x =~ s/processdata/statistics/g;; $x =~ s/\}\, \{/\, /g;; $x =~ s/\{\{/\{/g;; return $x }



Du bist mein persönlicher Held des Tages!!! (Weiss, nützt dir nix  ;D)
Es funktioniert alles!!! Die Readings werden geschrieben und die Bilanz aktualisiert. Echt cool!
Jetzt geht's an meine persönliche Dokumentation sowie an die Umsetzung der Visualisierung ins FTUI (Thema waf  8))

Also, nochmals ein herzliches Dankeschön aus der Schweiz

ch.eick

#21
Zitat von: Mumpitz am 27 August 2020, 09:57:15
Du bist mein persönlicher Held des Tages!!! (Weiss, nützt dir nix  ;D)
Es funktioniert alles!!! Die Readings werden geschrieben und die Bilanz aktualisiert. Echt cool!
Jetzt geht's an meine persönliche Dokumentation sowie an die Umsetzung der Visualisierung ins FTUI (Thema waf  8))

Also, nochmals ein herzliches Dankeschön aus der Schweiz
Na dann herzlichen Glückwunsch :-)

Der waf ist besonders hoch, wenn es die Frau gar nicht merkt. Die Diagramme interessieren die Damen nicht, weshalb Du auch keine FTUI Integration brauchst.
Sinnvoll wäre ein optisches Signal in Form einer Ampel, wann noch Überschuss ist, damit die Spülmaschine noch laufen kann, aber das gehört nicht in diesen Thread.

Im Anhang nochmal ein Bild der Bilanz. Die Autarkie für dieses Jahr ist schon auf 77% geklettert. Jetzt geht es leider nur noch sehr langsam weiter nach oben. Mein Ziel wäre 80%, was ich mal aus dem Bauch heraus so daher gesagt habe :-)

Ich versuche mich noch in den Jahres Balkendiagrammen, aber da ist mir noch nicht ganz klar, was wirklich von Interesse ist.
Der PV-Bezug pro Woche wäre das dunkel Blaue, aber da sind nicht so viele Schwankungen drin.
Die Autarkie ist auch sinn frei, weil man keinen Rückschluss machen kann.
PV_Total_Woche ist noch ganz nett, da kann man sehen, wie so die Woche gewesen ist.
Bei PV_Total_Monat sind dann die Wochenbalken alle aufeinandergestapelt.

Was hättest Du da noch für Ideen? Oder natürlich auch jeder andere, der hier mit liest ;-)

Die Werte in der LogDb für das Diagramm sind noch zusätzlich durch DbRep direkt in der Datenbank erzeugt worden und kommen nicht vom Plenticore. In den Plenticore Statistiken werden keine Wochen Werte geliefert, aber das kann ja alles die SQL Datenbank.

Gruß
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

Zitat von: Mumpitz am 27 August 2020, 09:57:15
Jetzt geht's an meine persönliche Dokumentation sowie an die Umsetzung der Visualisierung ins FTUI (Thema waf  8))
Würdest Du mir bitte dann Deine Dokumentation mit den besonderen Erlebnissen als PN zusenden?
Ich wollte daraus auch noch ein WIKI machen und jemand der es schon mal nachgebaut hat hat ja einen anderen Blickwinkel.
Dann könnte ich direkt erkennen, wo die Schwachstellen bei meiner Erklärung sind.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Mumpitz

Zitat von: ch.eick am 27 August 2020, 11:32:29
Würdest Du mir bitte dann Deine Dokumentation mit den besonderen Erlebnissen als PN zusenden?
Ich wollte daraus auch noch ein WIKI machen und jemand der es schon mal nachgebaut hat hat ja einen anderen Blickwinkel.
Dann könnte ich direkt erkennen, wo die Schwachstellen bei meiner Erklärung sind.

Mache ich, mal schauen wer schneller ist :-)

ch.eick

Zitat von: Mumpitz am 27 August 2020, 14:24:13
Mache ich, mal schauen wer schneller ist :-)
Erster :-)

2020.08.27 - Es wurde nun eine Wiki Seite begonnen Kostal Plenticore 10 Plus

Aber natürlich noch nicht bis zum Ende alles drin....
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

Sooo, ab jetzt ist das Wiki die erste Quelle der Wahl!
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Mumpitz


Heute ist es leider soweit, das erste mal seit Inbetriebnahme meiner PV Anlage vor 2 Wochen ist mein BYD leer und wir müssen Strom aus dem Netz beziehen. Das bringt natürlich mit sich, dass die Autark und Eigenverbrauchsquote auf 0 abgesackt ist. Das mag offenbar die Berechnung gar nicht. Im Dum.Energy dummy wie auch im Log diese Fehlermeldung:

Gibt es einen Spezialisten der das beheben kann?

2020.08.30 08:50:00 1: Error evaluating Dum.Energy userReading SelfConsumptionQuote: Illegal division by zero at (eval 338122) line 1

ch.eick

#27
Zitat von: Mumpitz am 30 August 2020, 09:25:23
Heute ist es leider soweit, das erste mal seit Inbetriebnahme meiner PV Anlage vor 2 Wochen ist mein BYD leer und wir müssen Strom aus dem Netz beziehen. Das bringt natürlich mit sich, dass die Autark und Eigenverbrauchsquote auf 0 abgesackt ist. Das mag offenbar die Berechnung gar nicht. Im Dum.Energy dummy wie auch im Log diese Fehlermeldung:

Gibt es einen Spezialisten der das beheben kann?

2020.08.30 08:50:00 1: Error evaluating Dum.Energy userReading SelfConsumptionQuote: Illegal division by zero at (eval 338122) line 1
Ich schau es mir mal an.
EDIT: Bitte tausche im userreading die Zeile für SelfConsumptionQuote aus

SelfConsumptionQuote { my $y = ReadingsVal("PV_Anlage_1","Total_AC_active_power", 0) ;; $y <= 0 ? $y = 1 : $y = $y ;; my $x = round((ReadingsVal("PV_Anlage_1","Home_own_consumption_from_PV", "0") + ReadingsVal("PV_Anlage_1","Home_own_consumption_from_battery","0")) / $y * 100 ,0) ;; $x > 100 ?  $x = 100:$x = $x ;; $x }


Du könntest schon mal die Doku im Wiki lesen, da sich jetzt auch Bilder drin :-)
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Mumpitz

Hallo

Worüber ich mir immernoch den Kopf zerbreche ist der Betrag der erzeugten Leistung. Wenn ich die FHEM Werte und die Werte aus dem KOSTAL Portal vergleiche fehlen das ziemlich genau 10kWh.

Erzeugte Leistung gemäss FHEM heute: 19.12kWh
Erzeugte Leistung gemäss Kostal Portal: 29.5 kWh.

Da die Batterie heute morgen völlig leer war, also bis auf den SOC 10% (ca. 1kWh). Da es sich beim Speicher um einen BYD 10.3 handelt, wäre das ziemlich genau der Betrag welcher mir fehlt...

Nur, wie kann ich diesen in FHEM berechnen? Ich kriegs nicht raus :-(

Mumpitz

Zitat von: ch.eick am 30 August 2020, 12:59:05
Ich schau es mir mal an.
EDIT: Bitte tausche im userreading die Zeile für SelfConsumptionQuote aus

SelfConsumptionQuote { my $y = ReadingsVal("PV_Anlage_1","Total_AC_active_power", 0) ;; $y <= 0 ? $y = 1 : $y = $y ;; my $x = round((ReadingsVal("PV_Anlage_1","Home_own_consumption_from_PV", "0") + ReadingsVal("PV_Anlage_1","Home_own_consumption_from_battery","0")) / $y * 100 ,0) ;; $x > 100 ?  $x = 100:$x = $x ;; $x }


Es hat funktioniert. Der selbe Fehler kommt übrigens auch bei der Autark Quote

Error evaluating Dum.Energy userReading AutarkyQuote: Illegal division by zero at (eval 578554) line 2.