Seite 1 von 1

[3.5.1] Gesucht: Logik für Lichtwecker

Verfasst: Mo Nov 21, 2022 11:33 am
von Robosoc
Ich habe mich am Wochenende mal ein wenig mit der Rampe und dem Ziel "Lichtwecker" beschäftigt.

Ich habe im Forum insgesamt drei Diskussionen gefunden, die sich mit dem Thema in irgendeiner Form beschäftigen:
1. [3.5.1] Wie funktioniert das Logikmodul "die Rampe"? [hier]
2. [V1.6.0 IP1] Funktion Baustein "Rampe": [hier]
3. [NEUHEIT] Modul "Rampenfunktion" alias Softdimmer [hier]

Die dritte Fundstelle war die Ankündigung des damals neuen Logikmoduls "Rampe" und daraus haben wir den Knowledge-Base und letztlich den Wiki-Eintrag erzeugt. Darin steht beispielsweise:
S. Kolbinger hat geschrieben: Fr Feb 28, 2020 7:46 pm Mit diesem Modul lässt sich sehr einfach eine langsame Dimmung umsetzen (Lichtwecker)
Den Satz haben wir in der KB und in der Wiki einfach übernommen. Bis auf die Klammer stimmt er m.E. auch...aber einen Lichtwecker habe ich bisher nicht auf die Beine stellen können.

Die Anwendung fänd ich aber recht gut...zumindest sind autarke Lichtwecker nach meinem Gefühl aktuell recht gefragt. Wir haben in der Firma einen Wunschweihnachtsbaum, bei dem wir mit Einrichtungen zusammen arbeiten, die bedürfte Kinder unterstützen. Die Kinder wählen da aus einer Reihe von vorausgewählten Produktideen (damit es wertmässig einigere Maßen passt) einen Wunsch aus und Mitarbeiter unseres Unternehmens können einen der Wünsche dann erfüllen. -> 1/3 der Kinder hat dieses Jahr einen Lichtwecker gewählt... Das ist jetzt nichts empirisches und hängt natürlich auchvon den anderen Wunschmöglichkeiten ab...aber da waren solch Dinge wir ferngesteuertes Auto und so dabei...!

Okay, zurück zu eigentlich Thema:

Wer schafft es einen Lichtwecker zu programmieren?
Anforderungen (kann gerne ergänzt werden):
  • Einstellmöglichkeiten: Weck-Urzeit (am Liebsten als Cron-Syntax), Dauer, Anzahl Schritte, Startwert (default 0) und Endwert (default 100).
  • Man sollte die Ausführung verhindern können (Inhibit)
  • Man sollte die Ausführung auch durch einen eigenen Eingang triggern können (Szenario A: Am Wochenende im Kinderzimmer, der Lichtwecker ist deaktiviert und man möchte sein Kind soft wecken, Szenario B: Man stellt sich einen Wecker per Sprachbefehl an eine Alexa, Google-Home etc.)
  • Der Ausgang sendet ausschließlich zum Weckzeitpunkt und die Dauer des Weckens Werte.

Re: [3.5.1] Gesucht: Logik für Lichtwecker

Verfasst: Mo Nov 21, 2022 12:14 pm
von 0lek
@Robosoc Ich bin da dran. Habe den erstmal als Jalousiewecker, aber da es eh Winter ist, hatte ich eh gedacht den als Lichtwecker zu machen.
Also in dem Sinne, irgendwann mache ich den, aber kann nicht versprechen wie lange es dauern wird, da ich - wie Du an meinen Fragen siehst - manchmal etwas an der Logik verzweifle. ;)

Re: [3.5.1] Gesucht: Logik für Lichtwecker

Verfasst: Mo Nov 21, 2022 12:35 pm
von 0lek
@Robosoc Und noch ein Gedanke: Wenn jetzt irgendwann (hoffentlich bald) die Logikengine kommt - dann ueberlege ich, ob es noch Sinn macht, sowas custom zu loesen. Bevor ich / wir da jetzt Tage/Wochen reinstecken und es womoeglich vielleicht bald eh schon Standard ist.

Weiss da jemand was dazu, ob man sowas mit 2 Klicks oder so in der Engine spaeter machen koennen wird?

Re: [3.5.1] Gesucht: Logik für Lichtwecker

Verfasst: Mo Nov 21, 2022 1:26 pm
von Robosoc
0lek hat geschrieben: Mo Nov 21, 2022 12:14 pm Habe den erstmal als Jalousiewecker,
Meiner Meinung nach ist es exakt das gleiche. Dem Logikmodul ist es egal, ob der Ausgang mit einem Dimm-Aktor oder einem Jalousie-Aktor verschaltet wird. Durch Deine Anwendung kam ich ja auch erst wieder auf den Gedanken.


Aber wie schon geschrieben, ich habe jetzt zwei verschiedene Ansetze gehabt und es mit der Rampe ausprobiert...das zurücksetzen der Rampe macht es echt schwer. Oder ich habe nur den einfachen Weg noch nicht bedacht :D. Manchmal braucht es ja nur ein clever-negiertes inhibit-bit um Dinge zu verhindern ... :confusion-scratchheadyellow:

Re: [3.5.1] Gesucht: Logik für Lichtwecker

Verfasst: Mo Nov 21, 2022 1:27 pm
von Robosoc
0lek hat geschrieben: Mo Nov 21, 2022 12:35 pm Und noch ein Gedanke: Wenn jetzt irgendwann (hoffentlich bald) die Logikengine kommt - dann ueberlege ich, ob es noch Sinn macht, sowas custom zu loesen.
Ich glaube da liegt ein Missverständnis vor. Ich zumindest erwarte nicht, dass zeitnah eine komplett neue Logik-Engine herauskommt. Ich habe die Ankündigungen von Stefan dahingehend gedeutet, dass ElabNet an einer Ergänzung der aktuellen Logik-Engine arbeitet. so wie jetzt in der nächsten Version zwei weitere Logikmodule für Stringoperationen kommen. Aber ich denke nicht, dass unsere Arbeit hier wertlos wird.

Und selbst dann wäre es mir egal...dann würde es ja eh noch ein Weilchen dauern... und mir macht es eben auch Spaß eine Logik zu entwickeln.

Re: [3.5.1] Gesucht: Logik für Lichtwecker

Verfasst: Mo Nov 21, 2022 1:42 pm
von 0lek
Robosoc hat geschrieben: Mo Nov 21, 2022 1:27 pm zeitnah eine komplett neue Logik-Engine herauskommt
Shit. Ich meinte natuerlich die "Lichtengine"... :shifty:

Re: [3.5.1] Gesucht: Logik für Lichtwecker

Verfasst: Mo Nov 21, 2022 1:44 pm
von 0lek
Robosoc hat geschrieben: Mo Nov 21, 2022 1:26 pm ich habe jetzt zwei verschiedene Ansetze gehabt und es mit der Rampe ausprobiert...das zurücksetzen der Rampe macht es echt schwer.
Es ist sehr unintuitiv. Ich weiss immer noch nicht ob ich es ganz verstehe. Kannst gerne Deine Logik hier posten, vielleicht kommen wir zu zweit zu was brauchbarem?

Re: [3.5.1] Gesucht: Logik für Lichtwecker

Verfasst: Mo Nov 21, 2022 2:46 pm
von Robosoc
Grundsätzlich ist meine Idee, die Rampe kurz nach der Ausführung erst einmal zurückzusetzen und dann mit einer kleinen Verzögerung den eigenlichen Weckvorgang zu starten.

Der erste Ansatz verfolgte das Ziel , zunächst die aktuelle Uhrzeit bei Triggern (mit dem Baustein Localtime) zu ermitteln und damit ein erneutes Triggern nach 2 Sekunden zu ermöglichen (Baustein Wakeup mit Uhrzeit + 2 Sek). Im ersten Durchlauf nach dem Triggern hätte ich die Rampe dann mit einer Dauer von 1 Sekunde auf 0 gesetzt. So dass Sie nach 2 Sekunden sicher bei 0 starten könnte. und der eigentliche Licht-Weckvorgang wäre dann mit einer Verzögerung von 2 Sekunden gestartet.
Mein erster Ansatz beinhaltete auch die SendExplizit Funktion, mit der ich verhindern wollte, dass der Ausgang beim zurücksetzen geschrieben wird. Aber da man nicht auswerten kann, ob die Logik durch einen Timer getriggert wurde, habe ich es nicht fertig gebracht.

Hier in der Version habe ich das verzögerte Triggern über einen Monoflop lösen wollen. Klappt aber auch nicht. Bei dem Zustand so wie nachfolgend gepostet habe ich erstmal aufgehört weiterzudenken .

(geändert am 19.09.2023, da ab Versionen größer3.5.1 nur kleine Buchstaben als Triggerverhalten der Ein- und Ausgängegenutzt werden dürfen)

Code: Alles auswählen

/**
* Lichtwecker V0.3
* Der Schöpfer dieser Custom Logik überträgt die Nutzungsrechte gemäß der TOLL ("Timberwolf Open Logikblock License") die unter https://wrgt.news/TOLL zum Download zur Verfügung steht.
*/

{
  "Input":[
        ["Dauer","Dauer des Weckvorgangs in Sekunden","$Set_Period","u"],
	["Schritte","Schritte des Weckvorgangs","$Set_Step","u"],
	["Startwert","Startwert des Weckvorgangs","$Start","u"],
	["Schritte","Endwert des Weckvorgangs","$End","u"]
  ],
  "Output":[
       ["Out","","$Out","c"]
  ],
  "Level":[
	["$now_Utime","integer",0],
	["$next_Utime","integer",0],
	["$Period","integer",0],
	["$Step","integer",0],
	["$Set_Period","integer",30],
	["$Set_Step","integer",10],
	["$Start","integer",0],
	["$In","integer",0],
	["$End","integer",100],
	["$Eins","integer",1],
	["$Zwei","integer",1],
	["$Ramp_Active","bool",false],
	["$Monoflop_Active","bool",false],
	["$Formula","string","X1=0?X2+2:0"],
	["$const_true","bool",true],
	["$Out","integer",0],
	["$SendCond","bool",false]
  ],
  "Module":[
        ["Monoflop","-$Ramp_Active",0,"$Monoflop_Active","$Zwei",0],
	
	// Rampe zurücksetzen
	["Latch","$Start","$In","$const_true",0],
	["Latch","$Eins","$Step","$const_true",0],
	["Latch","$Eins","$Period","$const_true",0],
	
	//Rampe neu einstellen, wenn WakeUp_Active true wird.
	["Latch","$End","$In","$Monoflop_Active",2],
	["Latch","$Set_Step","$Step","$Monoflop_Active",2],
	["Latch","$Set_Period","$Period","$Monoflop_Active",2],
	
	//Rampe
	["Ramp","$In","$Out","$Ramp_Active","$Step","$Period"]
  ]
}

Re: [3.5.1] Gesucht: Logik für Lichtwecker

Verfasst: Mo Nov 21, 2022 3:05 pm
von Robert_Mini
Ich schau mir das zeitnah mal an. Das "ramp" Modul deckt ja fast alles ab, ich kann kaum glauben, dass es am Drumherum scheitert.
Robert

Re: [3.5.1] Gesucht: Logik für Lichtwecker

Verfasst: Mo Nov 21, 2022 3:10 pm
von Robosoc
Robert_Mini hat geschrieben: Mo Nov 21, 2022 3:05 pm ich kann kaum glauben, dass es am Drumherum scheitert.
Ich glaube auch die ganze Zeit, dass ich zu kompliziert denke und /oder Tomaten auf den Augen habe.

Also wenn immer wer immer eine Lösung hat...bitte nur nicht so was schreiben wie "das ist doch einfach" :laughing-rolling: