Smart-Start (Preisoptimiertes starten eines Gerätes)

Hallo zusammen,

ich experimentiere derzeit mit KI-gestützten Programmierumgebungen wie Cursor AI und Windsurf.

Was liegt da näher, als alte Symcon-Skripte in moderne Module umzuwandeln?

Ein erstes Ergebnis möchte ich euch hier vorstellen: Das SmartStart Modul

Das Ganze ist noch experimentell und bislang nur begrenzt getestet – es scheint aber bereits zu funktionieren.

Verwendung auf eigene Gefahr!

Vielleicht kann ja der ein oder andere etwas damit anfangen.

Was macht das Modul “Smart-Start”?

Das Modul schaltet ein Gerät automatisch zum günstigsten Zeitpunkt basierend auf aktuellen Preisdaten ein.

Die Preisinformationen müssen über eine externe Variable bereitgestellt werden, z.B. durch das Modul Tibber V2 über die Variable „Preisvorschaudaten für Energie Optimierer“.

Beispielanwendung

Eine nicht smarte Spülmaschine:

smartstart

  • Die Maschine wird über eine schaltbare Steckdose gesteuert.
  • Nach dem manuellen Start des Spülprogramms wird über die Visualisierung die Variable **“SmartStart”**aktiviert.
  • Das Modul berechnet den optimalen Startzeitpunkt und schaltet die Steckdose zunächst aus.
  • Zum optimalen Zeitpunkt wird die Steckdose automatisch wieder eingeschaltet.
  • Optional kann eine späteste Endzeit definiert werden (z.B. Spülmaschine soll bis spätestens 7 Uhr morgens fertig sein).

Funktionen

  • Berechnung des optimalen Startzeitpunkts anhand der Preisdaten
  • Automatisches Einschalten eines Geräts (via Boolean-Schaltvariable)
  • Vorgang kann jederzeit abgebrochen werden
  • Gerät wird nach der Berechnung zunächst ausgeschaltet
  • Einschalten erfolgt automatisch zum besten Zeitpunkt

Einrichtung

  1. Modul in IP-Symcon über die Modulverwaltung installieren: GitHub Repository
  2. Instanz erstellen.
  3. Konfiguration:
  • Preis-Variable auswählen
  • Schalt-Variable (Boolean) auswählen
  • Laufzeit des Geräts sowie späteste Endzeit einstellen
  • Option “Gerät sofort schalten, wenn kein Startzeitpunkt gefunden wird” aktivieren, falls erforderlich (z.B. bei fehlenden Preisinformationen)

Wenn es nicht korrekt funktioniert bitte die Debug Meldungen im Meldungsfenster der Konsole anschauen.

Viel Spaß beim Ausprobieren!

Stephan

1 „Gefällt mir“

Cool, aber erlaube mir die Frage, was daran ist jetzt künstlich und intelligent?
Ich mache vergleichbares für das Laden vom Auto. Die Preise pro Stunde werden hergenommen und die Fenster, wo der Preis in Spanne von x% (niedrigster Preis + x%) ist und unter der Preisobergrenze von Y ist, aktiviert
Grundsätzlich finde ich die Idee sehr gut, gerade jetzt in der sonnenreichen Zeit wo es auch unter der Woche negative Spotpreise (nicht wirklich negativ, weil ja noch Kosten dazukommen) gibt. Man könnte da noch viel mehr machen. Wobei ich bei Waschmaschinen immer vorsichtig bin, da nicht jedes Modell bei Stromzufuhr zu waschen beginnt. Aber unseren GS könnte man so programmieren.
Andere Frage zu deinem Modul, in welcher Form müssen die Preise präsentiert werden? Ich hab kein Tibber und ich hab die Preise in einer MariaDB.

Edit:
Ich hab es mal installiert und für den GS provisorisch (ohne Preise) eingerichtet. Was mir gleich aufgefallen ist, die Endzeit kann nur in der Console in der Instanz eingegeben werden. Das würde ich gerne als Variable haben um das auch in der Visualisierung einstellen zu können.

Edit die zweite:
Noch was ist mir eingefallen. Der GS hat zwei Phasen, wo der Stromverbrauch höher ist. Einmal zum Heizen - bei meinem ist das etwa 20 Minuten nach dem Start und dann beim Trocknen - etwa 40 Minuten vor dem Ende (oder macht er da noch mal das Wasser warm). Zwischen den beiden Phasen liegt in etwa eine Stunde. Man müsste das insofern berücksichtigen, als dass die Phasen des hohen Verbrauches in die günstigen Fenster schiebt. Nur den Start zu berücksichtigen, ist vielleicht nicht ganz richtig. Bei Geräten mit konstant hohem oder gleichem Verbrauch wird das passen. Genau so Waschmaschinen. Die brauchen viel Strom beim Heizen. Das Herumgedrehe ist vernachlässigbar.
Über eine Leistungsvariable könnte man aus der Historie ermitteln, wann die Phasen sind, oder man definiert man es selbst in der Instanz.

Danke für dein Feedback.

