Skip to content
  • 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
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Blockly
  5. Wahl eines Datenpunktes

NEWS

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

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

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

Wahl eines Datenpunktes

Geplant Angeheftet Gesperrt Verschoben Blockly
35 Beiträge 3 Kommentatoren 1.2k Aufrufe 2 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.
  • AphofisA Aphofis

    @paul53
    Ich habe in dem Blockly 20 Zeitsteuerungen!
    Kann es jetzt aber anders machen per javascript und VIS direkt die 6 Datenpunkte Zeitgesteuert steuern.
    Nur will das Javascript iwie die Datenpunkte nicht sauber schalten.
    Kann es sein, das dass Javascript mit Großbuchstaben und den Unterstrichen Probleme hat !? kann man das im Javascript irgendwie anpassen !?
    Ich würde auch gerne, das das Script die Datenpunkte in:

    Aqua_Control.0.Tunze_Steuerung.
    

    erstellt. Anstatt in

    javascript.0.Timer.
    

    Das Dazugehörige VIS Widget kann ich dann auch die richtigen Datenpunkte anpassen.
    In TimerTargetNames

    intervall;sequenzial;puls;wave;stop;feed 
    

    eingetragen
    und in TimerTarget

    Aqua_Control.0.Tunze_Steuerung.intervall;Aqua_Control.0.Tunze_Steuerung.sequenzial;Aqua_Control.0.Tunze_Steuerung.puls;Aqua_Control.0.Tunze_Steuerung.wave;Aqua_Control.0.Tunze_Steuerung.stop;Aqua_Control.0.Tunze_Steuerung.feed
    

    Der Quellcode ist:

    //Script tested & Ok
    //Legt Timer an
    //Wichtige Einstellungen
    const AnzahlTimer = 20; //Wieviele Timer anlegen? Der erste ist 1, nicht 0!
    
    //let setTimeout;
    const logging = true; //Logmeldungen an/aus
    const praefix = "javascript.0.Timer."; //Grundpfad
    // let Presence = getState("radar2.0._nHere").val; //Pfad zum Anwesenheitsdatenpunkt. Erwartet wird eine Zahl >=
    let Presence = true
    var Wochentage = ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"]; //Array für createStateschleife zum anlegen der Wochentage
    var Astrotrigger = ["dawn", "sunrise", "dusk", "goldenHour", "dusk", "sunset"]; //Array für Astro 
    //if (logging) { log(Astrotrigger.length.toString()) };
    createState(praefix + "TimerTargets", "", false, { read: true, write: true, name: "Ziele welche geschaltet werden", type: "string", def: "" }); //Zentrale Source für die Anzeige in vis, Erstellung in der TimerRoot
    createState(praefix + "TimerTargetNames", "", false, { read: true, write: true, name: "Smartnames für die Ziele", type: "string", def: "" });
    
    for (let x = 1; x < AnzahlTimer + 1; x++) {
        //Datenpunkte anlegen 
        createState(praefix + x + ".Aktiv", false, false, { read: true, write: true, name: "Timer aktiv", type: "boolean", role: "switch", def: false }); //Legt fest ob der Timer aktiv ist
        createState(praefix + x + ".Rolle", 2, false, { read: true, write: true, name: "Rolle", type: "number", role: "value", def: 2 }); //Legt fest ob der Timer für An oder Aus zuständig ist
        createState(praefix + x + ".TimerTimestamp", "00:00:00", false, { read: true, write: true, name: "Zeitstempel für schaltzeit", type: "string", def: "00:00:00" });
        createState(praefix + x + ".TimerAstroTimestamp", "00:00:00", false, { read: true, write: true, name: "Zeitstempel für Astroschaltzeit", type: "string", def: "00:00:00" });
        createState(praefix + x + ".TimerAstroShift", 0, false, { read: true, write: true, name: "Zeitverschiebung für Astroschaltzeit", type: "number", def: 0 });
        for (let y = 0; y < 7; y++) { //Einträge für jeden Wochentag anlegen
            createState(praefix + x + ".Timer" + Wochentage[y], true, false, { read: true, write: true, name: Wochentage[y], type: "boolean", role: "switch", def: true });
        };
        createState(praefix + x + ".TimerChoice", "Zeit", false, { read: true, write: true, name: "Funktionswahl für Timer/Astro", type: "string", def: "Zeit" }); //Gewählte Funktion, Timer oder Astro
        createState(praefix + x + ".SwitchTarget", "", false, { read: true, write: true, name: "Ziel für Schaltvorgang", type: "string", def: "" });
        createState(praefix + x + ".OnlyIfPresence", false, false, { read: true, write: true, name: "Nur ausführen falls jemand anwesend", type: "boolean", role: "switch", def: false }); //Legt fest ob der Timer aktiv ist
        createState(praefix + x + ".OnlyIfNoPresence", false, false, { read: true, write: true, name: "Nur ausführen falls niemand anwesend", type: "boolean", role: "switch", def: false }); //Legt fest ob der Timer aktiv ist
    };
    
    
    //****************************
    
    //Datenpunkte Id"s zuweisen
    var id1 = [];
    for (let x = 1; x < AnzahlTimer + 1; x++) {//Anzahl der Timer
        let y = 0;
        id1[x] = [];
        id1[x][y] = (praefix + x + ".Aktiv"); y = y + 1;
        id1[x][y] = (praefix + x + ".Rolle"); y = y + 1;
        id1[x][y] = (praefix + x + ".TimerTimestamp"); y = y + 1;
        id1[x][y] = (praefix + x + ".TimerAstroTimestamp"); y = y + 1;
        id1[x][y] = (praefix + x + ".TimerAstroShift"); y = y + 1;
        id1[x][y] = (praefix + x + ".TimerChoice"); y = y + 1;
        for (let z = 0; z < Wochentage.length; z++) {//Schleifenvariable für Wochentage
            id1[x][y] = (praefix + x + ".Timer" + Wochentage[z]); y = y + 1;
        };
        id1[x][y] = (praefix + x + ".SwitchTarget"); y = y + 1;
        id1[x][y] = (praefix + x + ".OnlyIfPresence"); y = y + 1;
        id1[x][y] = (praefix + x + ".OnlyIfNoPresence"); y = y + 1;
    
    };
    
    // TimerVariablenArray anlegen für schedules
    var TimerAction = [];
    for (let x = 1; x < AnzahlTimer + 1; x++) {
        TimerAction[x] = null;
    };
    
    //Alle Daten in MyTimer Array einlesen
    var MyTimer = [];
    for (let x = 1; x < AnzahlTimer + 1; x++) {
        MyTimer[x] = [];
        for (let y = 0; y < id1[x].length; y++) {
            //log("x=" + x + "  y=" + y);
            MyTimer[x][y] = getState(id1[x][y]).val;
            //log(MyTimer[x][y]);
        };
    };
    
    //******************************************************** */
    
    function MakeCronString(whichone) { //String nach Cronsyntax zusammenbauen für Schedule
    
        var DaysSubString = "";
        for (let x = 0; x < 7; x++) {
            if (MyTimer[whichone][x + 6] == true) { //Beginnend mit dem 6ten Eintrag (TimerSonntag) die 7 Wochentage durchzählen und Werte anhängen
                DaysSubString = DaysSubString + x + ",";
            };
        };
        DaysSubString = DaysSubString.substr(0, DaysSubString.length - 1); //Komma am Ende entfernen
        if (DaysSubString == "0,1,2,3,4,5,6") { DaysSubString = "*"; }; // Sternchen wenn alle Tage gewählt
    
        var tempString = "";
        if (MyTimer[whichone][5] == "Zeit") { //Wenn Zeit gewählt
            tempString = SplitTime(MyTimer[whichone][2])[1] + " " + SplitTime(MyTimer[whichone][2])[0] + " * * " + DaysSubString;
            log("CronString für Timer " + whichone + " erstellt " + tempString);
        }
        else if (MyTimer[whichone][5] != "Zeit") { //Wenn Astro gewählt
            tempString = SplitTime(MyTimer[whichone][3])[1] + " " + SplitTime(MyTimer[whichone][3])[0] + " * * " + DaysSubString;
            log("Cronstring für Timer " + whichone + " Astro erstellt " + tempString);
        };
        return tempString;
    };
    
    //spezifischen Timer setzen
    function SetTimer(whichone) {
        if (MyTimer[whichone][0] == true) {
            log("Timer " + whichone + " wird gesetzt")
            TimerAction[whichone] = schedule(MakeCronString(whichone), function () {
                DoAction(whichone);
                if (MyTimer[whichone][5] != "Zeit") { //Wenn Astro gewählt
                    RefreshAstro(whichone); //Neue Astrozeit setzen nach Ausführung
                }
            });
        };
    };
    
    function RefreshAstro(whichone) {
        if (logging) { log("Refresh Astro") };
        SetChoosenAstroTime(whichone, true);
        SetTimer(whichone);
    };
    
    //Alle Timer setzen
    function SetAllTimer() {
        if (logging) { log("Setting all Timers") };
        for (let x = 1; x < AnzahlTimer + 1; x++) {
            SetTimer(x);
        }
    };
    
    //spezifischen Timer löschen
    function KillTimer(whichone) {
        clearSchedule(TimerAction[whichone]);
        if (logging) { log("Timer " + whichone + " killed") };
    }
    
    //Astro oder Zeit Gateway
    function AstroOrTime(whichone) {
        if (MyTimer[whichone][5] == "Zeit") {
            if (logging) { log("Zeit gewählt " + MyTimer[whichone][2]) };
        }
        else if (MyTimer[whichone][5] != "Zeit") {
            SetChoosenAstroTime(whichone);
            log("Astro gewählt, Variante " + MyTimer[whichone][5]);
        };
    };
    
    function SetChoosenAstroTime(whichone, GoToTomorrow) { //Zeit für gewählte Astrozeit eintragen
        let Shift = parseInt(MyTimer[whichone][4]); //Wert für Shift
        let AstroChoice = MyTimer[whichone][5].trim(); //Wert für Astroereignis
    
        //Berücksichtigen ob Event schon vorbei ist und dann für morgen setzen
        let today = new Date();
        let jetzt = new Date();
        let tomorrow = today.setDate(today.getDate() + 1);
        let tomorrowAstroTime = getAstroDate(AstroChoice, tomorrow);
        tomorrowAstroTime.setMinutes(tomorrowAstroTime.getMinutes() + Shift);//zammrechna
        log(AstroChoice + " beginnt heute um:" + getAstroDate(AstroChoice).toLocaleTimeString('de-DE', { hour12: false }) + " und beginnt morgen um " + tomorrowAstroTime.toLocaleTimeString('de-DE', { hour12: false }));
        //log(getAstroDate(AstroChoice).getTime() + " " + today.getTime() + " " + today.toLocaleTimeString());
        //log("Astro=" + getAstroDate(AstroChoice) + " Heute=" + jetzt + " " + "todayzeit=" + today.toLocaleTimeString());
    
        let AstroTime = getAstroDate(AstroChoice); //Astrotime einlesen
        AstroTime.setMinutes(AstroTime.getMinutes() + Shift);//zammrechna
        AstroTime.toLocaleTimeString('de-DE', { hour12: false });
        //if (getAstroDate(AstroChoice).getTime()  < jetzt.getTime()) { //Wenn Astrozeit vor aktueller Zeit dann Astrozeit von morgen verwenden
        if (AstroTime.getTime() <= jetzt.getTime() || GoToTomorrow == true) { //Wenn Astrozeit vor aktueller Zeit dann Astrozeit von morgen verwenden
            setState(id1[whichone][3], tomorrowAstroTime.toLocaleTimeString('de-DE', { hour12: false }));
            MyTimer[whichone][3] = tomorrowAstroTime.toLocaleTimeString('de-DE', { hour12: false });
            log("Astrotime von morgen verwendet, Event is heute bereits vorüber = " + tomorrowAstroTime.toLocaleTimeString('de-DE', { hour12: false }));
        }
        //else if (getAstroDate(AstroChoice).getTime() > jetzt.getTime()) {
        else if (AstroTime.getTime() > jetzt.getTime()) {
            setState(id1[whichone][3], AstroTime.toLocaleTimeString('de-DE', { hour12: false }));
            MyTimer[whichone][3] = AstroTime.toLocaleTimeString('de-DE', { hour12: false });
            log("Astrotime von heute verwendet, Event kommt heute noch = " + AstroTime.toLocaleTimeString('de-DE', { hour12: false }) + " Morgen=" + tomorrowAstroTime.toLocaleTimeString('de-DE', { hour12: false }));
        }
        else {
            log("Derf ned sei");
        };
    };
    
    function DoAction(whichone) {
        if (MyTimer[whichone][0] == true) { //Wenn Timer aktiv
            if ((MyTimer[whichone][14] == true && Presence !=0) || (MyTimer[whichone][13] == true && Presence == 0) || (MyTimer[whichone][13] == true && MyTimer[whichone][14] == true)) { //Wenn "bei Anwesenheit" aktiv
    
                if (MyTimer[whichone][1] == 1) { // Wenn die Rolle Anschalter ist
                    setState(MyTimer[whichone][13], true); //Switchtarget aktivieren
                    log(MyTimer[whichone][13] + " Timer " + whichone + " hat angeschaltet");
                }
                else if (MyTimer[whichone][1] == 0) { //Wenns die Rolle Ausschalter ist
                    setState(MyTimer[whichone][13], false);//Switchtarget deaktivieren
                    log("Timer " + whichone + " hat ausgeschaltet");
                };
            };
        };
    };
    
    
    //if (logging) { log(SplitTime("12:05") + h + m) };
    //Zeit in Stunden und Minuten teilen für Cronstring
    function SplitTime(Time) {
        var timesplit = Time.split(":", 2);
        //h = timesplit[0]  / m = timesplit[1];
        return timesplit;
    };
    
    function main() {
        SetAllTimer();
    };
    
    main();
    
    //Trigger für Timer x
    onStop(function () { //Bei Scriptende alle Timer löschen
        for (let x = 1; x < AnzahlTimer + 1; x++) {
            KillTimer(x);
        };
    }, 100);
    
    for (let x = 1; x < AnzahlTimer + 1; x++) { //Alle Timer durchlaufen und Trigger setzen
        on(id1[x][5], function (dp) { //Bei Änderung AstroChoice
            MyTimer[x][5] = getState(id1[x][5]).val; //Nach Änderung neuen Wert einlesen
            KillTimer(x);
            AstroOrTime(x);
            SetTimer(x);
            if (logging) log("AstroChoice geändert" + " für Timer " + x);
        });
    
        on(id1[x][1], function (dp) { //Bei Änderung Rolle
            MyTimer[x][1] = getState(id1[x][1]).val; //Nach Änderung neuen Wert einlesen
            if (MyTimer[x][1] == 2) {//Wenn TimerRolle=2 =inaktiv
                MyTimer[x][0] = false;
                setState(id1[x][0], false);
            }
            else {
                MyTimer[x][0] = true;
                setState(id1[x][0], true);
            };
            KillTimer(x);
            SetTimer(x);
            if (logging) log("Rolle geändert" + " für Timer " + x);
        });
    
        on(id1[x][4], function (dp) { //Bei Änderung Shift
            MyTimer[x][4] = getState(id1[x][4]).val; //Nach Änderung neuen Wert einlesen
            KillTimer(x);
            AstroOrTime(x);
            SetTimer(x);
            if (logging) log("Shift geändert" + " für Timer " + x);
        });
    
        on(id1[x][2], function (dp) { //Bei Änderung Zeit (TimerTimestamp)
            //setTimeout(function () { //1sek Timeout um prellen zu vermeiden
            MyTimer[x][2] = getState(id1[x][2]).val; //Nach Änderung neuen Wert einlesen
            KillTimer(x);
            SetTimer(x);
            if (logging) log("TimerTimestamp Zeit geändert auf " + MyTimer[x][2] + " für Timer " + x);
            //}, 1000);
        });
    
        on(id1[x][0], function (dp) { //Bei Änderung Timer Aktiv
            MyTimer[x][0] = getState(id1[x][0]).val; //Nach Änderung neuen Wert einlesen
            if (logging) log("TimerActive geändert auf " + MyTimer[x][0] + " für Timer " + x);
            //KillTimer(x);
            //SetTimer(x);
    
        });
    
        on(id1[x][6], function (dp) { //Bei Änderung Wochentage
            MyTimer[x][6] = getState(id1[x][6]).val; //Nach Änderung neuen Wert einlesen
            KillTimer(x);
            SetTimer(x);
    
            if (logging) log("TimerTag " + Wochentage[0] + " geändert auf " + MyTimer[x][6] + " für Timer " + x);
        });
        on(id1[x][7], function (dp) { //Bei Änderung Wochentage
            MyTimer[x][7] = getState(id1[x][7]).val; //Nach Änderung neuen Wert einlesen
            KillTimer(x);
            SetTimer(x);
    
            if (logging) log("TimerTag " + Wochentage[1] + " geändert auf " + MyTimer[x][7] + " für Timer " + x);
        });
        on(id1[x][8], function (dp) { //Bei Änderung Wochentage
            MyTimer[x][8] = getState(id1[x][8]).val; //Nach Änderung neuen Wert einlesen
            KillTimer(x);
            SetTimer(x);
    
            if (logging) log("TimerTag " + Wochentage[2] + " geändert auf " + MyTimer[1][8] + " für Timer " + x);
        });
        on(id1[x][9], function (dp) { //Bei Änderung Wochentage
            MyTimer[x][9] = getState(id1[x][9]).val; //Nach Änderung neuen Wert einlesen
            KillTimer(x);
            SetTimer(x);
    
            if (logging) log("TimerTag " + Wochentage[3] + " geändert auf " + MyTimer[x][9] + " für Timer " + x);
        });
        on(id1[x][10], function (dp) { //Bei Änderung Wochentage
            MyTimer[x][10] = getState(id1[x][10]).val; //Nach Änderung neuen Wert einlesen
            KillTimer(x);
            SetTimer(x);
    
            if (logging) log("TimerTag " + Wochentage[4] + " geändert auf " + MyTimer[x][10] + " für Timer " + x);
        });
        on(id1[x][11], function (dp) { //Bei Änderung Wochentage
            MyTimer[x][11] = getState(id1[x][6]).val; //Nach Änderung neuen Wert einlesen
            KillTimer(x);
            SetTimer(x);
    
            if (logging) log("TimerTag " + Wochentage[5] + " geändert auf " + MyTimer[x][11] + " für Timer " + x);
        });
        on(id1[x][12], function (dp) { //Bei Änderung Wochentage
            MyTimer[x][12] = getState(id1[x][12]).val; //Nach Änderung neuen Wert einlesen
            KillTimer(x);
            SetTimer(x);
    
            if (logging) log("TimerTag " + Wochentage[6] + " geändert auf " + MyTimer[x][12] + " für Timer " + x);
        });
        on(id1[x][12], function (dp) { //Bei Änderung Switchtarget
            MyTimer[x][13] = getState(id1[x][13]).val; //Nach Änderung neuen Wert einlesen
            if (logging) log("TimerTag " + Wochentage[6] + " geändert auf " + MyTimer[x][12] + " für Timer " + x);
        });
    
    };
    
    
    

    Mit freundlicher weitergabe von carlo
    Irgendwie wird immer nur puls auf true gesetzt aber nix weiter

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

    @Aphofis sagte:

    Kann es sein, das dass Javascript mit Großbuchstaben und den Unterstrichen Probleme hat !?

    Großbuchstaben und Unterstriche machen keine Probleme.

    @Aphofis sagte in Wahl eines Datenpunktes:

    Script die Datenpunkte in: Aqua_Control.0.Tunze_Steuerung. erstellt.

    Mit der Funktion von @Mic kann man Datenpunkte auch unter einem eigenen Ordner erstellen, wenn man Zeile 21 anpasst

        const WHERE = '0_userdata.0';   // You could change the starting path accordingly. Not recommended to change, though.
    

    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
    1
    • AphofisA Offline
      AphofisA Offline
      Aphofis
      schrieb am zuletzt editiert von
      #5

      @paul53
      Das hat schon mal geklappt mit dem eigenen Ordner.
      Die gewählten Datenpunkte im VIS werden korrekt in den einzelnen Timern gesetzt, doch werden die falschen Datenpunkte der switch Datenpunkte geschaltet.
      Obgleich TimerTargetNames und TimerTargets sogar in der selben Reihenfolge sind.
      Alle widgets hab ich einzelne durchforstet und die sind richtig eingestellt.
      Woran, kann der Fehler liegen, das nicht die richtigen Datenpunkte geschaltet werden.

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

        Das ist das dazugehörige Timer Widget

        [{"tpl":"tplValueBoolCheckbox","data":{"oid":"javascript.0.Timer.1.OnlyIfNoPresence","g_fixed":true,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"html_append":"wenn abwesend","class":""},"style":{"left":"786px","top":"519px","width":"157px","height":"20px","font-size":"small"},"widgetSet":"basic"},{"tpl":"tplValueBoolCheckbox","data":{"oid":"javascript.0.Timer.1.OnlyIfPresence","g_fixed":true,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"html_append":"wenn anwesend","class":"mdui-Title"},"style":{"left":"630px","top":"519px","width":"157px","height":"20px","font-size":"small"},"widgetSet":"basic"},{"tpl":"tplValueBool","data":{"oid":"javascript.0.Timer.1.Aktiv","g_fixed":true,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"html_false":"Timer 1","html_true":"Timer 1","class":"mdui-flatbutton mdui-center ","html_append":"","visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide"},"style":{"left":"630px","top":"454px","height":"25px","width":"80px","text-align":"","z-index":"5","cursor":"default"},"widgetSet":"basic"},{"tpl":"tplValueBoolCtrl","data":{"oid":"javascript.0.Timer.1.TimerSonntag","g_fixed":true,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"html_false":"<diff class=\"mdui-red\" >So:","html_true":"<diff class=\"mdui-green\" >So:","class":"mdui-raisedbutton"},"style":{"left":"630px","top":"541px","width":"40px","height":"20px","text-align":"center"},"widgetSet":"basic"},{"tpl":"tplValueBoolCtrl","data":{"oid":"javascript.0.Timer.1.TimerMontag","g_fixed":true,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"html_false":"<diff class=\"mdui-red\" >Mo:","html_true":"<diff class=\"mdui-green\" >Mo:","class":"mdui-raisedbutton"},"style":{"left":"672px","top":"541px","width":"40px","height":"20px","text-align":"center"},"widgetSet":"basic"},{"tpl":"tplValueBoolCtrl","data":{"oid":"javascript.0.Timer.1.TimerDienstag","g_fixed":true,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"html_false":"<diff class=\"mdui-red\" >Di:","html_true":"<diff class=\"mdui-green\" >Di:","class":"mdui-raisedbutton"},"style":{"left":"715px","top":"541px","width":"40px","height":"20px","text-align":"center"},"widgetSet":"basic"},{"tpl":"tplValueBoolCtrl","data":{"oid":"javascript.0.Timer.1.TimerMittwoch","g_fixed":true,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"html_false":"<diff class=\"mdui-red\" >Mi:","html_true":"<diff class=\"mdui-green\" >Mi:","class":"mdui-raisedbutton"},"style":{"left":"757px","top":"541px","width":"40px","height":"20px","text-align":"center"},"widgetSet":"basic"},{"tpl":"tplValueBoolCtrl","data":{"oid":"javascript.0.Timer.1.TimerDonnerstag","g_fixed":true,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"html_false":"<diff class=\"mdui-red\" >Do:","html_true":"<diff class=\"mdui-green\" >Do:","class":"mdui-raisedbutton"},"style":{"left":"799px","top":"541px","width":"40px","height":"20px","text-align":"center"},"widgetSet":"basic"},{"tpl":"tplValueBoolCtrl","data":{"oid":"javascript.0.Timer.1.TimerFreitag","g_fixed":true,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"html_false":"<diff class=\"mdui-red\" >Fr:","html_true":"<diff class=\"mdui-green\" >Fr:","class":"mdui-raisedbutton"},"style":{"left":"842px","top":"541px","width":"40px","height":"20px","text-align":"center"},"widgetSet":"basic"},{"tpl":"tplValueBoolCtrl","data":{"oid":"javascript.0.Timer.1.TimerSamstag","g_fixed":true,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"html_false":"<diff class=\"mdui-red\" >Sa:","html_true":"<diff class=\"mdui-green\" >Sa:","class":"mdui-raisedbutton"},"style":{"left":"884px","top":"541px","width":"40px","height":"20px","text-align":"center"},"widgetSet":"basic"},{"tpl":"tplValueBool","data":{"oid":"","g_fixed":true,"g_visibility":true,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":"true","visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"html_false":"","html_true":"","class":"mdui-flatbutton mdui-center mdui-green-pulse","html_append":"","visibility-oid":"javascript.0.Timer.1.Aktiv"},"style":{"left":"630px","top":"454px","height":"25px","width":"80px","text-align":"","z-index":"0","cursor":"default"},"widgetSet":"basic"},{"tpl":"tplJquiSelectList","data":{"oid":"javascript.0.Timer.1.SwitchTarget","g_fixed":true,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","values":"{javascript.0.Timer.TimerTargets}","texts":"{javascript.0.Timer.TimerTargetNames}","height":"150","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"class":"mdui-select","no_style":true},"style":{"left":"724px","top":"452px","width":"200px","z-index":10,"height":"25px","font-size":"small"},"widgetSet":"jqui"},{"tpl":"tplValueStringRaw","data":{"oid":"javascript.0.Timer.1.TimerAstroTimestamp","g_fixed":true,"g_visibility":true,"g_css_font_text":true,"g_css_background":true,"g_css_shadow_padding":false,"g_css_border":true,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"!=","visibility-val":"Zeit","visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"visibility-oid":"javascript.0.Timer.1.TimerChoice","views":null,"class":"mdui-value"},"style":{"left":"849px","top":"494px","width":"90px","height":"22px","z-index":3,"background-color":"","color":"","text-align":"","font-weight":"","font-size":"","border-color":"","border-width":"","border-style":""},"widgetSet":"basic"},{"tpl":"tplJquiSelectList","data":{"oid":"javascript.0.Timer.1.Rolle","g_fixed":true,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","values":"0;1;2","texts":"Ausschalten;Einschalten;Nix macha","height":"120","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"no_style":true,"views":null,"class":"mdui-select"},"style":{"left":"630px","top":"487px","width":"100px","height":"28px","z-index":8,"font-size":"small"},"widgetSet":"jqui"},{"tpl":"tplJquiInput","data":{"oid":"javascript.0.Timer.1.TimerAstroShift","g_fixed":true,"g_visibility":true,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"label":"+/-","digits":"0","size":"1","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"visibility-cond":"!=","visibility-val":"Zeit","visibility-groups-action":"hide","visibility-oid":"javascript.0.Timer.1.TimerChoice","views":null,"class":"mdui-input"},"style":{"left":"847px","top":"573px","width":"93px","height":"20px","font-size":"","z-index":9,"font-weight":"bold","color":"black"},"widgetSet":"jqui"},{"tpl":"tplJquiSelectList","data":{"oid":"javascript.0.Timer.1.TimerChoice","g_fixed":true,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","values":"Zeit;dawn;sunrise;goldenHour;dusk;sunset","texts":"Zeit;Morgendämmerung;Sonnenaufgang;Goldene Stunde;Abenddämmerung;  Sonnenuntergang;","height":"200","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"no_style":true,"views":null,"class":"mdui-select"},"style":{"left":"630px","top":"567px","width":"198px","height":"25px","font-size":"small","font-weight":"bold","z-index":9},"widgetSet":"jqui"},{"tpl":"tplJquiInputDatetime","data":{"oid":"javascript.0.Timer.1.TimerTimestamp","g_fixed":true,"g_visibility":true,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":"Zeit","visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"size":"5","timeOnly":true,"hideSeconds":true,"visibility-oid":"javascript.0.Timer.1.TimerChoice","views":null,"class":"mdui-input"},"style":{"left":"849px","top":"491px","width":"90px","height":"25px","font-weight":"","z-index":9,"font-size":"","text-align":"right"},"widgetSet":"jqui"}]
        
        1 Antwort Letzte Antwort
        0
        • AphofisA Aphofis

          @paul53
          Das hat schon mal geklappt mit dem eigenen Ordner.
          Die gewählten Datenpunkte im VIS werden korrekt in den einzelnen Timern gesetzt, doch werden die falschen Datenpunkte der switch Datenpunkte geschaltet.
          Obgleich TimerTargetNames und TimerTargets sogar in der selben Reihenfolge sind.
          Alle widgets hab ich einzelne durchforstet und die sind richtig eingestellt.
          Woran, kann der Fehler liegen, das nicht die richtigen Datenpunkte geschaltet werden.

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

          @Aphofis sagte:

          Woran, kann der Fehler liegen, das nicht die richtigen Datenpunkte geschaltet werden.

          Mit Vis/Widgets kenne ich mich nicht aus.

          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
          • AphofisA Offline
            AphofisA Offline
            Aphofis
            schrieb am zuletzt editiert von
            #8

            Ich denke mal es liegt irgendwo im JavaScript und nicht am Widget! Da in den timer datenpunkten die richtigen Programme eingetragen werden aber nicht an die Switch datenpunkte übergeben wird. Iwo muss ein Fehler sein

            paul53P 1 Antwort Letzte Antwort
            0
            • AphofisA Aphofis

              Ich denke mal es liegt irgendwo im JavaScript und nicht am Widget! Da in den timer datenpunkten die richtigen Programme eingetragen werden aber nicht an die Switch datenpunkte übergeben wird. Iwo muss ein Fehler sein

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

              @Aphofis sagte in Wahl eines Datenpunktes:

              Ich denke mal es liegt irgendwo im JavaScript

              Ändere mal in Zeile 178 [13] --> [15]

                      if ((MyTimer[whichone][14] && Presence) || (MyTimer[whichone][15] && !Presence) || (MyTimer[whichone][15] && MyTimer[whichone][14])) { //Wenn "bei Anwesenheit" aktiv
              

              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

              AphofisA 1 Antwort Letzte Antwort
              1
              • paul53P paul53

                @Aphofis sagte in Wahl eines Datenpunktes:

                Ich denke mal es liegt irgendwo im JavaScript

                Ändere mal in Zeile 178 [13] --> [15]

                        if ((MyTimer[whichone][14] && Presence) || (MyTimer[whichone][15] && !Presence) || (MyTimer[whichone][15] && MyTimer[whichone][14])) { //Wenn "bei Anwesenheit" aktiv
                
                AphofisA Offline
                AphofisA Offline
                Aphofis
                schrieb am zuletzt editiert von
                #10

                @paul53
                Habe ich geändert! zwar wurde beim ersten mal der richtige Datenpunkt geschaltet aber dann beim zweiten Timer nicht mehr da wurde dann der selbe Datenpunkt gewählt obwohl im timer SwitchTarget der richtige Datenpunkt eingetragen wurde.
                Hatte im timer Sequenzial gewählt und im Timer stand dann auch "javascript.0.Timer.sequenzial" ohne"".
                wenn ich zwischen den Timern den letzten Datenpunkt manuell auf false setze bringt auch keine Änderung.

                paul53P 2 Antworten Letzte Antwort
                0
                • AphofisA Aphofis

                  @paul53
                  Habe ich geändert! zwar wurde beim ersten mal der richtige Datenpunkt geschaltet aber dann beim zweiten Timer nicht mehr da wurde dann der selbe Datenpunkt gewählt obwohl im timer SwitchTarget der richtige Datenpunkt eingetragen wurde.
                  Hatte im timer Sequenzial gewählt und im Timer stand dann auch "javascript.0.Timer.sequenzial" ohne"".
                  wenn ich zwischen den Timern den letzten Datenpunkt manuell auf false setze bringt auch keine Änderung.

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

                  @Aphofis sagte:

                  obwohl im timer SwitchTarget der richtige Datenpunkt eingetragen wurde.

                  Zeigt das Log "... hat angeschaltet" auch die falsche ID an ?

                  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
                  • AphofisA Offline
                    AphofisA Offline
                    Aphofis
                    schrieb am zuletzt editiert von
                    #12

                    Meine LOG:
                    Bildschirmfoto 2020-01-25 um 17.34.10.png

                    paul53P 1 Antwort Letzte Antwort
                    0
                    • AphofisA Aphofis

                      @paul53
                      Habe ich geändert! zwar wurde beim ersten mal der richtige Datenpunkt geschaltet aber dann beim zweiten Timer nicht mehr da wurde dann der selbe Datenpunkt gewählt obwohl im timer SwitchTarget der richtige Datenpunkt eingetragen wurde.
                      Hatte im timer Sequenzial gewählt und im Timer stand dann auch "javascript.0.Timer.sequenzial" ohne"".
                      wenn ich zwischen den Timern den letzten Datenpunkt manuell auf false setze bringt auch keine Änderung.

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

                      @Aphofis
                      Noch mal in das Script geschaut: Ab Zeile 312 steht Unsinn. Ändere [12] --> [13] und passe die Log-Ausgabe an.

                          on(id1[x][13], function (dp) { //Bei Änderung Switchtarget
                              MyTimer[x][13] = dp.state.val; //Nach Änderung neuen Wert einlesen
                      

                      EDIT: Enthalten die Datenpunkte ".OnlyIfPresence" und ".OnlyIfNoPresence" Konstanten ? Es gibt dafür keinen Trigger.

                      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
                      • AphofisA Aphofis

                        Meine LOG:
                        Bildschirmfoto 2020-01-25 um 17.34.10.png

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

                        @Aphofis sagte:

                        Meine LOG:

                        "javascript.0.Timer.sequenzial" ist falsch ?

                        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
                        • AphofisA Offline
                          AphofisA Offline
                          Aphofis
                          schrieb am zuletzt editiert von Aphofis
                          #15

                          wenn ich einen Datenpunkt raus kopiere ist bei sequenzial der Pfad javascript.0.Timer.sequenzial

                          Bildschirmfoto 2020-01-25 um 18.54.00.png
                          Wie ist denn dann der richtige Datenpunkt Pfad ???

                          Bildschirmfoto 2020-01-25 um 18.58.26.png

                          paul53P 1 Antwort Letzte Antwort
                          0
                          • AphofisA Aphofis

                            wenn ich einen Datenpunkt raus kopiere ist bei sequenzial der Pfad javascript.0.Timer.sequenzial

                            Bildschirmfoto 2020-01-25 um 18.54.00.png
                            Wie ist denn dann der richtige Datenpunkt Pfad ???

                            Bildschirmfoto 2020-01-25 um 18.58.26.png

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

                            @Aphofis sagte:

                            Pfad javascript.0.Timer.sequenzial

                            Also sollte das Log doch den richtigen Datenpunkt zeigen, der auch auf true steht ?

                            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

                            AphofisA 1 Antwort Letzte Antwort
                            0
                            • paul53P paul53

                              @Aphofis sagte:

                              Pfad javascript.0.Timer.sequenzial

                              Also sollte das Log doch den richtigen Datenpunkt zeigen, der auch auf true steht ?

                              AphofisA Offline
                              AphofisA Offline
                              Aphofis
                              schrieb am zuletzt editiert von
                              #17

                              @paul53
                              Ich sehe nicht wo der Pfad falsch sein soll!
                              wie gesagt, erste Schaltung Timer 1 wird der richtige Datenpunkt geschaltet dann aber Timer 2 soll ein anderer der 6 Datenpunkte geschaltet werden und es wir wieder sequenzial geschaltet anstatt wie eingestellt puls.
                              Andere Frage, kann man es per Javascript so programmieren, das wenn ein neuer Datenpunkt der im aktuellen Timer auf true gesetzt wird, das die anderen 5 dann abgeschaltet werden !?
                              Insofern die Timer dann bald auch funktionieren

                              1 Antwort Letzte Antwort
                              0
                              • AphofisA Offline
                                AphofisA Offline
                                Aphofis
                                schrieb am zuletzt editiert von
                                #18

                                Ich wollte 20 Timer erstellen, die dann später die Strömungspumpen steuern und jetzt 40 Timer zu erstellen, damit dann jeweils keine Ahnung paar Sekunden später nach aktivieren eines neuen Datenpunktes dann der alte per timer abgeschaltet wird.

                                1 Antwort Letzte Antwort
                                0
                                • AphofisA Offline
                                  AphofisA Offline
                                  Aphofis
                                  schrieb am zuletzt editiert von
                                  #19

                                  Hier wird Das Programm aus TimerTargetNames genommen und in SwitchTarget eingetragen
                                  Bildschirmfoto 2020-01-25 um 20.13.43.png

                                  Hier wird der Timer ein oder aus geschaltet
                                  Bildschirmfoto 2020-01-25 um 20.16.04.png

                                  Hier werden die Wochentage de/aktiviert
                                  Bildschirmfoto 2020-01-25 um 20.17.22.png

                                  Hier wird die Uhrzeit geschaltet
                                  Bildschirmfoto 2020-01-25 um 20.18.48.png

                                  Hier wird die Anwesenheit eingestellt was aber im Javascript ausgeklammert ist per

                                  //let Presence = getState("radar2.0._nHere").val; //Pfad zum Anwesenheitsdatenpunkt. Erwartet wird eine Zahl >=0
                                  let Presence = true
                                  

                                  Bildschirmfoto 2020-01-25 um 20.21.08.png

                                  1 Antwort Letzte Antwort
                                  0
                                  • AphofisA Offline
                                    AphofisA Offline
                                    Aphofis
                                    schrieb am zuletzt editiert von
                                    #20

                                    @paul53
                                    also habe alles noch mal gelöscht und komplett neu installiert.
                                    jetzt werden alle Datenpunkte richtig geschaltet.
                                    Bleibt nur noch das bei aktivieren eines neuen Datenpunktes muss der vorherige auf false gesetzt werden.
                                    Wie kann man das in das Javascript am besten einbauen ???

                                    paul53P 2 Antworten Letzte Antwort
                                    0
                                    • AphofisA Aphofis

                                      @paul53
                                      also habe alles noch mal gelöscht und komplett neu installiert.
                                      jetzt werden alle Datenpunkte richtig geschaltet.
                                      Bleibt nur noch das bei aktivieren eines neuen Datenpunktes muss der vorherige auf false gesetzt werden.
                                      Wie kann man das in das Javascript am besten einbauen ???

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

                                      @Aphofis sagte:

                                      bei aktivieren eines neuen Datenpunktes muss der vorherige auf false gesetzt werden.

                                      Was hat es mit der "Rolle" (An/Aus) auf sich ?

                                      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
                                      • AphofisA Aphofis

                                        @paul53
                                        also habe alles noch mal gelöscht und komplett neu installiert.
                                        jetzt werden alle Datenpunkte richtig geschaltet.
                                        Bleibt nur noch das bei aktivieren eines neuen Datenpunktes muss der vorherige auf false gesetzt werden.
                                        Wie kann man das in das Javascript am besten einbauen ???

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

                                        @Aphofis sagte:

                                        bei aktivieren eines neuen Datenpunktes muss der vorherige auf false gesetzt werden.

                                        Damit auch bei Script-Start ermittelt werden kann, welche Aktivität läuft, wird ein zusätzlicher Datenpunkt (idActive) benötigt. Dann könnte man es etwa so lösen:

                                        var active = getState(idActive).val; // neuer Datenpunkt, damit bei Scriptstart die aktive ID passt
                                        function DoAction(whichone) {
                                            if (MyTimer[whichone][0]) { //Wenn Timer aktiv
                                                if ((MyTimer[whichone][14] && Presence) || (MyTimer[whichone][15] && !Presence) || (MyTimer[whichone][15] && MyTimer[whichone][14])) { //Wenn "bei Anwesenheit" aktiv
                                                    if(active) setState(active, false); // laufende Aktivität aus 
                                                    active = MyTimer[whichone][13];
                                                    if (MyTimer[whichone][1] == 1) { // Wenn die Rolle Anschalter ist
                                                        setState(active, true); //Switchtarget aktivieren
                                                        log(active + " Timer " + whichone + " hat angeschaltet");
                                                    } else { //Wenns die Rolle Ausschalter ist
                                                        setState(active, false);//Switchtarget deaktivieren
                                                        log("Timer " + whichone + " hat ausgeschaltet");
                                                    }
                                                    setState(idActive, active, true); // neue Aktivität im Datenpunkt merken
                                                }
                                            }
                                        }
                                        

                                        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

                                        AphofisA 1 Antwort Letzte Antwort
                                        0
                                        • paul53P paul53

                                          @Aphofis sagte:

                                          bei aktivieren eines neuen Datenpunktes muss der vorherige auf false gesetzt werden.

                                          Damit auch bei Script-Start ermittelt werden kann, welche Aktivität läuft, wird ein zusätzlicher Datenpunkt (idActive) benötigt. Dann könnte man es etwa so lösen:

                                          var active = getState(idActive).val; // neuer Datenpunkt, damit bei Scriptstart die aktive ID passt
                                          function DoAction(whichone) {
                                              if (MyTimer[whichone][0]) { //Wenn Timer aktiv
                                                  if ((MyTimer[whichone][14] && Presence) || (MyTimer[whichone][15] && !Presence) || (MyTimer[whichone][15] && MyTimer[whichone][14])) { //Wenn "bei Anwesenheit" aktiv
                                                      if(active) setState(active, false); // laufende Aktivität aus 
                                                      active = MyTimer[whichone][13];
                                                      if (MyTimer[whichone][1] == 1) { // Wenn die Rolle Anschalter ist
                                                          setState(active, true); //Switchtarget aktivieren
                                                          log(active + " Timer " + whichone + " hat angeschaltet");
                                                      } else { //Wenns die Rolle Ausschalter ist
                                                          setState(active, false);//Switchtarget deaktivieren
                                                          log("Timer " + whichone + " hat ausgeschaltet");
                                                      }
                                                      setState(idActive, active, true); // neue Aktivität im Datenpunkt merken
                                                  }
                                              }
                                          }
                                          
                                          AphofisA Offline
                                          AphofisA Offline
                                          Aphofis
                                          schrieb am zuletzt editiert von Aphofis
                                          #23

                                          @paul53
                                          äh wo muss denn dann der idActive Datenpunkt hin !? muss in jedem Timer einer erstellt werden?
                                          oder nur in den Timer Ordner?
                                          und wo kommt der Javascript Code hin???

                                          paul53P 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

                                          731

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          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
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe