NEWS
[Vorlage] Variable Zeitsteuerung mit VIS Editor
-
Mal was anderes ....
Ich arbeite viel mit dem Adapter - Logparser und habe im Script dazu etwas eingebaut , damit die Log Ausgabe dementsprechend auch Sinnvoll dargestellt wird .var logPraefix = '[Timer] ##{"severity":"", "from":"", "message":"'; // Wenn stdLog = true, kann hiermit die Ausgabe des ausgeführten Timers manipuliert werden var logPraefixend = '"}##'; // Logparser Ende
.
// Timer neu erstellen falls AKTIV == true if (aktiv){ // Verschiedene Mappings aus DropDown zu realen States erstellen if(sollWertMapping.hasOwnProperty(sollwert)){ if(debugLog){console.log("Sollwert Mapping! Ist: " + sollwert);} sollwert = sollWertMapping[sollwert] if(debugLog){console.log("Sollwert Mapping! Real: " + sollwert);} } else (sollwert = parseInt(sollwert)); if(stdLog){console.log("Schedule aktiviert: \"" + device + " #" + nr + "\": [" + scheduleNr + "] | " + cronString + " | " + objID + " | " + sollwert);} if (rememberState){ // Array der CondIDs zusammenstellen für späteren Subscribe var ConditionJSON = JSON.parse(getState("javascript.0.Timer." + path + ".ConditionJSON").val); condArr.push(objID); // Auch objID = Ziel-ID überwachen for (let i = 1; i <= conditionsNr; i++){ condArr.push(ConditionJSON[TimerJSON[device][nr].Conditions[i].CondState]); } } cronArr[scheduleNr] = schedule(cronString, function(){ // Löschen der Subscription des selben Devices, falls vorhanden if (subscribesList[device] > 0){ if(debugLog){console.log("Aktive Subscription für \"" + device + "\" gelöscht! Nächster Timer übernimmt!");} unsubscribe(subscribesArr[subscribesList[device]]); subscribesArr[subscribesList[device]] = null; subscribesList[device] = 0; } if( condEval(TimerJSON[device][nr]) ){ if(stdLog){ console.log(logPraefix + device + " (" + tmpSollwert + ")" + logPraefixend);} setState(objID, sollwert); setTimeout(tableMain, 500); // aktualisieren der Tabelle } else if (rememberState){ if(stdLog){ console.log(logPraefix + device + " (" + tmpSollwert + ") -> Timer gespeichert. Bedingung(en) noch nicht erfüllt!" + logPraefixend);} subscribesList[device] = scheduleNr; subscribesArr[scheduleNr] = on({id: condArr, change: "ne"}, function (obj) { if (obj.id == objID){ // Falls getriggert durch objID, Subscription löschen if(debugLog){console.log("Schedule für \"" + device + " #" + nr + "\" [" + scheduleNr + "] -> Timer gelöscht! Istwert von Ziel-ID direkt verändert!");} unsubscribe(subscribesArr[scheduleNr]); subscribesArr[scheduleNr] = null; subscribesList[device] = 0; setTimeout(tableMain, 500); // aktualisieren der Tabelle } else if( condEval(TimerJSON[device][nr]) ){ if(stdLog){ console.log(logPraefix + device + " (" + tmpSollwert + ") -> Timer ausgeführt. Bedingung(en) nachträglich erfüllt!" + logPraefixend);} setState(objID, sollwert); unsubscribe(subscribesArr[scheduleNr]); subscribesArr[scheduleNr] = null; subscribesList[device] = 0; setState("javascript.0.Timer." + path + ".BackgroundTimersAfterwardsFulfilled", true); setStateDelayed("javascript.0.Timer." + path + ".BackgroundTimersAfterwardsFulfilled", false, 500, false); // aktualisieren der Tabelle erfolgt bereits über separatem Trigger der Bedingungen } }); setTimeout(tableMain, 500); // aktualisieren der Tabelle für Blinken } else { if(stdLog){ console.log(logPraefix + device + " (" + tmpSollwert + ") -> Nicht ausgeführt. Bedingung(en) nicht erfüllt!" + logPraefixend);} setTimeout(tableMain, 500); }; }); } else { // Falls Timer deaktiviert wird, während es gespeichert wurde... Subscription löschen! if (subscribesArr[scheduleNr]){ if(debugLog){console.log("Schedule für \"" + device + " #" + nr + "\" [" + scheduleNr + "] -> Timer aus Speicher entfernt!");} unsubscribe(subscribesArr[scheduleNr]); subscribesArr[scheduleNr] = null; subscribesList[device] = 0; } } }
Logparser :
.
.
-
Eine Anzeige ob der Timer ausgelöst hat wäre Super. Oder übersehe ich da was?
-
Ist doch drinn , mußt du nur oben einschalten !
/ Log-Modus var stdLog = true; // elementare Ausgabe, Schedule erstellt/gelöscht var debugLog = false; // zusätzliche Ausgaben, z.B. zu den Bedingungen
Deshalb habe ich doch die Logausgabe über den Logparser so
-
@sigi234
Im Log sollte eine Meldung erscheinen, wenn ein Timer ausgelöst hat.EDIT:
OK, habe heute gegen Glasfaser keine Chance bin zu langsam, gehe jetzt schlafen -
@GiuseppeS sagte in [Vorlage] Variable Zeitsteuerung mit VIS Editor:
@sigi234
Im Log sollte eine Meldung erscheinen, wenn ein Timer ausgelöst hat.Ja, das sehe ich. Ich meine in der Tabelle.
-
Alles mit dem Logparser .. siehe oben !
-
im Script bei :
-> Timer ausgeführt. Bedingung(en) nachträglich erfüllt!
Trigger ich dann mit :
setState("javascript.0.Timer." + path + ".BackgroundTimersAfterwardsFulfilled", true); setStateDelayed("javascript.0.Timer." + path + ".BackgroundTimersAfterwardsFulfilled", false, 500, false);
Damit die erstellte Log Tabelle von den nicht erfüllten Bedingungen wieder gelöscht wird .
Problem was ich nicht finde ...
wenn die Bedingung abgebrochen wird in der Tabelle selber , mit bed oder auf die Zahl Bedingung , das dort auch der Trigger ausgelöst wird . -
@Glasfaser sagte in [Vorlage] Variable Zeitsteuerung mit VIS Editor:
Alles mit dem Logparser .. siehe oben !
Ja, den habe ich.
Aber mein nächstes Projekt:
Überwachung und Steuerung eines Weinkühlschranks.
Das wird mit dem Timer Super gehen.
Also, Kühlschrank wird nur zu bestimmten Zeiten und nur wenn die Temperatur unter X Grad fällt eingeschaltet.
Ich werde da einfach einen Hue Bewegungssensor reinstellen in Kombination mit einer Funksteckdose.So ungefähr halt.
-
@sigi234 sagte in [Vorlage] Variable Zeitsteuerung mit VIS Editor:
Ja, den habe ich.
Ja ... ich weiß das du den hast
Überwachung und Steuerung eines Weinkühlschranks.
Geiles Projekt
-
@sigi234
Für die Anzeige ausgeführter Timer sollte die Log-Ausgabe genügen. Innerhalb der Tabelle dürfte es eh nur eine vorübergehende Darstellung sein, da Timer sich ja u.U. täglich wiederholen und somit die Darstellung rechtzeitig zurück gesetzt werden müsste.@Glasfaser
Log Variablen ist mit logSuffix ergänzt. Überall wo logPraefix verwendet wird, steht am Ende des Logs noch logSuffix.Bzgl. des gewünschten States für die Darstellung der nachträglich erfüllten Timer bin ich noch nicht ganz sicher:
Dein State wird auf true gesetzt, wenn Timer nachträglich erfüllt werden und setzt sich automatisch zurück. Ok.
Es könnten allerdings mehrere Timer im Hintergrund schlummern und wenn einer auslöst, dürften eigentlich nicht alle bereinigt werden. Eigentlich müsste dem State statt true/false der Timer-Name mitgegeben werden. Somit könnte explizit dieser Timer aus dem Log bereinigt werden. Dann mit nachgelagertem Skript deinerseits.Allgemein bzgl. Log:
Ich bin der Meinung, dass eine Log-Ausgabe kontinuierlich sein müsste und keine nachträgliche Manipulation eines Logs stattfinden sollte.
Aber wenn dir ein State iwie weiterhilft mach ich den rein, stört ja nicht. -
@GiuseppeS sagte in [Vorlage] Variable Zeitsteuerung mit VIS Editor:
Allgemein bzgl. Log:
Ich bin der Meinung, dass eine Log-Ausgabe kontinuierlich sein müsste und keine nachträgliche Manipulation eines Logs stattfinden sollte.ist ja nur für den Adapter Logparser gedacht !
-
Man kann auch mit dem Logparser ganz normal danach Filtern , das heißt auch ganz ohne den Zusatz ( aber ohne Log Beeinflussung )
-
Der Adapter Logpaser bringt aber zusätzlich eine Filterung mit , so das man die Logausgabe manipulieren kann , die ich bei dir im Script nutze .
-
-
@GiuseppeS sagte in [Vorlage] Variable Zeitsteuerung mit VIS Editor:
zgl. des gewünschten States für die Darstellung der nachträglich erfüllten Timer bin ich noch nicht ganz sicher:
Somit könnte explizit dieser Timer aus dem Log bereinigt werden.Das geht leider in einem Gesamtlog nicht .. das ein Eintrag gelöscht wird.
.... stelle es noch zurück , da ich selber damit noch am werkeln bin
aber hier kannst du mir noch ein Tip geben !
@Glasfaser sagte in [Vorlage] Variable Zeitsteuerung mit VIS Editor:
@GiuseppeSProblem was ich nicht finde ...
wenn die Bedingung abgebrochen wird in der Tabelle selber , mit bed oder auf die Zahl Bedingung , das dort auch der Trigger ausgelöst wird . -
@Glasfaser
Lade nachher, wenn ich am PC bin, die aktuelle Version hoch. Dort ist zumindest das mit LogSuffix und Bugfix für die DialogBox drin.Wegen dem Abfangen beim Löschen der gemerkten Timer:
Das einfachste wird es sein wenn du dich an die "Löschfunktion" der gemerkten Timer hängst.function resetBackgroundTimers(target){ ...... }
Diese Funktion wird aus den beiden Click-Trigger heraus aufgerufen.
target
ist entweder ="all" (entspricht Überschrift "Bed" ) oder =Gerätename. -
Eine neue Version ist online:
Changelog 30.05.2020
Betrifft ausschließlich Skript- Bugfix "ErrorMessage" im PopUp (Gelber Streifen beim ersten Start nicht sichtbar)
- Neue Variable im Edit-Bereich: logSuffix
Kann genutzt werden, um Log-Ausgabe noch flexibler anzupassen (Ist für manuelles Update nicht zwingend neu anzulegen)
-
Cool, kannst du reinschreiben ob sich nur das Skript oder auch die Widgets geändert haben?
-
@sigi234
Hast Recht, ergänze ich noch. Nur Skript hat sich geändert.Edit:
Werde es zukünftig bei jedem Update dazu schreiben -
Danke funktioniert , aber du mußt noch etwas ändern !
Ich habe es ja so :
var logPraefix = '[Timer] ##{"severity":"", "from":"", "message":"'; // Wenn stdLog = true, kann hiermit die Ausgabe des ausgeführten Timers manipuliert werden var logPraefixend = '"}##'; // Logparser Ende
So ist dein Update dazu
var logPraefix = "Timer: "; var logSuffix = "";
Es kommt eine Fehlermeldung , da du bei dir " drin hast , deshab habe ich bei mir auf ' geändert.
Weil das manipulieren ( Logparser ) enthält schon ein ".Also dann so:
var logPraefix = 'Timer: '; var logSuffix = ' ';
-
@Glasfaser
Das Skript muss ja allgemeine Gültigkeit haben. Du kannst oben deinen Inhalt verwenden. Es bleibt ja von zukünftigen Updates ausgeschlossen. Ich habe aktuell keine vernünftige Anwendung für die kryptische ZeichenfolgeWenn innerhalb eines Strings das Anführungszeichen genutzt werden soll geht es übrigens mit "
Zum Beispiel sovar logSuffix = "test)}\" "
Edit:
Kann im nächsten Update statt " auch ' verwenden. Aber Update kommt dann zusammen mit anderen Punkten, wenn Ideen mitgeteilt werden. -
Ja .... kein Thema .
.. bin ja erstmal eine Ausnahme mit dem Logparser -
@GiuseppeS Habe ich es richtig verstanden, dass Du demnächst die Views auf Uhulas MDCSS V2 umstellst?