AdapterRequests icon indicating copy to clipboard operation
AdapterRequests copied to clipboard

StromGedacht von TransnetBW

Open Andr3asB opened this issue 2 years ago • 22 comments

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.

Andr3asB avatar Jan 16 '23 12:01 Andr3asB

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.

Hypfer avatar Jan 16 '23 16:01 Hypfer

Folgendes habe ich noch gefunden: Die API der TransnetBW wird also kommen, wann scheint aktuell noch offen zu sein. image

Andr3asB avatar Jan 16 '23 16:01 Andr3asB

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

In IoBroker landen die Werte unter 0_userdata.0.[...] in dieser Form: image 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?

Andr3asB avatar Apr 20 '23 09:04 Andr3asB

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.

Andr3asB avatar Apr 20 '23 09:04 Andr3asB

Die API ist nun wohl verfügbar: https://www.stromgedacht.de/api-info/

PastCoder avatar May 03 '23 17:05 PastCoder

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

klassisch avatar May 06 '23 08:05 klassisch

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

ANierbeck avatar Dec 20 '23 18:12 ANierbeck

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?

Andr3asB avatar Dec 20 '23 18:12 Andr3asB

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

ANierbeck avatar Dec 20 '23 19:12 ANierbeck

Würde sagen, bin jetzt mit der ersten 0.0.1 Version zufrieden. Auch die Integrationstests funktionieren endlich.

ANierbeck avatar Dec 22 '23 10:12 ANierbeck

@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 avatar Dec 25 '23 12:12 Andr3asB

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

ANierbeck avatar Dec 25 '23 17:12 ANierbeck

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

ANierbeck avatar Dec 30 '23 10:12 ANierbeck

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

mcm1957 avatar Dec 30 '23 10:12 mcm1957

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.

ANierbeck avatar Jan 03 '24 12:01 ANierbeck

Vielen Dank! Habe nun auch getestet: Instanzeneinstellungen 48h gewählt: grafik

In den Objekten: 24 grafik

Ist das ein anderes Objekt? oder wird das einfach noch nicht richtig übernommen?

klassisch avatar Jan 03 '24 12:01 klassisch

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.

ANierbeck avatar Jan 03 '24 12:01 ANierbeck

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

mcm1957 avatar Jan 03 '24 13:01 mcm1957

Finales update Version 0.2.0 ist draußen. Nun werden die time-series Daten auch per influxdb adapter protokolliert

ANierbeck avatar Jan 06 '24 11:01 ANierbeck

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

mcm1957 avatar Jan 06 '24 11:01 mcm1957

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

ANierbeck avatar Feb 25 '24 16:02 ANierbeck

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

mcm1957 avatar Feb 25 '24 17:02 mcm1957