Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Script PV-Prognoseabhängiger Verbraucherstart

NEWS

  • Wartung am 15.11. – Forum ab 22:00 Uhr nicht erreichbar
    BluefoxB
    Bluefox
    11
    2
    218

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    7.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.7k

Script PV-Prognoseabhängiger Verbraucherstart

Script PV-Prognoseabhängiger Verbraucherstart

Scheduled Pinned Locked Moved Skripten / Logik
7 Posts 2 Posters 490 Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • B Offline
    B Offline
    bastian-m
    wrote on last edited by bastian-m
    #1

    Moin,
    ich bin kein Programmierer, klicke mir aber gerne auch größere Blocklys zusammen. Ich habe mich schon vor 1,5 Jahren mit dem Thema befasst, wie man auf Basis der PV-Ertrags-Prognose von Soulcast den ioBroker gezielt zum optimalen Zeitpunkt Verbraucher einschalten lassen kann, um einen möglichst hohen Anteil des mit meiner PV-Anlage produzierten Stroms direkt zu verbrauchen. Herausgekommen ist mit der Zeit eine völlig unprofessionell zusammengezimmerte, gruselig umgesetzte Lösung mit Blockly-Scripten, die für mich aber tatsächlich funktionieren.
    Ich stelle euch hier meine Lösung vor, vielleicht will daraus ja jemand ein Stück saubere Software basteln.

    Ich benutze den pvforecast-Adapter, um die Ertragsprognose von solcast (Auflösung in 30min-Intervallen) abzuholen.

    Für meine Scripte habe ich folgende Datenpunkte angelegt. Erklärungen folgen.
    datenpunkte.png

    Das Script "PrognoseStatAusAdapter" triggert das Abholen einer frischen Prognose durch Neustart der pvforecast-Instanz. Die Prognose-Daten werden in einen String mit # als Trennzeichen überführt und im Datenpunkt "Ausgangsprognose" abgespeichert.
    (Blocklycode und Screenshots siehe weiter unten)

    Das eigentliche Script, welches dann den optimalen Startzeitpunkt für den Verbraucher ermittelt, nimmt über einen Datenpunkt die Eigenschafte des Verbrauchers entgegen. Ich ermittle z.B. für meine Wärmepumpe, ob es sich lohnt, die für ein bestimmtes 3-Stunden-Intervall am Tag hochzufahren und "Wärme auf Vorrat" zu produzieren. Die Wärmepumpe hat eine konstante Leistungsaufnahme von ca 3kwh. Ich übergebe das in 30min-Intervallen aufgelöst an das Script, indem der Datenpunkt, der die Heizung beschreibt ("Heizung-Leistungsaufnahme"), von mir auf 3#3#3#3#3#3 gesetzt ist. Man kann damit dann tatsächlich für andere Verbraucher auch nicht konstante Leistungsaufnahmen setzen. Meine Spülmaschine läuft z.B. 3h und verbraucht am Anfang für das Aufheizen und am Ende für das Trocken mehr als dazwischen. Dann könnte ein entsprechender Datenpunkt z.B. so aussehen: 2#0.5#0.5#0.5#1#1

    Das Blockly des Todes, in dem die eigentliche Prognose-Logik abläuft, simuliert im Grunde für jeden möglichen Einschaltzeitpunkt, wie viel der Verbraucher vom selbsterzeugten Strom verbrauchen würde und gibt dann die Einschaltzeit mit dem höchsten Eigenverbrauch zurück. Das alles tut jenes Script:
    (Blocklycode und Screenshots siehe weiter unten)

    Um jetzt z.B. für meine Wärmepumpe den optimalen Zeitpunkt zu bestimmen, wird der Datenpunkt "ausgangsprognose-datenpunkt-name" auf "Ausgangsprognose" gesetzt, weil sich in jenem die Ausgangsprognose für den Tag von Solcast befindet (siehe oben das Script PrognoseStatAusAdapter). verbraucher-datenpunkt-name ist "Heizung". Damit sucht das Scipt nach einem Datenpunkt namens Heizung-Leistungsaufnahem wo ich die Leistungsaufnahme beschrieben habe. Das Script gibt nach seinem Durchlauf dann drei Informationen in Datenpunkten zurück:

    Heizung-Startzeit - Die optimale Starzeit in der Form "11:30:00" - diese verwende ich dann in einem Cron-Script weiter um die Wärmepumpe hochzufahren.
    Heizung-Eigenverbrauch - Zu rein informativen Zwecken der prognostizierte Eigenverbrauch in kwh.
    Heizung-Restprognose - Ein String im Format der Ertragsprognose für den kompletten Tag, aber abzüglich dessen was an Stromübrig bleibt, wenn die Wärmepumpe zum berechneten Zeitpunkt eingeschaltet wird. Diesen Prognose-String verwende ich dann weiter, um z.B. im nächsten Schritt den besten Zeitpunkt zu ermitteln, wann sich auch noch die Spülmaschine einschalten soll. (dafür würden dann ausgangsprognose-datenpunkt nicht auf Ausgangsprognose sondern auf Heizung-Restprognose gesetzt und verbraucher-datenpunkt-name auf Test_Verbraucher-1)

    Um konkret meine Wärmepumpe zu managen, läuft folgendes Blockly:
    (Blocklycode und Screenshots siehe weiter unten)

    Jeden Morgen eine Stunden nach Ende des Sonnenaufgangs wird das schon gezeigte Script PrognoseStatAusAdapter gestartet, um eine frische Ausgangsprognose von Solcast abzuholen. ausgangsprognose-datenpunkt-name wird auf "Ausgangsprognose" und verbraucher-datenpunkt-name auf "Heizung" gesetzt. Das Hauptscript "Prognosesimulation" wird ausgeführt. (ich schicke mir die Ergebnisse per Signal zur Beobachtung aufs Handy). Dann wird das vierte und letzte Script meiner Sammlung startet: CRON_Heizungsstart. Es nimmt die ermittelte Uhrzeit aus dem Datenpunkt Heizung-Startzeit und triggert dann entsprechend die Wärmepump. Ich sehe gerade, ich habe die alte Version des Blocklys kopiert. Ich mache noch eine Abfrage, ob der prognostizierte Eigenverbrauch überhaupt hoch genug ist, damit sich das Hochfahren lohnt. An einem trüben Wintertag mit 2kwh Eigenverbrauch lasse ich die Wärmepumpe natürlich lieber kontinuierlich durchlaufen.

    Tja...ich glaube das war es an Material. Verständnisfragen könnt ihr gerne stellen, ich rechne nicht damit, dass ich in nächster Zeit die Kapazitäten für eine echte Weiterentwicklung habe, um das ganze in ein sauberes, für jedermann gut nutzbares Format oder gar einen echten Adapter zu überführen.
    Vielleicht fühlt sich jemand mit Skills ja dazu berufen.
    @haus-automatisierung - vielleicht was für Matthias, wenn der unwahrscheinliche Fall eintritt, dass du dich langweilst.

    Schönes Wochenende,
    Bastian

    HomoranH 1 Reply Last reply
    0
    • B bastian-m

      Moin,
      ich bin kein Programmierer, klicke mir aber gerne auch größere Blocklys zusammen. Ich habe mich schon vor 1,5 Jahren mit dem Thema befasst, wie man auf Basis der PV-Ertrags-Prognose von Soulcast den ioBroker gezielt zum optimalen Zeitpunkt Verbraucher einschalten lassen kann, um einen möglichst hohen Anteil des mit meiner PV-Anlage produzierten Stroms direkt zu verbrauchen. Herausgekommen ist mit der Zeit eine völlig unprofessionell zusammengezimmerte, gruselig umgesetzte Lösung mit Blockly-Scripten, die für mich aber tatsächlich funktionieren.
      Ich stelle euch hier meine Lösung vor, vielleicht will daraus ja jemand ein Stück saubere Software basteln.

      Ich benutze den pvforecast-Adapter, um die Ertragsprognose von solcast (Auflösung in 30min-Intervallen) abzuholen.

      Für meine Scripte habe ich folgende Datenpunkte angelegt. Erklärungen folgen.
      datenpunkte.png

      Das Script "PrognoseStatAusAdapter" triggert das Abholen einer frischen Prognose durch Neustart der pvforecast-Instanz. Die Prognose-Daten werden in einen String mit # als Trennzeichen überführt und im Datenpunkt "Ausgangsprognose" abgespeichert.
      (Blocklycode und Screenshots siehe weiter unten)

      Das eigentliche Script, welches dann den optimalen Startzeitpunkt für den Verbraucher ermittelt, nimmt über einen Datenpunkt die Eigenschafte des Verbrauchers entgegen. Ich ermittle z.B. für meine Wärmepumpe, ob es sich lohnt, die für ein bestimmtes 3-Stunden-Intervall am Tag hochzufahren und "Wärme auf Vorrat" zu produzieren. Die Wärmepumpe hat eine konstante Leistungsaufnahme von ca 3kwh. Ich übergebe das in 30min-Intervallen aufgelöst an das Script, indem der Datenpunkt, der die Heizung beschreibt ("Heizung-Leistungsaufnahme"), von mir auf 3#3#3#3#3#3 gesetzt ist. Man kann damit dann tatsächlich für andere Verbraucher auch nicht konstante Leistungsaufnahmen setzen. Meine Spülmaschine läuft z.B. 3h und verbraucht am Anfang für das Aufheizen und am Ende für das Trocken mehr als dazwischen. Dann könnte ein entsprechender Datenpunkt z.B. so aussehen: 2#0.5#0.5#0.5#1#1

      Das Blockly des Todes, in dem die eigentliche Prognose-Logik abläuft, simuliert im Grunde für jeden möglichen Einschaltzeitpunkt, wie viel der Verbraucher vom selbsterzeugten Strom verbrauchen würde und gibt dann die Einschaltzeit mit dem höchsten Eigenverbrauch zurück. Das alles tut jenes Script:
      (Blocklycode und Screenshots siehe weiter unten)

      Um jetzt z.B. für meine Wärmepumpe den optimalen Zeitpunkt zu bestimmen, wird der Datenpunkt "ausgangsprognose-datenpunkt-name" auf "Ausgangsprognose" gesetzt, weil sich in jenem die Ausgangsprognose für den Tag von Solcast befindet (siehe oben das Script PrognoseStatAusAdapter). verbraucher-datenpunkt-name ist "Heizung". Damit sucht das Scipt nach einem Datenpunkt namens Heizung-Leistungsaufnahem wo ich die Leistungsaufnahme beschrieben habe. Das Script gibt nach seinem Durchlauf dann drei Informationen in Datenpunkten zurück:

      Heizung-Startzeit - Die optimale Starzeit in der Form "11:30:00" - diese verwende ich dann in einem Cron-Script weiter um die Wärmepumpe hochzufahren.
      Heizung-Eigenverbrauch - Zu rein informativen Zwecken der prognostizierte Eigenverbrauch in kwh.
      Heizung-Restprognose - Ein String im Format der Ertragsprognose für den kompletten Tag, aber abzüglich dessen was an Stromübrig bleibt, wenn die Wärmepumpe zum berechneten Zeitpunkt eingeschaltet wird. Diesen Prognose-String verwende ich dann weiter, um z.B. im nächsten Schritt den besten Zeitpunkt zu ermitteln, wann sich auch noch die Spülmaschine einschalten soll. (dafür würden dann ausgangsprognose-datenpunkt nicht auf Ausgangsprognose sondern auf Heizung-Restprognose gesetzt und verbraucher-datenpunkt-name auf Test_Verbraucher-1)

      Um konkret meine Wärmepumpe zu managen, läuft folgendes Blockly:
      (Blocklycode und Screenshots siehe weiter unten)

      Jeden Morgen eine Stunden nach Ende des Sonnenaufgangs wird das schon gezeigte Script PrognoseStatAusAdapter gestartet, um eine frische Ausgangsprognose von Solcast abzuholen. ausgangsprognose-datenpunkt-name wird auf "Ausgangsprognose" und verbraucher-datenpunkt-name auf "Heizung" gesetzt. Das Hauptscript "Prognosesimulation" wird ausgeführt. (ich schicke mir die Ergebnisse per Signal zur Beobachtung aufs Handy). Dann wird das vierte und letzte Script meiner Sammlung startet: CRON_Heizungsstart. Es nimmt die ermittelte Uhrzeit aus dem Datenpunkt Heizung-Startzeit und triggert dann entsprechend die Wärmepump. Ich sehe gerade, ich habe die alte Version des Blocklys kopiert. Ich mache noch eine Abfrage, ob der prognostizierte Eigenverbrauch überhaupt hoch genug ist, damit sich das Hochfahren lohnt. An einem trüben Wintertag mit 2kwh Eigenverbrauch lasse ich die Wärmepumpe natürlich lieber kontinuierlich durchlaufen.

      Tja...ich glaube das war es an Material. Verständnisfragen könnt ihr gerne stellen, ich rechne nicht damit, dass ich in nächster Zeit die Kapazitäten für eine echte Weiterentwicklung habe, um das ganze in ein sauberes, für jedermann gut nutzbares Format oder gar einen echten Adapter zu überführen.
      Vielleicht fühlt sich jemand mit Skills ja dazu berufen.
      @haus-automatisierung - vielleicht was für Matthias, wenn der unwahrscheinliche Fall eintritt, dass du dich langweilst.

      Schönes Wochenende,
      Bastian

      HomoranH Offline
      HomoranH Offline
      Homoran
      Global Moderator Administrators
      wrote on last edited by Homoran
      #2

      @bastian-m bitte keinen externen Hoster nutzen!
      Bilder mit der Upload Funktion des Forums hochladen.

      kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

      B 1 Reply Last reply
      0
      • HomoranH Homoran

        @bastian-m bitte keinen externen Hoster nutzen!
        Bilder mit der Upload Funktion des Forums hochladen.

        B Offline
        B Offline
        bastian-m
        wrote on last edited by
        #3

        @homoran Das sind keine verlinkten Bilder, das ist Programmcode für die Blocklys. Die waren viel zu lang, um sie hier über die code-Tags einzubinden.

        HomoranH 1 Reply Last reply
        0
        • B bastian-m

          @homoran Das sind keine verlinkten Bilder, das ist Programmcode für die Blocklys. Die waren viel zu lang, um sie hier über die code-Tags einzubinden.

          HomoranH Offline
          HomoranH Offline
          Homoran
          Global Moderator Administrators
          wrote on last edited by
          #4

          @bastian-m sagte in Script PV-Prognoseabhängiger Verbraucherstart:

          das ist Programmcode für die Blocklys.

          auch diese hier dann über die uploadfunktion als .txt hochladen

          @bastian-m sagte in Script PV-Prognoseabhängiger Verbraucherstart:

          Das sind keine verlinkten Bilder

          Bilder von den Blocklys wären aber sehr sinnvoll, da der xml-Code alleine z.B. auf dem Handy nichts bringt, und nicht jeder fremden Code in seine Installation spülen wird.

          dieses und mehr wird hier erklärt
          https://forum.iobroker.net/topic/51555/hinweise-für-gute-forenbeiträge/1

          kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

          der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

          1 Reply Last reply
          1
          • B Offline
            B Offline
            bastian-m
            wrote on last edited by
            #5

            Das Blockly PrognoseSimulation in Wort und Bild 🙂

            PrognoseSimulation.txt

            verbrauchersteuerung1.png
            verbrauchersteuerung2.png
            verbrauchersteuerung3.png

            1 Reply Last reply
            0
            • B Offline
              B Offline
              bastian-m
              wrote on last edited by
              #6

              Blockly PrognoseStatAusAdapter

              PrognoseStatAusAdapter.txt

              StatAusAdapter.png

              1 Reply Last reply
              0
              • B Offline
                B Offline
                bastian-m
                wrote on last edited by
                #7

                CRON_Morgens_Ausgangsprognose_Heizung.txt

                ausgangsprognose.png

                1 Reply Last reply
                0
                Reply
                • Reply as topic
                Log in to reply
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes


                Support us

                ioBroker
                Community Adapters
                Donate

                52

                Online

                32.4k

                Users

                81.3k

                Topics

                1.3m

                Posts
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                ioBroker Community 2014-2025
                logo
                • Login

                • Don't have an account? Register

                • Login or register to search.
                • First post
                  Last post
                0
                • Recent
                • Tags
                • Unread 0
                • Categories
                • Unreplied
                • Popular
                • GitHub
                • Docu
                • Hilfe