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

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.6k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.0k

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

Erste Schritte beim Scripten - Einsteigerfrage

Geplant Angeheftet Gesperrt Verschoben JavaScript
43 Beiträge 6 Kommentatoren 4.1k 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.
  • paul53P paul53

    @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);
        }
    });
    
    fuzzy1955F Online
    fuzzy1955F Online
    fuzzy1955
    schrieb am zuletzt editiert von
    #41

    @paul53
    Hallo Paul,

    dein Vorschlag mit den CONST-Variablen der DP-Definition ist wirklich in vielen Skripten eine super Möglichkeit, um die Übersichtlichkeit zu gewährleisten! Bei Änderungen in Datenpunktnamen braucht man nur am Anfang des Skripts zu schauen.

    :blush: Fuzzy

    Raspberry PI5 mit Linux Debian 13, IoBroker v7.7.22, VIS-2, MariaDB (MySQL)
    Shellies: 1G4, 1MiniG3, PlusI4DC, PlusPlugS, Pro0110PM, ProSmoke. Modbus: Waveshare Relay 8 Channels, Waveshare RS485-TO-ETH.
    PV: 10 kWp Module, 2 x Deye WR SUN-10K, 3 x 10 kWh MeritSun LiFe Speicher, KEBA P30 Wallbox, Fronius Wattpilot home 11

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

      Guten Morgen,

      durch einen kleinen Hardwarefehler, musste ich mit iobroker auf neue Hardware umziehen.
      Dieses Script hier, habe ich einfach per Copy+Paste rüber kopiert.
      Die 0_userdata.0.reducedCharging habe ich angelegt.

      Dennoch läuft das Script nicht richtig:

      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('telegram.0.communicate.response', forecast + "Wh Ertrag erwartet. Reduziere Ladeleistung auf 10W bis 11 Uhr");
              reducedCharging = true;
          } else {
               setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 10600);
               setState('telegram.0.communicate.response', forecast + "Wh Ertrag erwartet. Lade Akku sofort mit voller Leistung");
               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 1 kW");
              log("Set max_charge_power to 1kW");
              setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 1000);
                 }
      });
      
      

      Bei Sonnenaufgang wird alles gecheckt.
      Heute morgen ist der erwartete Ertrag (pvforecast.0.sumary.energy.today bei 20083
      Dennoch sagt das Script:

      "Akkustand bei Sonnenaufgang: 66,3%"
      "20083 Wh Ertrag erwartet. Lade Akku sofort mit voller Leistung."

      Auch die reduced Charging wurde nicht gesetzt.

      Ich habe auch @paul53 "optimiertes" Script 1zu1 eingefügt uns ausprobiert.
      Auch dieses macht den gleichen "Fehler"

      Könnt Ihr bitte noch einmal nachschauen, was hier gerade falsch läuft?

      Vielen Dank.

      D 1 Antwort Letzte Antwort
      0
      • D Doppellhelix

        Guten Morgen,

        durch einen kleinen Hardwarefehler, musste ich mit iobroker auf neue Hardware umziehen.
        Dieses Script hier, habe ich einfach per Copy+Paste rüber kopiert.
        Die 0_userdata.0.reducedCharging habe ich angelegt.

        Dennoch läuft das Script nicht richtig:

        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('telegram.0.communicate.response', forecast + "Wh Ertrag erwartet. Reduziere Ladeleistung auf 10W bis 11 Uhr");
                reducedCharging = true;
            } else {
                 setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 10600);
                 setState('telegram.0.communicate.response', forecast + "Wh Ertrag erwartet. Lade Akku sofort mit voller Leistung");
                 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 1 kW");
                log("Set max_charge_power to 1kW");
                setState('modbus.0.holdingRegisters.33046_Max_Charging_Power'/*Max Ladeleistung*/, 1000);
                   }
        });
        
        

        Bei Sonnenaufgang wird alles gecheckt.
        Heute morgen ist der erwartete Ertrag (pvforecast.0.sumary.energy.today bei 20083
        Dennoch sagt das Script:

        "Akkustand bei Sonnenaufgang: 66,3%"
        "20083 Wh Ertrag erwartet. Lade Akku sofort mit voller Leistung."

        Auch die reduced Charging wurde nicht gesetzt.

        Ich habe auch @paul53 "optimiertes" Script 1zu1 eingefügt uns ausprobiert.
        Auch dieses macht den gleichen "Fehler"

        Könnt Ihr bitte noch einmal nachschauen, was hier gerade falsch läuft?

        Vielen Dank.

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

        @doppellhelix

        Nach langer Sucherei habe ich es gefunden.
        Ich hatte im Adapter pv.forecast nicht den Haken gesetzt bei: "Werte in W statt kW."

        :face_palm:

        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

        527

        Online

        32.6k

        Benutzer

        82.3k

        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