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

rabehd

Zitat von: betateilchen am 09 März 2026, 14:06:21Bei mir funktioniert Peters Code einwandfrei, wenn ich in in das große Eingabefeld hinter dem + Zeichen paste.
bei mir nicht, aber egal, für mich gelöst und anschließend angepasst.
Auch funktionierende Lösungen kann man hinterfragen.

Prof. Dr. Peter Henning

Zitat von: rabehd am 09 März 2026, 13:24:53Das meldet mir einen Syntaxfehler.
Wundert mich etwas. Wenn man den Code in die Kommandozeile eingeben will, statt in das textField-long Editierfeld, muss man die Semikola verdoppeln. Aber eben auch im "for"-Befehl.
{for(my $i=0;$i<10;$i++){Log 1,"xyz"}}liefert einen Fehler
{for(my $i=0;;$i<10;;$i++){Log 1,"xyz"}}wird ausgeführt.

LG

pah

Prof. Dr. Peter Henning

Zitat von: betateilchen am 08 März 2026, 12:48:02Die API liefert hier (natürlich ohne gesetzte Filter) genau eine von drei vorhandenen öffentlichen Ladesäulen.
So richtig hilfreich scheint das nicht zu sein.
Stimmt, das Dingens kennt nicht die Hälfte der Ladestationen.

LG

pah

rabehd

Ich habe es nicht in die Kommandozeile eingegeben, sondern in das Feld mit dem Plus-Zeichen.
Zitat von: betateilchen am 09 März 2026, 14:06:21, wenn ich in in das große Eingabefeld hinter dem + Zeichen
Was meinst Du damit? Die Kommandozeile? Haben ich Dich mißverstanden?
Auch funktionierende Lösungen kann man hinterfragen.