Hey Leute,
ich weiß gar nicht, ob DOIF der richtige Ansatz ist aber:
Ich möchte gern eine 2. Dummy-Lampe einschalten, wenn sich der Status der ersten Dummylampe ändert,
und ausschalten wenn sich der Status der 1. Dummylampe seit 20 Sekunden nicht mehr ändert.
Hier mein DOIF:
define Aktivitaetsmelder DOIF ([MyDummy1:state:sec] > 20) (set myDummy2 off) DOELSE (set myDummy2 on)
attr Bewegungsmelder do always
Aber nix passiert :(
Stimmt das DOIF?
Bitte einen passenderen Titel wählen, da weiß doch niemand worum es geht.
Zum Verständnis:
sobald MyDummy1 schaltet wird Dummy2 eingeschaltet
bleibt MyDummy1 dann 20 s so wie er ist wird Dummy2 wieder ausgeschaltet?
Titel geändert ;)
Danke für den Hinweis....
Ja. Richtig erfasst.
Noch mehr Hintergrund-Info: Ich habe einen Eigenbau Bewegungsmelder. Dieser schreibt, wenn er Bewegung erkennt alle 10 Sekunden, dass noch Bewegungen vorhanden sind als Status. Das klappt schon über ECMD :)
Sobald der Status geschrieben wird, sollte beispielsweise eine Lampe (hier dummy) angehen und wenn aber vom Bewegungsmelder kein Status mehr geschrieben wird, also der Status älter als xy Sekunden ist nach dieser Zeit dann auch wieder ausgehen...
Wahrscheinlich hätte ich es besser so formulieren sollen:
sobald myBewegungsmelder einen Stauts schreibt, wird myLampe1 angeschaltet,
ändert sich der Zeitstempel des Statuses vom myBewegungsmelder länger als 20s nicht, dann wird myLampe1 ausgeschaltet.
Zu Bedenken ist, dass der myBewegungsmelder immer nur einen Status schreibt, also kein "an" "aus" sondern wenn dann immer nur "an"
Daher das muss nicht der Status selbst, sondern das Datum das Status berücksichtigt werden.
Ich hoffe, jetzt kann es jeder verstehen.
Danke für die Hilfe.
warum nutzt du nicht einfach on-for-timer? Wird von dummys mit setExtesions unterstützt.
Wenn ich nachher zu hause bin kann ich mal ein bespiel dazu liefern.
Meine selbstgebauten Lampen unterstützen nur direkte Befehle. Ich muss also für ein "set lamp on" eine classdef erzeugen, die diesen Befehl verarbeitet.
Das ist bereits geschehen, ich kann also mit "set myLampe1 on" das entsprechende Relais schalten... also on und off ist kein Problem.
Alle sonstigen Funktionen wie "on-for-timer" kann ich nicht realisieren.... glaube ich ;)
DAs mit dem Dummy, dachte ich ist einfacher zu verstehen, als wenn ich mit meinen selbstgebauten unstandardisierten Lampen komme...
Aber im Prinzip will ich schon eine physisch vorhandene Lampe schalten und wollte dann den dummy mit meiner Lampe (Relais) ersetzen.
Die kann aber wie schon geschrieben nur an/aus...
Aber ich probiere auch gern was aus, habe noch zu wenig Kenntnisse ;)
defmod Bewegungsmelder dummy
attr Bewegungsmelder setList on off
attr Bewegungsmelder useSetExtensions 1
den Bewegungsmelder dummy kannst du dann mittels on-for-timer 20 s einschalten und auf die events on und off mit notify oder DOIF reagieren
Hast mich abgehängt ;)
Hier nun mal die konkreten Daten...
sobald mein sogenanntes T-Modul eine Bewegung erfasst, sendet es ein "pir01\r\n"
die fhem.cfg:
define myMModul ECMD serial /dev/ttyUSB0@9600
attr myMModul classdefs MModul=/opt/fhem/MModul.classdef
attr myMModul logTraffic 5
attr myMModul partial 2
attr myMModul split \r\n
attr myMModul verbose 5
define PIR1 ECMDDevice MModul ( \000 0 1
attr PIR1 IODev myMModul
attr PIR1 room Buero
meine classdef:
params M_Adresse M_Relais T_PIR1 T_PIR2
reading PIR_READING1 match "pir%T_PIR1%T_PIR2\r\n"
reading PIR_READING1 postproc {}
Die Bewegung wird in den Status des PIR1 geschrieben:
pir1 HASH(0x1a55c88) 2016-12-08 20:14:09
Ich habe eine funktionierende Lampe: 40Relais1, die ich mit "set 40Relais1 on" oder "set 40Relais1 off" schalten kann.
Das Datum des pir1-Status soll 40Relais1 steuern....
Wie muss ich Deine Befehle anpassen?
Ich hatte vermutet:
define Aktivitaetsmelder DOIF ([pir1:state:sec] > 20) (set 40Relais1 off) DOELSE (set 40Relais1 on)
attr Aktivitaetsmelder do always
aber das funktioniert nicht