mit Zahlen aus String rechnen

Allgemeine Fragen rund um die "Smart Home" Hardware/Komponenten

Moderatoren: seppy, udo1toni

oh73
Beiträge: 286
Registriert: 7. Mär 2021 14:49
Answers: 1

mit Zahlen aus String rechnen

Beitrag von oh73 »

Hallo,

ich habe meine Pv-Anlage um einen PV-Speicher erweitert.
deswegen musste ich auch meinen Wechselrichter gegen einen Hybrid Wechselrichter tauschen (Goodwe GW10K-ET).

jetzt bin ich am Daten auslesen, für openhab gibt es ja ein SEMS Binding dafür, bringt mir aber nicht alle Werte!

deshalb rufe ich die Daten mit Hilfe eines sh Script ab, erhalte da einen Json String mit sehr vielen Daten.

mit JSONPATH bekomme ich vieles schon richtig hin,
nur hänge ich im Moment bisschen fest, da mir einige Werte als String geliefert werden und ich den auseinander nehmen und damit rechnen muss.

Beispiel:
"pv_input_2": "189.9V/0.7A",
"pv_input_1": "250.3V/1.3A",

mit

Code: Alles auswählen

var pv_input_2 = transform("JSONPATH", "$.inverter[0].pv_input_2", returngoodwe)
logInfo("Inverter"," Inverter A  (pv_input_2): "+pv_input_2)
erhalte ich einen String mit "189.9V/0.7A"

jetzt müsste ich ja die 189,9V mit 0.7A malnehmen um die Watt zu erhalten.

weiß da jemand eine einfache Lösung ?
OH 4.0.3 auf HP 26o G1 Dm Mini Pc mit MX_Linux

Benutzeravatar
udo1toni
Beiträge: 13988
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: mit Zahlen aus String rechnen

Beitrag von udo1toni »

Wenn Du schon ein Shellscript nutzt, wäre es ja das naheliegndste, das Script entsprechend zu pimpen :)

Du kannst aber den String auch in openHAB zerlegen, dafür brauchst Du dann halt eine Rule, auf die Du komplett verzichten könntest, wen Du das Shell Script passend umschreibst.
Aber so als Ansatz:

Code: Alles auswählen

val pv_input_2 = transform("JSONPATH", "$.inverter[0].pv_input_2", returngoodwe)
val nPV2V      = Float.parseFloat(pv_input_2.split("/").get(0))
val nPV2A      = Float.parseFloat(pv_input_2.split("/").get(1))
logInfo("inverter","Inverter A pv_input_2: {} ({} V / {} A)", pv_input_2, nPV2V, nPV2A)
sollte zu diesem Output führen:

Code: Alles auswählen

Inverter A pv_input_2: 189.9V/0.7A (189.9 V / 0.7 A)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

oh73
Beiträge: 286
Registriert: 7. Mär 2021 14:49
Answers: 1

Re: mit Zahlen aus String rechnen

Beitrag von oh73 »

Super,

ich wusste das du das besser als ich kannst!

Danke!

hab zwar noch andere Probleme, da einfach zu viele Werte kommen und ich die noch nicht richtig zu ordnen kann.

so viele Werte aber das was ich will finde ich noch nicht,

zB. die getrennte Werte für Ost und West Seite, bei dem SMA Wechselrichter war das einfacher, Inverter A und Inverter B
aber hier finde ich nichts in der Richtung!
OH 4.0.3 auf HP 26o G1 Dm Mini Pc mit MX_Linux

Benutzeravatar
udo1toni
Beiträge: 13988
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: mit Zahlen aus String rechnen

Beitrag von udo1toni »

Wie sieht denn das komplette JSON aus, welches vom Script geliefert wird? Wie sieht das Script selbst aus?
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

oh73
Beiträge: 286
Registriert: 7. Mär 2021 14:49
Answers: 1

Re: mit Zahlen aus String rechnen

Beitrag von oh73 »

das Script ist kein Problem,

Code: Alles auswählen

#!/bin/bash

USERNAME="xxxxxxxxxx"

PASSWORD=“xxxxxxxxxx”

