Hi,
um ein Objekt auf einen Wert aus einer datei zu setzen kannst Du auch jef's script benutzen, daß er im linknx forum eingestellt hatte:
SourceForge.net: Linknx: Topic: Evaluate Condition based on file
LUA infos gibt's auch im WiKi:
SourceForge.net: Lua Scripting - linknx
und weiterführende Links zur Quelle:
Lua 5.1 Reference Manual - contents
Ich hoffe das hilft,
Beste Grüße, jens
Ankündigung
Einklappen
Keine Ankündigung bisher.
Fensterkontakte und Rolos mit LinKNX steuern...
Einklappen
X
-
Hi,
Hier ist der Beispielcode für die Bewegungsmelder:
Es gibt dann noch eine regel, die bei Bewegung den Wert von Status_Abwesend_8h wieder zurückschaltet.Code:<rule id="Is_Away_8h"> <condition type="time-counter" threshold="8h" > <condition type="and"> <condition type="object" id="EG_Flur_Bewegung_Meldung" value="off" trigger="true" /> <condition type="object" id="OG_Flur_Bewegung_Meldung" value="off" trigger="true" /> <condition type="object" id="DG_Flur_Bewegung_Meldung" value="off" trigger="true" /> </condition> </condition> <actionlist> <action type="set-value" id="Status_Abwesend_8h" value="on" /> </actionlist> </rule>
beste Grüße, jens
Einen Kommentar schreiben:
-
Ich glaube es auch...vermutlich sollte man einfach mal ein paar Beispiele machen, die die Logik etwas besser verständlich machen :-)Zitat von AutoMate Beitrag anzeigenIch finde diese Funktion extrem praktisch, um Timer zu implementieren, die man
a) verlängern kann
b) stoppen kann
(Flurlicht o.ä.)
Das kann man nämlich mit dem "delay" nicht machen.
Okay...genau da wäre jetzt ein Beispiel gut:Oder als weitere Idee: ich habe mit dieser Funktion auch eine automatische "Abwesenheitsfunktion" implementiert: Wenn über 8 Stunden keine Bewegungsmelder (im Flur) angesprochen hat, geht das Haus auf "Abwesend". Wer keinen Bewegungsmelder hat, kann ja auch überwachen, ob das Licht im Bad + Küche + Wozi für mindestens 16h(?) nicht eingeschaltet wurde... so viele Möglichkeiten! :-)
Also setzt Du den Treshold auf 1 und den Reset Delay auf 8h? Meine Bewegungemelder senden einfach eine "1" auf den Bus, wenn Bewegung erkannt wird.
Gibt es eigentlich eine Anleitung zu LUA?Wahrscheinlich kann man das auch mit LUA machen, aber ich habe mich mit LUA noch nicht befaßt. Man kann es aber auch scripten und zwar beispielsweise so:
Ja...danke für die Tipps...ist auch nicht schwer, habe über den Umweg via Shell Scripts nicht gedacht...Klingt schwierig, ist es aber nicht. :-)
Einen Kommentar schreiben:
-
PS: ich habe im linknx wiki auch mal zwei Grafiken abgelegt, damit man sich das time-counter verhalten besser Vorstellen kann.
Die funktion kann nämlich auch Zustände mit kurzen Unterbrechungen "messen".
Siehe hier:
SourceForge.net: Condition's Syntax - linknx
Beste Grüße, Jens
Einen Kommentar schreiben:
-
Hallo Netsrac,
ups, habe gerade noch gesehen, daß jef eine Version 0.0.1.28 released hat. Damit erübrigt sich der Hinweis mit dem CVS natürlich.
(Die Funktion ist seit mindestens Version 0.0.1.26 schon drin - hatte aber bis 0.0.1.27 einen bug, der die restlichen Timer langsam gelöscht hat).
Jef hatte das damals entwickelt, um ein Babyphon zu überwachen...:-)
Ich finde diese Funktion extrem praktisch, um Timer zu implementieren, die man
a) verlängern kann
b) stoppen kann
(Flurlicht o.ä.)
Das kann man nämlich mit dem "delay" nicht machen.
Oder als weitere Idee: ich habe mit dieser Funktion auch eine automatische "Abwesenheitsfunktion" implementiert: Wenn über 8 Stunden keine Bewegungsmelder (im Flur) angesprochen hat, geht das Haus auf "Abwesend". Wer keinen Bewegungsmelder hat, kann ja auch überwachen, ob das Licht im Bad + Küche + Wozi für mindestens 16h(?) nicht eingeschaltet wurde... so viele Möglichkeiten! :-)
---------
zu dem zweiten Teil Deiner Frage:
Wahrscheinlich kann man das auch mit LUA machen, aber ich habe mich mit LUA noch nicht befaßt. Man kann es aber auch scripten und zwar beispielsweise so:
1) Wenn Du in Deiner Objekt-definition das Objekt, daß den Wert der Jalousie übermittelt mit 'init="persist"' anlegst, wird der Wert bei Änderung automatisch in eine Datei geschrieben, die so heißt wie das Objekt.
(vorher in der <services> section einen Pfad angeben, z.B.
2) wenn die erste Bedingung eintritt, bei der Du Dir den Wert merken möchstest, einfach als erstes ein shell script ausführen, daßs diese "Wertedatei" kopiert, der Aufruf erforlgt in linknx mit: (beispielsweise)Code:<persistence type="file" path="/opt/linknx/persist" logpath="/opt/linknx/log"/>
in dem shellscript schreibst Du dann einfach was in der Art:Code:<action type="shell-cmd" cmd="/opt/linknx/scripts/<yourscript>.sh" />
"cp <wertedatei> <merkdatei>"
3) wenn die Bedingung eintritt, daß Du den vorherigen wert zurückstellen möchstes, rufst Du wieder ein shellscript auf, was dieses mal den Wert aus der <merkdatei> mit groupswrite (aus dem bcusdk) auf den Bus schreibt...
Klingt schwierig, ist es aber nicht. :-)
Viel Erfolg!
Einen Kommentar schreiben:
-
Okay...dann werde ich hier mal selber antworten...vielleicht hilft das ja auch Anderen.
Man installiere bitte die aktuelle LinKNX Version aus dem CVS, denn hier gibt es eine neue Timer Condition "Time Counter Condition":
<rule id="Window_opened">
<condition type="time-counter" threshold="3" reset-delay="0">
<condition type="object" id="Waveline_position" value="255" trigger="true" />
</condition>
<actionlist >
<action type="set-value" id="window_open" value="on" />
</actionlist>
<actionlist type="on-false">
<action type="set-value" id="window_open" value="off" />
</actionlist>
</rule>
Dabei sort die neue Timer-Condition dafür, dass ein Zustand für eine gewisse Zeit anstehen muss. Der "reset-delay" gibt die Zeit an, wann der interne Timer zurück gesetzt werden muss. Der Trick hierbei, dass es immer sofort zurück gesetzt wird, wenn sich ein Wert ändert. Demnach muss es wirklich 3 Sekunden in der Position verweilen bis "Window_open" auf On gesetzt wird.
Einen Kommentar schreiben:
-
Tja, da habe ich mal etwas probiert, aber das will irgendwie nicht. Habe den Eindruck, dass der Cycle-On-Off Befehl nicht abgebrochen wird.Zitat von lobo Beitrag anzeigenDu brauchst eigentlich eine sog. "Anzugsverzögerung", um zwischen auf und gekippt zu unterscheiden. Die habe ich auf die Schnelle in LINKNX nicht gefunden, aber Du könntest mit Cycle-On-off und 2 s Dauer das abbilden - also wenn der Wert 255 kommt, Cycle-On-off starten und wenn dieser cycle wieder off ist - dann ist offen. Wenn zwischendrin ein anderer Wert kommt, kann man diesen Cycle befehl auch wieder abbrechen.
Nein, dass ist bei BJ leider nicht so. Ich kann einfach Sperren oder den Windwächter (Hoch oder runter Fahren und dann Sperren) nutzen. Leider passiert bei einer Freigabe einfach gar nix.Das Schließen der Fenster ist ganz einfach, wenn Du die Zwangsstellung des Aktors verwendest - also offen: Zwangsstellung und dann wieder zurücknehmen. Dann müsste der Aktor wieder in seine Pos. fahren.
Also muss man sich den Zustand schon noch irgendwo merken...
Aber Danke trotzdem schonmal...
Gruß, Netsrac
Einen Kommentar schreiben:
-
Hallo Carsten,
auch hier (aus Zeitgründen) nur kurz einen Tipp:
Du brauchst eigentlich eine sog. "Anzugsverzögerung", um zwischen auf und gekippt zu unterscheiden. Die habe ich auf die Schnelle in LINKNX nicht gefunden, aber Du könntest mit Cycle-On-off und 2 s Dauer das abbilden - also wenn der Wert 255 kommt, Cycle-On-off starten und wenn dieser cycle wieder off ist - dann ist offen. Wenn zwischendrin ein anderer Wert kommt, kann man diesen Cycle befehl auch wieder abbrechen.
Das Schließen der Fenster ist ganz einfach, wenn Du die Zwangsstellung des Aktors verwendest - also offen: Zwangsstellung und dann wieder zurücknehmen. Dann müsste der Aktor wieder in seine Pos. fahren.
Viele Grüße,
Stefan
Einen Kommentar schreiben:
-
Fensterkontakte und Rolos mit LinKNX steuern...
Moin Jungs,
gleich noch eine LinKNX Herausforderung:
Habe folgende Idee:
Ich setzte Waveline Fenstermelder von Busch-Jaeger ein, die die Stellung des Fensterriegels erkennen. Sobald ein Fenster geöffnet wird, sollen die Rollos aufgehen und gesperrt werden, sobald das Fenster wieder geschlossen wird, soll das Rollo wieder in den alten Zustand gehen (also offen bleiben, wenn es offen war oder runter, wenn es unten war).
Es gibt noch eine zweite kleine Herausvorderung: Die Fenstermelder liefern einen Wert von 0 bis 255 je nach Zustand:
255 bei Fenster geöffnet - Riegel quer
76 bei Fenster gekippt - Riegel nach oben
Da man nun bei Kipp ja kurz über "Riegel quer" geht, wird einmal der Wert 255 gesendet.
Nun müsste man eine kleine Verzögerung einbauen - so frei nach dem Prinzip:
Wert 255 bekommen und 2 Sekunden keinen anderen Wert...dann lege los mit der Aktion.
Für die Rollos selbst, muss ich mir wohl bei der Steuerung der Rollos per Timer (via LinKNX) oder per Taster die letzte Position in einer Variablen speichern.
Sobald die Fensterkontakte 255 liefern (und für mindestens 2 Sekunden halten) muss ich eine "1" auf die Gruppenadresse (Hoch und Sperren) senden (was kein Problem ist).
Schwierig wird es nun bei dem Punkt, wenn die Fenster wieder geschlossen werden, sprich der Kontakt auf 0 geht. Hier muss ich eine "0" auf die Gruppenadresse (Hoch und Sperren) senden und dannach die Rollos auf den alten Zustand fahren. Sprich, wenn Sie offen waren muss ich gar nix machen, wenn Sie zu waren (Wert in der Variablen), dann muss ich sie wieder runterfahren.
Im Moment scheitere ich leider schon daran, mir die Werte in LinKNX abzuspeichern, daher hoffe ich, dass mir jemand helfen kann.
Oder denke ich viel zu kompliziert???
Danke...NetsracStichworte: -


Einen Kommentar schreiben: