AdapterRequests
AdapterRequests copied to clipboard
StromGedacht von TransnetBW
StromGedacht (App auf iOS und Android) zur Verfügung gestellt von TransnetBW. Die Informationen, die bisher in der App verfügbar sind, sollten in IoBroker zur Verfügung stehen, um auf Visualisierungen optisch zu warnen und automatisiert im SmartHome entsprechend Geräte (Wärmepumpen, Ladegeräte, Wallboxen, ...) zu pausieren. Zur API und ob eine API existiert ist derzeit nicht bekannt.
Infos: https://www.stromgedacht.de
Implementierungen in andere SmartHome-Systeme sind nicht bekannt.
Ich habe mir das mal angeschaut. Leider ist das Flutter RE tooling nicht dort wo man es haben wollen würde, weshalb all diese Informationen exklusiv durch angestrengtes auf den output von strings libapp.so starren sowie stumpfes raten entstanden sind.
Folgende Endpunkte konnten identifiziert werden:
https://stromgedacht-prod.azurewebsites.net/api/regions/3/states?from=2023-01-13T00:00:00.000Z&to=2023-01-17T00:00:00.000Z
Der eigentlich relevante Endpunkt. Er antwortet mit einer JSON Payload:
Spoiler (klick mich)
[
{
"dateTime": "2023-01-14T00:00:00Z",
"worstState": 1,
"gridSituationId": null,
"states": [
{
"dateTime": "2023-01-14T00:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-14T01:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-14T02:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-14T03:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-14T04:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-14T05:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-14T06:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-14T07:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-14T08:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-14T09:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-14T10:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-14T11:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-14T12:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-14T13:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-14T14:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-14T15:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-14T16:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-14T17:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-14T18:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-14T19:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-14T20:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-14T21:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-14T22:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-14T23:00:00Z",
"state": 1
}
]
},
{
"dateTime": "2023-01-15T00:00:00Z",
"worstState": 3,
"gridSituationId": null,
"states": [
{
"dateTime": "2023-01-15T00:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-15T01:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-15T02:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-15T03:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-15T04:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-15T05:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-15T06:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-15T07:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-15T08:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-15T09:00:00Z",
"state": 2
},
{
"dateTime": "2023-01-15T10:00:00Z",
"state": 2
},
{
"dateTime": "2023-01-15T11:00:00Z",
"state": 2
},
{
"dateTime": "2023-01-15T12:00:00Z",
"state": 2
},
{
"dateTime": "2023-01-15T13:00:00Z",
"state": 2
},
{
"dateTime": "2023-01-15T14:00:00Z",
"state": 2
},
{
"dateTime": "2023-01-15T15:00:00Z",
"state": 2
},
{
"dateTime": "2023-01-15T16:00:00Z",
"state": 3
},
{
"dateTime": "2023-01-15T17:00:00Z",
"state": 3
},
{
"dateTime": "2023-01-15T18:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-15T19:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-15T20:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-15T21:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-15T22:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-15T23:00:00Z",
"state": 1
}
]
},
{
"dateTime": "2023-01-16T00:00:00Z",
"worstState": 1,
"gridSituationId": null,
"states": [
{
"dateTime": "2023-01-16T00:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-16T01:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-16T02:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-16T03:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-16T04:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-16T05:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-16T06:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-16T07:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-16T08:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-16T09:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-16T10:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-16T11:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-16T12:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-16T13:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-16T14:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-16T15:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-16T16:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-16T17:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-16T18:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-16T19:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-16T20:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-16T21:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-16T22:00:00Z",
"state": 1
},
{
"dateTime": "2023-01-16T23:00:00Z",
"state": 1
}
]
}
]
Daneben gibt es auch noch
https://stromgedacht-prod.azurewebsites.net/api/globalPush
für alles unter dem App Menüpunkt Meldungs-Verlauf
https://stromgedacht-prod.azurewebsites.net/api/stories?languageCode=de
für die Kacheln unten und
https://stromgedacht-prod.azurewebsites.net/api/regions/3
mit generellen Informationen über die ausgewählte Region. Die API ist wohl multi-tenant fähig
Authentifizierung wird nicht benötigt. Keine magischen Header, keine Session o.ä.
Damit das auch so bleibt und sich der Anbieter nicht dazu gezwungen sieht das ganze zu deaktivieren, wäre es sehr wichtig, sorgsam mit der API umzugehen. Hier gilt es, sinnvolle und insbesondere nicht überzogen große Werte für polling-rate und Zeitfenster zu wählen.
Da das ganze sowieso nur forecasting zu sein scheint, dürfte wahrscheinlich ein request alle 24h schon ausreichen.
Folgendes habe ich noch gefunden: Die API der TransnetBW wird also kommen, wann scheint aktuell noch offen zu sein.