RESULT=$(curl https://www.semsportal.com/api/v2/Common/CrossLogin --silent --header "Content-Type: application/json" --header "Connect: keep-alive" --header "User-Agent: PVMaster/2.1.0 (iPhone; iOS 13.0; Scale/2.00)" --header "Accept-Language: en;q=1" --header "Token: {\"version\":\"v2.1.0\",\"client\":\"ios\",\"language\":\"en\"}" --data-binary "{\"account\":\"XXXXXXXXXXX\",\"pwd\":\"XXXXXXX\"}")

#echo "$RESULT" '\n'
HEADER=$(echo "$RESULT"|jq ".data"|tr '\n' ' ')

#RETURN=$(curl https://www.semsportal.com/api/v2/PowerStation/GetMonitorDetailByPowerstationId --silent --header "Content-Type: application/json" --header "Accept: */*" --header "User-Agent: PVMaster/2.1.0 (iPhone; iOS 13.0; Scale/2.00)" --header "Accept-Language: DE;q=1" --header 'Token: '"$HEADER" --data-binary "{\"powerStationId\":\"6190701b-1f47-41b9-a44c-07838e38a183""\"}")

RETURN=$(curl https://www.semsportal.com/api/v2/PowerStation/GetMonitorDetailByPowerstationId --silent --header "Content-Type: application/json" --header "Accept: */*" --header "User-Agent: PVMaster/2.1.0 (iPhone; iOS 13.0; Scale/2.00)" --header "Accept-Language: DE;q=1" --header 'Token: '"$HEADER" --data-binary "{\"powerStationId\":\"671e4710-ac79-4e6a-9a9d-b4ea25c91023""\"}")

#echo “$RETURN” | jq “[.data.inverter[] | {inverter: .invert_full.name, kwday: .invert_full.eday, power: .invert_full.pac}]”
echo "$RETURN" | jq ".data"

#echo "$RETURN" > /var/www/html/goodwe_return.json
das Ergebnis , ein json Script ist über 1300 Zeilen lang, weiß nicht ob ich das hier so einfach rein stellen kann ?
OH 4.0.3 auf HP 26o G1 Dm Mini Pc mit MX_Linux

Benutzeravatar
udo1toni
Beiträge: 13988
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: mit Zahlen aus String rechnen

Beitrag von udo1toni »

Ich hab mal account und pwd unkenntlich gemacht, keine Ahnung, ob das "echte" Daten waren oder nicht...

Unterm Strich kommen die Daten aber schon genau in der Form an, da lohnt es tatsächlich nicht, das im Script auseinander zu nehmen.

Schau mal, ob Du das json als gezippte Datei hochladen kannst, dann können wir uns an die gesuchten Werte herantasten :)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

oh73
Beiträge: 286
Registriert: 7. Mär 2021 14:49
Answers: 1

Re: mit Zahlen aus String rechnen

Beitrag von oh73 »

hab ich Dummkopf vergessen das die Daten von mir 2 x drin waren?

mit der zip Datei mal als Dateianhang versuchen,
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
OH 4.0.3 auf HP 26o G1 Dm Mini Pc mit MX_Linux

Benutzeravatar
udo1toni
Beiträge: 13988
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: mit Zahlen aus String rechnen

Beitrag von udo1toni »

Ja, das ist eine ordentliche Menge an Daten... Incl. Wettervorhersage, das wäre schon mal spannend.
Ansonsten gibt es unter dict zwei Knoten left und right, die z.B. mutmaßlich die Zelltemperatur (innerTemp), die abgegebene Leistung und Spannung und auch den Batteriezustand widerspiegeln.
Die Informationen stehen aber auch noch mal als einzelne Datenpunkte zur Verfügung, da müsste man halt im Zweifel genau schauen, wie sich die Daten unterscheiden, oder ob sie sich jemals unterscheiden...
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

oh73
Beiträge: 286
Registriert: 7. Mär 2021 14:49
Answers: 1

Re: mit Zahlen aus String rechnen

Beitrag von oh73 »

bei left und right kann ich nichts brauchbares finden.

hab aber jetzt festgestellt den String auseinander nehmen brauch ich nicht, die Werte gibt es auch als Zahl einzeln unter vpv1 und ipv1, vpv2 und ipv2.

muss ich mich Stück für Stück durch kämpfen!

ps. Anregung zu dem Script kam aus dem englischen Forum
https://community.openhab.org/t/connect ... b/85480/17
OH 4.0.3 auf HP 26o G1 Dm Mini Pc mit MX_Linux

Benutzeravatar
udo1toni
Beiträge: 13988
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: mit Zahlen aus String rechnen

Beitrag von udo1toni »

Ah, ja.
Das Script holt sich im ersten Schritt einen Token und nutzt diesen dann zum Anmelden.
Vermutlich ist dieser Token nur kurz nutzbar, das müsste man in der Beschreibung zur API finden.
Falls man den Token auch einmalig anlegen kann, wäre das natürlich die einfachere Variante, weil dann nur ein Aufruf zum Datenabruf notwendig ist.
Mit einem fixen Token könnte man den Aufruf auch direkt über das http Binding erledigen (womit man dann mit geringerem Aufwand die Werte ohne Rule in die diskreten Items bekäme)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten