Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Blockly
  5. Brauche Hilfe bei PV Laden Skript

NEWS

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

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

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.2k

Brauche Hilfe bei PV Laden Skript

Geplant Angeheftet Gesperrt Verschoben Blockly
75 Beiträge 8 Kommentatoren 10.9k Aufrufe 7 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • J JoergH

    @homoran said in Brauche Hilfe bei PV Laden Skript:

    @joergh sagte in Brauche Hilfe bei PV Laden Skript:

    Den habe ich auch installiert.

    wen?

    Den go-e Charger Adapter

    HomoranH Nicht stören
    HomoranH Nicht stören
    Homoran
    Global Moderator Administrators
    schrieb am zuletzt editiert von Homoran
    #34

    @joergh sagte in Brauche Hilfe bei PV Laden Skript:

    Den go-e Charger Adapter

    der läuft nicht über MQTT (das wäre eine weitere Möglichkeit) sondern über die Befehle, die go-e in ihrer API haben
    https://github.com/goecharger/go-eCharger-API-v1/blob/master/go-eCharger API v1 DE.md

    Das ist nicht der Adapter!

    Da gibt es dann auch noch eine Modbus Api

    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 Antwort Letzte Antwort
    0
    • HomoranH Homoran

      @joergh sagte in Brauche Hilfe bei PV Laden Skript:

      Was ist denn der interne Unterschied zwischen einem Wert im Gerät "aktualisieren" und "steuern"?

      bei aktualisiere wird ein Ack=true mitgegeben, damit ist die Aktion beendet
      bei steuere ist ACK=false, dann weckt das den Adapter auf, dass er was zu tun hat. Der setzt das dann um und setzt anschließend das ACK auf true.
      Bis dahin ist der Wert rot

      @joergh sagte in Brauche Hilfe bei PV Laden Skript:

      was ich nicht so ganz verstehe,

      Das scheint nur eine Anzeige zu sein, da wird aber nichts geschrieben

      J Offline
      J Offline
      JoergH
      schrieb am zuletzt editiert von
      #35

      @homoran Ah, ok. Danke. Gut zu wissen. Wieder was gelernt :-)

      L 1 Antwort Letzte Antwort
      0
      • M Offline
        M Offline
        Malu
        schrieb am zuletzt editiert von
        #36

        Hallo Ich bräüchte mal eure hilfe .Ist vieleicht nicht ganz das Thema aber so etwas in der Art.Ich habe einen Whirlpoo mit eine E Heizung und würde diese gerne Einschalten sobald genug Energie vorhanden ist.Eine Einschaltverzögerung soll ein ständiges ein und auschalten verhinden wenn kurz Wolken aufkomme;-).Hab auch schon ein Skript geschrieben.Es Funktioniert soweit außer das mit der EHeizung.Könnte da mal jemand drüberschauen was ich da falschgemacht habe.HomeMatic WebUI - Mozilla Firefox 2021_03_24 10_16_56.png

        paul53P 1 Antwort Letzte Antwort
        0
        • J JoergH

          @homoran Ah, ok. Danke. Gut zu wissen. Wieder was gelernt :-)

          L Offline
          L Offline
          lesiflo
          Most Active
          schrieb am zuletzt editiert von
          #37

          @joergh
          Hi, was hast du denn für eine PV-Anlage? Eventuell kannst du ja auch wie ich die Software "openWB" nutzen. Kennst du die? Dann ist das Blockly Script nicht mehr nötig.

          1 Antwort Letzte Antwort
          0
          • M Offline
            M Offline
            Malu
            schrieb am zuletzt editiert von
            #38

            Hi ne kenne ich nicht.Hab eine Anlage von SMA.Nutze aber Modbus um mir die ganzen Werte zu zu ziehen.

            L 1 Antwort Letzte Antwort
            0
            • M Malu

              Hi ne kenne ich nicht.Hab eine Anlage von SMA.Nutze aber Modbus um mir die ganzen Werte zu zu ziehen.

              L Offline
              L Offline
              lesiflo
              Most Active
              schrieb am zuletzt editiert von lesiflo
              #39

              @malu: Guckst du hier: https://openwb.de/main/. Ist eigentlich Hardware (Wallbox) und Software. Die Software kannst du aber mit anderen Wallboxen betreiben und in der Software konfigurieren. Sie übernimmt dann die komplette Steuerung der Wallbox, so dass ein Scripting in iobroker nicht mehr notwendig ist. Die Daten aus openWB kannst dir dann über den mqtt-Adapter in iobroker reinholen. Die Anbindung der PV-Anlage erfolgt dort auch über Modbus.

              Das Frontend sieht so aus. (gibt aber auch andere)

              262ccb44-2d68-4990-ba05-c8464f21d26f-image.png

              1 Antwort Letzte Antwort
              0
              • M Offline
                M Offline
                Malu
                schrieb am zuletzt editiert von
                #40

                Ok danke werde ich mir mal anschauen. Würde mich aber trotzdem interessieren was ich an dem Skript falsch gemacht habe.

                L 1 Antwort Letzte Antwort
                0
                • M Malu

                  Ok danke werde ich mir mal anschauen. Würde mich aber trotzdem interessieren was ich an dem Skript falsch gemacht habe.

                  L Offline
                  L Offline
                  lesiflo
                  Most Active
                  schrieb am zuletzt editiert von
                  #41

                  @malu Hi, sehe gerade dass mein Beitrag nicht zu deiner Frage gehörte sondern zu joergh.

                  1 Antwort Letzte Antwort
                  0
                  • M Malu

                    Hallo Ich bräüchte mal eure hilfe .Ist vieleicht nicht ganz das Thema aber so etwas in der Art.Ich habe einen Whirlpoo mit eine E Heizung und würde diese gerne Einschalten sobald genug Energie vorhanden ist.Eine Einschaltverzögerung soll ein ständiges ein und auschalten verhinden wenn kurz Wolken aufkomme;-).Hab auch schon ein Skript geschrieben.Es Funktioniert soweit außer das mit der EHeizung.Könnte da mal jemand drüberschauen was ich da falschgemacht habe.HomeMatic WebUI - Mozilla Firefox 2021_03_24 10_16_56.png

                    paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von paul53
                    #42

                    @malu sagte: was ich da falschgemacht habe

                    1. An den Trigger muss eine Datenpunkt-ID übergeben werden - kein Vergleichsergebnis.
                    2. Es muss verhindert werden, dass die Timer mehrfach gestartet werden können.

                    Bild_2021-03-24_150442.png

                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                    M 1 Antwort Letzte Antwort
                    0
                    • M Offline
                      M Offline
                      Malu
                      schrieb am zuletzt editiert von
                      #43

                      Danke werde es morgen versuchen.

                      1 Antwort Letzte Antwort
                      0
                      • JB_SullivanJ Offline
                        JB_SullivanJ Offline
                        JB_Sullivan
                        schrieb am zuletzt editiert von
                        #44

                        Guten Morgen zusammen,
                        ich bin durch Zufall über einen Hinweis von @Homoran in einem anderen Thread auf dieses Thema aufmerksam geworden.

                        Zur Zeit beschäftige ich mich auch mit der Erstellung von einem Script zur PV Überschuss Regelung. Ich habe zwar eine openWB bestellt (leider mittlerweile 10 Wochen Lieferzeit) und werde vermutlich kein Script dafür benötigen, aber auch andere Temporäre Verbraucher im Haus, verdienen es meiner Meinung nach, per PV Überschuss aktiviert zu werden (z.B. Raumentfeuchter, Ladestation für die E-Bikes usw.)

                        Ich bin aber irgendwie im Moment zu doof dazu das auf die Kette zu bekommen, denn weder meine eigenen noch das abgetippte Blockly von @paul53 funktioniert bei mir nicht :( Da schaltet irgendwie gar nichts.

                        Klar die Werte erscheinen etwas Sinnfrei, aber ich möchte ausschließlich meinen PV Überschuss nutzen und nicht die Energie die in meinen Speicher geladen wurde, dort wieder heraus saugen.

                        Darum habe ich als Stellgröße den SOC meines Speicher gewählt. Erst wenn dieser voll ist, wird ins Netz eingespeist - und erst dann würde ich gerne die Verbraucher auf PV Überschuss schalten. Jetzt am Morgen zum Teste muss ich da halt mit diesen vermeintlich sinnfreien Werten arbeiten.

                        Aber wie gesagt, selbst das kleine Blockly von Paul, auf dem man mit weiteren Bedingungen aufbauen könnte (Wolken, min. Einspeisemenge usw.), funktioniert schon nicht.

                        Wo liegt mein Fehler?

                        9db998a0-051b-4a6b-a3a7-cfa066e7a9b9-image.png

                        ioBroker auf Intel Core i3-5005U NUC und Windwos10 Pro

                        paul53P 1 Antwort Letzte Antwort
                        0
                        • JB_SullivanJ JB_Sullivan

                          Guten Morgen zusammen,
                          ich bin durch Zufall über einen Hinweis von @Homoran in einem anderen Thread auf dieses Thema aufmerksam geworden.

                          Zur Zeit beschäftige ich mich auch mit der Erstellung von einem Script zur PV Überschuss Regelung. Ich habe zwar eine openWB bestellt (leider mittlerweile 10 Wochen Lieferzeit) und werde vermutlich kein Script dafür benötigen, aber auch andere Temporäre Verbraucher im Haus, verdienen es meiner Meinung nach, per PV Überschuss aktiviert zu werden (z.B. Raumentfeuchter, Ladestation für die E-Bikes usw.)

                          Ich bin aber irgendwie im Moment zu doof dazu das auf die Kette zu bekommen, denn weder meine eigenen noch das abgetippte Blockly von @paul53 funktioniert bei mir nicht :( Da schaltet irgendwie gar nichts.

                          Klar die Werte erscheinen etwas Sinnfrei, aber ich möchte ausschließlich meinen PV Überschuss nutzen und nicht die Energie die in meinen Speicher geladen wurde, dort wieder heraus saugen.

                          Darum habe ich als Stellgröße den SOC meines Speicher gewählt. Erst wenn dieser voll ist, wird ins Netz eingespeist - und erst dann würde ich gerne die Verbraucher auf PV Überschuss schalten. Jetzt am Morgen zum Teste muss ich da halt mit diesen vermeintlich sinnfreien Werten arbeiten.

                          Aber wie gesagt, selbst das kleine Blockly von Paul, auf dem man mit weiteren Bedingungen aufbauen könnte (Wolken, min. Einspeisemenge usw.), funktioniert schon nicht.

                          Wo liegt mein Fehler?

                          9db998a0-051b-4a6b-a3a7-cfa066e7a9b9-image.png

                          paul53P Offline
                          paul53P Offline
                          paul53
                          schrieb am zuletzt editiert von paul53
                          #45

                          @jb_sullivan sagte: Wo liegt mein Fehler?

                          Die Funktion Verbraucher_1_F muss innerhalb des Triggers zum Ende aufgerufen werden, nicht bei Skript-Start. Die Variablen onDelay und offDelay existieren nur einmal (in der Javascript-Ansicht prüfen)? Die Kombination "Wert >= 25" und "Wert < 99,2" passt nicht.

                          Die äußere falls-Klammer kann entfallen, denn der Datenpunkt-Wert ist in Wert enthallten.

                          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                          JB_SullivanJ 1 Antwort Letzte Antwort
                          0
                          • paul53P paul53

                            @jb_sullivan sagte: Wo liegt mein Fehler?

                            Die Funktion Verbraucher_1_F muss innerhalb des Triggers zum Ende aufgerufen werden, nicht bei Skript-Start. Die Variablen onDelay und offDelay existieren nur einmal (in der Javascript-Ansicht prüfen)? Die Kombination "Wert >= 25" und "Wert < 99,2" passt nicht.

                            Die äußere falls-Klammer kann entfallen, denn der Datenpunkt-Wert ist in Wert enthallten.

                            JB_SullivanJ Offline
                            JB_SullivanJ Offline
                            JB_Sullivan
                            schrieb am zuletzt editiert von JB_Sullivan
                            #46

                            @paul53 Hmm.... OK, ich habe es genauso zusammen gesetzt, wie in deinem Screenshot weiter oben. Ich dachte das wäre ein Lösungsansatz gewesen, der "nur" mit den Datenpunkten gefüllt werden müsste.

                            ioBroker auf Intel Core i3-5005U NUC und Windwos10 Pro

                            paul53P 1 Antwort Letzte Antwort
                            0
                            • JB_SullivanJ JB_Sullivan

                              @paul53 Hmm.... OK, ich habe es genauso zusammen gesetzt, wie in deinem Screenshot weiter oben. Ich dachte das wäre ein Lösungsansatz gewesen, der "nur" mit den Datenpunkten gefüllt werden müsste.

                              paul53P Offline
                              paul53P Offline
                              paul53
                              schrieb am zuletzt editiert von paul53
                              #47

                              @jb_sullivan sagte: Lösungsansatz gewesen, der "nur" mit den Datenpunkten gefüllt werden müsste.

                              Mit den richtigen DP:

                              • Trigger: Einspeisung
                              • erstes falls: Umwälzpumpe läuft
                              • zweites falls: Wert Einspeisung (Trigger-DP)
                              • drittes falls: Wert Netzbezug

                              Einfach so übernehmen funktioniert nur manchmal.

                              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                              JB_SullivanJ 2 Antworten Letzte Antwort
                              0
                              • paul53P paul53

                                @jb_sullivan sagte: Lösungsansatz gewesen, der "nur" mit den Datenpunkten gefüllt werden müsste.

                                Mit den richtigen DP:

                                • Trigger: Einspeisung
                                • erstes falls: Umwälzpumpe läuft
                                • zweites falls: Wert Einspeisung (Trigger-DP)
                                • drittes falls: Wert Netzbezug

                                Einfach so übernehmen funktioniert nur manchmal.

                                JB_SullivanJ Offline
                                JB_SullivanJ Offline
                                JB_Sullivan
                                schrieb am zuletzt editiert von JB_Sullivan
                                #48

                                @paul53

                                Danke für deine Hinweise - nun schaltet die Steckdose schonmal und der Zustand wird auch in den Datenpunkt geschrieben. Jetzt muss ich mir Gedanken machen wie man das ganze Sinnvoll gegen alle Eventualitäten verriegeln kann. Der Speicher soll ja in erster Linie für die Überbrückung der Abend / Nachtstunden sein und Tagsüber nur Spitzenlasten puffern.

                                Diese Spitzenlasten könnten den Speicher aber auf einen SoC von z.B. 96% runter ziehen. Wenn man aber vorher wie blöd ins Netz eingespeist hat, schaltet der Wechselrichter nicht sofort wieder auf Speicherladung, sondern speist erstmal weiter ein. "Irgendwann" schaltet er dann wieder auf Speicher Ladung um. Die Logik dahinter habe ich noch nicht raus bekommen.

                                Auf jeden Fall muss man das Blockly so bauen, das es nicht zu einer permanenten AUS/EIN Schaltung des Verbrauchs kommt, weil ein paar Rahmenparameter für den Moment nicht stimmig sind.

                                Oh, Oh, ich sehe schon, das wird ein Akt werden ;)

                                Vielleicht sollte ich doch auf evcc wecheln. Die haben jetzt auch eine FritzDECT Steckdose als virtuelle Wallbox mit eingebaut.

                                e16c820b-50e0-4cbd-abbf-053a0125c3c4-image.png

                                ioBroker auf Intel Core i3-5005U NUC und Windwos10 Pro

                                1 Antwort Letzte Antwort
                                0
                                • paul53P paul53

                                  @jb_sullivan sagte: Lösungsansatz gewesen, der "nur" mit den Datenpunkten gefüllt werden müsste.

                                  Mit den richtigen DP:

                                  • Trigger: Einspeisung
                                  • erstes falls: Umwälzpumpe läuft
                                  • zweites falls: Wert Einspeisung (Trigger-DP)
                                  • drittes falls: Wert Netzbezug

                                  Einfach so übernehmen funktioniert nur manchmal.

                                  JB_SullivanJ Offline
                                  JB_SullivanJ Offline
                                  JB_Sullivan
                                  schrieb am zuletzt editiert von
                                  #49

                                  @paul53

                                  Darf ich dich nochmal belästigen? Du scheinst ein gutes Auge und natürlich auch das entsprechende Hintergrundwissen für Scripte allgemein zu haben. Bei mir ist das immer so mehr oder weniger try and error ;) Könntest du nochmal einen Blick auf das "Konstrukt" werfen?

                                  Hier das Blockly als js Ansicht.

                                  Funktion soll wie folgt laufen:

                                  3 unterschiedliche Verbraucher verfügen über unterschiedliche Leistungsangaben und werden entsprechend des zur Verfügung stehendem PV Überschuss an bzw. aus geschaltet. Das ganze soll aber nur dann passieren, wenn der Speicher seinen Füllgrad erreicht hat und nicht unter ein bestimmtes Nivau gefallen ist.

                                  Dieses untere Speicher Nivau soll gleichzeitig als Wolkenpuffer fungieren.

                                  Kann das so funktionieren. Aktuell regnet es hier und ich kann nicht so wirklich gut live testen.

                                  var Speicher, Verbraucher_1, Verbraucher_2, Verbraucher_3, onDelay, onDelay, offDelay, offDelay;
                                  
                                  // Beschreibe diese Funktion …
                                  async function Verbraucher_1_F() {
                                    setState("javascript.0.PV_Eigenverbrauch.Verbraucher_1"/*PV_Eigenverbrauch.Verbraucher_1*/, ('e-Bike Ladestation ist ' + String(Verbraucher_1 == true ? 'AN' : 'AUS')), true);
                                    setState("sonoff.0.DEKO_3.POWER1"/*DEKO_3  POWER1*/, Verbraucher_1);
                                  }
                                  
                                  // Beschreibe diese Funktion …
                                  async function Verbraucher_2_F() {
                                    setState("javascript.0.PV_Eigenverbrauch.Verbraucher_1"/*PV_Eigenverbrauch.Verbraucher_1*/, ('Raumentfeuchter ist ' + String(Verbraucher_2 == true ? 'AN' : 'AUS')), true);
                                    setState("sonoff.0.DEKO_4.POWER1"/*DEKO_4 POWER1*/, Verbraucher_2);
                                  }
                                  
                                  // Beschreibe diese Funktion …
                                  async function Verbraucher_3_F() {
                                    setState("javascript.0.PV_Eigenverbrauch.Verbraucher_1"/*PV_Eigenverbrauch.Verbraucher_1*/, ('Freigabe Poolpumpe' + String(Verbraucher_3 == true ? 'EIN' : 'AUS')), true);
                                    setState("sonoff.0.DEKO_5.POWER1"/*DEKO_5  POWER1*/, Verbraucher_3);
                                  }
                                  
                                  // Beschreibe diese Funktion …
                                  async function PV_Ueberschuss() {
                                    setState("javascript.0.PV_Eigenverbrauch.PV_Ueberschuss_Freigabe "/*PV_Eigenverbrauch.PV_Ueberschuss_Freigabe */, ('PV Überschuss Freigabe ' + String(Speicher == true ? 'OK' : 'Gesperrt')), true);
                                  }
                                  
                                  
                                  Speicher = false;
                                  // Freigabe über Speicher SoC
                                  on({id: 'fronius.0.powerflow.inverter1.SOC', change: "any"}, async function (obj) {
                                    var value = obj.state.val;
                                    var oldValue = obj.oldState.val;
                                    if ((obj.state ? obj.state.val : "") >= 99.2) {
                                      (function () {if (offDelay) {clearTimeout(offDelay); offDelay = null;}})();
                                      if (!onDelay) {
                                        onDelay = setTimeout(async function () {
                                          Verbraucher_1 = true;
                                          Speicher = true;
                                        }, 180000);
                                      }
                                    }
                                    if ((obj.state ? obj.state.val : "") <= 97) {
                                      (function () {if (onDelay) {clearTimeout(onDelay); onDelay = null;}})();
                                      if (!offDelay) {
                                        offDelay = setTimeout(async function () {
                                          Speicher = false;
                                          Verbraucher_1 = false;
                                        }, 180000);
                                      }
                                    }
                                    await Verbraucher_1_F();
                                    await PV_Ueberschuss();
                                  });
                                  
                                  Verbraucher_1 = false;
                                  Verbraucher_2 = false;
                                  Verbraucher_3 = false;
                                  Verbraucher_1 = 300;
                                  Verbraucher_2 = 200;
                                  Verbraucher_3 = 100;
                                  // Verbraucher priorisiert nach Netzeiinspeisung starten
                                  on({id: 'discovergy.0.60868258.Power_Delivery', change: "ne"}, async function (obj) {
                                    var value = obj.state.val;
                                    var oldValue = obj.oldState.val;
                                    if (getState("discovergy.0.60868258.Power_Delivery").val >= 0) {
                                      if (Verbraucher_1 == false && getState("discovergy.0.60868258.Power_Delivery").val > Verbraucher_1 && Speicher == true) {
                                        Verbraucher_1 = true;
                                        await Verbraucher_1_F();
                                      }
                                      if (Verbraucher_1 == true && Verbraucher_2 == false && getState("discovergy.0.60868258.Power_Delivery").val > Verbraucher_1 + Verbraucher_2 && Speicher == true) {
                                        Verbraucher_2 = true;
                                        await Verbraucher_2_F();
                                      }
                                      if (Verbraucher_1 == true && Verbraucher_3 == false && getState("discovergy.0.60868258.Power_Delivery").val > Verbraucher_1 + Verbraucher_2 + Verbraucher_3 && Speicher == true) {
                                        Verbraucher_3 = true;
                                        await Verbraucher_3_F();
                                      }
                                    }
                                  });
                                  // Verbraucher priorisiert nach Netzeinspeisung stoppen
                                  on({id: 'discovergy.0.60868258.Power_Consumption', change: "ne"}, async function (obj) {
                                    var value = obj.state.val;
                                    var oldValue = obj.oldState.val;
                                    if (getState("discovergy.0.60868258.Power_Consumption").val > 0) {
                                      if (Verbraucher_1 == true && getState("discovergy.0.60868258.Power_Consumption").val < Verbraucher_1) {
                                        Verbraucher_1 = false;
                                        await Verbraucher_1_F();
                                      } else if (Verbraucher_1 == true && Verbraucher_2 == true && getState("discovergy.0.60868258.Power_Consumption").val < Verbraucher_1 + Verbraucher_2) {
                                        Verbraucher_2 = false;
                                        await Verbraucher_2_F();
                                      } else if (Verbraucher_1 == true && Verbraucher_2 == true && Verbraucher_3 == true && getState("discovergy.0.60868258.Power_Consumption").val < Verbraucher_1 + Verbraucher_2 + Verbraucher_3) {
                                        Verbraucher_3 = false;
                                        await Verbraucher_3_F();
                                      }
                                    }
                                  });
                                  

                                  ioBroker auf Intel Core i3-5005U NUC und Windwos10 Pro

                                  paul53P 1 Antwort Letzte Antwort
                                  0
                                  • JB_SullivanJ JB_Sullivan

                                    @paul53

                                    Darf ich dich nochmal belästigen? Du scheinst ein gutes Auge und natürlich auch das entsprechende Hintergrundwissen für Scripte allgemein zu haben. Bei mir ist das immer so mehr oder weniger try and error ;) Könntest du nochmal einen Blick auf das "Konstrukt" werfen?

                                    Hier das Blockly als js Ansicht.

                                    Funktion soll wie folgt laufen:

                                    3 unterschiedliche Verbraucher verfügen über unterschiedliche Leistungsangaben und werden entsprechend des zur Verfügung stehendem PV Überschuss an bzw. aus geschaltet. Das ganze soll aber nur dann passieren, wenn der Speicher seinen Füllgrad erreicht hat und nicht unter ein bestimmtes Nivau gefallen ist.

                                    Dieses untere Speicher Nivau soll gleichzeitig als Wolkenpuffer fungieren.

                                    Kann das so funktionieren. Aktuell regnet es hier und ich kann nicht so wirklich gut live testen.

                                    var Speicher, Verbraucher_1, Verbraucher_2, Verbraucher_3, onDelay, onDelay, offDelay, offDelay;
                                    
                                    // Beschreibe diese Funktion …
                                    async function Verbraucher_1_F() {
                                      setState("javascript.0.PV_Eigenverbrauch.Verbraucher_1"/*PV_Eigenverbrauch.Verbraucher_1*/, ('e-Bike Ladestation ist ' + String(Verbraucher_1 == true ? 'AN' : 'AUS')), true);
                                      setState("sonoff.0.DEKO_3.POWER1"/*DEKO_3  POWER1*/, Verbraucher_1);
                                    }
                                    
                                    // Beschreibe diese Funktion …
                                    async function Verbraucher_2_F() {
                                      setState("javascript.0.PV_Eigenverbrauch.Verbraucher_1"/*PV_Eigenverbrauch.Verbraucher_1*/, ('Raumentfeuchter ist ' + String(Verbraucher_2 == true ? 'AN' : 'AUS')), true);
                                      setState("sonoff.0.DEKO_4.POWER1"/*DEKO_4 POWER1*/, Verbraucher_2);
                                    }
                                    
                                    // Beschreibe diese Funktion …
                                    async function Verbraucher_3_F() {
                                      setState("javascript.0.PV_Eigenverbrauch.Verbraucher_1"/*PV_Eigenverbrauch.Verbraucher_1*/, ('Freigabe Poolpumpe' + String(Verbraucher_3 == true ? 'EIN' : 'AUS')), true);
                                      setState("sonoff.0.DEKO_5.POWER1"/*DEKO_5  POWER1*/, Verbraucher_3);
                                    }
                                    
                                    // Beschreibe diese Funktion …
                                    async function PV_Ueberschuss() {
                                      setState("javascript.0.PV_Eigenverbrauch.PV_Ueberschuss_Freigabe "/*PV_Eigenverbrauch.PV_Ueberschuss_Freigabe */, ('PV Überschuss Freigabe ' + String(Speicher == true ? 'OK' : 'Gesperrt')), true);
                                    }
                                    
                                    
                                    Speicher = false;
                                    // Freigabe über Speicher SoC
                                    on({id: 'fronius.0.powerflow.inverter1.SOC', change: "any"}, async function (obj) {
                                      var value = obj.state.val;
                                      var oldValue = obj.oldState.val;
                                      if ((obj.state ? obj.state.val : "") >= 99.2) {
                                        (function () {if (offDelay) {clearTimeout(offDelay); offDelay = null;}})();
                                        if (!onDelay) {
                                          onDelay = setTimeout(async function () {
                                            Verbraucher_1 = true;
                                            Speicher = true;
                                          }, 180000);
                                        }
                                      }
                                      if ((obj.state ? obj.state.val : "") <= 97) {
                                        (function () {if (onDelay) {clearTimeout(onDelay); onDelay = null;}})();
                                        if (!offDelay) {
                                          offDelay = setTimeout(async function () {
                                            Speicher = false;
                                            Verbraucher_1 = false;
                                          }, 180000);
                                        }
                                      }
                                      await Verbraucher_1_F();
                                      await PV_Ueberschuss();
                                    });
                                    
                                    Verbraucher_1 = false;
                                    Verbraucher_2 = false;
                                    Verbraucher_3 = false;
                                    Verbraucher_1 = 300;
                                    Verbraucher_2 = 200;
                                    Verbraucher_3 = 100;
                                    // Verbraucher priorisiert nach Netzeiinspeisung starten
                                    on({id: 'discovergy.0.60868258.Power_Delivery', change: "ne"}, async function (obj) {
                                      var value = obj.state.val;
                                      var oldValue = obj.oldState.val;
                                      if (getState("discovergy.0.60868258.Power_Delivery").val >= 0) {
                                        if (Verbraucher_1 == false && getState("discovergy.0.60868258.Power_Delivery").val > Verbraucher_1 && Speicher == true) {
                                          Verbraucher_1 = true;
                                          await Verbraucher_1_F();
                                        }
                                        if (Verbraucher_1 == true && Verbraucher_2 == false && getState("discovergy.0.60868258.Power_Delivery").val > Verbraucher_1 + Verbraucher_2 && Speicher == true) {
                                          Verbraucher_2 = true;
                                          await Verbraucher_2_F();
                                        }
                                        if (Verbraucher_1 == true && Verbraucher_3 == false && getState("discovergy.0.60868258.Power_Delivery").val > Verbraucher_1 + Verbraucher_2 + Verbraucher_3 && Speicher == true) {
                                          Verbraucher_3 = true;
                                          await Verbraucher_3_F();
                                        }
                                      }
                                    });
                                    // Verbraucher priorisiert nach Netzeinspeisung stoppen
                                    on({id: 'discovergy.0.60868258.Power_Consumption', change: "ne"}, async function (obj) {
                                      var value = obj.state.val;
                                      var oldValue = obj.oldState.val;
                                      if (getState("discovergy.0.60868258.Power_Consumption").val > 0) {
                                        if (Verbraucher_1 == true && getState("discovergy.0.60868258.Power_Consumption").val < Verbraucher_1) {
                                          Verbraucher_1 = false;
                                          await Verbraucher_1_F();
                                        } else if (Verbraucher_1 == true && Verbraucher_2 == true && getState("discovergy.0.60868258.Power_Consumption").val < Verbraucher_1 + Verbraucher_2) {
                                          Verbraucher_2 = false;
                                          await Verbraucher_2_F();
                                        } else if (Verbraucher_1 == true && Verbraucher_2 == true && Verbraucher_3 == true && getState("discovergy.0.60868258.Power_Consumption").val < Verbraucher_1 + Verbraucher_2 + Verbraucher_3) {
                                          Verbraucher_3 = false;
                                          await Verbraucher_3_F();
                                        }
                                      }
                                    });
                                    
                                    paul53P Offline
                                    paul53P Offline
                                    paul53
                                    schrieb am zuletzt editiert von
                                    #50

                                    @jb_sullivan sagte: Kann das so funktionieren.

                                    Als erstes fällt mir auf, dass onDelay und offDelay zweimal vorhanden sind (1. Zeile), was nicht funktioniert. Wähle bei "falls nicht onDelay"/"falls nicht offDelay" die jeweils andere Variable aus und überzeuge Dich in der Javascript-Ansicht davon, dass die Variablen nur noch einmal aufgeführt werden.

                                    Den Rest habe ich mir noch nicht angesehen.

                                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                    JB_SullivanJ 1 Antwort Letzte Antwort
                                    0
                                    • paul53P paul53

                                      @jb_sullivan sagte: Kann das so funktionieren.

                                      Als erstes fällt mir auf, dass onDelay und offDelay zweimal vorhanden sind (1. Zeile), was nicht funktioniert. Wähle bei "falls nicht onDelay"/"falls nicht offDelay" die jeweils andere Variable aus und überzeuge Dich in der Javascript-Ansicht davon, dass die Variablen nur noch einmal aufgeführt werden.

                                      Den Rest habe ich mir noch nicht angesehen.

                                      JB_SullivanJ Offline
                                      JB_SullivanJ Offline
                                      JB_Sullivan
                                      schrieb am zuletzt editiert von
                                      #51

                                      @paul53

                                      OK, da ich das ganze mit Timeout sowieso nie wirklich verstanden habe, habe ich das nun aus der Freigabe für den Speicher raus geworfen. Die beiden Werte <> sollten ja eigentlich bei der Trägheit des System ausreichend sein, damit es nicht prellt.

                                      Hier nochmal die korrigierte Version

                                      var Speicher, Verbraucher_1, Verbraucher_2, Verbraucher_3;
                                      
                                      // Beschreibe diese Funktion …
                                      async function Verbraucher_1_F() {
                                        setState("javascript.0.PV_Eigenverbrauch.Verbraucher_1"/*PV_Eigenverbrauch.Verbraucher_1*/, ('e-Bike Ladestation ist ' + String(Verbraucher_1 == true ? 'AN' : 'AUS')), true);
                                        setState("sonoff.0.DEKO_3.POWER1"/*DEKO_3  POWER1*/, Verbraucher_1);
                                      }
                                      
                                      // Beschreibe diese Funktion …
                                      async function Verbraucher_2_F() {
                                        setState("javascript.0.PV_Eigenverbrauch.Verbraucher_1"/*PV_Eigenverbrauch.Verbraucher_1*/, ('Raumentfeuchter ist ' + String(Verbraucher_2 == true ? 'AN' : 'AUS')), true);
                                        setState("sonoff.0.DEKO_4.POWER1"/*DEKO_4 POWER1*/, Verbraucher_2);
                                      }
                                      
                                      // Beschreibe diese Funktion …
                                      async function Verbraucher_3_F() {
                                        setState("javascript.0.PV_Eigenverbrauch.Verbraucher_1"/*PV_Eigenverbrauch.Verbraucher_1*/, ('Freigabe Poolpumpe' + String(Verbraucher_3 == true ? 'EIN' : 'AUS')), true);
                                        setState("sonoff.0.DEKO_5.POWER1"/*DEKO_5  POWER1*/, Verbraucher_3);
                                      }
                                      
                                      // Beschreibe diese Funktion …
                                      async function PV_Ueberschuss() {
                                        setState("javascript.0.PV_Eigenverbrauch.PV_Ueberschuss_Freigabe "/*PV_Eigenverbrauch.PV_Ueberschuss_Freigabe */, ('PV Überschuss Freigabe ' + String(Speicher == true ? 'OK' : 'Gesperrt')), true);
                                      }
                                      
                                      
                                      Speicher = false;
                                      // Freigabe über Speicher SoC
                                      on({id: 'fronius.0.powerflow.inverter1.SOC', change: "any"}, async function (obj) {
                                        var value = obj.state.val;
                                        var oldValue = obj.oldState.val;
                                        if ((obj.state ? obj.state.val : "") >= 99.2) {
                                          Speicher = true;
                                        }
                                        if ((obj.state ? obj.state.val : "") <= 97) {
                                          Speicher = false;
                                        }
                                        await PV_Ueberschuss();
                                      });
                                      
                                      Verbraucher_1 = false;
                                      Verbraucher_2 = false;
                                      Verbraucher_3 = false;
                                      Verbraucher_1 = 300;
                                      Verbraucher_2 = 200;
                                      Verbraucher_3 = 100;
                                      // Verbraucher priorisiert nach Netzeinspeisung starten
                                      on({id: 'discovergy.0.60868258.Power_Delivery', change: "ne"}, async function (obj) {
                                        var value = obj.state.val;
                                        var oldValue = obj.oldState.val;
                                        if (getState("discovergy.0.60868258.Power_Delivery").val >= 0) {
                                          if (Verbraucher_1 == false && getState("discovergy.0.60868258.Power_Delivery").val > Verbraucher_1 && Speicher == true) {
                                            Verbraucher_1 = true;
                                            await Verbraucher_1_F();
                                          }
                                          if (Verbraucher_1 == true && Verbraucher_2 == false && getState("discovergy.0.60868258.Power_Delivery").val > Verbraucher_1 + Verbraucher_2 && Speicher == true) {
                                            Verbraucher_2 = true;
                                            await Verbraucher_2_F();
                                          }
                                          if (Verbraucher_1 == true && Verbraucher_3 == false && getState("discovergy.0.60868258.Power_Delivery").val > Verbraucher_1 + Verbraucher_2 + Verbraucher_3 && Speicher == true) {
                                            Verbraucher_3 = true;
                                            await Verbraucher_3_F();
                                          }
                                        }
                                      });
                                      // Verbraucher priorisiert nach Netzeinspeisung stoppen
                                      on({id: 'discovergy.0.60868258.Power_Consumption', change: "ne"}, async function (obj) {
                                        var value = obj.state.val;
                                        var oldValue = obj.oldState.val;
                                        if (getState("discovergy.0.60868258.Power_Consumption").val > 0) {
                                          if (Verbraucher_1 == true && getState("discovergy.0.60868258.Power_Consumption").val < Verbraucher_1) {
                                            Verbraucher_1 = false;
                                            await Verbraucher_1_F();
                                          } else if (Verbraucher_1 == true && Verbraucher_2 == true && getState("discovergy.0.60868258.Power_Consumption").val < Verbraucher_1 + Verbraucher_2) {
                                            Verbraucher_2 = false;
                                            await Verbraucher_2_F();
                                          } else if (Verbraucher_1 == true && Verbraucher_2 == true && Verbraucher_3 == true && getState("discovergy.0.60868258.Power_Consumption").val < Verbraucher_1 + Verbraucher_2 + Verbraucher_3) {
                                            Verbraucher_3 = false;
                                            await Verbraucher_3_F();
                                          }
                                        }
                                      });
                                      

                                      ioBroker auf Intel Core i3-5005U NUC und Windwos10 Pro

                                      paul53P 1 Antwort Letzte Antwort
                                      0
                                      • JB_SullivanJ JB_Sullivan

                                        @paul53

                                        OK, da ich das ganze mit Timeout sowieso nie wirklich verstanden habe, habe ich das nun aus der Freigabe für den Speicher raus geworfen. Die beiden Werte <> sollten ja eigentlich bei der Trägheit des System ausreichend sein, damit es nicht prellt.

                                        Hier nochmal die korrigierte Version

                                        var Speicher, Verbraucher_1, Verbraucher_2, Verbraucher_3;
                                        
                                        // Beschreibe diese Funktion …
                                        async function Verbraucher_1_F() {
                                          setState("javascript.0.PV_Eigenverbrauch.Verbraucher_1"/*PV_Eigenverbrauch.Verbraucher_1*/, ('e-Bike Ladestation ist ' + String(Verbraucher_1 == true ? 'AN' : 'AUS')), true);
                                          setState("sonoff.0.DEKO_3.POWER1"/*DEKO_3  POWER1*/, Verbraucher_1);
                                        }
                                        
                                        // Beschreibe diese Funktion …
                                        async function Verbraucher_2_F() {
                                          setState("javascript.0.PV_Eigenverbrauch.Verbraucher_1"/*PV_Eigenverbrauch.Verbraucher_1*/, ('Raumentfeuchter ist ' + String(Verbraucher_2 == true ? 'AN' : 'AUS')), true);
                                          setState("sonoff.0.DEKO_4.POWER1"/*DEKO_4 POWER1*/, Verbraucher_2);
                                        }
                                        
                                        // Beschreibe diese Funktion …
                                        async function Verbraucher_3_F() {
                                          setState("javascript.0.PV_Eigenverbrauch.Verbraucher_1"/*PV_Eigenverbrauch.Verbraucher_1*/, ('Freigabe Poolpumpe' + String(Verbraucher_3 == true ? 'EIN' : 'AUS')), true);
                                          setState("sonoff.0.DEKO_5.POWER1"/*DEKO_5  POWER1*/, Verbraucher_3);
                                        }
                                        
                                        // Beschreibe diese Funktion …
                                        async function PV_Ueberschuss() {
                                          setState("javascript.0.PV_Eigenverbrauch.PV_Ueberschuss_Freigabe "/*PV_Eigenverbrauch.PV_Ueberschuss_Freigabe */, ('PV Überschuss Freigabe ' + String(Speicher == true ? 'OK' : 'Gesperrt')), true);
                                        }
                                        
                                        
                                        Speicher = false;
                                        // Freigabe über Speicher SoC
                                        on({id: 'fronius.0.powerflow.inverter1.SOC', change: "any"}, async function (obj) {
                                          var value = obj.state.val;
                                          var oldValue = obj.oldState.val;
                                          if ((obj.state ? obj.state.val : "") >= 99.2) {
                                            Speicher = true;
                                          }
                                          if ((obj.state ? obj.state.val : "") <= 97) {
                                            Speicher = false;
                                          }
                                          await PV_Ueberschuss();
                                        });
                                        
                                        Verbraucher_1 = false;
                                        Verbraucher_2 = false;
                                        Verbraucher_3 = false;
                                        Verbraucher_1 = 300;
                                        Verbraucher_2 = 200;
                                        Verbraucher_3 = 100;
                                        // Verbraucher priorisiert nach Netzeinspeisung starten
                                        on({id: 'discovergy.0.60868258.Power_Delivery', change: "ne"}, async function (obj) {
                                          var value = obj.state.val;
                                          var oldValue = obj.oldState.val;
                                          if (getState("discovergy.0.60868258.Power_Delivery").val >= 0) {
                                            if (Verbraucher_1 == false && getState("discovergy.0.60868258.Power_Delivery").val > Verbraucher_1 && Speicher == true) {
                                              Verbraucher_1 = true;
                                              await Verbraucher_1_F();
                                            }
                                            if (Verbraucher_1 == true && Verbraucher_2 == false && getState("discovergy.0.60868258.Power_Delivery").val > Verbraucher_1 + Verbraucher_2 && Speicher == true) {
                                              Verbraucher_2 = true;
                                              await Verbraucher_2_F();
                                            }
                                            if (Verbraucher_1 == true && Verbraucher_3 == false && getState("discovergy.0.60868258.Power_Delivery").val > Verbraucher_1 + Verbraucher_2 + Verbraucher_3 && Speicher == true) {
                                              Verbraucher_3 = true;
                                              await Verbraucher_3_F();
                                            }
                                          }
                                        });
                                        // Verbraucher priorisiert nach Netzeinspeisung stoppen
                                        on({id: 'discovergy.0.60868258.Power_Consumption', change: "ne"}, async function (obj) {
                                          var value = obj.state.val;
                                          var oldValue = obj.oldState.val;
                                          if (getState("discovergy.0.60868258.Power_Consumption").val > 0) {
                                            if (Verbraucher_1 == true && getState("discovergy.0.60868258.Power_Consumption").val < Verbraucher_1) {
                                              Verbraucher_1 = false;
                                              await Verbraucher_1_F();
                                            } else if (Verbraucher_1 == true && Verbraucher_2 == true && getState("discovergy.0.60868258.Power_Consumption").val < Verbraucher_1 + Verbraucher_2) {
                                              Verbraucher_2 = false;
                                              await Verbraucher_2_F();
                                            } else if (Verbraucher_1 == true && Verbraucher_2 == true && Verbraucher_3 == true && getState("discovergy.0.60868258.Power_Consumption").val < Verbraucher_1 + Verbraucher_2 + Verbraucher_3) {
                                              Verbraucher_3 = false;
                                              await Verbraucher_3_F();
                                            }
                                          }
                                        });
                                        
                                        paul53P Offline
                                        paul53P Offline
                                        paul53
                                        schrieb am zuletzt editiert von paul53
                                        #52

                                        @jb_sullivan
                                        Du verwendest die Variablen Verbraucher_1, Verbraucher_2, Verbraucher_3 mal als Boolean und mal als Zahl. Das kann nicht funktionieren.

                                        EDIT: Was für einen Wert enthält der Datenpunkt "Power_Delivery"?

                                        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                        JB_SullivanJ 1 Antwort Letzte Antwort
                                        0
                                        • paul53P paul53

                                          @jb_sullivan
                                          Du verwendest die Variablen Verbraucher_1, Verbraucher_2, Verbraucher_3 mal als Boolean und mal als Zahl. Das kann nicht funktionieren.

                                          EDIT: Was für einen Wert enthält der Datenpunkt "Power_Delivery"?

                                          JB_SullivanJ Offline
                                          JB_SullivanJ Offline
                                          JB_Sullivan
                                          schrieb am zuletzt editiert von
                                          #53

                                          @paul53 einen positiven Zahlenwert (Einspeisung) genau wie Power_Consumption (Netzbezug)

                                          Das blöde ist, das der Wechselrichter immer versucht auf Einspeisung 0 zu regeln. Das ergiebt einen wilden Wechsel zwischen Bezug und Einspeisung, wenn nicht mit "tausenden" von Watt eingespeist wird. Das muss man irgendwie entprellen

                                          2b2664f8-5ad1-4bbc-bd9b-98c7441a417c-image.png

                                          123dd57b-af6f-497d-bf06-3af37232796b-image.png

                                          ioBroker auf Intel Core i3-5005U NUC und Windwos10 Pro

                                          JB_SullivanJ 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          802

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe