Ladestation (öffentlich) Zustandabfrage per HTTPMOD

Begonnen von Sany, 20 Dezember 2025, 13:33:45

Vorheriges Thema - Nächstes Thema

betateilchen

Zitat von: Prof. Dr. Peter Henning am 08 März 2026, 12:57:16Im Prinzip müsste es möglich sein, das "count()" mehrstufig anzulegen.

Das ist die Sache mit den verschachtelten arrays...

Noch cooler wäre aber sowas:

jsonPath('$.[chargePoints].[connectors]')
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Prof. Dr. Peter Henning

Immerhin geht das hier:
multi(jsonPath('$.chargePoints.[*]'),concat('test_',count()),concat(property('state.value'),',  ',property('connectors.0.maxPowerInKw'),'kW, ',property('connectors.0.tariffInfo.tariffGroup'),', ',property('connectors.0.tariffInfo.tariffDescription')))
Man könnte also tatsächlich für jeden Ladepunkt eine schöne Zeile machen. Heute aber nicht mehr, hier ist gleich Wahlparty.

Ach ja, noch etwas: Zumindest in Vahrn sind das Doppelsäulen mit je ZWEI Kabeln, jedes wird als eigener Connector angezeigt. Wir können also ziemlich sicher davon ausgehen, dass das connectors-array nur eine Rolle spielt, wenn wirklich an einem Ladepunkt unterschiedliche Stecker angeboten werden.

LG

pah

Prof. Dr. Peter Henning

Hier die Tabelle:attr Ladestation_xxx readingList single(jsonPath('$.additionalInfo'),'location','?') single(jsonPath('$.numberOfChargePoints'),'cports') single(jsonPath('$.availableChargePoints'),'cports_avail')  single(jsonPath('$.unknownStateChargePoints'),'cports_unknown') multi(jsonPath('$.chargePoints.[*]'),concat('port_',count()),concat(property('state.value'),'|',property('connectors.0.maxPowerInKw'),'|',property('connectors.0.tariffInfo.tariffGroup'),'|',property('connectors.0.tariffInfo.tariffDescription')))

attr Ladestation_xxx stateFormat {my $n=ReadingsVal("$name","cports",0);;my $ret="<table border=\"1\"><tr><td>Status</td><td>Leistung</td><td>Typ</td><td>Preis ab</td></tr>";;for(my $i=0;;$i<$n;;$i++){my @s=split('\|',ReadingsVal("$name","port_$i","UNKNOWN|||"));;my $t1=($s[0]=~/^A/)?"frei":(($s[0]=~/^O/)?"belegt":"?");;my $t2=$s[1].'kW';;my $t3=($s[2]=~/^D/)?"DC":(($s[2]=~/^A/)?"AC":"?");;$s[3]=~/(\d,\d\d) €/;;my $t4="$1  €";;$ret.="<tr><td>$t1</td><td>$t2</td><td>$t3</td><td>$t4</td></tr>\n"};;$ret.="</table>";;$ret}

LG

pah

rabehd

Danke für die Arbeit!

{my $n=ReadingsVal("$name","cports",0);;my $ret="<table border=\"1\"><tr><td>Status</td><td>Leistung</td><td>Typ</td><td>Preis ab</td></tr>";;for(my $i=0;;$i<$n;;$i++){my @s=split('\|',ReadingsVal("$name","port_$i","UNKNOWN|||"));;my $t1=($s[0]=~/^A/)?"frei":(($s[0]=~/^O/)?"belegt":"?");;my $t2=$s[1].'kW';;my $t3=($s[2]=~/^D/)?"DC":(($s[2]=~/^A/)?"AC":"?");;$s[3]=~/(\d,\d\d) €/;;my $t4="$1  €";;$ret.="<tr><td>$t1</td><td>$t2</td><td>$t3</td><td>$t4</td></tr>\n"};;$ret.="</table>";;$ret}Das meldet mir einen Syntaxfehler.

{my $n=ReadingsVal("$name","cports",0);;my $ret="<table border=\"1\"><tr><td>Status</td><td>Leistung</td><td>Typ</td><td>Preis ab</td></tr>";;for(my $i=0;$i<$n;$i++){my @s=split('\|',ReadingsVal("$name","port_$i","UNKNOWN|||"));;my $t1=($s[0]=~/^A/)?"frei":(($s[0]=~/^O/)?"belegt":"?");;my $t2=$s[1].'kW';;my $t3=($s[2]=~/^D/)?"DC":(($s[2]=~/^A/)?"AC":"?");;$s[3]=~/(\d,\d\d) €/;;my $t4="$1  €";;$ret.="<tr><td>$t1</td><td>$t2</td><td>$t3</td><td>$t4</td></tr>\n"};;$ret.="</table>";;$ret}So funktioniert es

Auch funktionierende Lösungen kann man hinterfragen.

betateilchen

#19
Zitat von: rabehd am 09 März 2026, 13:24:53Danke für die Arbeit!
...
Das meldet mir einen Syntaxfehler.

Vermutlich kommt es darauf an, wo Du den Code eingibst und ob dort die Anzahl der Semikolon passt.
Bei mir funktioniert Peters Code einwandfrei, wenn ich in in das große Eingabefeld hinter dem + Zeichen paste.
Welchen Syntaxfehler bekommst Du denn?

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Prof. Dr. Peter Henning

Zitat von: betateilchen am 09 März 2026, 14:06:21Vermutlich kommt es darauf an, wo Du den Code eingibst und ob dort die Anzahl der Semikolon passt.
Sehe ich auch so.

LG

pah