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. Visualisierung
  4. [Vorlage] Variable Zeitsteuerung mit VIS Editor

NEWS

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.2k

[Vorlage] Variable Zeitsteuerung mit VIS Editor

Geplant Angeheftet Gesperrt Verschoben Visualisierung
vistemplate
919 Beiträge 47 Kommentatoren 281.6k Aufrufe 75 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.
  • G GiuseppeS

    @Glasfaser

    Warte kurz lade dir die Änderung direkt hier hoch, war nur eine Kleinigkeit

    EDIT: Am besten die Funktion komplett übernehmen, sicherer als einzelne Zeilen. Geht los ab Zeile ca. 618

        // One-Click Aktion aus Tabelle zur Auswahl des Timers
        on({id: "javascript.0.Timer." + path + ".clickTarget", change: "any"}, function (obj) {
        	
            if (dblClickBlocker) {return}; // Doppelte Ausführung One-Click bei Double-Click vermeiden
            dblClickBlocker = true;
            setTimeout(function(){
                dblClickBlocker = false;
            }, 600);
            
            if (debugLog){console.log("Klick aus Tabelle erkannt. Übergebener Wert: " + obj.state.val)};
    
            setState("javascript.0.Timer.ActiveTable", path);
            var tmp = obj.state.val.split("~");
            if (tmp[0] != "all") { // "all" ist ein Tag der Überschriften, daher folgt keine Timer-Auswahl
                setState("javascript.0.Timer." + path + ".Editor.Device", tmp[0]);
                setStateDelayed("javascript.0.Timer." + path + ".Editor.Nummer", parseInt(tmp[1]), 50, false);
            }
    
            if (oneClick == true){ // Wenn Tabellen Funktionen mit One-Click gewünscht werden ...
                setTimeout(function(){
                    var btnSource = obj.state.val.split("~")[2]; // Button-Funktion wird eingelesen
    
                    if (btnSource == "time"){ // Edit-Dialog öffnen bei Doppelklick IST-Zeit-Button
                        setState("vis.0.control.data"/*Data for control vis*/, DlgWidget);
                        setState('vis.0.control.instance'/*Control vis*/, "FFFFFFFF");
                        setState("vis.0.control.command"/*Command for vis*/, 'dialog');
                        delFocusOnTimer(false); // Auswahl des Timers nicht automatisch zurücksetzen!
                    }
                    if (btnSource == "nr"){ // Aktivieren/Deaktivieren des Timers
                        setState("javascript.0.Timer." + path + ".Editor.Aktiv", !getState("javascript.0.Timer." + path + ".Editor.Aktiv").val);
                    }
                    if (btnSource == "cond"){ // Aktivieren/Deaktivieren des Timers
                        resetBackgroundTimers(obj.state.val.split("~")[0]);
                    }
                }, 100)
            }
        });
    
    GlasfaserG Offline
    GlasfaserG Offline
    Glasfaser
    schrieb am zuletzt editiert von
    #440

    @GiuseppeS

    Keine Panik ...mach langsam ..
    ..... die Rollladen fahren erst heute Abend runter :sunglasses:

    Synology 918+ 16GB - ioBroker in Docker v9 , VISO auf Trekstor Primebook C13 13,3" , Hikvision Domkameras mit Surveillance Station .. CCU RaspberryMatic in Synology VM .. Zigbee CC2538+CC2592 .. Sonoff .. KNX .. Modbus ..

    1 Antwort Letzte Antwort
    1
    • G GiuseppeS

      @Glasfaser

      Warte kurz lade dir die Änderung direkt hier hoch, war nur eine Kleinigkeit

      EDIT: Am besten die Funktion komplett übernehmen, sicherer als einzelne Zeilen. Geht los ab Zeile ca. 618

          // One-Click Aktion aus Tabelle zur Auswahl des Timers
          on({id: "javascript.0.Timer." + path + ".clickTarget", change: "any"}, function (obj) {
          	
              if (dblClickBlocker) {return}; // Doppelte Ausführung One-Click bei Double-Click vermeiden
              dblClickBlocker = true;
              setTimeout(function(){
                  dblClickBlocker = false;
              }, 600);
              
              if (debugLog){console.log("Klick aus Tabelle erkannt. Übergebener Wert: " + obj.state.val)};
      
              setState("javascript.0.Timer.ActiveTable", path);
              var tmp = obj.state.val.split("~");
              if (tmp[0] != "all") { // "all" ist ein Tag der Überschriften, daher folgt keine Timer-Auswahl
                  setState("javascript.0.Timer." + path + ".Editor.Device", tmp[0]);
                  setStateDelayed("javascript.0.Timer." + path + ".Editor.Nummer", parseInt(tmp[1]), 50, false);
              }
      
              if (oneClick == true){ // Wenn Tabellen Funktionen mit One-Click gewünscht werden ...
                  setTimeout(function(){
                      var btnSource = obj.state.val.split("~")[2]; // Button-Funktion wird eingelesen
      
                      if (btnSource == "time"){ // Edit-Dialog öffnen bei Doppelklick IST-Zeit-Button
                          setState("vis.0.control.data"/*Data for control vis*/, DlgWidget);
                          setState('vis.0.control.instance'/*Control vis*/, "FFFFFFFF");
                          setState("vis.0.control.command"/*Command for vis*/, 'dialog');
                          delFocusOnTimer(false); // Auswahl des Timers nicht automatisch zurücksetzen!
                      }
                      if (btnSource == "nr"){ // Aktivieren/Deaktivieren des Timers
                          setState("javascript.0.Timer." + path + ".Editor.Aktiv", !getState("javascript.0.Timer." + path + ".Editor.Aktiv").val);
                      }
                      if (btnSource == "cond"){ // Aktivieren/Deaktivieren des Timers
                          resetBackgroundTimers(obj.state.val.split("~")[0]);
                      }
                  }, 100)
              }
          });
      
      GlasfaserG Offline
      GlasfaserG Offline
      Glasfaser
      schrieb am zuletzt editiert von
      #441

      @GiuseppeS

      Update funktioniert ... :+1: ( noch kein Fehler gefunden :sunglasses: )

      Ohhh... mit einem Popup Fenster beim Klick .. nicht schlecht


      1.JPG

      Synology 918+ 16GB - ioBroker in Docker v9 , VISO auf Trekstor Primebook C13 13,3" , Hikvision Domkameras mit Surveillance Station .. CCU RaspberryMatic in Synology VM .. Zigbee CC2538+CC2592 .. Sonoff .. KNX .. Modbus ..

      G 1 Antwort Letzte Antwort
      0
      • GlasfaserG Glasfaser

        @GiuseppeS

        Update funktioniert ... :+1: ( noch kein Fehler gefunden :sunglasses: )

        Ohhh... mit einem Popup Fenster beim Klick .. nicht schlecht


        1.JPG

        G Offline
        G Offline
        GiuseppeS
        schrieb am zuletzt editiert von
        #442

        @Glasfaser
        Das Editieren mit Einfach-Klick war zweitrangig. Im Großen und Ganzen eigentlich kein Hexenwerk, könnte man meinen, aber da passiert viel im Hintergrund.
        Wichtiger und nützlicher war mir, das Aktivieren/Deaktivieren mit einem Klick machbar ist. Habe da ein/zwei Timer, die ich gerne toggle. Naja, es tut nicht jeder Klick weh. Aber bei dem Aufwand, der im Skript steckt, könnte man das meinen :laughing:

        GlasfaserG 1 Antwort Letzte Antwort
        1
        • G GiuseppeS

          @Glasfaser
          Das Editieren mit Einfach-Klick war zweitrangig. Im Großen und Ganzen eigentlich kein Hexenwerk, könnte man meinen, aber da passiert viel im Hintergrund.
          Wichtiger und nützlicher war mir, das Aktivieren/Deaktivieren mit einem Klick machbar ist. Habe da ein/zwei Timer, die ich gerne toggle. Naja, es tut nicht jeder Klick weh. Aber bei dem Aufwand, der im Skript steckt, könnte man das meinen :laughing:

          GlasfaserG Offline
          GlasfaserG Offline
          Glasfaser
          schrieb am zuletzt editiert von
          #443

          @GiuseppeS

          Ich habe dich mal hier reingesetzt !

          [Aufruf] Welche guten JavaScripts setzt ihr ein?

          Synology 918+ 16GB - ioBroker in Docker v9 , VISO auf Trekstor Primebook C13 13,3" , Hikvision Domkameras mit Surveillance Station .. CCU RaspberryMatic in Synology VM .. Zigbee CC2538+CC2592 .. Sonoff .. KNX .. Modbus ..

          G 1 Antwort Letzte Antwort
          0
          • GlasfaserG Glasfaser

            @GiuseppeS

            Ich habe dich mal hier reingesetzt !

            [Aufruf] Welche guten JavaScripts setzt ihr ein?

            G Offline
            G Offline
            GiuseppeS
            schrieb am zuletzt editiert von
            #444

            @Glasfaser
            Das passt. Kann auch alles auf github hochladen, wenn jemand Interesse hat daraus einen Adapter zu machen.
            Finde den Adapter nur mit VIS Widgets sinnvoll, und das PopUp als einzelnes Widget zu erstellen trau ich mir dann doch nicht zu. Bzw. der Aufwand und der Mehrwert steht in keinem guten Verhältnis.

            GlasfaserG Z 3 Antworten Letzte Antwort
            1
            • G GiuseppeS

              @Glasfaser
              Das passt. Kann auch alles auf github hochladen, wenn jemand Interesse hat daraus einen Adapter zu machen.
              Finde den Adapter nur mit VIS Widgets sinnvoll, und das PopUp als einzelnes Widget zu erstellen trau ich mir dann doch nicht zu. Bzw. der Aufwand und der Mehrwert steht in keinem guten Verhältnis.

              GlasfaserG Offline
              GlasfaserG Offline
              Glasfaser
              schrieb am zuletzt editiert von Glasfaser
              #445

              @GiuseppeS sagte in [Vorlage] Variable Zeitsteuerung mit VIS Editor:

              Finde den Adapter nur mit VIS Widgets sinnvoll

              Und deshalb nutze ich dein Script und kein anderes !!!!

              Synology 918+ 16GB - ioBroker in Docker v9 , VISO auf Trekstor Primebook C13 13,3" , Hikvision Domkameras mit Surveillance Station .. CCU RaspberryMatic in Synology VM .. Zigbee CC2538+CC2592 .. Sonoff .. KNX .. Modbus ..

              1 Antwort Letzte Antwort
              0
              • G GiuseppeS

                @Glasfaser
                Das passt. Kann auch alles auf github hochladen, wenn jemand Interesse hat daraus einen Adapter zu machen.
                Finde den Adapter nur mit VIS Widgets sinnvoll, und das PopUp als einzelnes Widget zu erstellen trau ich mir dann doch nicht zu. Bzw. der Aufwand und der Mehrwert steht in keinem guten Verhältnis.

                Z Offline
                Z Offline
                Zoidberg
                schrieb am zuletzt editiert von
                #446

                @GiuseppeS
                Super werde gleich mal die neue Version bei mir testen

                1 Antwort Letzte Antwort
                0
                • G GiuseppeS

                  @Glasfaser
                  Das passt. Kann auch alles auf github hochladen, wenn jemand Interesse hat daraus einen Adapter zu machen.
                  Finde den Adapter nur mit VIS Widgets sinnvoll, und das PopUp als einzelnes Widget zu erstellen trau ich mir dann doch nicht zu. Bzw. der Aufwand und der Mehrwert steht in keinem guten Verhältnis.

                  Z Offline
                  Z Offline
                  Zoidberg
                  schrieb am zuletzt editiert von
                  #447

                  @GiuseppeS Sorry für die verspätete Rückmeldung... aber jetzt ist es prima .. funktioniert perfekt der Einzel-Click.. Vielen Dank.

                  jetzt muss ich nur noch den dämlichen rechtsclick am Touch-Display loswerden

                  Gruss Ulrich

                  1 Antwort Letzte Antwort
                  2
                  • H Offline
                    H Offline
                    HelmutS
                    schrieb am zuletzt editiert von
                    #448

                    Guten Morgen zusammen.
                    Ich lasse mir beim editieren der Timer den Zustand der Bedingungen anzeigen.
                    Eventuell findet das der eine oder andere nützlich.
                    Hier die Änderungen:
                    im Script ab ca. Zeile 700, jeweils die letzte Zeile:

                        // Trigger zum Erstellen der Bedingungen als String für späteres eval() (3x)
                        on({id: new RegExp('javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond1Comp' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond1State' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond1Value'), change: "any", ack: false}, function (obj) {
                            var ConditionJSON = JSON.parse(getState("javascript.0.Timer." + path + ".ConditionJSON").val);
                            var Cond1State = getState("javascript.0.Timer." + path + ".Editor.Cond1State").val
                            var Cond1Comp = getState("javascript.0.Timer." + path + ".Editor.Cond1Comp").val
                            var Cond1Value = getState("javascript.0.Timer." + path + ".Editor.Cond1Value").val
                            var strCond1 = "getState(\"" + ConditionJSON[Cond1State] + "\").val " + Cond1Comp + " " + Cond1Value
                            setState("javascript.0.Timer." + path + ".Editor.Condition1", strCond1);
                            setState("javascript.0.Timer." + path + ".Editor.Cond1Result", eval(strCond1));
                        });
                    
                        on({id: new RegExp('javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond2Comp' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond2State' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond2Value'), change: "any", ack: false}, function (obj) {
                            var ConditionJSON = JSON.parse(getState("javascript.0.Timer." + path + ".ConditionJSON").val);
                            var Cond2State = getState("javascript.0.Timer." + path + ".Editor.Cond2State").val
                            var Cond2Comp = getState("javascript.0.Timer." + path + ".Editor.Cond2Comp").val
                            var Cond2Value = getState("javascript.0.Timer." + path + ".Editor.Cond2Value").val
                            var strCond2 = "getState(\"" + ConditionJSON[Cond2State] + "\").val " + Cond2Comp + " " + Cond2Value
                            setState("javascript.0.Timer." + path + ".Editor.Condition2", strCond2);
                            setState("javascript.0.Timer." + path + ".Editor.Cond2Result", eval(strCond2));
                        });
                    
                        on({id: new RegExp('javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond3Comp' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond3State' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond3Value'), change: "any", ack: false}, function (obj) {
                            var ConditionJSON = JSON.parse(getState("javascript.0.Timer." + path + ".ConditionJSON").val);
                            var Cond3State = getState("javascript.0.Timer." + path + ".Editor.Cond3State").val
                            var Cond3Comp = getState("javascript.0.Timer." + path + ".Editor.Cond3Comp").val
                            var Cond3Value = getState("javascript.0.Timer." + path + ".Editor.Cond3Value").val
                            var strCond3 = "getState(\"" + ConditionJSON[Cond3State] + "\").val " + Cond3Comp + " " + Cond3Value
                            setState("javascript.0.Timer." + path + ".Editor.Condition3", strCond3);
                            setState("javascript.0.Timer." + path + ".Editor.Cond3Result", eval(strCond3));
                        });
                    

                    und ab Zeile ca 1000:

                    createState("Timer.ActiveTable");
                    createState("Timer." + path + ".NextDevice");
                    createState("Timer." + path + ".FilterDevice");
                    createState("Timer." + path + ".NextDevices");
                    createState("Timer." + path + ".clickTarget");
                    createState("Timer." + path + ".dblClickTarget");
                    createState("Timer." + path + ".AstroJSON");
                    createState("Timer." + path + ".DropDownDevice");
                    createState("Timer." + path + ".DropDownGruppe");
                    createState("Timer." + path + ".Editor.DropDownMinutes");
                    createState("Timer." + path + ".Editor.Gruppe");
                    createState("Timer." + path + ".Editor.Del");
                    createState("Timer." + path + ".Editor.OK");
                    createState("Timer." + path + ".Editor.CopyAll");
                    createState("Timer." + path + ".Editor.CopyCond");
                    createState("Timer." + path + ".Editor.DropDownAstro");
                    createState("Timer." + path + ".Editor.DropDownAstroWerte");
                    createState("Timer." + path + ".Editor.DropDownAstroTexte");
                    createState("Timer." + path + ".Editor.Device");
                    createState("Timer." + path + ".Editor.Nummer");
                    createState("Timer." + path + ".TimerJSON");
                    createState("Timer." + path + ".Editor.Aktiv");
                    createState("Timer." + path + ".Editor.Zeit");
                    createState("Timer." + path + ".Editor.Cron");
                    createState("Timer." + path + ".Editor.TageVIS");
                    createState("Timer." + path + ".Editor.CronTage");
                    createState("Timer." + path + ".Editor.WTagMo");
                    createState("Timer." + path + ".Editor.WTagDi");
                    createState("Timer." + path + ".Editor.WTagMi");
                    createState("Timer." + path + ".Editor.WTagDo");
                    createState("Timer." + path + ".Editor.WTagFr");
                    createState("Timer." + path + ".Editor.WTagSa");
                    createState("Timer." + path + ".Editor.WTagSo");
                    createState("Timer." + path + ".Editor.Std");
                    createState("Timer." + path + ".Editor.Min");
                    createState("Timer." + path + ".Editor.Sollwert");
                    createState("Timer." + path + ".Editor.SollwertDropDown");
                    createState("Timer." + path + ".Editor.Random");
                    createState("Timer." + path + ".Editor.RandPM");
                    createState("Timer." + path + ".Editor.Offset");
                    createState("Timer." + path + ".Editor.OffsetPM");
                    createState("Timer." + path + ".Editor.RememberTimer");
                    createState("Timer." + path + ".Editor.ConditionKeyDropDown");
                    createState("Timer." + path + ".Editor.Condition");
                    createState("Timer." + path + ".Editor.ConditionsNr");
                    createState("Timer." + path + ".Editor.Condition1");
                    createState("Timer." + path + ".Editor.Cond1State");
                    createState("Timer." + path + ".Editor.Cond1Comp");
                    createState("Timer." + path + ".Editor.Cond1Value");
                    createState("Timer." + path + ".Editor.Cond1Result");
                    createState("Timer." + path + ".Editor.Condition2");
                    createState("Timer." + path + ".Editor.Cond2State");
                    createState("Timer." + path + ".Editor.Cond2Comp");
                    createState("Timer." + path + ".Editor.Cond2Value");
                    createState("Timer." + path + ".Editor.Cond2Result");
                    createState("Timer." + path + ".Editor.Condition3");
                    createState("Timer." + path + ".Editor.Cond3State");
                    createState("Timer." + path + ".Editor.Cond3Comp");
                    createState("Timer." + path + ".Editor.Cond3Value");
                    createState("Timer." + path + ".Editor.Cond3Result");
                    

                    Jeweils die Zeile mit "Result"

                    Im Edit-View bei den Bedingungen als Hintergrundfarbe dann

                    {w:javascript.0.Timer.Devices.Editor.Cond1Result; w == "true" ? "#00AA00" : "#AA0000"} 
                    

                    eintragen ("Cond1Result" entsprechend ändern)

                    G 1 Antwort Letzte Antwort
                    0
                    • H HelmutS

                      Guten Morgen zusammen.
                      Ich lasse mir beim editieren der Timer den Zustand der Bedingungen anzeigen.
                      Eventuell findet das der eine oder andere nützlich.
                      Hier die Änderungen:
                      im Script ab ca. Zeile 700, jeweils die letzte Zeile:

                          // Trigger zum Erstellen der Bedingungen als String für späteres eval() (3x)
                          on({id: new RegExp('javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond1Comp' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond1State' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond1Value'), change: "any", ack: false}, function (obj) {
                              var ConditionJSON = JSON.parse(getState("javascript.0.Timer." + path + ".ConditionJSON").val);
                              var Cond1State = getState("javascript.0.Timer." + path + ".Editor.Cond1State").val
                              var Cond1Comp = getState("javascript.0.Timer." + path + ".Editor.Cond1Comp").val
                              var Cond1Value = getState("javascript.0.Timer." + path + ".Editor.Cond1Value").val
                              var strCond1 = "getState(\"" + ConditionJSON[Cond1State] + "\").val " + Cond1Comp + " " + Cond1Value
                              setState("javascript.0.Timer." + path + ".Editor.Condition1", strCond1);
                              setState("javascript.0.Timer." + path + ".Editor.Cond1Result", eval(strCond1));
                          });
                      
                          on({id: new RegExp('javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond2Comp' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond2State' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond2Value'), change: "any", ack: false}, function (obj) {
                              var ConditionJSON = JSON.parse(getState("javascript.0.Timer." + path + ".ConditionJSON").val);
                              var Cond2State = getState("javascript.0.Timer." + path + ".Editor.Cond2State").val
                              var Cond2Comp = getState("javascript.0.Timer." + path + ".Editor.Cond2Comp").val
                              var Cond2Value = getState("javascript.0.Timer." + path + ".Editor.Cond2Value").val
                              var strCond2 = "getState(\"" + ConditionJSON[Cond2State] + "\").val " + Cond2Comp + " " + Cond2Value
                              setState("javascript.0.Timer." + path + ".Editor.Condition2", strCond2);
                              setState("javascript.0.Timer." + path + ".Editor.Cond2Result", eval(strCond2));
                          });
                      
                          on({id: new RegExp('javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond3Comp' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond3State' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond3Value'), change: "any", ack: false}, function (obj) {
                              var ConditionJSON = JSON.parse(getState("javascript.0.Timer." + path + ".ConditionJSON").val);
                              var Cond3State = getState("javascript.0.Timer." + path + ".Editor.Cond3State").val
                              var Cond3Comp = getState("javascript.0.Timer." + path + ".Editor.Cond3Comp").val
                              var Cond3Value = getState("javascript.0.Timer." + path + ".Editor.Cond3Value").val
                              var strCond3 = "getState(\"" + ConditionJSON[Cond3State] + "\").val " + Cond3Comp + " " + Cond3Value
                              setState("javascript.0.Timer." + path + ".Editor.Condition3", strCond3);
                              setState("javascript.0.Timer." + path + ".Editor.Cond3Result", eval(strCond3));
                          });
                      

                      und ab Zeile ca 1000:

                      createState("Timer.ActiveTable");
                      createState("Timer." + path + ".NextDevice");
                      createState("Timer." + path + ".FilterDevice");
                      createState("Timer." + path + ".NextDevices");
                      createState("Timer." + path + ".clickTarget");
                      createState("Timer." + path + ".dblClickTarget");
                      createState("Timer." + path + ".AstroJSON");
                      createState("Timer." + path + ".DropDownDevice");
                      createState("Timer." + path + ".DropDownGruppe");
                      createState("Timer." + path + ".Editor.DropDownMinutes");
                      createState("Timer." + path + ".Editor.Gruppe");
                      createState("Timer." + path + ".Editor.Del");
                      createState("Timer." + path + ".Editor.OK");
                      createState("Timer." + path + ".Editor.CopyAll");
                      createState("Timer." + path + ".Editor.CopyCond");
                      createState("Timer." + path + ".Editor.DropDownAstro");
                      createState("Timer." + path + ".Editor.DropDownAstroWerte");
                      createState("Timer." + path + ".Editor.DropDownAstroTexte");
                      createState("Timer." + path + ".Editor.Device");
                      createState("Timer." + path + ".Editor.Nummer");
                      createState("Timer." + path + ".TimerJSON");
                      createState("Timer." + path + ".Editor.Aktiv");
                      createState("Timer." + path + ".Editor.Zeit");
                      createState("Timer." + path + ".Editor.Cron");
                      createState("Timer." + path + ".Editor.TageVIS");
                      createState("Timer." + path + ".Editor.CronTage");
                      createState("Timer." + path + ".Editor.WTagMo");
                      createState("Timer." + path + ".Editor.WTagDi");
                      createState("Timer." + path + ".Editor.WTagMi");
                      createState("Timer." + path + ".Editor.WTagDo");
                      createState("Timer." + path + ".Editor.WTagFr");
                      createState("Timer." + path + ".Editor.WTagSa");
                      createState("Timer." + path + ".Editor.WTagSo");
                      createState("Timer." + path + ".Editor.Std");
                      createState("Timer." + path + ".Editor.Min");
                      createState("Timer." + path + ".Editor.Sollwert");
                      createState("Timer." + path + ".Editor.SollwertDropDown");
                      createState("Timer." + path + ".Editor.Random");
                      createState("Timer." + path + ".Editor.RandPM");
                      createState("Timer." + path + ".Editor.Offset");
                      createState("Timer." + path + ".Editor.OffsetPM");
                      createState("Timer." + path + ".Editor.RememberTimer");
                      createState("Timer." + path + ".Editor.ConditionKeyDropDown");
                      createState("Timer." + path + ".Editor.Condition");
                      createState("Timer." + path + ".Editor.ConditionsNr");
                      createState("Timer." + path + ".Editor.Condition1");
                      createState("Timer." + path + ".Editor.Cond1State");
                      createState("Timer." + path + ".Editor.Cond1Comp");
                      createState("Timer." + path + ".Editor.Cond1Value");
                      createState("Timer." + path + ".Editor.Cond1Result");
                      createState("Timer." + path + ".Editor.Condition2");
                      createState("Timer." + path + ".Editor.Cond2State");
                      createState("Timer." + path + ".Editor.Cond2Comp");
                      createState("Timer." + path + ".Editor.Cond2Value");
                      createState("Timer." + path + ".Editor.Cond2Result");
                      createState("Timer." + path + ".Editor.Condition3");
                      createState("Timer." + path + ".Editor.Cond3State");
                      createState("Timer." + path + ".Editor.Cond3Comp");
                      createState("Timer." + path + ".Editor.Cond3Value");
                      createState("Timer." + path + ".Editor.Cond3Result");
                      

                      Jeweils die Zeile mit "Result"

                      Im Edit-View bei den Bedingungen als Hintergrundfarbe dann

                      {w:javascript.0.Timer.Devices.Editor.Cond1Result; w == "true" ? "#00AA00" : "#AA0000"} 
                      

                      eintragen ("Cond1Result" entsprechend ändern)

                      G Offline
                      G Offline
                      GiuseppeS
                      schrieb am zuletzt editiert von
                      #449

                      @HelmutS
                      Hi, die Idee finde ich richtig gut. Bei der Umsetzung müsste man evtl. noch etwas beachten:

                      Was passiert, wenn du gerade eine Bedingung "neu eingibst? D.h. Zeile der Bedingungen ist leer und tippst von links nach rechts deine Werte ein. Gut möglich, dass aktuell Error angezeigt werden, bis die Zeile vollständig ist, oder? Kannst Du das bitte testen?
                      Ansonsten würde ich die Zeilen direkt übernehmen.

                      H 1 Antwort Letzte Antwort
                      0
                      • H Offline
                        H Offline
                        HelmutS
                        schrieb am zuletzt editiert von
                        #450

                        Nachtrag
                        Im Script ab ca. Zeile 820 noch folgende Änderung:

                                setState("javascript.0.Timer." + path + ".Editor.Aktiv", TimerJSON[device][nr].Aktiv, true);
                                setState("javascript.0.Timer." + path + ".Editor.Zeit", TimerJSON[device][nr].Zeit, true);
                                setState("javascript.0.Timer." + path + ".Editor.Cron", TimerJSON[device][nr].Cron, true);
                                setState("javascript.0.Timer." + path + ".Editor.TageVIS", TimerJSON[device][nr].TageVIS, true);
                                setState("javascript.0.Timer." + path + ".Editor.CronTage", TimerJSON[device][nr].CronTage, true);
                                setState("javascript.0.Timer." + path + ".Editor.WTagMo", TimerJSON[device][nr].Mo, true);
                                setState("javascript.0.Timer." + path + ".Editor.WTagDi", TimerJSON[device][nr].Di, true);
                                setState("javascript.0.Timer." + path + ".Editor.WTagMi", TimerJSON[device][nr].Mi, true);
                                setState("javascript.0.Timer." + path + ".Editor.WTagDo", TimerJSON[device][nr].Do, true);
                                setState("javascript.0.Timer." + path + ".Editor.WTagFr", TimerJSON[device][nr].Fr, true);
                                setState("javascript.0.Timer." + path + ".Editor.WTagSa", TimerJSON[device][nr].Sa, true);
                                setState("javascript.0.Timer." + path + ".Editor.WTagSo", TimerJSON[device][nr].So, true);
                                setState("javascript.0.Timer." + path + ".Editor.Std", TimerJSON[device][nr].Std, true);
                                setState("javascript.0.Timer." + path + ".Editor.Min", TimerJSON[device][nr].Min, true);
                                setState("javascript.0.Timer." + path + ".Editor.Sollwert", TimerJSON[device][nr].Sollwert, true);
                                setState("javascript.0.Timer." + path + ".Editor.DropDownAstro", TimerJSON[device][nr].Astro, true);
                                setState("javascript.0.Timer." + path + ".Editor.Random", TimerJSON[device][nr].Random, true);
                                setState("javascript.0.Timer." + path + ".Editor.RandPM", TimerJSON[device][nr].RandPM, true);
                                setState("javascript.0.Timer." + path + ".Editor.Offset", TimerJSON[device][nr].Offset, true);
                                setState("javascript.0.Timer." + path + ".Editor.OffsetPM", TimerJSON[device][nr].OffsetPM, true);
                                setState("javascript.0.Timer." + path + ".Editor.RememberTimer", TimerJSON[device][nr].RememberTimer, true);
                                setState("javascript.0.Timer." + path + ".Editor.ConditionsNr", TimerJSON[device][nr].ConditionsNr, true);
                                setState("javascript.0.Timer." + path + ".Editor.Condition1", TimerJSON[device][nr].Conditions[1].ConditionStr, true);
                                setState("javascript.0.Timer." + path + ".Editor.Cond1State", TimerJSON[device][nr].Conditions[1].CondState, true);
                                setState("javascript.0.Timer." + path + ".Editor.Cond1Comp", TimerJSON[device][nr].Conditions[1].CondComp, true);
                                setState("javascript.0.Timer." + path + ".Editor.Cond1Value", TimerJSON[device][nr].Conditions[1].CondValue, true);
                                setState("javascript.0.Timer." + path + ".Editor.Condition2", TimerJSON[device][nr].Conditions[2].ConditionStr, true);
                                setState("javascript.0.Timer." + path + ".Editor.Cond2State", TimerJSON[device][nr].Conditions[2].CondState, true);
                                setState("javascript.0.Timer." + path + ".Editor.Cond2Comp", TimerJSON[device][nr].Conditions[2].CondComp, true);
                                setState("javascript.0.Timer." + path + ".Editor.Cond2Value", TimerJSON[device][nr].Conditions[2].CondValue, true);
                                setState("javascript.0.Timer." + path + ".Editor.Condition3", TimerJSON[device][nr].Conditions[3].ConditionStr, true);
                                setState("javascript.0.Timer." + path + ".Editor.Cond3State", TimerJSON[device][nr].Conditions[3].CondState, true);
                                setState("javascript.0.Timer." + path + ".Editor.Cond3Comp", TimerJSON[device][nr].Conditions[3].CondComp, true);
                                setState("javascript.0.Timer." + path + ".Editor.Cond3Value", TimerJSON[device][nr].Conditions[3].CondValue, true);
                                setState("javascript.0.Timer." + path + ".Editor.Gruppe", TimerJSON[device][nr].Gruppe, true);
                        
                                if (TimerJSON[device][nr].Conditions[1].ConditionStr != ""){
                                    setState("javascript.0.Timer." + path + ".Editor.Cond1Result", eval(TimerJSON[device][nr].Conditions[1].ConditionStr));
                                }
                                if (TimerJSON[device][nr].Conditions[2].ConditionStr != ""){
                                    setState("javascript.0.Timer." + path + ".Editor.Cond2Result", eval(TimerJSON[device][nr].Conditions[2].ConditionStr));
                                }
                                if (TimerJSON[device][nr].Conditions[3].ConditionStr != ""){
                                    setState("javascript.0.Timer." + path + ".Editor.Cond3Result", eval(TimerJSON[device][nr].Conditions[3].ConditionStr));
                                }
                        
                        
                        1 Antwort Letzte Antwort
                        0
                        • G GiuseppeS

                          @HelmutS
                          Hi, die Idee finde ich richtig gut. Bei der Umsetzung müsste man evtl. noch etwas beachten:

                          Was passiert, wenn du gerade eine Bedingung "neu eingibst? D.h. Zeile der Bedingungen ist leer und tippst von links nach rechts deine Werte ein. Gut möglich, dass aktuell Error angezeigt werden, bis die Zeile vollständig ist, oder? Kannst Du das bitte testen?
                          Ansonsten würde ich die Zeilen direkt übernehmen.

                          H Offline
                          H Offline
                          HelmutS
                          schrieb am zuletzt editiert von
                          #451

                          @GiuseppeS
                          Stimmt, beim ersten Aufruf kommt ein Fehler.
                          Ich habe es jetzt so gelöst:

                              // Trigger zum Erstellen der Bedingungen als String für späteres eval() (3x)
                              on({id: new RegExp('javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond1Comp' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond1State' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond1Value'), change: "any", ack: false}, function (obj) {
                                  var ConditionJSON = JSON.parse(getState("javascript.0.Timer." + path + ".ConditionJSON").val);
                                  var Cond1State = getState("javascript.0.Timer." + path + ".Editor.Cond1State").val
                                  var Cond1Comp = getState("javascript.0.Timer." + path + ".Editor.Cond1Comp").val
                                  var Cond1Value = getState("javascript.0.Timer." + path + ".Editor.Cond1Value").val
                                  var strCond1 = "getState(\"" + ConditionJSON[Cond1State] + "\").val " + Cond1Comp + " " + Cond1Value
                                  setState("javascript.0.Timer." + path + ".Editor.Condition1", strCond1);
                                  if (Cond1State != "" && Cond1Comp != "" && Cond1Value != "")
                                  {
                                      setState("javascript.0.Timer." + path + ".Editor.Cond1Result", eval(strCond1));
                                  }
                              });
                          
                              on({id: new RegExp('javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond2Comp' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond2State' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond2Value'), change: "any", ack: false}, function (obj) {
                                  var ConditionJSON = JSON.parse(getState("javascript.0.Timer." + path + ".ConditionJSON").val);
                                  var Cond2State = getState("javascript.0.Timer." + path + ".Editor.Cond2State").val
                                  var Cond2Comp = getState("javascript.0.Timer." + path + ".Editor.Cond2Comp").val
                                  var Cond2Value = getState("javascript.0.Timer." + path + ".Editor.Cond2Value").val
                                  var strCond2 = "getState(\"" + ConditionJSON[Cond2State] + "\").val " + Cond2Comp + " " + Cond2Value
                                  setState("javascript.0.Timer." + path + ".Editor.Condition2", strCond2);
                                  if (Cond2State != "" && Cond2Comp != "" && Cond2Value != "")
                                  {
                                      setState("javascript.0.Timer." + path + ".Editor.Cond2Result", eval(strCond2));
                                  }
                              });
                          
                              on({id: new RegExp('javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond3Comp' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond3State' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond3Value'), change: "any", ack: false}, function (obj) {
                                  var ConditionJSON = JSON.parse(getState("javascript.0.Timer." + path + ".ConditionJSON").val);
                                  var Cond3State = getState("javascript.0.Timer." + path + ".Editor.Cond3State").val
                                  var Cond3Comp = getState("javascript.0.Timer." + path + ".Editor.Cond3Comp").val
                                  var Cond3Value = getState("javascript.0.Timer." + path + ".Editor.Cond3Value").val
                                  var strCond3 = "getState(\"" + ConditionJSON[Cond3State] + "\").val " + Cond3Comp + " " + Cond3Value
                                  setState("javascript.0.Timer." + path + ".Editor.Condition3", strCond3);
                                  if (Cond3State != "" && Cond3Comp != "" && Cond3Value != "")
                                  {
                                      setState("javascript.0.Timer." + path + ".Editor.Cond3Result", eval(strCond3));
                                  }
                              });
                          

                          Oder fällt dir eine bessere Lösung ein? Du kennst den Script besser

                          G 2 Antworten Letzte Antwort
                          0
                          • H HelmutS

                            @GiuseppeS
                            Stimmt, beim ersten Aufruf kommt ein Fehler.
                            Ich habe es jetzt so gelöst:

                                // Trigger zum Erstellen der Bedingungen als String für späteres eval() (3x)
                                on({id: new RegExp('javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond1Comp' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond1State' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond1Value'), change: "any", ack: false}, function (obj) {
                                    var ConditionJSON = JSON.parse(getState("javascript.0.Timer." + path + ".ConditionJSON").val);
                                    var Cond1State = getState("javascript.0.Timer." + path + ".Editor.Cond1State").val
                                    var Cond1Comp = getState("javascript.0.Timer." + path + ".Editor.Cond1Comp").val
                                    var Cond1Value = getState("javascript.0.Timer." + path + ".Editor.Cond1Value").val
                                    var strCond1 = "getState(\"" + ConditionJSON[Cond1State] + "\").val " + Cond1Comp + " " + Cond1Value
                                    setState("javascript.0.Timer." + path + ".Editor.Condition1", strCond1);
                                    if (Cond1State != "" && Cond1Comp != "" && Cond1Value != "")
                                    {
                                        setState("javascript.0.Timer." + path + ".Editor.Cond1Result", eval(strCond1));
                                    }
                                });
                            
                                on({id: new RegExp('javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond2Comp' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond2State' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond2Value'), change: "any", ack: false}, function (obj) {
                                    var ConditionJSON = JSON.parse(getState("javascript.0.Timer." + path + ".ConditionJSON").val);
                                    var Cond2State = getState("javascript.0.Timer." + path + ".Editor.Cond2State").val
                                    var Cond2Comp = getState("javascript.0.Timer." + path + ".Editor.Cond2Comp").val
                                    var Cond2Value = getState("javascript.0.Timer." + path + ".Editor.Cond2Value").val
                                    var strCond2 = "getState(\"" + ConditionJSON[Cond2State] + "\").val " + Cond2Comp + " " + Cond2Value
                                    setState("javascript.0.Timer." + path + ".Editor.Condition2", strCond2);
                                    if (Cond2State != "" && Cond2Comp != "" && Cond2Value != "")
                                    {
                                        setState("javascript.0.Timer." + path + ".Editor.Cond2Result", eval(strCond2));
                                    }
                                });
                            
                                on({id: new RegExp('javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond3Comp' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond3State' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond3Value'), change: "any", ack: false}, function (obj) {
                                    var ConditionJSON = JSON.parse(getState("javascript.0.Timer." + path + ".ConditionJSON").val);
                                    var Cond3State = getState("javascript.0.Timer." + path + ".Editor.Cond3State").val
                                    var Cond3Comp = getState("javascript.0.Timer." + path + ".Editor.Cond3Comp").val
                                    var Cond3Value = getState("javascript.0.Timer." + path + ".Editor.Cond3Value").val
                                    var strCond3 = "getState(\"" + ConditionJSON[Cond3State] + "\").val " + Cond3Comp + " " + Cond3Value
                                    setState("javascript.0.Timer." + path + ".Editor.Condition3", strCond3);
                                    if (Cond3State != "" && Cond3Comp != "" && Cond3Value != "")
                                    {
                                        setState("javascript.0.Timer." + path + ".Editor.Cond3Result", eval(strCond3));
                                    }
                                });
                            

                            Oder fällt dir eine bessere Lösung ein? Du kennst den Script besser

                            G Offline
                            G Offline
                            GiuseppeS
                            schrieb am zuletzt editiert von
                            #452

                            @HelmutS

                            Ich überlege auch schon, wie man das am effektivsten anpasst. Ich denke, den Fehler einfach mit try/catch abzufangen, wird die einfachste Lösung sein, ohne zuviel komplexen Code zu nutzen.

                            Werde deinen Code daher weitestgehend übernehmen und innerhalb des if-Statements ein try/catch einbauen. Muss aber ehrlich gesagt testen, ob es mit eval() überhaupt funktioniert. Habe es noch nie getestet...

                            1 Antwort Letzte Antwort
                            0
                            • H HelmutS

                              @GiuseppeS
                              Stimmt, beim ersten Aufruf kommt ein Fehler.
                              Ich habe es jetzt so gelöst:

                                  // Trigger zum Erstellen der Bedingungen als String für späteres eval() (3x)
                                  on({id: new RegExp('javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond1Comp' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond1State' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond1Value'), change: "any", ack: false}, function (obj) {
                                      var ConditionJSON = JSON.parse(getState("javascript.0.Timer." + path + ".ConditionJSON").val);
                                      var Cond1State = getState("javascript.0.Timer." + path + ".Editor.Cond1State").val
                                      var Cond1Comp = getState("javascript.0.Timer." + path + ".Editor.Cond1Comp").val
                                      var Cond1Value = getState("javascript.0.Timer." + path + ".Editor.Cond1Value").val
                                      var strCond1 = "getState(\"" + ConditionJSON[Cond1State] + "\").val " + Cond1Comp + " " + Cond1Value
                                      setState("javascript.0.Timer." + path + ".Editor.Condition1", strCond1);
                                      if (Cond1State != "" && Cond1Comp != "" && Cond1Value != "")
                                      {
                                          setState("javascript.0.Timer." + path + ".Editor.Cond1Result", eval(strCond1));
                                      }
                                  });
                              
                                  on({id: new RegExp('javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond2Comp' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond2State' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond2Value'), change: "any", ack: false}, function (obj) {
                                      var ConditionJSON = JSON.parse(getState("javascript.0.Timer." + path + ".ConditionJSON").val);
                                      var Cond2State = getState("javascript.0.Timer." + path + ".Editor.Cond2State").val
                                      var Cond2Comp = getState("javascript.0.Timer." + path + ".Editor.Cond2Comp").val
                                      var Cond2Value = getState("javascript.0.Timer." + path + ".Editor.Cond2Value").val
                                      var strCond2 = "getState(\"" + ConditionJSON[Cond2State] + "\").val " + Cond2Comp + " " + Cond2Value
                                      setState("javascript.0.Timer." + path + ".Editor.Condition2", strCond2);
                                      if (Cond2State != "" && Cond2Comp != "" && Cond2Value != "")
                                      {
                                          setState("javascript.0.Timer." + path + ".Editor.Cond2Result", eval(strCond2));
                                      }
                                  });
                              
                                  on({id: new RegExp('javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond3Comp' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond3State' + "|" + 'javascript\\.0\\.Timer\\.' + path + '\\.Editor\\.Cond3Value'), change: "any", ack: false}, function (obj) {
                                      var ConditionJSON = JSON.parse(getState("javascript.0.Timer." + path + ".ConditionJSON").val);
                                      var Cond3State = getState("javascript.0.Timer." + path + ".Editor.Cond3State").val
                                      var Cond3Comp = getState("javascript.0.Timer." + path + ".Editor.Cond3Comp").val
                                      var Cond3Value = getState("javascript.0.Timer." + path + ".Editor.Cond3Value").val
                                      var strCond3 = "getState(\"" + ConditionJSON[Cond3State] + "\").val " + Cond3Comp + " " + Cond3Value
                                      setState("javascript.0.Timer." + path + ".Editor.Condition3", strCond3);
                                      if (Cond3State != "" && Cond3Comp != "" && Cond3Value != "")
                                      {
                                          setState("javascript.0.Timer." + path + ".Editor.Cond3Result", eval(strCond3));
                                      }
                                  });
                              

                              Oder fällt dir eine bessere Lösung ein? Du kennst den Script besser

                              G Offline
                              G Offline
                              GiuseppeS
                              schrieb am zuletzt editiert von GiuseppeS
                              #453

                              @HelmutS

                              Habe den Code von dir nun 1:1 übernommen. Try/Catch habe ich mal weggelassen. Wenn jemand seinen Boolean-State mit einem Zahlenwert vergleichen würde, würde dieser Fehler auch abgefangen werden, was nicht für die Fehlersuche im Nachgang nicht sinnvoll wäre.

                              Meine einzige Anpassung war nur folgende. Statt

                                      if (TimerJSON[device][nr].Conditions[1].ConditionStr != ""){
                                          setState("javascript.0.Timer." + path + ".Editor.Cond1Result", eval(TimerJSON[device][nr].Conditions[1].ConditionStr));
                                      }
                                      if (TimerJSON[device][nr].Conditions[2].ConditionStr != ""){
                                          setState("javascript.0.Timer." + path + ".Editor.Cond2Result", eval(TimerJSON[device][nr].Conditions[2].ConditionStr));
                                      }
                                      if (TimerJSON[device][nr].Conditions[3].ConditionStr != ""){
                                          setState("javascript.0.Timer." + path + ".Editor.Cond3Result", eval(TimerJSON[device][nr].Conditions[3].ConditionStr));
                                      }
                              

                              habe ich folgendes eingesetzt:

                                      for (let i = 1; i <= 3; i++){
                                          setState("javascript.0.Timer." + path + ".Editor.Cond" + i + "Result", eval(TimerJSON[device][nr].Conditions[i].ConditionStr));
                                      // weitere States werden gesetzt.... weiter oben entfernt
                                      }
                              

                              Werde jetzt allgemein nur eine Kleinigkeit ergänzen: Wenn die Anzahl der Bedingungen verringert wird, möchte ich die nicht mehr genutzten States leeren. Aktuell stehen weiterhin Werte in den States bzw. im Main-JSON, was mich schon länger stört.

                              1 Antwort Letzte Antwort
                              0
                              • G Offline
                                G Offline
                                GiuseppeS
                                schrieb am zuletzt editiert von
                                #454

                                So Update ist hochgeladen. Für ein manuelles Update einfach das Skript unterhalb des Variablen-Bereichs übernehmen (Falls vom letzten Update kommend). Zusätzlich könnt ihr das PopUp View neu importieren. Alternativ können auch die Farbeinstellungen der 9 Bedingungs-Widgets übernommen werden.


                                Changelog 26.04.2020

                                • Minütliches Flackern der nächsten Timer abgestellt. Nur noch bei Änderungen gibts ein Flackern
                                • Bedingungen werden während der Eingabe ausgewertet und farblich im Editor hervorgehoben (Danke an HelmutS)
                                • Wenn Bedingungen leer oder fehlerhaft sind, wird das PopUp-Fenster nicht geschlossen. Log wird ausgegeben.

                                Wenn Bedingungen fehlerhaft sind, wird das PopUp beim Schließen über Button "Übernehmen" nicht geschlossen. Im iobroker Log wird auch entsprechend eine Ausgabe erzeugt. Hatte jetzt bestimmt eine Stunde versucht, diese Ausgabe dynamisch im PopUp direkt anzeigen zu lassen, aber erfolglos. Wollte das Error-Textfeld über html-Widget und dynamischer Sichtbarkeit realisieren, aber leider werden dahinterliegende Widgets überdeckt (Steuerung nicht möglich) trotz "Unsichtbarkeit" des zusätzlichen Widgets.

                                Danke @HelmutS

                                H 1 Antwort Letzte Antwort
                                0
                                • G GiuseppeS

                                  So Update ist hochgeladen. Für ein manuelles Update einfach das Skript unterhalb des Variablen-Bereichs übernehmen (Falls vom letzten Update kommend). Zusätzlich könnt ihr das PopUp View neu importieren. Alternativ können auch die Farbeinstellungen der 9 Bedingungs-Widgets übernommen werden.


                                  Changelog 26.04.2020

                                  • Minütliches Flackern der nächsten Timer abgestellt. Nur noch bei Änderungen gibts ein Flackern
                                  • Bedingungen werden während der Eingabe ausgewertet und farblich im Editor hervorgehoben (Danke an HelmutS)
                                  • Wenn Bedingungen leer oder fehlerhaft sind, wird das PopUp-Fenster nicht geschlossen. Log wird ausgegeben.

                                  Wenn Bedingungen fehlerhaft sind, wird das PopUp beim Schließen über Button "Übernehmen" nicht geschlossen. Im iobroker Log wird auch entsprechend eine Ausgabe erzeugt. Hatte jetzt bestimmt eine Stunde versucht, diese Ausgabe dynamisch im PopUp direkt anzeigen zu lassen, aber erfolglos. Wollte das Error-Textfeld über html-Widget und dynamischer Sichtbarkeit realisieren, aber leider werden dahinterliegende Widgets überdeckt (Steuerung nicht möglich) trotz "Unsichtbarkeit" des zusätzlichen Widgets.

                                  Danke @HelmutS

                                  H Offline
                                  H Offline
                                  HelmutS
                                  schrieb am zuletzt editiert von
                                  #455

                                  @GiuseppeS
                                  Ich danke dir für die viele Arbeit

                                  1 Antwort Letzte Antwort
                                  0
                                  • L Offline
                                    L Offline
                                    Lachi
                                    schrieb am zuletzt editiert von
                                    #456

                                    Super Arbeit vielen Dank,
                                    du benutzt den Timer doch auch fürs Handy oder?
                                    Welche app benutzt du den dafür?
                                    Ich habe die io-app und da wird es nicht richtig dargestellt, widget Eigenschaften nicht übernommen, view zu groß dargestellt.
                                    Mache ich was falsch?

                                    G 1 Antwort Letzte Antwort
                                    0
                                    • L Lachi

                                      Super Arbeit vielen Dank,
                                      du benutzt den Timer doch auch fürs Handy oder?
                                      Welche app benutzt du den dafür?
                                      Ich habe die io-app und da wird es nicht richtig dargestellt, widget Eigenschaften nicht übernommen, view zu groß dargestellt.
                                      Mache ich was falsch?

                                      G Offline
                                      G Offline
                                      GiuseppeS
                                      schrieb am zuletzt editiert von GiuseppeS
                                      #457

                                      @Lachi
                                      Ich verwende ein Android Handy und darin rufe ich mit Google Chrome die VIS Seite im Browser auf. Auf dem Android Handy nutze ich nicht die App da ich schon unabhängig von dem Timer Probleme mit der Darstellung hatte.
                                      Meine bessere Hälfte nutzt die offizielle ios ioBroker App. Darin wird sich alles korrekt angezeigt.

                                      1 Antwort Letzte Antwort
                                      0
                                      • M Offline
                                        M Offline
                                        manu96
                                        schrieb am zuletzt editiert von
                                        #458

                                        @GiuseppeS
                                        Bin gerade auf deine Zeitsteuerung mithilfe von VIS gestoßesen. Mich würde nur einmal interessieren wie du die verschiedenen Geräte ansteuerst? Bei mir sind alle Jalousien und Markisen über fhem angeschlossen und müssten daher dort geschaltet werden. Ist das innerhalb deines Skriptes irgendwo einstellbar?

                                        Trotzdem erstmal vielen Dank für deine Arbeit und das bereitstellen.
                                        LG, Manuel

                                        G 1 Antwort Letzte Antwort
                                        0
                                        • M manu96

                                          @GiuseppeS
                                          Bin gerade auf deine Zeitsteuerung mithilfe von VIS gestoßesen. Mich würde nur einmal interessieren wie du die verschiedenen Geräte ansteuerst? Bei mir sind alle Jalousien und Markisen über fhem angeschlossen und müssten daher dort geschaltet werden. Ist das innerhalb deines Skriptes irgendwo einstellbar?

                                          Trotzdem erstmal vielen Dank für deine Arbeit und das bereitstellen.
                                          LG, Manuel

                                          G Offline
                                          G Offline
                                          GiuseppeS
                                          schrieb am zuletzt editiert von GiuseppeS
                                          #459

                                          @manu96
                                          Sind deine Geräte von ioBroker aus erreichbar?
                                          Grundsätzlich funktioniert das Einbinden im Skript über eine ioBroker Aufzählung.
                                          Wenn Du deine fhem Geräte in ioBroker siehst, müsstest Du einfach diese Geräte in eine Aufzählung setzen und diese wiederum im Skript ganz oben eingeben.

                                          Es müssten mit dem Skript alle Arten von Geräten steuerbar sein, insofern diese nur ein State zum Steuern benötigen. In die Aufzählung dürfen nur States, keine übergeordnete Ordner (Channels bzw. Devices genannt).

                                          M 1 Antwort Letzte Antwort
                                          1
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          491

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          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