Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Bitte Hilfe beim Erstellen einer kleinen Programmzeile

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Bitte Hilfe beim Erstellen einer kleinen Programmzeile

    This topic has been deleted. Only users with topic management privileges can see it.
    • TH G
      TH G last edited by TH G

      Hallo,

      ich würde mich sehr freuen wenn mir jemand beim Erstellen einer kleinen Programmzeile helfen würde.

      Ich nutze ein Skript zur Steuerung meiner PV Anlage.

      Es gibt bei den statischen Parametern folgenden Eintrag:

      grundlast = 550, /*Grundlast in Watt falls bekannt*/
      

      Ich möchte nun diese Grundlast dynamisch erhöhen wenn die Kühlung meiner Wärmepumpe läuft.

      Ich bekomme einen Status "stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.KUEHLEN" in dem "true" steht, wenn die Kühlung aktiv ist (wenn nicht aktiv ist aber das Feld leer). Die Kühlung verbraucht immer 3000 Watt. Ich benötige also eine kleine Anpassung, diese 3000 Watt der Grundlast hinzuzufügen.

      Wie würde diese Anpassung aussehen?

      Es müsste doch wie folgt sein.

      Ist "stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.KUEHLEN" = "true" dann Grundlast +3000
      Ist "stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.KUEHLEN" = "leer" dann Grundlast -3000

      Wie sieht das in einem Java Skript aus?

      Danke für Hilfe aber ich habe leider keine Wissen zum Thema Java Skript.

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @TH G last edited by paul53

        @TH-G sagte:

        Thema Java

        Du meinst Javascript.

        grundlastHz = 550, /*Grundlast in Watt falls bekannt*/
        
        let grundlast = grundlastHz;
        if(getstate('stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.KUEHLEN').val) grundlast = grundlastHz + 3000;
        
        TH G 1 Reply Last reply Reply Quote 0
        • TH G
          TH G @paul53 last edited by TH G

          @paul53

          Danke aber ich kann Grundlast nicht in einen anderen Namen ändern, da es bei Updates immer Probleme geben wird.

          Ja Java Script

          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @TH G last edited by

            @TH-G sagte:

            Grundlast nicht in einen anderen Namen Ist ändern

            Dann kann ich Dir ohne Kenntnis des Scripts nicht helfen.

            TH G 1 Reply Last reply Reply Quote 0
            • TH G
              TH G @paul53 last edited by

              @paul53

              Es geht um dieses Skript

              https://raw.githubusercontent.com/Maverick78de/SMA_forecast_charging/master/bat_regelung_2.0.js

              paul53 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @TH G last edited by

                @TH-G
                grundlast wird an 2 Stellen verwendet. Wie willst Du das ohne Eingriff in das Script (Update) anpassen ?

                TH G 1 Reply Last reply Reply Quote 0
                • TH G
                  TH G @paul53 last edited by TH G

                  @paul53

                  Ich hatte die Hoffnung, Grundlast einfach zu erhöhen, wenn die Kühlung aktiv ist bzw. wenn nicht, wieder auf den Grundwert zurückzugehen.

                  Der statische Teil des Skripts ändert sich in der Regel nicht. Bei Updates muss nur der Teil danach neu rein kopiert werden.

                  paul53 1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @TH G last edited by paul53

                    @TH-G sagte:

                    Der statische Teil des Skripts ändert sich in der Regel nicht. Bei Updates muss nur der Teil danach neu rein kopiert werden.

                    "BETRIEBSSTATUS.KUEHLEN" ist aber dynamisch, muss also auch in der zyklischen Funktion ausgewertet werden. Oder Du baust vor der zyklischen Funktion einen Trigger ein.

                    if(getState('stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.KUEHLEN').val) grundlast +=  3000;
                    on('stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.KUEHLEN', function(dp) {
                        if(dp.state.val) grundlast += 3000;
                        else grundlast -= 3000;
                    });
                    
                    TH G 1 Reply Last reply Reply Quote 0
                    • TH G
                      TH G @paul53 last edited by

                      @paul53

                      Danke

                      Das ganze Skript wird doch zyklisch abgefragt

                      var Interval = setInterval(function () {
                        processing(); /*start processing in interval*/
                      }, (update*1000));
                      

                      Das bedeute doch dann auch, dass die Grundlast ständig angepasst wird oder?

                      paul53 1 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 @TH G last edited by paul53

                        @TH-G sagte:

                        Das bedeute doch dann auch, dass die Grundlast ständig angepasst wird oder?

                        Nicht ständig, sondern nur bei Umschaltung auf "Kühlen". Die Änderung von grundlast muss vor der Deklaration der zyklisch aufgerufenen Funktion processing() erfolgen (vor Zeile 63).

                        TH G 1 Reply Last reply Reply Quote 0
                        • TH G
                          TH G @paul53 last edited by TH G

                          @paul53

                          Sorry Paul wenn ich anstrengend bin aber ich möchte es gerne verstehen.

                          Wenn das gesamte Skript alle 1000 ms abgefragt wird, wird doch auch der Status von Kühlen angefragt oder?

                          Ah ich verstehe. In dem Skript wird erst ab Zeile 63 alle 1000 abgefragt.

                          paul53 1 Reply Last reply Reply Quote 0
                          • paul53
                            paul53 @TH G last edited by

                            @TH-G sagte:

                            Wenn das gesamte Skript alle 1000 ms abgefragt wird, wird doch auch der Status von Kühlen angefragt oder?

                            Nein, es wird nur die Funktion processing() zyklisch abgearbeitet. Alles davor nicht. Kühlen wird bisher nicht abgefragt, deshalb muss es vor Zeile 63 ergänzt werden.

                            TH G 1 Reply Last reply Reply Quote 0
                            • TH G
                              TH G @paul53 last edited by TH G

                              @paul53

                              Wenn ich dein Script nach Zeile 63 einbaue, würde es doch zyklisch abgefragt werden oder?

                              Noch eine andere Frage. Warum steht hinter val kein true? Woher weiss das Skript das Kühlung aktiv ist?

                              paul53 1 Reply Last reply Reply Quote 0
                              • paul53
                                paul53 @TH G last edited by paul53

                                @TH-G sagte:

                                Wenn ich dein Script nach Zeile 63 einbaue, würde es doch zyklisch abgefragt werden oder?

                                Ja, das wäre aber kontraproduktiv. Mein Vorschlag passt die Variable grundlast per Trigger an, wenn sich der Status von Kühlen ändert. Bau es anstelle der leeren Zeile 62 ein.

                                if(getState('stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.KUEHLEN').val) grundlast +=  3000;
                                on('stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.KUEHLEN', function(dp) { // triggert bei Änderung des Status Kühlen
                                    if(dp.state.val) grundlast += 3000;
                                    else grundlast -= 3000;
                                });
                                
                                // ab hier Programmcode, nichts ändern!
                                function processing() {
                                

                                @TH-G sagte in Bitte Hilfe beim Erstellen einer kleinen Programmzeile:

                                Woher weiss das Skript das Kühlung aktiv ist?

                                Weil dann der Wert des Datenpunktes true ist.

                                TH G 1 Reply Last reply Reply Quote 0
                                • TH G
                                  TH G @paul53 last edited by

                                  @paul53

                                  Habe ich in Zeile 62 eingefügt. Folgende Warnung kommt dann:

                                  7.8.2020, 16:14:46.668 [info ]: javascript.0 (31544) Stop script script.js.common.SMA_Bat_Regelung_2_1
                                  7.8.2020, 16:14:46.682 [info ]: javascript.0 (31544) Start javascript script.js.common.SMA_Bat_Regelung_2_1
                                  7.8.2020, 16:14:46.731 [warn ]: javascript.0 (31544) at script.js.common.SMA_Bat_Regelung_2_1:62:4
                                  7.8.2020, 16:14:46.735 [info ]: javascript.0 (31544) script.js.common.SMA_Bat_Regelung_2_1: registered 1 subscription and 0 schedules

                                  paul53 1 Reply Last reply Reply Quote 0
                                  • paul53
                                    paul53 @TH G last edited by

                                    @TH-G
                                    Ich hatte getState falsch geschrieben (inzwischen korrigiert).

                                    TH G 1 Reply Last reply Reply Quote 0
                                    • TH G
                                      TH G @paul53 last edited by

                                      @paul53

                                      Warnung ist immer noch da:

                                      // PV-WR Register Definition, nur bei Bedarf anpassen
                                        var PV_Dev_Type = ModBusPV + ".inputRegisters.30053_DevTypeId", /*Typnummer*/
                                            PVWR_limit = ModBusPV + ".holdingRegisters.41255_WNomPrc";
                                            
                                      if(getState('stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.KUEHLEN').val) grundlast +=  3000;
                                      on('stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.KUEHLEN', function(dp) { // triggert bei Änderung des Status Kühlen
                                          if(dp.state.val) grundlast += 3000;
                                          else grundlast -= 3000;
                                      });
                                      
                                      // ab hier Programmcode, nichts ändern!
                                      function processing() {
                                      // Start der Parametrierung
                                      
                                      
                                      paul53 1 Reply Last reply Reply Quote 0
                                      • paul53
                                        paul53 @TH G last edited by

                                        @TH-G sagte:

                                        Warnung ist immer noch da

                                        Schau mal im Tab "Log" nach. Dort gibt es meist mehr Informationen. Ist die Datenpunkt-ID richtig geschrieben ?

                                        TH G 1 Reply Last reply Reply Quote 0
                                        • TH G
                                          TH G @paul53 last edited by TH G

                                          @paul53

                                          Ja der DP ist richtig: stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.KUEHLEN

                                          javascript.0 2020-08-07 16:25:44.150 warn (31544) at script.js.common.SMA_Bat_Regelung_2_1:62:4
                                          javascript.0 2020-08-07 16:25:44.145 warn (31544) getState "stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.KUEHLEN" not found (3)

                                          paul53 1 Reply Last reply Reply Quote 0
                                          • paul53
                                            paul53 @TH G last edited by

                                            @TH-G sagte:

                                            "stiebel-isg.0.Info.STATUS.BETRIEBSSTATUS.KUEHLEN" not found (3)

                                            Die Warnung sagt aus, dass der Datenpunkt nicht gefunden wurde.

                                            TH G 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            763
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            2
                                            28
                                            784
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo