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.

betateilchen

Zitat von: rabehd am 09 März 2026, 16:59:09Ich 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?


Siehe Anhang.

-----------------------
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

#26
Das "Pluszeichen" gibt es nicht in jedem Style (bei mir z.B. auch nicht). Ist irgendwann in Style f18 als Erweiterung hinzugekommen, bläst die Kommandozeile zu einem Texteingabefeld auf. Dass sich das dann offenbar etwas anders verhält, als die einzelne Zeile, ist unschön.

Bei dem EnBW-API frage ich mich, ob man nicht einen bestimmten Kartenausschnitt an Hand der Koordinaten holen und alle darin befindlichen Ladestationen ausgraben kann.

LG

pah

betateilchen

#27
Da die Eingabe ja nun in allen Fällen "irgendwie" erfolgreich verlaufen ist, wenn man die Anzahl der Strichpunkte entsprechend des Eingabeortes wählt, ist der Punkt jetzt für mich durch.


Zitat von: Prof. Dr. Peter Henning am 10 März 2026, 08:19:31Bei dem EnBW-API frage ich mich, ob man nicht einen bestimmten Kartenausschnitt an Hand der Koordinaten holen und alle darin befindlichen Ladestationen ausgraben kann.

Das mache ich in der TomTom-api so. Entweder zwei Ecken eines Kartenausschnitts angeben oder einen Standort und einen Radius. Allerdings ist diese Abfrage im eigenen Code nicht kostenfrei möglich. Man kann aber die Abfrage auf der Webseite mit den entsprechenden Werten "testen" und bekommt dann die echten Daten mit den passenden Ladestationen inkl. deren ID zurück.