Die KI hat natürlich nur beim erstellen geholfen und hat nichts mit den Berechnungen zu tun. Dafür das ich dieses Modul in ca 2 Stunden fertig hatte finde ich das schon nicht schlecht. Ich bin halt auch kein Informatiker der so etwas mal kurz aus dem Ärmel schüttelt.

Variablen für die Zeiten ist auf jeden Fall noch eine gute Idee.

Viele Grüße
Stephan

Aso, dann hab ich das falsch verstanden. Ich hab noch eine zweite Edith hinzugefügt :wink:
Du bist mir noch das Format der Preistabelle schuldig. Ich gehe von Json aus.
Ah ja, eventuell könntest du den Namen überdenken. Es gibt noch viel mehr als nur Tibber, auch in Deutscheland. Du bist sicher Kunde von Tibber vondaher verstehe ich deine Namensgebung. Es könnte aber andere Nutzer abschrecken oder du verschaffst Tibber eine stigende Kundenzahl :smiley: .

Guten Morgen,

beim Namen bin ich gerne für Vorschläge offen :slight_smile:

Die Preise müssen in folgendem Format bereitgestellt werden:

[{"start":1745906400,"end":1745910000,"price":32.98,"level":"EXPENSIVE"},{"start":1745910000,"end":1745913600,"price":30.37,"level":"NORMAL"},{"start":1745913600,"end":1745917200,"price":22.19,"level":"CHEAP"},{"start":1745917200,"end":1745920800,"price":21.08,"level":"CHEAP"},{"start":1745920800,"end":1745924400,"price":20.99,"level":"CHEAP"},{"start":1745924400,"end":1745928000,"price":20.86,"level":"CHEAP"},{"start":1745928000,"end":1745931600,"price":20.89,"level":"CHEAP"},{"start":1745931600,"end":1745935200,"price":21.08,"level":"CHEAP"},{"start":1745935200,"end":1745938800,"price":22.85,"level":"CHEAP"},{"start":1745938800,"end":1745942400,"price":30.32,"level":"NORMAL"},{"start":1745942400,"end":1745946000,"price":33.22,"level":"EXPENSIVE"},{"start":1745946000,"end":1745949600,"price":37.72,"level":"EXPENSIVE"},{"start":1745949600,"end":1745953200,"price":41.88,"level":"VERY_EXPENSIVE"},{"start":1745953200,"end":1745956800,"price":36.45,"level":"EXPENSIVE"},{"start":1745956800,"end":1745960400,"price":34.04,"level":"EXPENSIVE"},{"start":1745960400,"end":1745964000,"price":32.72,"level":"EXPENSIVE"},{"start":1745964000,"end":1745967600,"price":0,"level":""},{"start":1745967600,"end":1745971200,"price":0,"level":""},{"start":1745971200,"end":1745974800,"price":0,"level":""},{"start":1745974800,"end":1745978400,"price":0,"level":""},{"start":1745978400,"end":1745982000,"price":0,"level":""},{"start":1745982000,"end":1745985600,"price":0,"level":""},{"start":1745985600,"end":1745989200,"price":0,"level":""},{"start":1745989200,"end":1745992800,"price":0,"level":""},{"start":1745992800,"end":1745996400,"price":0,"level":""},{"start":1745996400,"end":1746000000,"price":0,"level":""},{"start":1746000000,"end":1746003600,"price":0,"level":""},{"start":1746003600,"end":1746007200,"price":0,"level":""},{"start":1746007200,"end":1746010800,"price":0,"level":""},{"start":1746010800,"end":1746014400,"price":0,"level":""},{"start":1746014400,"end":1746018000,"price":0,"level":""},{"start":1746018000,"end":1746021600,"price":0,"level":""},{"start":1746021600,"end":1746025200,"price":0,"level":""},{"start":1746025200,"end":1746028800,"price":0,"level":""},{"start":1746028800,"end":1746032400,"price":0,"level":""},{"start":1746032400,"end":1746036000,"price":0,"level":""},{"start":1746036000,"end":1746039600,"price":0,"level":""},{"start":1746039600,"end":1746043200,"price":0,"level":""},{"start":1746043200,"end":1746046800,"price":0,"level":""},{"start":1746046800,"end":1746050400,"price":0,"level":""}]

Wenn du kein Tibber Kunde bist kannst du auch das Symcon Modul Strompreis (Vorhersage) verwenden.

Gruß Stephan

Vielleicht einfach nur „Smart-Start“.
Das Modul liefert aber soweit ich weiß keinen „level“. Wer definiert den? Oder ist das aus dem Tibber Modul? Wobei du den nicht verwendest, oder?

1 „Gefällt mir“

korrekt, LEVEL kommt aus dem Tibber Modul und wird hier nicht ausgewertet.

Gruß Stephan

Gibt ein Update:

  • Name auf SmartStart geändert (Achtung! Altes Modul löschen und über neue Github URL neu installieren GitHub - da8ter/SmartStart)
  • Endzeit über Variable einstellbar
  • Laufzeit über Variable einstellbar

Beitrag oben ist entsprechend aktualisiert.

Gruß Stephan