Ich habe keine Ahnung wie man einen IoBroker Adapter schreibt, weiß aber, dass es da auch diverse Anleitungen gibt (ich glaube ich habe da auch ein mal ein YT-Video gesehen.
Für einen Prototypen habe ich mit die Daten jetzt mal mit NodeRed gezogen (da bin ich +/- fit drin), angereichert und nach IoBroker geschrieben. Der Flow sieht recht einfach aus:

In IoBroker landen die Werte unter 0_userdata.0.[...] in dieser Form:
Die gelben Einträge werden von NodeRed ergänzt um die "states" für den Nutzer verständlich zu machen
"stateJetzt" zeigt unter "Heute" den Status zur aktuellen Stunde an, "recommendationJetzt" den entsprechenden lesbaren Wert.
Mit dem Wert von "Heute.StateJetzt" kann man seine Verbraucher triggern oder die Optik der Visualisierung anpassen:
- SG-Ready Geräte schalten
- Wallboxen schalten
- Waschmaschinen/Trockner pausieren
- Visu.Theme.Background: state=1 ~> default || state=2 ~> green || state=3 ~> red
- usw.
Für die Entwicklung ist es hilfreich die URL (https://stromgedacht-prod.azurewebsites.net) von stromgedacht-prod auf stromgedacht-dev anzupassen, damit immer eine auswahl an unterschiedlichen States kommt.
Welche Überlegungen haben die anderen hier noch?
Um vorbereitende manuelle Arbeiten rechtzeitig zu erledigen, wie z.B.
- die Waschmaschine/den Wäschetrockner rechtzeitig zu befüllen und auf "Fernstart" zu stellen,
- das E-Auto anzuschließen,
- usw.
kann man sich über ("Heute.WorstState" != 1 OR "Morgen.WorstState" != 1) beim Tageswechsel per Messenger benachrichtigen lassen, dass eine Empfehlung in den nächsten 48 Stunden ansteht.
Die API ist nun wohl verfügbar: https://www.stromgedacht.de/api-info/
Ja, die API ist verfügbar. Funktionsumfang ist überschaubaur. Doku und Beispiele: https://www.stromgedacht.de/api-docs
Berücksichtigt man das jeweilige Datum und gibt man heute am 2023-05-06 im Browser z.B.
https://api.stromgedacht.de/v1/states?zip=70173&from=2023-05-5T00%3A00%3A00%2B02%3A00&to=2023-05-07T23%3A59%3A59%2B02%3A00
ein , dann erhält man ein JSON
{"states":[{"from":"2023-05-05T00:00:00+02:00","to":"2023-05-07T23:59:59+02:00","state":1}]}
Die States sind wie in der App definiert: 1 = grüner Zustand: Normalbetrieb – Du musst nichts weiter tun 2 = gelber Zustand: Verbrauch vorverlegen – Strom jetzt nutzen 3 = oranger Zustand: Verbrauch reduzieren, um Kosten und CO2 zu sparen 4 = roter Zustand: Verbrauch reduzieren, um Strommangel zu verhindern
Hi, bin per Zufall über die Anfrage nach diesem Adapter gestolpert, nachdem ich hiermit schon angefangen habe: https://github.com/ANierbeck/iobroker-stromgedacht Obacht, ist die erste Version. Irgendwie funzt das mit den Integrationstests noch nicht so wie ich es mir vorstelle. Daher Nutzung auf eigene Gefahr ;)
Das sind wunderbare News! Ich hatte auch geplant den Adapter mit Hilfe von Github CoPilot zu starten aber irgendwie fehlt immer die Zeit dazu sich intensiver mit dem Thema zu beschäftigen. Kann ich beim Testen (oder was anderem) unterstützen?
Muss noch hinterlegen, dass es in einem bestimmten Zeitintervall (vermutlich 1h) regelmäßig pollt. Es gibt 4 zustände: -1 supergrün 1 grün 2 gelb 3 Rot
Im Objektbaum werden für diese zustände die jeweiligen Start/End Zeiten aufgelistet. Die Konfiguration des Adapters ist "rudimentär" ZipCode für die PLZ und wieviele Stunden im Voraus geschaut werden soll, maximal 48h möglich
Würde sagen, bin jetzt mit der ersten 0.0.1 Version zufrieden. Auch die Integrationstests funktionieren endlich.
@ANierbeck, glückwunsch zum lauffähigen Adapter! Ich hab die Version 0.0.2 bei mir jetzt mal installiert und er scheint zu laufen! - Ich sehe Werte bei grün und supergrün. Wie hast Du Dir denn die Visualisierung oder Automation gedacht? Ich könnte mir vorstellen, dass ich den aktuellen Status und einen Countdown bis zum Ende der Phase in der Visualisierung darstellen will - dazu bräuchte es aber ein Objekt, das immer die aktuelle Phase oder die Farbe der aktuellen Phase zurückgibt. Meinst Du das lässt sich realisieren?
@Andr3asB, Automatisierung sollte per cron laufen, da bin ich noch am analysieren, warum es das gerade nicht macht. Für meinen "use-case" bisher hätte es gereicht herauszufinden, ob jetzt eine supergrün- oder grün-phase ist. An Visualisierung hab ich erst mal noch nicht gedacht 🤔
Version 0.0.6 (korrigiert auf 0.0.6) müsste jetzt auch ordentlich mit cron laufen. Was mich noch irritiert hatte, dass im Cron die Prozesse bis zum nächsten Neustart durchlaufen. Scheint aber so zu sein, es sei denn man killt den Prozess selber (Adapter).
Version 0.0.5 müsste jetzt auch ordentlich mit cron laufen. Was mich noch irritiert hatte, dass im Cron die Prozesse bis zum nächsten neustart durchlaufen. Scheint aber so zu sein, es sei denn man killt den Prozess selber (Adapter).
Der Adapter ist ein scheduled Adapter. Allerdings steht nirgends im Adaptercode dass er sich nach Erledigung seiner Aufgaben beenden soll ... (-> https://github.com/ioBroker/ioBroker.js-controller/blob/master/packages/controller/doc/classes/AdapterClass.md#terminate
Ein Return von onReady terminiert den Adapter nicht, da ja beliebige asnchrone Funktionen aktiv sein könnten. Die Beendigung muss der Adapetr explizit anfordern sobald er alle Aufgaben erledigt hat. Ansonsten gibts beim nächsten Start eine Fehlermeldung dass der Adapter schon läuft ...
Bitte aber die Diskussion von hier ins Adapter Verzeichnis verlegen. Sollte es Fehler geben im Adapterverzeichnis ein Issue öffnen.
Falls gewunschen kann ich gener ein Review des Adapters durchführen sobald eine Aufnahme ins offizielle Repository gewunschen ist. Siehe https://github.com/ioBroker/ioBroker.repositories#requirements-for-adapter-to-get-added-to-the-latest-repository
Update zu 0.1.0:
- läuft stabil, auch cron
- time-series sind hinzugefügt, damit kann man wenn man möchte das ganze visualisieren. Ein bsp. wie man mit lovelance es machen kann ist im README.
Vielen Dank! Habe nun auch getestet:
Instanzeneinstellungen 48h gewählt:
In den Objekten: 24
Ist das ein anderes Objekt? oder wird das einfach noch nicht richtig übernommen?
Hi, meine Vermutung ist, das in diesem Falle die configuration für den ersten Lauf noch nicht übernommen wurde. Ab jedem weiteren sollte hier an dieser stelle das gleiche stehen wie in der configuration.
Ich wiederhole nochmals:
Bitte aber die Diskussion von hier ins Adapter Verzeichnis verlegen. Sollte es Fehler geben im Adapterverzeichnis ein Issue öffnen.
Zukünftige Fehlermeldungen zum Adapter oder Fragen zur Bedienung des Adapter sind hier fehl am Platz. Fehler bitte als Issue im Adapter Repo anlegen. Diskussionen bitte im Forum (https://forum.iobroker.net) führen.
Ich behalte mir vor zukünftige Comments die Fehlermeldungen oder Bedinungsanfragen etc. enthalten zu löschen.
Falls gewunschen kann ich gerne ein Review des Adapters durchführen sobald eine Aufnahme ins offizielle Repository gewunschen ist. Siehe https://github.com/ioBroker/ioBroker.repositories#requirements-for-adapter-to-get-added-to-the-latest-repository
Status: Github-Repository: https://github.com/ANierbeck/iobroker-stromgedacht Forum: unbekannt Latest-Repo: noch nicht beantragt
Finales update Version 0.2.0 ist draußen. Nun werden die time-series Daten auch per influxdb adapter protokolliert
Status: Github-Repository: https://github.com/ANierbeck/iobroker-stromgedacht Forum: unbekannt Latest-Repo: noch nicht beantragt
Infos bezüglich Repositoryaufnahme: https://github.com/ioBroker/ioBroker.repositories?tab=readme-ov-file#requirements-for-adapter-to-get-added-to-the-latest-repository
latest version is 1.1.0. Version 1.0.0 hat benutzt die offiziellen logos Version 1.1.0 neues Feature zum abholen der Informationen über Last, Residual-Last, Erneuerbare Energie und Super Grün Threshold
**Sobald der Adapter für User verwendbar ist / scheint, bitte ein Aufnahme in die offiziellen Repositories einplanen. Danke
Status: Github-Repository: https://github.com/ANierbeck/iobroker-stromgedacht Forum: unbekannt Latest-Repo: noch nicht beantragt
Infos bezüglich Repositoryaufnahme: https://github.com/ioBroker/ioBroker.repositories?tab=readme-ov-file#requirements-for-adapter-to-get-added-to-the-latest-repository