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. [gelöst] JSON-Tabelle mit js.script triggern

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    15
    1
    542

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.9k

[gelöst] JSON-Tabelle mit js.script triggern

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
23 Beiträge 3 Kommentatoren 1.8k Aufrufe
  • Ä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 Offline
    paul53P Offline
    paul53
    schrieb am zuletzt editiert von
    #4

    Da Du keine Angabe dazu gemacht hast, gehe ich davon aus, dass Du weißt, wie der JSON-String in das Script gelangt und er nur noch ausgewertet werden muss. Vielleicht so

    const idJSON = '...';  // Datenpunkt mit JSON-String ?
    const idBew = '...';  // Aktor Bewässerung
    
    var sched1 = null;
    var sched2 = null;
    var json = getState(idJSON).val;
    
    function zeiten() {
       var arr = JSON.parse(json);  // Array aus 7 Elementen (Wochentage)
       var now = new Date();
       var wd = now.getDay() - 1;  // Wochentag (0 = Montag)
       if(wd < 0) wd = 6;  // Sonntag
       var obj = arr[wd];
       if(sched1) clearSchedule(sched1);
       if(obj.Active == "x" && obj.Bew1_time) {  // ist Active ein String ?
          var t = obj.Bew1.split(':');
          sched1 = schedule(t[1] + ' ' + t[0] + ' * * *', function() {
             setState(idBew, true); 
             setStateDelayed(idBew, false, 60000 * obj.Bew1_time);
          });
       }
       if(sched2) clearSchedule(sched2);      
       if(obj.Active == "x" && obj.Bew2_time) {
          t = obj.Bew2.split(':');
          sched2 = schedule(t[1] + ' ' + t[0] + ' * * *', function() {
             setState(idBew, true); 
             setStateDelayed(idBew, false, 60000 * obj.Bew2_time);
          });
       }
    }       
    
    zeiten();  // Skriptstart
    
    schedule('1 0 * * *', zeiten);  // kurz nach Mitternacht
    
    // Änderung des JSON-Strings
    on(idJSON, function(dp) {
       json = dp.state.val;
       zeiten();
    });
    
    

    EDIT: korrigiert ) –> , und "true" --> "x"

    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

    1 Antwort Letzte Antwort
    0
    • S Offline
      S Offline
      sveni_lee
      schrieb am zuletzt editiert von
      #5

      @paul53:

      Da Du keine Angabe dazu gemacht hast, gehe ich davon aus, dass Du weißt, wie der JSON-String in das Script gelangt und er nur noch ausgewertet werden muss. Vielleicht so `

      der JSON-String wird vorher in in ein Objekt javascript.0.Bewässerung.Ventil_1.BewaesserungsPlan geschrieben.

      Kann also so ausgelesen werden, richtig?

      const idJSON = 'javascript.0.Bewässerung.Ventil_1.BewaesserungsPlan'
      const idBew = 'javascript.0.Bewässerung.Ventil1.LaufzeitVentil1'
      

      die idBew wäre schon die Laufzeit javascript.0.Bewässerung.Ventil1.LaufzeitVentil1

      also müsste das in deinem script dann wie folgt heißen, richtig?

         if(obj.Active == "true" && obj.Bew1_time) {  // ist Aktive ein String ?
            var t = obj.Bew1.split(':');
            sched1 = schedule(t[1] + ' ' + t[0] + ' * * *') function() {
               setState(idBew, obj.Bew1_time); 
      
      

      das Abschalten wird dann über einen coundown erledigt…

      1 Antwort Letzte Antwort
      0
      • paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von
        #6

        @sveni_lee:

        der JSON-String wird vorher in in ein Objekt javascript.0.Bewässerung.Ventil_1.BewaesserungsPlan geschrieben.

        Kann also so ausgelesen werden, richtig? `
        Ja. Semikolon am Zeilenende nicht vergessen !
        @sveni_lee:

        also müsste das in deinem script dann wie folgt heißen, richtig?

                 setState(idBew, obj.Bew1_time);
        

        das Abschalten wird dann über einen coundown erledigt… `
        Ja, wenn der Countdown im Minutentakt erfolgt.

        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

        1 Antwort Letzte Antwort
        0
        • S Offline
          S Offline
          sveni_lee
          schrieb am zuletzt editiert von
          #7

          vielen Dank…

          werde ich dann mal testen :-)

          1 Antwort Letzte Antwort
          0
          • S Offline
            S Offline
            sveni_lee
            schrieb am zuletzt editiert von
            #8

            ich hab jetzt 2 Fehlermeldungen.

            Leider ist mein Javascript nicht besonders gut…

            ~~![](</s><URL url=)https://i.imgur.com/4YAGH7u.jpg" />

            ![](</s><URL url=)https://i.imgur.com/kQXMgy0.jpg" />~~

            1 Antwort Letzte Antwort
            0
            • paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von
              #9

              Sorry, vor function() muss ein Komma anstelle der schließenden Klammer.

                    sched1 = schedule(t[1] + ' ' + t[0] + ' * * *', function() {
              
              

              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

              1 Antwort Letzte Antwort
              0
              • S Offline
                S Offline
                sveni_lee
                schrieb am zuletzt editiert von
                #10

                kein Problem,

                Danke für die schnelle Hilfe…

                Ich habe das Script jetzt mal getestet aber irgendwie wird die Bewässerungszeit nicht gesetzt.

                Ich habe gestern abend einen Terminn für heute früh gesetzt, weil ich gesehen hatte das Du einen Schedule

                täglich kurz nach 0:00Uhr gesetzt hast. Aber auch das hat nichts bewirkt.

                ich hätte auch noch eine anderen JSON-String...

                {"0":{"Bew1":{"wecken":false,"nachricht":0,"dauer":90,"stunde":5,"minute":25},"Bew2":{"wecken":false,"nachricht":"","dauer":0,"stunde":0,"minute":0},"Optionen":{"Active":true,"Option1":"","Option2":"","Option3":""}},"1":{"Bew1":{"wecken":true,"nachricht":1,"dauer":90,"stunde":5,"minute":30},"Bew2":{"wecken":true,"nachricht":"","dauer":0,"stunde":0,"minute":0},"Optionen":{"Active":true,"Option1":"","Option2":"","Option3":""}},"2":{"Bew1":{"wecken":true,"dauer":90,"nachricht":1,"stunde":5,"minute":"25"},"Bew2":{"wecken":true,"nachricht":"","dauer":0,"stunde":0,"minute":0},"Optionen":{"Active":true,"Option1":"","Option2":"","Option3":""}},"3":{"Bew1":{"wecken":true,"nachricht":0,"dauer":90,"stunde":5,"minute":25},"Bew2":{"wecken":true,"nachricht":"","dauer":0,"stunde":0,"minute":0},"Optionen":{"Active":true,"Option1":"","Option2":"","Option3":""}},"4":{"Bew1":{"wecken":true,"nachricht":0,"dauer":90,"stunde":5,"minute":25},"Bew2":{"wecken":true,"nachricht":"","dauer":0,"stunde":0,"minute":0},"Optionen":{"Active":true,"Option1":"","Option2":"","Option3":""}},"5":{"Bew1":{"wecken":false,"nachricht":2,"dauer":5,"stunde":23,"minute":10},"Bew2":{"wecken":false,"nachricht":"","dauer":0,"stunde":0,"minute":0},"Optionen":{"Active":true,"Option1":"","Option2":"","Option3":""}},"6":{"Bew1":{"wecken":true,"nachricht":2,"dauer":90,"stunde":9,"minute":0},"Bew2":{"wecken":true,"nachricht":"","dauer":0,"stunde":0,"minute":0},"Optionen":{"Active":true,"Option1":"","Option2":"","Option3":""}}}
                

                in diesem Fall sind keine Wochentage worhanden sondern nur 0-6…

                eventuell ist der ja leichter zu händeln...

                1 Antwort Letzte Antwort
                0
                • paul53P Offline
                  paul53P Offline
                  paul53
                  schrieb am zuletzt editiert von
                  #11

                  @sveni_lee:

                  Ich habe das Script jetzt mal getestet aber irgendwie wird die Bewässerungszeit nicht gesetzt. `
                  Dann füge mal Logs ein, um zu sehen, woran es hakt.

                  const idJSON = 'javascript.0.Bewässerung.Ventil_1.BewaesserungsPlan';
                  const idBew = 'javascript.0.Bewässerung.Ventil1.LaufzeitVentil1';
                  
                  var debug = true;
                  var sched1 = null;
                  var sched2 = null;
                  var json = getState(idJSON).val;
                  
                  function zeiten() {
                     var arr = JSON.parse(json);  // Array aus 7 Elementen (Wochentage)
                     var now = new Date();
                     var wd = now.getDay() - 1;  // Wochentag (0 = Montag)
                     if(wd < 0) wd = 6;  // Sonntag
                     if(debug) log('Wochentag: ' + wd);
                     var obj = arr[wd];
                     if(debug) log(JSON.stringify(obj));
                     if(sched1) clearSchedule(sched1);
                     if(debug) log('Active: ' + obj.Active + ' Typ: ' + typeof obj.Active);
                     if(debug) log('Bew1 um: ' + obj.Bew1 + ' für ' + obj.Bew1_time + ' Minuten ' + ' Typ: ' + typeof obj.Bew1_time);
                     if(obj.Active == "true" && obj.Bew1_time) {  // ist Active ein String ?
                        var t = obj.Bew1.split(':');
                        sched1 = schedule(t[1] + ' ' + t[0] + ' * * *', function() {
                           setState(idBew, obj.Bew1_time);
                           if(debug) log('Bewässerung1 gestartet');
                        });
                     }
                     if(sched2) clearSchedule(sched2);     
                     if(obj.Active == "true" && obj.Bew2_time) {
                        t = obj.Bew2.split(':');
                        sched2 = schedule(t[1] + ' ' + t[0] + ' * * *', function() {
                           setState(idBew, obj.Bew1_time);
                        });
                     }
                  }       
                  
                  zeiten();  // Skriptstart
                  
                  schedule('1 0 * * *', zeiten);  // kurz nach Mitternacht
                  
                  // Änderung des JSON-Strings
                  on(idJSON, function(dp) {
                     json = dp.state.val;
                     zeiten();
                  });
                  
                  

                  EDIT: Fehlendes + korrigiert

                  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

                  1 Antwort Letzte Antwort
                  0
                  • S Offline
                    S Offline
                    sveni_lee
                    schrieb am zuletzt editiert von
                    #12

                    so funktioniert jetzt… :D

                    ein Fehler habe ich gefunden:

                    if(debug) log('Bew1 um: ' + obj.Bew1 + ' für ' + obj.Bew1_time ' Minuten ' + ' Typ: ' + typeof obj.Bew1_time);
                    

                    vor 'Minuten' fehlt ein +

                    und das eigendiche Problem war hier

                    if(obj.Active == "true" && obj.Bew1_time) {  // ist Active ein String ?
                    

                    und wenn richtig gelesen hätte wäre es mir auch aufgefallen. Active ist ein String also…

                    if(obj.Active == "x" && obj.Bew1_time) {  // ist Active ein String ?
                    

                    und schon klappt es :-)

                    1 Antwort Letzte Antwort
                    0
                    • paul53P Offline
                      paul53P Offline
                      paul53
                      schrieb am zuletzt editiert von
                      #13

                      @sveni_lee:

                      if(obj.Active == "x" && obj.Bew1_time) {  // ist Active ein String ?
                      ```` `  
                      

                      Dann habe ich dies falsch interpretiert:
                      @sveni_lee:

                      soll immer bewässert werden wenn, wenn Active=true ist und … `
                      Markiere bitte noch das Thema als gelöst (im Betreff des ersten Beitrags).

                      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

                      1 Antwort Letzte Antwort
                      0
                      • S Offline
                        S Offline
                        sveni_lee
                        schrieb am zuletzt editiert von
                        #14

                        Ich hätte jetzt doch noch zwei Fragen zu dem Skript:

                        Ich habe nun 2 Kreisläufe die ich nun gern steuern möchte.

                        Kann ich das script einfach um eine Funktion bspw. Funktion zeiten_Ventil2() erweitern? Im grunde ist es der selbe Aufbau nur das

                        sich die beiden Konstanten ändern "const idJSON" und "const idBew"…

                        und ich würde mir gern anzeigen lassen, wann die nächste Bewesserung gestartet werden soll und für wie lange...

                        ist das auch irgendwie realisierbar?

                        1 Antwort Letzte Antwort
                        0
                        • paul53P Offline
                          paul53P Offline
                          paul53
                          schrieb am zuletzt editiert von
                          #15

                          @sveni_lee:

                          ich würde mir gern anzeigen lassen, wann die nächste Bewesserung gestartet werden soll und für wie lange… `
                          Dann ergänze das Skript um einen Datenpunkt (Typ Zeichenkette) für die Zeitanzeige.

                          const idZeit = 'javascript.0.Bewässerung.Ventil1.Zeitpunkt';
                          
                                setState(idZeit, obj.Bew1 + ' für ' + obj.Bew1_time + ' Minuten', true);
                                var t = obj.Bew1.split(':');
                                sched1 = schedule(t[1] + ' ' + t[0] + ' * * *', function() {
                                   setState(idBew, obj.Bew1_time);
                                   if(debug) log('Bewässerung1 gestartet');
                                   if(obj.Bew2_time) setState(idZeit, obj.Bew2 + ' für ' + obj.Bew2_time + ' Minuten', true);
                                });
                          
                          

                          @sveni_lee:

                          Ich habe nun 2 Kreisläufe die ich nun gern steuern möchte.

                          Kann ich das script einfach um eine Funktion bspw. Funktion zeiten_Ventil2() erweitern? `
                          Das Skript einfach in ein zweites Skript kopieren und die 3 ID-Konstanten am Anfang ändern.

                          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

                          1 Antwort Letzte Antwort
                          0
                          • S Offline
                            S Offline
                            sveni_lee
                            schrieb am zuletzt editiert von
                            #16

                            Danke, das klappt super…

                            ich hab jetzt noch Uhrzeit und dauer von einander getrennt...

                                  setState(idZeit, obj.Bew1, true);
                                  setState(idDauer, obj.Bew1_time + ' Minuten', true);
                            

                            Kann mann noch irgendwie den Wochentag dort mit reinbringen? Es kann ja vorkommen, das nicht jeden Tag bewässert wird.

                            1 Antwort Letzte Antwort
                            0
                            • paul53P Offline
                              paul53P Offline
                              paul53
                              schrieb am zuletzt editiert von
                              #17

                              @sveni_lee:

                              Kann mann noch irgendwie den Wochentag dort mit reinbringen? Es kann ja vorkommen, das nicht jeden Tag bewässert wird. `
                              Der Wochtentag als Zahl 0…6 liegt in der Variablen wd bereits vor. Durch Verwendung der Zahl als Index in ein Array, kann ein Name zugeordnet werden.

                              const days = ['Mo','Di','Mi','Do','Fr','Sa','So'];
                              
                              log('Wochentag: ' + days[wd]);
                              

                              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

                              1 Antwort Letzte Antwort
                              0
                              • S Offline
                                S Offline
                                sveni_lee
                                schrieb am zuletzt editiert von
                                #18

                                Jepp… auch das klappt wunderbar...!

                                So langsam bekomme ich Ahnung wie man was realisieren kann.

                                Das Skript überprüft ja kurz nach Mitternacht ob für den dann aktuellen Tag was ansteht, das hat zur Folge, dass bis zum nächsten Tag als nächste Bewässerung immer noch die Zeit von heute angezeigt wird...

                                Gesendet von iPhone mit Tapatalk Pro

                                1 Antwort Letzte Antwort
                                0
                                • paul53P Offline
                                  paul53P Offline
                                  paul53
                                  schrieb am zuletzt editiert von
                                  #19

                                  @sveni_lee:

                                  Das Skript überprüft ja kurz nach Mitternacht ob für den dann aktuellen Tag was ansteht, das hat zur Folge, dass bis zum nächsten Tag als nächste Bewässerung immer noch die Zeit von heute angezeigt wird… `
                                  Ja, oder

                                           if(obj.Bew2_time) setState(idZeit, obj.Bew2 + ' für ' + obj.Bew2_time + ' Minuten', true);
                                           else setState(idZeit, 'morgen oder später', true;
                                  
                                  

                                  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

                                  1 Antwort Letzte Antwort
                                  0
                                  • S Offline
                                    S Offline
                                    sveni_lee
                                    schrieb am zuletzt editiert von
                                    #20

                                    ich habe mich jetzt intensive damit auseinandergesetzt…

                                    Mein Ziel ist/war es die Geplante nächste Bewässerung anzeigen zu lassen auch wenn sie erst in den nächsten Tagen geplant ist.

                                    also habe ich das skript mit meinen bescheidenen Kenntnissen erweitert.

                                    const idJSON = 'javascript.0.Bewässerung.Ventil_1.BewaesserungsPlan';
                                    const idBew = '';
                                    const idZeit = 'javascript.0.Bewässerung.Ventil1.Zeitpunkt';
                                    const idDauer = 'javascript.0.Bewässerung.Ventil1.Dauer_next';
                                    const days = ['Mo','Di','Mi','Do','Fr','Sa','So'];
                                    
                                    var debug = true;
                                    var sched1 = null;
                                    var sched2 = null;
                                    var json = getState(idJSON).val;
                                    
                                    function zeiten() {
                                       setState(idZeit, '--:--', true);   // default Anzeige falls keine Zeit gefunden wird
                                       setState(idDauer, ' nicht geplant', true);   // default Anzeife falls keine Zeit gefunden wird
                                       var arr = JSON.parse(json);  // Array aus 7 Elementen (Wochentage)
                                       var now = new Date();
                                       var wd = now.getDay() - 1;  // Wochentag (0 = Montag)
                                       if(wd < 0) wd = 6;  // Sonntag
                                       if(debug) log('Wochentag: ' + wd);
                                       var obj = arr[wd];
                                       if(debug) log(JSON.stringify(obj));
                                       if(sched1) clearSchedule(sched1);
                                       if(debug) log('Active: ' + obj.Active + ' Typ: ' + typeof obj.Active);
                                       if(debug) log('Bew1 um: ' + obj.Bew1 + ' für ' + obj.Bew1_time + ' Minuten ' + ' Typ: ' + typeof obj.Bew1_time);
                                       var time = ("0" + now.getHours()).slice(-2)   + ":" + ("0" + now.getMinutes()).slice(-2);
                                       log('Zeit jetzt: ' + time); //nur für Testzwecke
                                       log(time < obj.Bew1); // nur für Testzwecke
                                       if(obj.Active == "x" && obj.Bew1_time && time < obj.Bew1) {  // ist Active ein String ?
                                          setState(idZeit, days[wd] + '. ' + obj.Bew1, true);
                                          setState(idDauer, obj.Bew1_time + ' Minuten', true);
                                          var t = obj.Bew1.split(':');
                                          sched1 = schedule(t[1] + ' ' + t[0] + ' * * *', function() {
                                             setState(idBew, obj.Bew1_time);
                                             if(debug) log('Bewässerung1 gestartet');
                                          });
                                       }
                                       if(sched2) clearSchedule(sched2);     
                                       if(obj.Active == "x" && obj.Bew2_time && time < obj.Bew2) {
                                          setState(idZeit, days[wd] + '. ' + obj.Bew2, true);
                                          setState(idDauer, obj.Bew2_time + ' Minuten', true);
                                          t = obj.Bew2.split(':');
                                          sched2 = schedule(t[1] + ' ' + t[0] + ' * * *', function() {
                                             setState(idBew, obj.Bew2_time);
                                          });
                                       }
                                       else 
                                          for (i=1; i<=7; i++) {
                                              wd = wd + 1
                                              if(wd>6) wd = 0; //umschalten Sonntag auf Montag
                                              obj = arr[wd];
                                              if(obj.Active == "x" && obj.Bew1_time) {
                                                 setState(idZeit, days[wd] + '. ' + obj.Bew1, true);
                                                 setState(idDauer, obj.Bew1_time + ' Minuten', true);
                                                 break;
                                              }
                                              else
                                                 if(obj.Active == "x" && obj.Bew2_time) {
                                                    setState(idZeit, days[wd] + '. ' + obj.Bew2, true);
                                                    setState(idDauer, obj.Bew2_time + ' Minuten', true);
                                                    break;
                                                 }
                                          }
                                    }       
                                    
                                    zeiten();  // Skriptstart
                                    
                                    schedule('1 0 * * *', zeiten);  // kurz nach Mitternacht
                                    
                                    // Änderung des JSON-Strings
                                    on(idJSON, function(dp) {
                                       json = dp.state.val;
                                       zeiten();
                                    });
                                    

                                    das klappt auch mit einer Ausnahme. Ich habe für heute eine Bew. für 19:25 eingetragen aber diese wird mir nicht angezeigt als nächste

                                    Bewässerung. Ich habe sicher irgendwo einen Fehler aber ich finde ihn einfach nicht…

                                    EDIT:

                                    hab's gelöst.... klappt jetzt... musste noch ein wenig mit dem "if" und "else if" Konditionen spielen

                                    const idJSON = 'javascript.0.Bewässerung.Ventil_1.BewaesserungsPlan';
                                    const idBew = '';
                                    const idZeit = 'javascript.0.Bewässerung.Ventil1.Zeitpunkt';
                                    const idDauer = 'javascript.0.Bewässerung.Ventil1.Dauer_next';
                                    const days = ['Mo','Di','Mi','Do','Fr','Sa','So'];
                                    
                                    var debug = true;
                                    var sched1 = null;
                                    var sched2 = null;
                                    var json = getState(idJSON).val;
                                    
                                    function zeiten() {
                                       setState(idZeit, '--:--', true);   // default Anzeige falls keine Zeit gefunden wird
                                       setState(idDauer, ' nicht geplant', true);   // default Anzeife falls keine Zeit gefunden wird
                                       var t = 0;
                                       var arr = JSON.parse(json);  // Array aus 7 Elementen (Wochentage)
                                       var now = new Date();
                                       var wd = now.getDay() - 1;  // Wochentag (0 = Montag)
                                       if(wd < 0) wd = 6;  // Sonntag
                                       if(debug) log('Wochentag: ' + wd);
                                       var obj = arr[wd];
                                       if(debug) log(JSON.stringify(obj));
                                       if(sched1) clearSchedule(sched1);
                                       if(debug) log('Active: ' + obj.Active + ' Typ: ' + typeof obj.Active);
                                       if(debug) log('Bew1 um: ' + obj.Bew1 + ' für ' + obj.Bew1_time + ' Minuten ' + ' Typ: ' + typeof obj.Bew1_time);
                                       var time = ("0" + now.getHours()).slice(-2)   + ":" + ("0" + now.getMinutes()).slice(-2);
                                       log('Zeit jetzt: ' + time); //nur für Testzwecke
                                       log(time < obj.Bew1); // nur für Testzwecke
                                       if(obj.Active == "x" && obj.Bew1_time && time < obj.Bew1) {  // ist Active ein String ?
                                          setState(idZeit, days[wd] + '. ' + obj.Bew1, true);
                                          setState(idDauer, obj.Bew1_time + ' Minuten', true);
                                          t = obj.Bew1.split(':');
                                          sched1 = schedule(t[1] + ' ' + t[0] + ' * * *', function() {
                                             setState(idBew, obj.Bew1_time);
                                             if(debug) log('Bewässerung1 gestartet');
                                          });
                                       }
                                       if(sched2) clearSchedule(sched2);     
                                       if(obj.Active == "x" && obj.Bew2_time && time < obj.Bew2 && (obj.Bew1_time === 0 || time > obj.Bew1)) {
                                          setState(idZeit, days[wd] + '. ' + obj.Bew2, true);
                                          setState(idDauer, obj.Bew2_time + ' Minuten', true);
                                          t = obj.Bew2.split(':');
                                          sched2 = schedule(t[1] + ' ' + t[0] + ' * * *', function() {
                                             setState(idBew, obj.Bew2_time);
                                          });
                                       }
                                       else if (t===0) 
                                          for (i=1; i<=7; i++) {
                                              wd = wd + 1;
                                              if(wd>6) wd = 0; //umschalten Sonntag auf Montag
                                              obj = arr[wd];
                                              if(obj.Active == "x" && obj.Bew1_time) {
                                                 setState(idZeit, days[wd] + '. ' + obj.Bew1, true);
                                                 setState(idDauer, obj.Bew1_time + ' Minuten', true);
                                                 break;
                                              }
                                              else
                                                 if(obj.Active == "x" && obj.Bew2_time) {
                                                    setState(idZeit, days[wd] + '. ' + obj.Bew2, true);
                                                    setState(idDauer, obj.Bew2_time + ' Minuten', true);
                                                    break;
                                                 }
                                          }
                                    }       
                                    
                                    zeiten();  // Skriptstart
                                    
                                    schedule('1 0 * * *', zeiten);  // kurz nach Mitternacht
                                    
                                    // Änderung des JSON-Strings
                                    on(idJSON, function(dp) {
                                       json = dp.state.val;
                                       zeiten();
                                    });
                                    
                                    1 Antwort Letzte Antwort
                                    0
                                    • BuZZyB Offline
                                      BuZZyB Offline
                                      BuZZy
                                      schrieb am zuletzt editiert von
                                      #21

                                      Hallo,

                                      hoffe es ist in Ordnung wenn ich hier mal frage welches Ventil du verwendest? Bin mir noch unschlüssig welches elektrische Ventil ich kaufen soll um eine Wasserleitung zu öffnen bzw zu schließen..

                                      Danke und Gruß

                                      1 Antwort Letzte Antwort
                                      0
                                      • S Offline
                                        S Offline
                                        sveni_lee
                                        schrieb am zuletzt editiert von
                                        #22

                                        Klar… ich beende Hunter 1 1/4 Zoll Ventile 9v.

                                        Die werden mit einem Hutschienen Trafo versorgt...

                                        Gesendet von iPhone mit Tapatalk Pro

                                        1 Antwort Letzte Antwort
                                        0
                                        • S Offline
                                          S Offline
                                          sveni_lee
                                          schrieb am zuletzt editiert von
                                          #23

                                          so, nachdem ich das script nun einige Tage testen konnte, ist doch noch ein kleines Problem aufgetaucht.

                                          Ich habe für meine beiden Bewässerungskreisläufe jeweils ein script zu laufen. Nun wollte benötige ich die

                                          Möglichkeit die scripte via Widget zu starten und zu stoppen. und zwar mit bei scripts mit nur einem Schalter.

                                          es gibt zwar die möglichkeit ein script via "scriptEnabled.common.Bewaesserung.Timestamp_Ventil1" zu starten und zu stoppen

                                          aber das klappt nicht aus einen script heraus um zwei Scripte (scriptEnabled.common.Bewaesserung.Timestamp_Ventil1 + scriptEnabled.common.Bewaesserung.Timestamp_Ventil2) zu "schalten"

                                          also wollte ich das die Funktion innerhalb des Scripts nur bei eingeschaltetem Datenpunkt läuft

                                          on({id: "javascript.0.Bewässerung.Trigger_Semi_Automatic"/*Trigger_Semi_Automatic*/, val: true}, function (obj) {
                                          
                                              zeiten();  // Skriptstart
                                          
                                              schedule('1 0 * * *', zeiten);  // kurz nach Mitternacht
                                          
                                              // Änderung des JSON-Strings
                                             on(idJSON, function(dp) {
                                                json = dp.state.val;
                                                zeiten();
                                              });
                                          });
                                          

                                          die Funktion Zeiten wird aber nun auch ausgeführt wernn der Datenpunkt "javascript.0.Bewässerung.Trigger_Semi_Automatic" auf false steht.

                                          hab ich noch irgendetwas falsch verstanden?

                                          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

                                          689

                                          Online

                                          32.6k

                                          Benutzer

                                          81.9k

                                          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