{
  "summary": {
    "numResults": 3,
    "totalResults": 3
  },
  "results": [
    {
      "id": "d2362dd8-982a-4deb-81e7-24316535b510",
      "name": "EWE Go",
      "position": {
        "lat": 53.5227498,
        "lon": 9.3983364
      },
      "chargingStations": [
        {
          "id": "68190014-a652-11ed-92df-42010aa40fc0",
          "chargingPoints": [
            {
              "capabilities": [
                "RemoteStartStopCapable",
                "RfidReader"
              ],
              "connectors": [
                {
                  "id": "2",
                  "currentA": 32,
                  "currentType": "AC3",
                  "ratedPowerKW": 22,
                  "type": "IEC62196Type2Outlet",
                  "voltageV": 230
                }
              ],
              "id": "DE*2GO*E0727*2",
              "evseId": "DE*2GO*E0727*2",
              "physicalReference": "DE2GOE07272",
              "status": "Available"
            },
            {
              "capabilities": [
                "RemoteStartStopCapable",
                "RfidReader"
              ],
              "connectors": [
                {
                  "id": "1",
                  "currentA": 32,
                  "currentType": "AC3",
                  "ratedPowerKW": 22,
                  "type": "IEC62196Type2Outlet",
                  "voltageV": 230
                }
              ],
              "id": "DE*2GO*E0727*1",
              "evseId": "DE*2GO*E0727*1",
              "physicalReference": "DE2GOE07271",
              "status": "Occupied"
            }
          ]
        }
      ],
      "address": {
        "countryCode": "DE",
        "countryCodeISO3": "DEU",
        "country": "Deutschland",
        "countrySubdivision": "Niedersachsen",
        "countrySubdivisionName": "Niedersachsen",
        "countrySubdivisionCode": "NI",
        "countrySecondarySubdivision": "Stade",
        "freeformAddress": "Schwingestraße 1, 21717 Fredenbeck",
        "localName": "Fredenbeck",
        "municipality": "Fredenbeck",
        "municipalitySubdivision": "Klein Fredenbeck",
        "postalCode": "21717",
        "streetNumber": "1",
        "streetName": "Schwingestraße"
      },
      "phone": "+49 441 36152300",
      "openingHours": {
        "mode": "nextSevenDays",
        "timeRanges": [
          {
            "startTime": {
              "date": "2026-02-25",
              "hour": 0,
              "minute": 0
            },
            "endTime": {
              "date": "2026-03-04",
              "hour": 0,
              "minute": 0
            }
          }
        ]
      },
      "timeZone": {
        "ianaId": "Europe/Berlin"
      },
      "brands": [
        {
          "id": "EGGW6FYY",
          "name": "EWE Go"
        }
      ],
      "paymentOptions": [
        {
          "method": "subscription",
          "brands": [
            {
              "id": "VI653JTD",
              "name": "Virta"
            },
            {
              "id": "DCAVE45G",
              "name": "Digital Charging Solutions - ChargeNow Laadkaart"
            },
            {
              "id": "PL26DTVW",
              "name": "Plugsurfing"
            },
            {
              "id": "BCWLNYNJ",
              "name": "Blink Charging Mobile App"
            },
            {
              "id": "FPMN6H7V",
              "name": "Freshmile Pass"
            },
            {
              "id": "ZUVKF4UX",
              "name": "Zunder"
            },
            {
              "id": "CCFDRTS3",
              "name": "Corpay Card"
            },
            {
              "id": "EFKJYRY5",
              "name": "E-Flux"
            },
            {
              "id": "MEZPINNS",
              "name": "Maingau Energie - EinfachStromLaden"
            },
            {
              "id": "ED2K344F",
              "name": "EDI - D'Ieteren Energy"
            },
            {
              "id": "TEFNCFWO",
              "name": "Tap Electric"
            },
            {
              "id": "AVJP4LQI",
              "name": "AVIA"
            },
            {
              "id": "CPYSV722",
              "name": "Chargemap Pass"
            },
            {
              "id": "EC",
              "name": "eSolutions Charging",
              "restricted": true
            },
            {
              "id": "SR6TVFLW",
              "name": "Shell Recharge"
            },
            {
              "id": "ECPJT2IC",
              "name": "Eneco Charging Pass"
            },
            {
              "id": "EG7KPQFB",
              "name": "EWE Go"
            },
            {
              "id": "EMNNC7AA",
              "name": "EnBW mobility+"
            },
            {
              "id": "CHLYKLEE",
              "name": "ChargePoint"
            },
            {
              "id": "OEXM3ZBP",
              "name": "Octopus Electroverse"
            },
            {
              "id": "MY",
              "name": "MyEasyCharge",
              "restricted": true
            },
            {
              "id": "STS6RMDI",
              "name": "stations-e"
            },
            {
              "id": "COLJRQID",
              "name": "ConnectNed"
            },
            {
              "id": "ECFNCTW6",
              "name": "Ecotap"
            },
            {
              "id": "MOW4N2XL",
              "name": "Mobiflow"
            },
            {
              "id": "TCIJ4G2V",
              "name": "Travel Card - Travelcard Laadpas"
            },
            {
              "id": "LC7CMLML",
              "name": "LOGPAY - CHARGE&FUEL CARD"
            },
            {
              "id": "ECK67WYK",
              "name": "EVBox Charge"
            },
            {
              "id": "CEEZIX3N",
              "name": "CenEnergy"
            },
            {
              "id": "DMB3NZFY",
              "name": "DKV Mobility - DKV CARD +CHARGE"
            },
            {
              "id": "SCIIWIQC",
              "name": "Smart Charge (AU)"
            },
            {
              "id": "GJKYXQXS",
              "name": "GP Joule Connect GmbH"
            }
          ]
        }
      ],
      "nearbyPois": [
        {
          "categoryId": "7332"
        },
        {
          "categoryId": "7314"
        },
        {
          "categoryId": "7315"
        },
        {
          "categoryId": "9361"
        }
      ],
      "accessType": "Public",
      "vehicleConstraint": {
        "types": [
          "Truck",
          "Car"
        ],
        "categories": [
          "N1"
        ]
      }
    },



    {
      "id": "0fd714cf-50b7-4d7a-9a5e-f6dfce49cb53",
      "name": "Volkswagen Group",
      "position": {
        "lat": 53.5234535,
        "lon": 9.4031232
      },
      "chargingStations": [
        {
          "id": "f336a528-7690-11eb-a714-42010a840003",
          "chargingPoints": [
            {
              "capabilities": [
                "RemoteStartStopCapable",
                "RfidReader"
              ],
              "connectors": [
                {
                  "id": "DE*GCE*EDCCM206042_0",
                  "currentA": 55,
                  "currentType": "DC",
                  "ratedPowerKW": 22,
                  "type": "IEC62196Type2CCS",
                  "voltageV": 500
                }
              ],
              "id": "DE*GCE*EDCCM206042",
              "evseId": "DE*GCE*EDCCM206042",
              "status": "Available"
            },
            {
              "capabilities": [
                "RemoteStartStopCapable",
                "RfidReader"
              ],
              "connectors": [
                {
                  "id": "DE*GCE*EACCM206041_0",
                  "currentA": 16,
                  "currentType": "AC3",
                  "ratedPowerKW": 11,
                  "type": "IEC62196Type2Outlet",
                  "voltageV": 230
                }
              ],
              "id": "DE*GCE*EACCM206041",
              "evseId": "DE*GCE*EACCM206041",
              "status": "Available"
            }
          ]
        }
      ],
      "address": {
        "countryCode": "DE",
        "countryCodeISO3": "DEU",
        "country": "Deutschland",
        "countrySubdivision": "Niedersachsen",
        "countrySubdivisionName": "Niedersachsen",
        "countrySubdivisionCode": "NI",
        "countrySecondarySubdivision": "Stade",
        "freeformAddress": "Hauptstraße 22, 21717 Fredenbeck",
        "localName": "Fredenbeck",
        "municipality": "Fredenbeck",
        "postalCode": "21717",
        "streetNumber": "22",
        "streetName": "Hauptstraße"
      },
      "phone": "+49 800 43347328",
      "openingHours": {
        "mode": "nextSevenDays",
        "timeRanges": [
          {
            "startTime": {
              "date": "2026-02-25",
              "hour": 0,
              "minute": 0
            },
            "endTime": {
              "date": "2026-03-04",
              "hour": 0,
              "minute": 0
            }
          }
        ]
      },
      "timeZone": {
        "ianaId": "Europe/Berlin"
      },
      "brands": [
        {
          "id": "VO2DWRZE",
          "name": "Volkswagen"
        }
      ],
      "paymentOptions": [
        {
          "method": "subscription",
          "brands": [
            {
              "id": "DEGFMIOO",
              "name": "Duferco Energia - D-Mobility"
            },
            {
              "id": "VI653JTD",
              "name": "Virta"
            },
            {
              "id": "DCAVE45G",
              "name": "Digital Charging Solutions - ChargeNow Laadkaart"
            },
            {
              "id": "PL26DTVW",
              "name": "Plugsurfing"
            },
            {
              "id": "BCWLNYNJ",
              "name": "Blink Charging Mobile App"
            },
            {
              "id": "FPMN6H7V",
              "name": "Freshmile Pass"
            },
            {
              "id": "CCFDRTS3",
              "name": "Corpay Card"
            },
            {
              "id": "MEZPINNS",
              "name": "Maingau Energie - EinfachStromLaden"
            },
            {
              "id": "QEJLA5RN",
              "name": "Q8 Electric App"
            },
            {
              "id": "ED2K344F",
              "name": "EDI - D'Ieteren Energy"
            },
            {
              "id": "TEFNCFWO",
              "name": "Tap Electric"
            },
            {
              "id": "AVJP4LQI",
              "name": "AVIA"
            },
            {
              "id": "CPYSV722",
              "name": "Chargemap Pass"
            },
            {
              "id": "EC",
              "name": "eSolutions Charging",
              "restricted": true
            },
            {
              "id": "SR6TVFLW",
              "name": "Shell Recharge"
            },
            {
              "id": "ECPJT2IC",
              "name": "Eneco Charging Pass"
            },
            {
              "id": "EG7KPQFB",
              "name": "EWE Go"
            },
            {
              "id": "EMNNC7AA",
              "name": "EnBW mobility+"
            },
            {
              "id": "CHLYKLEE",
              "name": "ChargePoint"
            },
            {
              "id": "NCXAAZIJ",
              "name": "NEXTCHARGE card"
            },
            {
              "id": "OEXM3ZBP",
              "name": "Octopus Electroverse"
            },
            {
              "id": "EM5LPXEB",
              "name": "emyon"
            },
            {
              "id": "MY",
              "name": "MyEasyCharge",
              "restricted": true
            },
            {
              "id": "COLJRQID",
              "name": "ConnectNed"
            },
            {
              "id": "ECFNCTW6",
              "name": "Ecotap"
            },
            {
              "id": "MOW4N2XL",
              "name": "Mobiflow"
            },
            {
              "id": "TCIJ4G2V",
              "name": "Travel Card - Travelcard Laadpas"
            },
            {
              "id": "LC7CMLML",
              "name": "LOGPAY - CHARGE&FUEL CARD"
            },
            {
              "id": "CEEZIX3N",
              "name": "CenEnergy"
            },
            {
              "id": "DMB3NZFY",
              "name": "DKV Mobility - DKV CARD +CHARGE"
            },
            {
              "id": "SCIIWIQC",
              "name": "Smart Charge (AU)"
            },
            {
              "id": "GJKYXQXS",
              "name": "GP Joule Connect GmbH"
            }
          ]
        }
      ],
      "nearbyPois": [
        {
          "categoryId": "9376"
        },
        {
          "categoryId": "7315"
        }
      ],
      "accessType": "Public",
      "vehicleConstraint": {
        "types": [
          "Truck",
          "Car"
        ],
        "categories": [
          "N1",
          "N2"
        ]
      }
    },
    {
      "id": "f18ee928-83e9-4c49-8b69-423317ad0d2b",
      "name": "EnBW",
      "position": {
        "lat": 53.525,
        "lon": 9.4151001
      },
      "chargingStations": [
        {
          "id": "2cc06bd6-7c3b-11ef-bd65-42010aa40043",
          "chargingPoints": [
            {
              "capabilities": [
                "CreditCardPayable",
                "RemoteStartStopCapable",
                "RfidReader"
              ],
              "connectors": [
                {
                  "id": "IEC_62196_T2_COMBO",
                  "currentA": 188,
                  "currentType": "DC",
                  "ratedPowerKW": 150,
                  "type": "IEC62196Type2CCS",
                  "voltageV": 920
                }
              ],
              "id": "DE*EBW*E910089*2",
              "evseId": "DE*EBW*E910089*2",
              "physicalReference": "910089",
              "status": "Available"
            },
            {
              "capabilities": [
                "CreditCardPayable",
                "RemoteStartStopCapable",
                "RfidReader"
              ],
              "connectors": [
                {
                  "id": "IEC_62196_T2_COMBO",
                  "currentA": 188,
                  "currentType": "DC",
                  "ratedPowerKW": 150,
                  "type": "IEC62196Type2CCS",
                  "voltageV": 920
                }
              ],
              "id": "DE*EBW*E910089*1",
              "evseId": "DE*EBW*E910089*1",
              "physicalReference": "910089",
              "status": "Available"
            }
          ]
        }
      ],
      "address": {
        "countryCode": "DE",
        "countryCodeISO3": "DEU",
        "country": "Deutschland",
        "countrySubdivision": "Niedersachsen",
        "countrySubdivisionName": "Niedersachsen",
        "countrySubdivisionCode": "NI",
        "countrySecondarySubdivision": "Stade",
        "freeformAddress": "Hauptstraße 66, 21717 Fredenbeck",
        "localName": "Fredenbeck",
        "municipality": "Fredenbeck",
        "municipalitySubdivision": "Groß Fredenbeck",
        "postalCode": "21717",
        "streetNumber": "66",
        "streetName": "Hauptstraße"
      },
      "phone": "+49 721 6300",
      "openingHours": {
        "mode": "nextSevenDays",
        "timeRanges": [
          {
            "startTime": {
              "date": "2026-02-25",
              "hour": 0,
              "minute": 0
            },
            "endTime": {
              "date": "2026-03-04",
              "hour": 0,
              "minute": 0
            }
          }
        ]
      },
      "timeZone": {
        "ianaId": "Europe/Berlin"
      },
      "brands": [
        {
          "id": "ENXH5LT7",
          "name": "EnBW"
        }
      ],
      "paymentOptions": [
        {
          "method": "subscription",
          "brands": [
            {
              "id": "DEGFMIOO",
              "name": "Duferco Energia - D-Mobility"
            },
            {
              "id": "VI653JTD",
              "name": "Virta"
            },
            {
              "id": "DCAVE45G",
              "name": "Digital Charging Solutions - ChargeNow Laadkaart"
            },
            {
              "id": "PL26DTVW",
              "name": "Plugsurfing"
            },
            {
              "id": "BCWLNYNJ",
              "name": "Blink Charging Mobile App"
            },
            {
              "id": "FPMN6H7V",
              "name": "Freshmile Pass"
            },
            {
              "id": "ZUVKF4UX",
              "name": "Zunder"
            },
            {
              "id": "CCFDRTS3",
              "name": "Corpay Card"
            },
            {
              "id": "EFKJYRY5",
              "name": "E-Flux"
            },
            {
              "id": "MEZPINNS",
              "name": "Maingau Energie - EinfachStromLaden"
            },
            {
              "id": "ED2K344F",
              "name": "EDI - D'Ieteren Energy"
            },
            {
              "id": "TEFNCFWO",
              "name": "Tap Electric"
            },
            {
              "id": "AVJP4LQI",
              "name": "AVIA"
            },
            {
              "id": "CPYSV722",
              "name": "Chargemap Pass"
            },
            {
              "id": "EC",
              "name": "eSolutions Charging",
              "restricted": true
            },
            {
              "id": "SR6TVFLW",
              "name": "Shell Recharge"
            },
            {
              "id": "ECPJT2IC",
              "name": "Eneco Charging Pass"
            },
            {
              "id": "EG7KPQFB",
              "name": "EWE Go"
            },
            {
              "id": "EMNNC7AA",
              "name": "EnBW mobility+"
            },
            {
              "id": "CHLYKLEE",
              "name": "ChargePoint"
            },
            {
              "id": "OEXM3ZBP",
              "name": "Octopus Electroverse"
            },
            {
              "id": "EM5LPXEB",
              "name": "emyon"
            },
            {
              "id": "MY",
              "name": "MyEasyCharge",
              "restricted": true
            },
            {
              "id": "ENPHAMHL",
              "name": "enviaM"
            },
            {
              "id": "COLJRQID",
              "name": "ConnectNed"
            },
            {
              "id": "ECFNCTW6",
              "name": "Ecotap"
            },
            {
              "id": "MOW4N2XL",
              "name": "Mobiflow"
            },
            {
              "id": "TCIJ4G2V",
              "name": "Travel Card - Travelcard Laadpas"
            },
            {
              "id": "LC7CMLML",
              "name": "LOGPAY - CHARGE&FUEL CARD"
            },
            {
              "id": "ECK67WYK",
              "name": "EVBox Charge"
            },
            {
              "id": "EDKFIOVZ",
              "name": "E.ON Drive"
            },
            {
              "id": "CEEZIX3N",
              "name": "CenEnergy"
            },
            {
              "id": "DMB3NZFY",
              "name": "DKV Mobility - DKV CARD +CHARGE"
            },
            {
              "id": "SCIIWIQC",
              "name": "Smart Charge (AU)"
            },
            {
              "id": "GJKYXQXS",
              "name": "GP Joule Connect GmbH"
            }
          ]
        }
      ],
      "nearbyPois": [
        {
          "categoryId": "7332"
        },
        {
          "categoryId": "7315"
        },
        {
          "categoryId": "9361"
        }
      ],
      "accessType": "Public",
      "vehicleConstraint": {
        "types": [
          "Truck",
          "Car"
        ],
        "categories": [
          "N1",
          "N2"
        ]
      }
    }
  ]
}

Für die drei Regionen, in denen ich regelmäßig nach Ladestationen suche, habe ich das jeweils einmal manuell gemacht und mir so die benötigten IDs der Ladestationen zusammengesammelt, die ich dann in FHEM abfrage.
Die Abfrage einer Ladestation selbst ist dann wieder kostenfrei möglich.

defmod evGotthard_ac JsonMod https://api.tomtom.com/search/2/chargingAvailability.json?chargingAvailability=0fd714cf-50b7-4d7a-9a5e-f6dfce49cb53&connectorSet=IEC62196Type2Outlet&key=[apikey]

liefert:

2026-03-10 08:48:55 chargingAvailability 0fd714cf-50b7-4d7a-9a5e-f6dfce49cb53
2026-03-10 08:48:55 connectors.0.availability.current.available 1
2026-03-10 08:48:55 connectors.0.availability.current.occupied 0
2026-03-10 08:48:55 connectors.0.availability.current.outOfService 0
2026-03-10 08:48:55 connectors.0.availability.current.reserved 0
2026-03-10 08:48:55 connectors.0.availability.current.unknown 0
2026-03-10 08:48:55 connectors.0.availability.perPowerLevel.0.available 1
2026-03-10 08:48:55 connectors.0.availability.perPowerLevel.0.occupied 0
2026-03-10 08:48:55 connectors.0.availability.perPowerLevel.0.outOfService 0
2026-03-10 08:48:55 connectors.0.availability.perPowerLevel.0.powerKW 11
2026-03-10 08:48:55 connectors.0.availability.perPowerLevel.0.reserved 0
2026-03-10 08:48:55 connectors.0.availability.perPowerLevel.0.unknown 0
2026-03-10 08:48:55 connectors.0.total 1
2026-03-10 08:48:55 connectors.0.type IEC62196Type2Outlet


Die beiden an dieser Ladesäule vorhanden ports, einer AC, einer DC, frage ich übrigens separat ab, da in einem kombinierten JSON die Reihenfolge im Array zufällig wäre und ein erhöhter Auswertungsaufwand nötig wäre. Deshalb steckt der Steckertyp schon als Parameter mit in der URL.
-----------------------
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

Es gibt auch noch Open Streetmap. Allerdings zeigen die nicht alle Ladestationen. Visualisierungsoberfläche hier: https://mapcomplete.org/charging_stations.html

LG

pah