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

  • Default (No Skin)
  • No Skin
Collapse
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.8k

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

Erste Schritte beim Scripten - Einsteigerfrage

Scheduled Pinned Locked Moved JavaScript
43 Posts 6 Posters 4.1k Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • 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 Offline
    fuzzy1955F Offline
    fuzzy1955
    wrote on last edited by
    #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 Reply Last reply
    0
    • D Offline
      D Offline
      Doppellhelix
      wrote on last edited by
      #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 Reply Last reply
      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
        wrote on last edited by
        #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 Reply Last reply
        0
        Reply
        • Reply as topic
        Log in to reply
        • Oldest to Newest
        • Newest to Oldest
        • Most Votes


        Support us

        ioBroker
        Community Adapters
        Donate

        631

        Online

        32.6k

        Users

        82.3k

        Topics

        1.3m

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

        • Don't have an account? Register

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