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. JavaScript
  5. Erste Schritte beim Scripten - Einsteigerfrage

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.0k

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.4k

Erste Schritte beim Scripten - Einsteigerfrage

Geplant Angeheftet Gesperrt Verschoben JavaScript
43 Beiträge 6 Kommentatoren 3.6k Aufrufe 3 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.
  • AsgothianA Asgothian

    @doppellhelix Und wenn du das genau liest wirst du feststellen das um 11 nu dann etwas passiert wenn die Variable reducedCharging auf wahr steht. Du initialisierst sie aber mit falsch. Deswegen ist um 11 nix passiert.

    A.

    D Offline
    D Offline
    Doppellhelix
    schrieb am zuletzt editiert von
    #11

    Also erstmal,

    danke euch beiden für eure Geduld mit mir :-)
    Ich möchte das unbedingt verstehen, weil ich schon von Berufswegen mich dafür interessiere. Da sind es aber eher SPS Programme.

    @asgothian
    Versteh nicht, wo ich die reducedCharging auf falsch setze?

    Zum Ablauf:

    Bei Sonnenaufgang wird gecheckt, ob 20000 erreicht werden.
    Dem ist heute so, als wird reducedCharging auf wahr gestellt.
    Zeile 11

    Dann passiert bis 11 Uhr nix.
    Hier wird in Zeile 27 gecheckt, ob reucedCharging ansteht.
    Das sollte es ja eigentlich noch. ISt ja nix anderes dazwischen passiert oder überseh ich was.

    Hie nochmal der komplette code, damit wir wieder alle gleich sind :-)

    var reducedCharging = false;
    console.info('reduced charging is '+reducedCharging)
    
    schedule({astro: "sunrise"}, function () {
        var msgText = "Akkustand bei Sonnenaufgang: " + getState('modbus.0.inputRegisters.13022_Battery_level_'/*Batteriekapazität*/).val + "%";
        var forecast = getState('pvforecast.0.summary.energy.today'/*Geschätzte Energie (heute)*/).val;
         if (forecast > 20000) {
            setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 100);
            //setState('evcc.0.control.prioritySoc'/*prioritySoc*/, 0);
            setState('telegram.0.communicate.response', forecast + "Wh Ertrag erwartet. Reduziere Ladeleistung auf 100W bis 11 Uhr");
            reducedCharging = true;
            setState('0_userdata.0.reducedCharging'/*reducedCharging*/, reducedCharging);
        } else {
             setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 10600);
             //setState('evcc.0.control.prioritySoc'/*prioritySoc*/, 30);
             setState('telegram.0.communicate.response', forecast + "Wh Ertrag erwartet. Lade Akku sofort");
             reducedCharging = false;
             setState('0_userdata.0.reducedCharging'/*reducedCharging*/, reducedCharging);
        }
    
        log(msgText);
        setState('telegram.0.communicate.response', msgText);
        });
    
    
    schedule({hour: 11, minute: 0}, function () {
        if (reducedCharging) {
            setState('telegram.0.communicate.response', "Starte laden des Akkus mit 2 kW");
            log("Set max_charge_power to 2kW");
            setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 2000);
            //setState('evcc.0.control.prioritySoc'/*prioritySoc*/, 30);
        }
    });
    
    
    
    paul53P T AsgothianA 3 Antworten Letzte Antwort
    0
    • D Doppellhelix

      Also erstmal,

      danke euch beiden für eure Geduld mit mir :-)
      Ich möchte das unbedingt verstehen, weil ich schon von Berufswegen mich dafür interessiere. Da sind es aber eher SPS Programme.

      @asgothian
      Versteh nicht, wo ich die reducedCharging auf falsch setze?

      Zum Ablauf:

      Bei Sonnenaufgang wird gecheckt, ob 20000 erreicht werden.
      Dem ist heute so, als wird reducedCharging auf wahr gestellt.
      Zeile 11

      Dann passiert bis 11 Uhr nix.
      Hier wird in Zeile 27 gecheckt, ob reucedCharging ansteht.
      Das sollte es ja eigentlich noch. ISt ja nix anderes dazwischen passiert oder überseh ich was.

      Hie nochmal der komplette code, damit wir wieder alle gleich sind :-)

      var reducedCharging = false;
      console.info('reduced charging is '+reducedCharging)
      
      schedule({astro: "sunrise"}, function () {
          var msgText = "Akkustand bei Sonnenaufgang: " + getState('modbus.0.inputRegisters.13022_Battery_level_'/*Batteriekapazität*/).val + "%";
          var forecast = getState('pvforecast.0.summary.energy.today'/*Geschätzte Energie (heute)*/).val;
           if (forecast > 20000) {
              setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 100);
              //setState('evcc.0.control.prioritySoc'/*prioritySoc*/, 0);
              setState('telegram.0.communicate.response', forecast + "Wh Ertrag erwartet. Reduziere Ladeleistung auf 100W bis 11 Uhr");
              reducedCharging = true;
              setState('0_userdata.0.reducedCharging'/*reducedCharging*/, reducedCharging);
          } else {
               setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 10600);
               //setState('evcc.0.control.prioritySoc'/*prioritySoc*/, 30);
               setState('telegram.0.communicate.response', forecast + "Wh Ertrag erwartet. Lade Akku sofort");
               reducedCharging = false;
               setState('0_userdata.0.reducedCharging'/*reducedCharging*/, reducedCharging);
          }
      
          log(msgText);
          setState('telegram.0.communicate.response', msgText);
          });
      
      
      schedule({hour: 11, minute: 0}, function () {
          if (reducedCharging) {
              setState('telegram.0.communicate.response', "Starte laden des Akkus mit 2 kW");
              log("Set max_charge_power to 2kW");
              setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 2000);
              //setState('evcc.0.control.prioritySoc'/*prioritySoc*/, 30);
          }
      });
      
      
      
      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #12

      @doppellhelix sagte: Versteh nicht, wo ich die reducedCharging auf falsch setze?

      Beim Skriptstart in Zeile 1. Nach jeder Änderung im Skript wird das Skript neu gestartet. Wenn es nach SA passiert, ist um 11 Uhr die Variable false.

      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

      HomoranH D 2 Antworten Letzte Antwort
      0
      • D Doppellhelix

        Also erstmal,

        danke euch beiden für eure Geduld mit mir :-)
        Ich möchte das unbedingt verstehen, weil ich schon von Berufswegen mich dafür interessiere. Da sind es aber eher SPS Programme.

        @asgothian
        Versteh nicht, wo ich die reducedCharging auf falsch setze?

        Zum Ablauf:

        Bei Sonnenaufgang wird gecheckt, ob 20000 erreicht werden.
        Dem ist heute so, als wird reducedCharging auf wahr gestellt.
        Zeile 11

        Dann passiert bis 11 Uhr nix.
        Hier wird in Zeile 27 gecheckt, ob reucedCharging ansteht.
        Das sollte es ja eigentlich noch. ISt ja nix anderes dazwischen passiert oder überseh ich was.

        Hie nochmal der komplette code, damit wir wieder alle gleich sind :-)

        var reducedCharging = false;
        console.info('reduced charging is '+reducedCharging)
        
        schedule({astro: "sunrise"}, function () {
            var msgText = "Akkustand bei Sonnenaufgang: " + getState('modbus.0.inputRegisters.13022_Battery_level_'/*Batteriekapazität*/).val + "%";
            var forecast = getState('pvforecast.0.summary.energy.today'/*Geschätzte Energie (heute)*/).val;
             if (forecast > 20000) {
                setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 100);
                //setState('evcc.0.control.prioritySoc'/*prioritySoc*/, 0);
                setState('telegram.0.communicate.response', forecast + "Wh Ertrag erwartet. Reduziere Ladeleistung auf 100W bis 11 Uhr");
                reducedCharging = true;
                setState('0_userdata.0.reducedCharging'/*reducedCharging*/, reducedCharging);
            } else {
                 setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 10600);
                 //setState('evcc.0.control.prioritySoc'/*prioritySoc*/, 30);
                 setState('telegram.0.communicate.response', forecast + "Wh Ertrag erwartet. Lade Akku sofort");
                 reducedCharging = false;
                 setState('0_userdata.0.reducedCharging'/*reducedCharging*/, reducedCharging);
            }
        
            log(msgText);
            setState('telegram.0.communicate.response', msgText);
            });
        
        
        schedule({hour: 11, minute: 0}, function () {
            if (reducedCharging) {
                setState('telegram.0.communicate.response', "Starte laden des Akkus mit 2 kW");
                log("Set max_charge_power to 2kW");
                setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 2000);
                //setState('evcc.0.control.prioritySoc'/*prioritySoc*/, 30);
            }
        });
        
        
        
        T Nicht stören
        T Nicht stören
        ticaki
        schrieb am zuletzt editiert von ticaki
        #13

        @doppellhelix
        Also stimmt doch allles :)

        um 11 Uhr wird die Variable reducedCharging nur abgefragt und nicht geschrieben.
        Beim start des Skriptes solltest du die Variable mit dem Datenpunkt initialisieren.

        Oh Paul war schon da :)

        EDIT: Naja ich würde die Variable ganz streichen und jedesmal getState() oder setState() verwenden, so als wenns ein fremder Datenpunkt ist. Sind ja nur 2 abfragen und 1 set pro Tag.

        Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

        Spenden

        1 Antwort Letzte Antwort
        0
        • paul53P paul53

          @doppellhelix sagte: Versteh nicht, wo ich die reducedCharging auf falsch setze?

          Beim Skriptstart in Zeile 1. Nach jeder Änderung im Skript wird das Skript neu gestartet. Wenn es nach SA passiert, ist um 11 Uhr die Variable false.

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

          @paul53 sagte in Erste Schritte beim Scripten - Einsteigerfrage:

          Beim Skriptstart in Zeile 1. Nach jeder Änderung im Skript wird das Skript neu gestartet. Wenn es nach SA passiert ist um 11 Uhr die Variable false.

          @Doppellhelix
          schreib den aktuellen Zustand in einen eigenen Datenpunkt und lies den bei Skriptstart aus

          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
          • paul53P paul53

            @doppellhelix sagte: Versteh nicht, wo ich die reducedCharging auf falsch setze?

            Beim Skriptstart in Zeile 1. Nach jeder Änderung im Skript wird das Skript neu gestartet. Wenn es nach SA passiert, ist um 11 Uhr die Variable false.

            D Offline
            D Offline
            Doppellhelix
            schrieb am zuletzt editiert von
            #15

            @paul53

            Ahhh, das erklärt es natürlich.
            Das ist aber dann ziemlich unelegant. Dann dürfte man ja nie am Script arbeiten, wenn man nicht bis zum nächsten Sonnenaufgang warten will.

            Ich bin davon ausgegangen, dass so ein Script wie ein SPS Programm arbeitet und das Script in einer Schleife stetig durchlaufen wird.

            Wie bekommt man das denn besser hin?

            HomoranH T paul53P 3 Antworten Letzte Antwort
            0
            • D Doppellhelix

              @paul53

              Ahhh, das erklärt es natürlich.
              Das ist aber dann ziemlich unelegant. Dann dürfte man ja nie am Script arbeiten, wenn man nicht bis zum nächsten Sonnenaufgang warten will.

              Ich bin davon ausgegangen, dass so ein Script wie ein SPS Programm arbeitet und das Script in einer Schleife stetig durchlaufen wird.

              Wie bekommt man das denn besser hin?

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

              @doppellhelix sagte in Erste Schritte beim Scripten - Einsteigerfrage:

              Wie bekommt man das denn besser hin?

              @homoran sagte in Erste Schritte beim Scripten - Einsteigerfrage:

              @Doppellhelix
              schreib den aktuellen Zustand in einen eigenen Datenpunkt und lies den bei Skriptstart aus

              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
              • D Doppellhelix

                @paul53

                Ahhh, das erklärt es natürlich.
                Das ist aber dann ziemlich unelegant. Dann dürfte man ja nie am Script arbeiten, wenn man nicht bis zum nächsten Sonnenaufgang warten will.

                Ich bin davon ausgegangen, dass so ein Script wie ein SPS Programm arbeitet und das Script in einer Schleife stetig durchlaufen wird.

                Wie bekommt man das denn besser hin?

                T Nicht stören
                T Nicht stören
                ticaki
                schrieb am zuletzt editiert von
                #17

                @doppellhelix sagte in Erste Schritte beim Scripten - Einsteigerfrage:

                @paul53

                Ahhh, das erklärt es natürlich.
                Das ist aber dann ziemlich unelegant. Dann dürfte man ja nie am Script arbeiten, wenn man nicht bis zum nächsten Sonnenaufgang warten will.

                Ich bin davon ausgegangen, dass so ein Script wie ein SPS Programm arbeitet und das Script in einer Schleife stetig durchlaufen wird.

                Wie bekommt man das denn besser hin?

                Den Edit wirst du nicht gelesen habe 2 Möglichkeiten

                • initialisiere die Variable mit getState()
                • streiche die Variable und verwende überall getState() und setState()

                Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                Spenden

                1 Antwort Letzte Antwort
                0
                • D Doppellhelix

                  Also erstmal,

                  danke euch beiden für eure Geduld mit mir :-)
                  Ich möchte das unbedingt verstehen, weil ich schon von Berufswegen mich dafür interessiere. Da sind es aber eher SPS Programme.

                  @asgothian
                  Versteh nicht, wo ich die reducedCharging auf falsch setze?

                  Zum Ablauf:

                  Bei Sonnenaufgang wird gecheckt, ob 20000 erreicht werden.
                  Dem ist heute so, als wird reducedCharging auf wahr gestellt.
                  Zeile 11

                  Dann passiert bis 11 Uhr nix.
                  Hier wird in Zeile 27 gecheckt, ob reucedCharging ansteht.
                  Das sollte es ja eigentlich noch. ISt ja nix anderes dazwischen passiert oder überseh ich was.

                  Hie nochmal der komplette code, damit wir wieder alle gleich sind :-)

                  var reducedCharging = false;
                  console.info('reduced charging is '+reducedCharging)
                  
                  schedule({astro: "sunrise"}, function () {
                      var msgText = "Akkustand bei Sonnenaufgang: " + getState('modbus.0.inputRegisters.13022_Battery_level_'/*Batteriekapazität*/).val + "%";
                      var forecast = getState('pvforecast.0.summary.energy.today'/*Geschätzte Energie (heute)*/).val;
                       if (forecast > 20000) {
                          setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 100);
                          //setState('evcc.0.control.prioritySoc'/*prioritySoc*/, 0);
                          setState('telegram.0.communicate.response', forecast + "Wh Ertrag erwartet. Reduziere Ladeleistung auf 100W bis 11 Uhr");
                          reducedCharging = true;
                          setState('0_userdata.0.reducedCharging'/*reducedCharging*/, reducedCharging);
                      } else {
                           setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 10600);
                           //setState('evcc.0.control.prioritySoc'/*prioritySoc*/, 30);
                           setState('telegram.0.communicate.response', forecast + "Wh Ertrag erwartet. Lade Akku sofort");
                           reducedCharging = false;
                           setState('0_userdata.0.reducedCharging'/*reducedCharging*/, reducedCharging);
                      }
                  
                      log(msgText);
                      setState('telegram.0.communicate.response', msgText);
                      });
                  
                  
                  schedule({hour: 11, minute: 0}, function () {
                      if (reducedCharging) {
                          setState('telegram.0.communicate.response', "Starte laden des Akkus mit 2 kW");
                          log("Set max_charge_power to 2kW");
                          setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 2000);
                          //setState('evcc.0.control.prioritySoc'/*prioritySoc*/, 30);
                      }
                  });
                  
                  
                  
                  AsgothianA Offline
                  AsgothianA Offline
                  Asgothian
                  Developer
                  schrieb am zuletzt editiert von
                  #18

                  @doppellhelix sagte in Erste Schritte beim Scripten - Einsteigerfrage:

                  Versteh nicht, wo ich die reducedCharging auf falsch setze?
                  Zum Ablauf:
                  Bei Sonnenaufgang wird gecheckt, ob 20000 erreicht werden.
                  Dem ist heute so, als wird reducedCharging auf wahr gestellt.
                  Zeile 11
                  Dann passiert bis 11 Uhr nix.
                  Hier wird in Zeile 27 gecheckt, ob reucedCharging ansteht.
                  Das sollte es ja eigentlich noch. ISt ja nix anderes dazwischen passiert oder überseh ich was.
                  Hie nochmal der komplette code, damit wir wieder alle gleich sind

                  Da ist dein Denkfehler:

                  • du setzt reducedCharging hier auf falsch:
                    var reducedCharging = false;
                  • wenn das Skript zum Sonnenaufgang läuft wird zum Sonnenaufgang der Wert von reducedCharging verändert. Das wäre heute passiert wenn Du das Skript nicht danach neu gestartet hättest. Ergo ist reducedCharging immer noch falsch

                  Vielleicht generell mal als Denkhilfe

                  Variablen sind:

                  • nur in dem Kontext bekannt in dem sie definiert sind. Der Kontext kann dabei das Skript sein, kann aber auch nur ein Teil des Skriptes sein:
                  const scriptglobal = true;
                  
                  if (23<11) {
                    const scriptlocal = true;
                    console.info('A global: ' + scriptglobal + ' local: ' + scriptlocal)
                  }
                  
                  console.info('B global: ' + scriptglobal + ' local: ' + scriptlocal)
                  

                  liefert:
                  A global: true local: true
                  B global: true local: undefined

                  • variablen belegen wenig Speicherplatz und sind nur aktiv wenn das Skript läuft
                  • auf variablen kann schnell und einfach zugegriffen werden (lesen und schreiben)

                  Datenpunkte sind:

                  • persistent - ihre Werte bleiben selbst über den Neustart des ioBroker erhalten
                  • global - sie sind nicht an einzelne Skripte gebunden
                  • zugriff erfordert mehr Code, da die Werte aus der Datenpunkt-Datenbank geholt / dahin geschrieben werden müssen. Das macht Datenpunkte weniger 'einfach' zu nutzen
                  • Zugriff kostet ggf. Zeit, so das der Code:
                  let value = Math.random();
                  setState('0_userdata.myState', value);
                  if (value == getState('0_userdata.myState').val console.info('gleich') else console.info('ungleich')
                  

                  nicht bei jedem Durchlauf die gleiche Meldung ins Log schreibt.

                  In deinem Code solltest Du die Variable also mit dem Wert des Datenpunktes vorbelegen, damit sie Synchron zum Datenpunkt ist.

                  var reducedCharging = getState('0_userdata.0.reducedCharging'/*reducedCharging*/).val;
                  

                  A.

                  ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
                  "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

                  1 Antwort Letzte Antwort
                  0
                  • D Offline
                    D Offline
                    Doppellhelix
                    schrieb am zuletzt editiert von Doppellhelix
                    #19

                    Puuuhhh, und ich dachte nimm dir mal schnell dieses kleine Script und pass es an :-)
                    Das war wohl sehr naiv.

                    Aber mitlerweile habe ich schon einiges gelernt. :+1:

                    Ich bin mir noch nicht sicher, ob die Variable in den Datenpunkt geschrieben wird..
                    Habe jetzt alles auf Datenpunkte umgeschrieben.
                    Hoffe ich zumíndest.

                    //var reducedCharging = false;
                    var reducedCharging = getState('0_userdata.0.reducedCharging'/*reducedCharging*/).val; 
                    console.info('reduced charging is '+reducedCharging);
                    
                    schedule({astro: "sunrise"}, function () {
                        var msgText = "Akkustand bei Sonnenaufgang: " + getState('modbus.0.inputRegisters.13022_Battery_level_'/*Batteriekapazität*/).val + "%";
                        var forecast = getState('pvforecast.0.summary.energy.today'/*Geschätzte Energie (heute)*/).val;
                         if (forecast > 20000) {
                            setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 100);
                            //setState('evcc.0.control.prioritySoc'/*prioritySoc*/, 0);
                            setState('telegram.0.communicate.response', forecast + "Wh Ertrag erwartet. Reduziere Ladeleistung auf 100W bis 11 Uhr");
                            //reducedCharging = true;
                            setState('0_userdata.0.reducedCharging'/*reducedCharging*/, true);
                        } else {
                             setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 10600);
                             //setState('evcc.0.control.prioritySoc'/*prioritySoc*/, 30);
                             setState('telegram.0.communicate.response', forecast + "Wh Ertrag erwartet. Lade Akku sofort");
                             setState('0_userdata.0.reducedCharging'/*reducedCharging*/, false);
                        }
                    
                        log(msgText);
                        setState('telegram.0.communicate.response', msgText);
                        });
                    
                    
                    schedule({hour: 12, minute: 0}, function () {
                        if (reducedCharging) {
                            setState('telegram.0.communicate.response', "Starte laden des Akkus mit 2 kW");
                            log("Set max_charge_power to 2kW");
                            setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 2000);
                            //setState('evcc.0.control.prioritySoc'/*prioritySoc*/, 30);
                        }
                    });
                    
                    
                    

                    EDIT:
                    hatte das Script ja auf 12 Uhr abgeändert und das hat funktioniert :clap:

                    AsgothianA 1 Antwort Letzte Antwort
                    0
                    • D Doppellhelix

                      Puuuhhh, und ich dachte nimm dir mal schnell dieses kleine Script und pass es an :-)
                      Das war wohl sehr naiv.

                      Aber mitlerweile habe ich schon einiges gelernt. :+1:

                      Ich bin mir noch nicht sicher, ob die Variable in den Datenpunkt geschrieben wird..
                      Habe jetzt alles auf Datenpunkte umgeschrieben.
                      Hoffe ich zumíndest.

                      //var reducedCharging = false;
                      var reducedCharging = getState('0_userdata.0.reducedCharging'/*reducedCharging*/).val; 
                      console.info('reduced charging is '+reducedCharging);
                      
                      schedule({astro: "sunrise"}, function () {
                          var msgText = "Akkustand bei Sonnenaufgang: " + getState('modbus.0.inputRegisters.13022_Battery_level_'/*Batteriekapazität*/).val + "%";
                          var forecast = getState('pvforecast.0.summary.energy.today'/*Geschätzte Energie (heute)*/).val;
                           if (forecast > 20000) {
                              setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 100);
                              //setState('evcc.0.control.prioritySoc'/*prioritySoc*/, 0);
                              setState('telegram.0.communicate.response', forecast + "Wh Ertrag erwartet. Reduziere Ladeleistung auf 100W bis 11 Uhr");
                              //reducedCharging = true;
                              setState('0_userdata.0.reducedCharging'/*reducedCharging*/, true);
                          } else {
                               setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 10600);
                               //setState('evcc.0.control.prioritySoc'/*prioritySoc*/, 30);
                               setState('telegram.0.communicate.response', forecast + "Wh Ertrag erwartet. Lade Akku sofort");
                               setState('0_userdata.0.reducedCharging'/*reducedCharging*/, false);
                          }
                      
                          log(msgText);
                          setState('telegram.0.communicate.response', msgText);
                          });
                      
                      
                      schedule({hour: 12, minute: 0}, function () {
                          if (reducedCharging) {
                              setState('telegram.0.communicate.response', "Starte laden des Akkus mit 2 kW");
                              log("Set max_charge_power to 2kW");
                              setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 2000);
                              //setState('evcc.0.control.prioritySoc'/*prioritySoc*/, 30);
                          }
                      });
                      
                      
                      

                      EDIT:
                      hatte das Script ja auf 12 Uhr abgeändert und das hat funktioniert :clap:

                      AsgothianA Offline
                      AsgothianA Offline
                      Asgothian
                      Developer
                      schrieb am zuletzt editiert von
                      #20

                      @doppellhelix sagte in Erste Schritte beim Scripten - Einsteigerfrage:

                      Puuuhhh, und ich dachte nimm dir mal schnell dieses kleine Script und pass es an
                      Das war wohl sehr naiv.

                      Ja, war es. gerade wenn du fremde Skripte übernimmst solltest Du dir vorher die Doku anschauen, damit du verstehst was die einzelnen Befehle wirklich tun.

                      Habe jetzt alles auf Datenpunkte umgeschrieben.
                      Hoffe ich zumíndest.

                      Das sieht erst einmal soweit gut aus.

                      Ob es das macht was du willst lässt sich so nicht sagen - dazu müssten wir wissen was das Ziel ist. :)

                      A.

                      ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
                      "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

                      1 Antwort Letzte Antwort
                      0
                      • D Doppellhelix

                        @paul53

                        Ahhh, das erklärt es natürlich.
                        Das ist aber dann ziemlich unelegant. Dann dürfte man ja nie am Script arbeiten, wenn man nicht bis zum nächsten Sonnenaufgang warten will.

                        Ich bin davon ausgegangen, dass so ein Script wie ein SPS Programm arbeitet und das Script in einer Schleife stetig durchlaufen wird.

                        Wie bekommt man das denn besser hin?

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

                        @doppellhelix sagte: Script wie ein SPS Programm arbeitet und das Script in einer Schleife stetig durchlaufen wird.

                        Nein, Javascript wird nicht in einer Schleife durchlaufen, sondern arbeitet Ereignis gesteuert. Ereignisse sind u.a. DP-Trigger, Zeitpläne, Timer.

                        Das Skript etwas übersichtlicher und mit weniger setState():

                        const idMaxPower = 'modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/;
                        const idForecast = 'pvforecast.0.summary.energy.today'/*Geschätzte Energie (heute)*/;
                        const idBatt     = 'modbus.0.inputRegisters.13022_Battery_level_'/*Batteriekapazität*/;
                        const idTelegram = 'telegram.0.communicate.response';
                        const idReduced  = '0_userdata.0.reducedCharging'/*reducedCharging*/;
                        
                        var reducedCharging = getState(idReduced).val;
                        log('reduced charging is ' + reducedCharging);
                         
                        schedule({astro: "sunrise"}, function () {
                            let msgText = "Akkustand bei Sonnenaufgang: " + getState(idBatt).val + " %\n";
                            const forecast = getState(idForecast).val;
                            let maxPower = 10600;
                            reducedCharging = forecast > 20000;
                            if (reducedCharging) {
                                maxPower = 100;
                                msgText += forecast + ' Wh Ertrag erwartet. Reduziere Ladeleistung auf 100W bis 11 Uhr';
                            } else {
                                msgText += forecast + ' Wh Ertrag erwartet. Lade Akku sofort';
                            }
                            log(msgText);
                            setState(idMaxPower, maxPower); 
                            setState(idTelegram, msgText);
                            setState(idReduced, reducedCharging, true);
                        });
                         
                        schedule('0 11 * * *', function () {
                            if (reducedCharging) {
                                setState(idTelegram, "Starte laden des Akkus mit 2 kW");
                                log("Set max_charge_power to 2kW");
                                setState(idMaxPower, 2000);
                            }
                        });
                        

                        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

                        fuzzy1955F 1 Antwort Letzte Antwort
                        0
                        • D Offline
                          D Offline
                          Doppellhelix
                          schrieb am zuletzt editiert von
                          #22

                          @Asgothian

                          Im Grunde genommen soll das Script dafür sorgen, dass die PV Anlage nicht in die 70% Abregelung kommt.
                          Wenn gutes Wetter ist (pvForecast > 20000 W), dann wird das wahrscheinlich passieren.
                          Im normalfall wird mit den ersten Sonnenstrahlen der Speicher geladen. Dieser ist um 10 Uhr voll und ab dann wird voll eingespeist.
                          Indem das Speicherladen verhindert und erst ab 11 Uhr freigegeben wird, umgeht man die 70% Abregelung. Alles über 70% geht dann in den Speicher und nicht ins Netz.

                          @paul53
                          Klasse. Danke dir.
                          Das nehme ich gerne mit, sobald ich weiß was da genau passiert.

                          @alle anderen.
                          Danke für eure Einsatz.

                          T 1 Antwort Letzte Antwort
                          0
                          • D Doppellhelix

                            @Asgothian

                            Im Grunde genommen soll das Script dafür sorgen, dass die PV Anlage nicht in die 70% Abregelung kommt.
                            Wenn gutes Wetter ist (pvForecast > 20000 W), dann wird das wahrscheinlich passieren.
                            Im normalfall wird mit den ersten Sonnenstrahlen der Speicher geladen. Dieser ist um 10 Uhr voll und ab dann wird voll eingespeist.
                            Indem das Speicherladen verhindert und erst ab 11 Uhr freigegeben wird, umgeht man die 70% Abregelung. Alles über 70% geht dann in den Speicher und nicht ins Netz.

                            @paul53
                            Klasse. Danke dir.
                            Das nehme ich gerne mit, sobald ich weiß was da genau passiert.

                            @alle anderen.
                            Danke für eure Einsatz.

                            T Nicht stören
                            T Nicht stören
                            ticaki
                            schrieb am zuletzt editiert von ticaki
                            #23

                            @doppellhelix

                            Nicht das es immer stimmt, aber chatgpt kann man für das erklären von Code eigentlich ganz gut gebrauchen und dann mit den gewonnen Fachbegriffen suchen, ob es nicht mal wieder nur viel Worte gemacht hat. :)

                            Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                            Spenden

                            1 Antwort Letzte Antwort
                            0
                            • D Offline
                              D Offline
                              Doppellhelix
                              schrieb am zuletzt editiert von Doppellhelix
                              #24

                              Hallo,

                              das Script hat leider noch einen kleinen Fehler drin.

                              Nochmal eine kurze Funktionsbeschreibung:

                              Bei Sonnenaufgang wird gecheckt, wieviel Sonnenertrag die PV Anlage erwartet.
                              Liegt der Ertrag über 20000, wird die Ladeleistung für den Battereispeicher zu laden auf 10 gedrosselt, und die Variable reducedCharging auf true gesetzt.
                              Um 11 Uhr wird die Ladeleistung auf 2000 angehoben.
                              Wenn keine 20000 zu erwarten sind, bleibts beim Standartwert 10600.

                              Das Problem ist, dass scheinbar immer um 11 Uhr auf 2000 gestellt wird. Und das, obwohl reducedCharging false ist.

                              Als Beispiel gestern und heute.
                              Ich bekam eine Telegram Nachricht, dass die 20000 nicht zu erwarten sind.
                              Um 11Uhr bekam ich dann die Nachricht, dass mit 2000 geladen wird.
                              Die Ladeleistung steht auch tatsächlich auf 2000 aber die Variable reducedCharging steht auf false.

                              Hat jemand eine Idee, was da falsch läuft?

                              var reducedCharging = getState('0_userdata.0.reducedCharging'/*reducedCharging*/).val; 
                              console.info('reduced charging is '+reducedCharging);
                              
                              schedule({astro: "sunrise"}, function () {
                                  var msgText = "Akkustand bei Sonnenaufgang: " + getState('modbus.0.inputRegisters.13022_Battery_level_'/*Batteriekapazität*/).val + "%";
                                  var forecast = getState('pvforecast.0.summary.energy.today'/*Geschätzte Energie (heute)*/).val;
                                   if (forecast > 20000) {
                                      setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 10);
                                      //setState('mqtt.0.evcc.site.prioritySoc'/*evcc/site/prioritySoc*/, 0);
                                      setState('telegram.0.communicate.response', forecast + "Wh Ertrag erwartet. Reduziere Ladeleistung auf 100W bis 11 Uhr");
                                      setState('0_userdata.0.reducedCharging'/*reducedCharging*/, true);
                                  } else {
                                       setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 10600);
                                       //setState('mqtt.0.evcc.site.prioritySoc'/*evcc/site/prioritySoc*/, 30);
                                       setState('telegram.0.communicate.response', forecast + "Wh Ertrag erwartet. Lade Akku sofort mit voller Leistung");
                                       setState('0_userdata.0.reducedCharging'/*reducedCharging*/, false);
                                  }
                              
                                  log(msgText);
                                  setState('telegram.0.communicate.response', msgText);
                                  });
                              
                              
                              schedule({hour: 11, minute: 0}, function () {
                                  if (reducedCharging) {
                                      setState('telegram.0.communicate.response', "Starte laden des Akkus mit 2 kW");
                                      log("Set max_charge_power to 2kW");
                                      setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 2000);
                                      //setState('mqtt.0.evcc.site.prioritySoc'/*evcc/site/prioritySoc*/, 30);
                                  }
                              });
                              
                              
                              paul53P 1 Antwort Letzte Antwort
                              0
                              • D Doppellhelix

                                Hallo,

                                das Script hat leider noch einen kleinen Fehler drin.

                                Nochmal eine kurze Funktionsbeschreibung:

                                Bei Sonnenaufgang wird gecheckt, wieviel Sonnenertrag die PV Anlage erwartet.
                                Liegt der Ertrag über 20000, wird die Ladeleistung für den Battereispeicher zu laden auf 10 gedrosselt, und die Variable reducedCharging auf true gesetzt.
                                Um 11 Uhr wird die Ladeleistung auf 2000 angehoben.
                                Wenn keine 20000 zu erwarten sind, bleibts beim Standartwert 10600.

                                Das Problem ist, dass scheinbar immer um 11 Uhr auf 2000 gestellt wird. Und das, obwohl reducedCharging false ist.

                                Als Beispiel gestern und heute.
                                Ich bekam eine Telegram Nachricht, dass die 20000 nicht zu erwarten sind.
                                Um 11Uhr bekam ich dann die Nachricht, dass mit 2000 geladen wird.
                                Die Ladeleistung steht auch tatsächlich auf 2000 aber die Variable reducedCharging steht auf false.

                                Hat jemand eine Idee, was da falsch läuft?

                                var reducedCharging = getState('0_userdata.0.reducedCharging'/*reducedCharging*/).val; 
                                console.info('reduced charging is '+reducedCharging);
                                
                                schedule({astro: "sunrise"}, function () {
                                    var msgText = "Akkustand bei Sonnenaufgang: " + getState('modbus.0.inputRegisters.13022_Battery_level_'/*Batteriekapazität*/).val + "%";
                                    var forecast = getState('pvforecast.0.summary.energy.today'/*Geschätzte Energie (heute)*/).val;
                                     if (forecast > 20000) {
                                        setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 10);
                                        //setState('mqtt.0.evcc.site.prioritySoc'/*evcc/site/prioritySoc*/, 0);
                                        setState('telegram.0.communicate.response', forecast + "Wh Ertrag erwartet. Reduziere Ladeleistung auf 100W bis 11 Uhr");
                                        setState('0_userdata.0.reducedCharging'/*reducedCharging*/, true);
                                    } else {
                                         setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 10600);
                                         //setState('mqtt.0.evcc.site.prioritySoc'/*evcc/site/prioritySoc*/, 30);
                                         setState('telegram.0.communicate.response', forecast + "Wh Ertrag erwartet. Lade Akku sofort mit voller Leistung");
                                         setState('0_userdata.0.reducedCharging'/*reducedCharging*/, false);
                                    }
                                
                                    log(msgText);
                                    setState('telegram.0.communicate.response', msgText);
                                    });
                                
                                
                                schedule({hour: 11, minute: 0}, function () {
                                    if (reducedCharging) {
                                        setState('telegram.0.communicate.response', "Starte laden des Akkus mit 2 kW");
                                        log("Set max_charge_power to 2kW");
                                        setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 2000);
                                        //setState('mqtt.0.evcc.site.prioritySoc'/*evcc/site/prioritySoc*/, 30);
                                    }
                                });
                                
                                
                                paul53P Offline
                                paul53P Offline
                                paul53
                                schrieb am zuletzt editiert von paul53
                                #25

                                @doppellhelix sagte: Hat jemand eine Idee, was da falsch läuft?

                                Du schreibst zwar zum Sonnenaufgang den Datenpunkt "0_userdata.0.reducedCharging", setzt aber nicht die Variable reducedCharging, die um 11:00 Uhr geprüft wird. Siehe Zeile 14 in meinem Vorschlag.

                                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

                                D 1 Antwort Letzte Antwort
                                0
                                • paul53P paul53

                                  @doppellhelix sagte: Hat jemand eine Idee, was da falsch läuft?

                                  Du schreibst zwar zum Sonnenaufgang den Datenpunkt "0_userdata.0.reducedCharging", setzt aber nicht die Variable reducedCharging, die um 11:00 Uhr geprüft wird. Siehe Zeile 14 in meinem Vorschlag.

                                  D Offline
                                  D Offline
                                  Doppellhelix
                                  schrieb am zuletzt editiert von
                                  #26

                                  @paul53 said in Erste Schritte beim Scripten - Einsteigerfrage:

                                  @doppellhelix sagte: Hat jemand eine Idee, was da falsch läuft?

                                  Du schreibst zwar zum Sonnenaufgang den Datenpunkt "0_userdata.0.reducedCharging", setzt aber nicht die Variable reducedCharging, die um 11:00 Uhr geprüft wird.

                                  Wird das nicht in Zeile 11 gemacht?

                                  setState('0_userdata.0.reducedCharging'/*reducedCharging*/, true);
                                  
                                  paul53P T 2 Antworten Letzte Antwort
                                  0
                                  • D Doppellhelix

                                    @paul53 said in Erste Schritte beim Scripten - Einsteigerfrage:

                                    @doppellhelix sagte: Hat jemand eine Idee, was da falsch läuft?

                                    Du schreibst zwar zum Sonnenaufgang den Datenpunkt "0_userdata.0.reducedCharging", setzt aber nicht die Variable reducedCharging, die um 11:00 Uhr geprüft wird.

                                    Wird das nicht in Zeile 11 gemacht?

                                    setState('0_userdata.0.reducedCharging'/*reducedCharging*/, true);
                                    
                                    paul53P Offline
                                    paul53P Offline
                                    paul53
                                    schrieb am zuletzt editiert von
                                    #27

                                    @doppellhelix sagte: Wird das nicht in Zeile 11 gemacht?

                                    Nein, es wird nur der DP geschrieben, aber nicht die Variable gesetzt.

                                    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

                                    D 1 Antwort Letzte Antwort
                                    0
                                    • D Doppellhelix

                                      @paul53 said in Erste Schritte beim Scripten - Einsteigerfrage:

                                      @doppellhelix sagte: Hat jemand eine Idee, was da falsch läuft?

                                      Du schreibst zwar zum Sonnenaufgang den Datenpunkt "0_userdata.0.reducedCharging", setzt aber nicht die Variable reducedCharging, die um 11:00 Uhr geprüft wird.

                                      Wird das nicht in Zeile 11 gemacht?

                                      setState('0_userdata.0.reducedCharging'/*reducedCharging*/, true);
                                      
                                      T Nicht stören
                                      T Nicht stören
                                      ticaki
                                      schrieb am zuletzt editiert von
                                      #28

                                      @doppellhelix

                                      Wie schon erwähnt - Variable setzen Variable schreiben - nicht Variable setzen Wert schreiben.

                                      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                      Spenden

                                      1 Antwort Letzte Antwort
                                      0
                                      • paul53P paul53

                                        @doppellhelix sagte: Wird das nicht in Zeile 11 gemacht?

                                        Nein, es wird nur der DP geschrieben, aber nicht die Variable gesetzt.

                                        D Offline
                                        D Offline
                                        Doppellhelix
                                        schrieb am zuletzt editiert von
                                        #29

                                        @paul53 said in Erste Schritte beim Scripten - Einsteigerfrage:

                                        @doppellhelix sagte: Wird das nicht in Zeile 11 gemacht?

                                        Nein, es wird nur der DP geschrieben, aber nicht die Variable gesetzt.

                                        Boah, ich werde kirre..... :grin:
                                        Ist das nicht das Selbe?

                                        z.b. in Zeile 8, wird mit setState eine Variable auf den Wert 10 gesetzt.
                                        Das funktioniert.
                                        Warum funktioniert das nicht in der Zeile 11?

                                        Bitte erklärs mir.

                                        HomoranH AsgothianA 2 Antworten Letzte Antwort
                                        0
                                        • D Doppellhelix

                                          @paul53 said in Erste Schritte beim Scripten - Einsteigerfrage:

                                          @doppellhelix sagte: Wird das nicht in Zeile 11 gemacht?

                                          Nein, es wird nur der DP geschrieben, aber nicht die Variable gesetzt.

                                          Boah, ich werde kirre..... :grin:
                                          Ist das nicht das Selbe?

                                          z.b. in Zeile 8, wird mit setState eine Variable auf den Wert 10 gesetzt.
                                          Das funktioniert.
                                          Warum funktioniert das nicht in der Zeile 11?

                                          Bitte erklärs mir.

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

                                          @doppellhelix sagte in Erste Schritte beim Scripten - Einsteigerfrage:

                                          Ist das nicht das Selbe?

                                          nicht bei ioBroker

                                          Datenpunkte enthalten "dauerhaft" gespeicherte Werte, die dem ganzen ioBroker Universum zur Verfügung stehen.

                                          Variablen existieten nur in dem Skript, und das auch nur bis zum Neustart

                                          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 -

                                          D 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

                                          753

                                          Online

                                          32.5k

                                          Benutzer

                                          81.6k

                                          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