Hallo zusammen,
vielleicht hab ich ja Tomaten auf den Augen und ihr sagt sofort "Na klar, liegt ja auch an xyz":
Habe eine Regel, die nur bei Türen und Fenster getriggert werden soll. Sieht dann z.B. so aus:
define Fenster.Status.Offen notify Wohnung3..*.Device.(Fenster|Tuer)[0-9]{1,2}:open {\
Geräte sind bei mir in der Art benannt:
- Wohnung3.Wohnzimmer.Device.Fenster1
- Wohnung3.Wohnzimmer.Device.Thermostat1_WindowRec
- Wohnung3.Wohnzimmer.Device.Heizkoerperthermostat1_WindowRec
Problem ist, und das verwirrt mich so: Genau die 3 Geräte die ich aufliste, werden getriggert ... dabei sollte es eigentlich nur das erste Gerät sein. Das hat lange Zeit mal funktioniert, irgendwann habe ich mal ein neues Raspberry verbaut und das auf den neuen umgezogen. Aufgefallen ist mir das jetzt aber erst, weil mit dem ganzen eine Ansage getriggert wird die erst bei unter 16°C kommt und es vorher zu warm war ;-)
Hallo
Ich kann die geschweifte Klammer nicht zuordnen. {1,2}
Du kannst mit List "Regex" den Ausdruck im Frontend überprüfen, dann musst Du nicht warten bis bis die Temperaturen stimmen. Weicht das Ergebnis vom notify ab?
Die Punkte sind nicht sauber definiert, aber daran wird es nicht liegen
Wohnung3\..*\.Device\.(Fenster|Tuer)[0-9]{1,2}
Zitat von: RomanticBoy83 am 19 September 2015, 18:58:36Ich kann die geschweifte Klammer nicht zuordnen. {1,2}
define Fenster.Status.Offen notify Wohnung3..*.Device.(Fenster|Tuer)[0-9]{1,2}:open {\
Das {1,2} besagt, dass der vorherige Wert der zwischen 0 und 9 liegen darf eine Länge von 1 bis 2 Zeichen haben darf. Bedeutet:
<Keine Zahl> = Nicht gültig
1 = Gültig
12 = Gültig
123 = Nicht gültig
Zitat von: Ellert am 19 September 2015, 19:56:19
Du kannst mit List "Regex" den Ausdruck im Frontend überprüfen, dann musst Du nicht warten bis bis die Temperaturen stimmen. Weicht das Ergebnis vom notify ab?
Wie genau funktioniert das? Hab schon davon gelesen, mir ist aber nicht klar wie ich das genau testen kann im Frontend.
Zitat von: Ellert am 19 September 2015, 19:56:19
Die Punkte sind nicht sauber definiert, aber daran wird es nicht liegen
Wohnung3\..*\.Device\.(Fenster|Tuer)[0-9]{1,2}
Ja, hatte es auch schon probiert. Aber egal ob ich die Punkte escape oder nicht, es ändert sich nichts.
List Wohnung3..*.Device.(Fenster|Tuer)[0-9]{1,2}
oben im Eingabefeld der FHEM Frontends eingeben, die Enter-Taste drücken, dann wird die Liste der gematchten Geräte angezeigt.
.*.Fenster1:open
sollte doch reichen als RegExp oder nicht ???
Also ich bin etwas ratlos ... vielleicht sehr ihr ja den Fehler:
Das ist der Code, der darauf reagieren soll wenn ein Fenster/Tür geöffnet wird. Er löst dann einen Trigger aus der nach 5 Minuten ein Skript anstubst. Wird zwischenzeitlich das Fenster/Tür geschlossen, wird der Trigger gelöscht.define Fenster.Status.Offen notify Wohnung3..*.Device.(Fenster|Tuer)[0-9]{1,2}:open {\
if($defs{"@.Reminder"}) {\
return;;\
} \
\
my $deftype = $defs{"@"}{TYPE};;\
Log 3, "@: Type ".$deftype;;\
return if ( $deftype ne "CUL_HM" );;\
\
my $currentTempOutside = ReadingsVal("Wetter.Internet", "temp_c", "0");;\
Log 3, "@: Temperatur ".$currentTempOutside;;\
\
if($currentTempOutside <= 16.0) {\
Log 3, "@: Reminder set";;\
fhem("define @.Reminder at +*00:05:00 trigger Fenster.Status.Check @");;\
} else { \
Log 3, "@: Reminder not set";;\
} \
}
define Fenster.Status.Geschlossen notify Wohnung3..*.Device.(Fenster|Tuer)[0-9]{1,2}.*:closed {\
if (($defs{"@.Reminder"})) {\
Log 3, "@: Reminder unset";;\
fhem("delete @.Reminder");;\
}\
}
define Fenster.Status.Check notify Fenster.Status.Check {\
my $device = "%";;\
my $deviceState = ReadingsVal("$device", "State", "nA");;\
Log 3, "@: $device -> ".Value("$device");;\
\
my $currentTempOutside = ReadingsVal("Wetter.Internet", "temp_c", "0");;\
Log 3, "@: Temperatur ".$currentTempOutside;;\
\
if(Value("$device") =~ /open/) {\
if($currentTempOutside <= 16.0) {\
Log 3, "@: $device -> Schliessen!";;\
my $speakText = AttrVal("$device", "speakText", "");;\
system('/opt/fhem/plugins/ttsqueue/ttsqueue-cli.sh add "Bitte '.$speakText.' schliessen" &');;\
} else { \
Log 3, "@: $device -> Schliessen nicht notwendig!";;\
} \
} else {\
Log 3, "@: Reminder unset";;\
fhem("delete @.Reminder");;\
}\
}
Jetzt habe ich mal ein Fenster geöffnet und wieder geschlossen und das kommt raus im Log mit verbose 4:2015.09.20 10:17:36.984 4: Fenster.Status.Offen exec {
if($defs{"Wohnung3.Wohnzimmer.Device.Fenster1.Reminder"}) {
return;;
}
my $deftype = $defs{"Wohnung3.Wohnzimmer.Device.Fenster1"}{TYPE};;
Log 3, "Wohnung3.Wohnzimmer.Device.Fenster1: Type ".$deftype;;
return if ( $deftype ne "CUL_HM" );;
my $currentTempOutside = ReadingsVal("Wetter.Internet.Bischofsheim", "temp_c", "0");;
Log 3, "Wohnung3.Wohnzimmer.Device.Fenster1: Temperatur ".$currentTempOutside;;
if($currentTempOutside <= 16.0) {
Log 3, "Wohnung3.Wohnzimmer.Device.Fenster1: Reminder set";;
fhem("define Wohnung3.Wohnzimmer.Device.Fenster1.Reminder at +*00:05:00 trigger Fenster.Status.Check Wohnung3.Wohnzimmer.Device.Fenster1");;
} else {
Log 3, "Wohnung3.Wohnzimmer.Device.Fenster1: Reminder not set";;
}
}
2015.09.20 10:17:36.993 3: Wohnung3.Wohnzimmer.Device.Fenster1: Type CUL_HM
2015.09.20 10:17:36.995 3: Wohnung3.Wohnzimmer.Device.Fenster1: Temperatur 12
2015.09.20 10:17:36.996 3: Wohnung3.Wohnzimmer.Device.Fenster1: Reminder set
2015.09.20 10:17:37.486 4: Fenster.Status.Offen exec {
if($defs{"Wohnung3.Wohnzimmer.Device.Fenster1.Reminder"}) {
return;;
}
my $deftype = $defs{"Wohnung3.Wohnzimmer.Device.Fenster1"}{TYPE};;
Log 3, "Wohnung3.Wohnzimmer.Device.Fenster1: Type ".$deftype;;
return if ( $deftype ne "CUL_HM" );;
my $currentTempOutside = ReadingsVal("Wetter.Internet.Bischofsheim", "temp_c", "0");;
Log 3, "Wohnung3.Wohnzimmer.Device.Fenster1: Temperatur ".$currentTempOutside;;
if($currentTempOutside <= 16.0) {
Log 3, "Wohnung3.Wohnzimmer.Device.Fenster1: Reminder set";;
fhem("define Wohnung3.Wohnzimmer.Device.Fenster1.Reminder at +*00:05:00 trigger Fenster.Status.Check Wohnung3.Wohnzimmer.Device.Fenster1");;
} else {
Log 3, "Wohnung3.Wohnzimmer.Device.Fenster1: Reminder not set";;
}
}
2015.09.20 10:17:37.508 4: Fenster.Status.Offen exec {
if($defs{"Wohnung3.Wohnzimmer.Device.Thermostat1_WindowRec.Reminder"}) {
return;;
}
my $deftype = $defs{"Wohnung3.Wohnzimmer.Device.Thermostat1_WindowRec"}{TYPE};;
Log 3, "Wohnung3.Wohnzimmer.Device.Thermostat1_WindowRec: Type ".$deftype;;
return if ( $deftype ne "CUL_HM" );;
my $currentTempOutside = ReadingsVal("Wetter.Internet.Bischofsheim", "temp_c", "0");;
Log 3, "Wohnung3.Wohnzimmer.Device.Thermostat1_WindowRec: Temperatur ".$currentTempOutside;;
if($currentTempOutside <= 16.0) {
Log 3, "Wohnung3.Wohnzimmer.Device.Thermostat1_WindowRec: Reminder set";;
fhem("define Wohnung3.Wohnzimmer.Device.Thermostat1_WindowRec.Reminder at +*00:05:00 trigger Fenster.Status.Check Wohnung3.Wohnzimmer.Device.Thermostat1_WindowRec");;
} else {
Log 3, "Wohnung3.Wohnzimmer.Device.Thermostat1_WindowRec: Reminder not set";;
}
}
2015.09.20 10:17:37.514 3: Wohnung3.Wohnzimmer.Device.Thermostat1_WindowRec: Type CUL_HM
2015.09.20 10:17:37.516 3: Wohnung3.Wohnzimmer.Device.Thermostat1_WindowRec: Temperatur 12
2015.09.20 10:17:37.516 3: Wohnung3.Wohnzimmer.Device.Thermostat1_WindowRec: Reminder set
2015.09.20 10:17:37.743 4: Fenster.Status.Offen exec {
if($defs{"Wohnung3.Wohnzimmer.Device.Fenster1.Reminder"}) {
return;;
}
my $deftype = $defs{"Wohnung3.Wohnzimmer.Device.Fenster1"}{TYPE};;
Log 3, "Wohnung3.Wohnzimmer.Device.Fenster1: Type ".$deftype;;
return if ( $deftype ne "CUL_HM" );;
my $currentTempOutside = ReadingsVal("Wetter.Internet.Bischofsheim", "temp_c", "0");;
Log 3, "Wohnung3.Wohnzimmer.Device.Fenster1: Temperatur ".$currentTempOutside;;
if($currentTempOutside <= 16.0) {
Log 3, "Wohnung3.Wohnzimmer.Device.Fenster1: Reminder set";;
fhem("define Wohnung3.Wohnzimmer.Device.Fenster1.Reminder at +*00:05:00 trigger Fenster.Status.Check Wohnung3.Wohnzimmer.Device.Fenster1");;
} else {
Log 3, "Wohnung3.Wohnzimmer.Device.Fenster1: Reminder not set";;
}
}
2015.09.20 10:17:37.763 4: Fenster.Status.Offen exec {
if($defs{"Wohnung3.Wohnzimmer.Device.Heizkoerperthermostat1_WindowRec.Reminder"}) {
return;;
}
my $deftype = $defs{"Wohnung3.Wohnzimmer.Device.Heizkoerperthermostat1_WindowRec"}{TYPE};;
Log 3, "Wohnung3.Wohnzimmer.Device.Heizkoerperthermostat1_WindowRec: Type ".$deftype;;
return if ( $deftype ne "CUL_HM" );;
my $currentTempOutside = ReadingsVal("Wetter.Internet.Bischofsheim", "temp_c", "0");;
Log 3, "Wohnung3.Wohnzimmer.Device.Heizkoerperthermostat1_WindowRec: Temperatur ".$currentTempOutside;;
if($currentTempOutside <= 16.0) {
Log 3, "Wohnung3.Wohnzimmer.Device.Heizkoerperthermostat1_WindowRec: Reminder set";;
fhem("define Wohnung3.Wohnzimmer.Device.Heizkoerperthermostat1_WindowRec.Reminder at +*00:05:00 trigger Fenster.Status.Check Wohnung3.Wohnzimmer.Device.Heizkoerperthermostat1_WindowRec");;
} else {
Log 3, "Wohnung3.Wohnzimmer.Device.Heizkoerperthermostat1_WindowRec: Reminder not set";;
}
}
2015.09.20 10:17:37.769 3: Wohnung3.Wohnzimmer.Device.Heizkoerperthermostat1_WindowRec: Type CUL_HM
2015.09.20 10:17:37.770 3: Wohnung3.Wohnzimmer.Device.Heizkoerperthermostat1_WindowRec: Temperatur 12
2015.09.20 10:17:37.771 3: Wohnung3.Wohnzimmer.Device.Heizkoerperthermostat1_WindowRec: Reminder set
2015.09.20 10:17:43.509 4: Fenster.Status.Geschlossen exec {
if (($defs{"Wohnung3.Wohnzimmer.Device.Fenster1.Reminder"})) {
Log 3, "Wohnung3.Wohnzimmer.Device.Fenster1: Reminder unset";;
fhem("delete Wohnung3.Wohnzimmer.Device.Fenster1.Reminder");;
}
}
2015.09.20 10:17:43.512 3: Wohnung3.Wohnzimmer.Device.Fenster1: Reminder unset
2015.09.20 10:17:43.988 4: Fenster.Status.Geschlossen exec {
if (($defs{"Wohnung3.Wohnzimmer.Device.Fenster1.Reminder"})) {
Log 3, "Wohnung3.Wohnzimmer.Device.Fenster1: Reminder unset";;
fhem("delete Wohnung3.Wohnzimmer.Device.Fenster1.Reminder");;
}
}
2015.09.20 10:17:44.008 4: Fenster.Status.Geschlossen exec {
if (($defs{"Wohnung3.Wohnzimmer.Device.Thermostat1_WindowRec.Reminder"})) {
Log 3, "Wohnung3.Wohnzimmer.Device.Thermostat1_WindowRec: Reminder unset";;
fhem("delete Wohnung3.Wohnzimmer.Device.Thermostat1_WindowRec.Reminder");;
}
}
2015.09.20 10:17:44.012 3: Wohnung3.Wohnzimmer.Device.Thermostat1_WindowRec: Reminder unset
2015.09.20 10:17:44.247 4: Fenster.Status.Geschlossen exec {
if (($defs{"Wohnung3.Wohnzimmer.Device.Fenster1.Reminder"})) {
Log 3, "Wohnung3.Wohnzimmer.Device.Fenster1: Reminder unset";;
fhem("delete Wohnung3.Wohnzimmer.Device.Fenster1.Reminder");;
}
}
2015.09.20 10:17:44.273 4: Fenster.Status.Geschlossen exec {
if (($defs{"Wohnung3.Wohnzimmer.Device.Heizkoerperthermostat1_WindowRec.Reminder"})) {
Log 3, "Wohnung3.Wohnzimmer.Device.Heizkoerperthermostat1_WindowRec: Reminder unset";;
fhem("delete Wohnung3.Wohnzimmer.Device.Heizkoerperthermostat1_WindowRec.Reminder");;
}
}
2015.09.20 10:17:44.279 3: Wohnung3.Wohnzimmer.Device.Heizkoerperthermostat1_WindowRec: Reminder unset
Das Fenster ist auf ein Thermostat angelernt, das ist an FHEM angelernt. War bis dato eigentlich nie ein Problem. Ich versteh nicht, warum jetzt plötzlich Wohnung3.Wohnzimmer.Device.Heizkoerperthermostat1_WindowRec matched - darf es lt. RegEx eigentlich garnicht!
Interessant ist auch: Wenn ich List Wohnung3\..*\.Device\.(Fenster|Tuer)[0-9]{1,2}
zum testen in der Eingabezeile von FHEM eingebe, matched nichts. Entferne ich das {1,2}, gibt es matches. Sowohl List Wohnung3\..*\.Device\.(Fenster|Tuer)[0-9]{1,2}
als auch List Wohnung3\..*\.Device\.(Fenster|Tuer)[0-9]
funktionieren aber direkt im Code als matches auf Geräte. Meiner Meinung nach bildet die Funktion im FHEM Webinterface nicht alles 100%ig korrekt ab!
die {n,m} quantifier lassen in fhem nicht in einem regulären ausdruck verwend wenn dieser durch devspec2array ausgewertet wird. hier ist das , für die aufzählung von devices reserviert. das gilt immer dann wenn man eine reges mit set,get,list,... verwendet.
im notify gilt diese einschränkung nicht da so ein quantifier im prinzip erlaubt und sollte funktionieren. es lässt sich aber nicht über list testen.
zeig mal was genau im event monitor steht. dann findest du auch den grund warum das notify zu viel matched.
gruss
andre
edit: statt [0-9]{1,2} kannst du ja auch [0-9][0-9]? oder gleich \d\d? verwenden. das geht auch mit list.
versuch es mal im notify, vielleicht hat das , doch einen seiteneffekt.
Zitat von: justme1968 am 20 September 2015, 11:04:44
die {n,m} quantifier lassen in fhem nicht in einem regulären ausdruck verwend wenn dieser durch devspec2array ausgewertet wird. hier ist das , für die aufzählung von devices reserviert. das gilt immer dann wenn man eine reges mit set,get,list,... verwendet.
Zitat von: justme1968 am 20 September 2015, 11:04:44
edit: statt [0-9]{1,2} kannst du ja auch [0-9][0-9]? oder gleich \d\d? verwenden. das geht auch mit list.
versuch es mal im notify, vielleicht hat das , doch einen seiteneffekt.
Gut, im Prinzip ist es ja nicht schlimm. Derzeit habe ich nur Geräte im einstelligen Bereich, von daher brauch ich das {1,2} nicht. Alternativ könnte ich auch ein + hinten dran hängen was dann {1,} entspricht. Auch vollkommen in Ordnung in der Situation.
Zitat von: justme1968 am 20 September 2015, 11:04:44zeig mal was genau im event monitor steht. dann findest du auch den grund warum das notify zu viel matched.
Event monitor sieht wie folgt aus:
2015-09-20 13:43:58.169 CUL_HM Wohnung3.Bad.Device.Thermostat1_Weather humidity: 75
2015-09-20 13:43:58.169 CUL_HM Wohnung3.Bad.Device.Thermostat1_Weather T: 22.2 H: 75
2015-09-20 13:43:58.169 CUL_HM Wohnung3.Bad.Device.Thermostat1_Weather temperature: 22.2
2015-09-20 13:44:06.115 at Wohnung3.Wohnzimmer.Device.Fenster1.Reminder Next: 13:49:06
2015-09-20 13:44:06.161 Global global DEFINED Wohnung3.Wohnzimmer.Device.Fenster1.Reminder
2015-09-20 13:44:06.179 CUL_HM Wohnung3.Wohnzimmer.Device.Fenster1 battery: ok
2015-09-20 13:44:06.179 CUL_HM Wohnung3.Wohnzimmer.Device.Fenster1 contact: open (to CCD)
2015-09-20 13:44:06.179 CUL_HM Wohnung3.Wohnzimmer.Device.Fenster1 open
2015-09-20 13:44:06.179 CUL_HM Wohnung3.Wohnzimmer.Device.Fenster1 trigger_cnt: 66
2015-09-20 13:44:06.604 CUL_HM Wohnung3.Wohnzimmer.Device.Fenster1 battery: ok
2015-09-20 13:44:06.604 CUL_HM Wohnung3.Wohnzimmer.Device.Fenster1 contact: open (to Wohnung3.Wohnzimmer.Device.Thermostat1)
2015-09-20 13:44:06.604 CUL_HM Wohnung3.Wohnzimmer.Device.Fenster1 open
2015-09-20 13:44:06.604 CUL_HM Wohnung3.Wohnzimmer.Device.Fenster1 trigger_cnt: 66
2015-09-20 13:44:06.622 at Wohnung3.Wohnzimmer.Device.Thermostat1_WindowRec.Reminder Next: 13:49:06
2015-09-20 13:44:06.652 Global global DEFINED Wohnung3.Wohnzimmer.Device.Thermostat1_WindowRec.Reminder
2015-09-20 13:44:06.657 CUL_HM Wohnung3.Wohnzimmer.Device.Thermostat1_WindowRec trigLast: Wohnung3.Wohnzimmer.Device.Fenster1:open
2015-09-20 13:44:06.657 CUL_HM Wohnung3.Wohnzimmer.Device.Thermostat1_WindowRec trig_Wohnung3.Wohnzimmer.Device.Fenster1: open
2015-09-20 13:44:06.861 CUL_HM Wohnung3.Wohnzimmer.Device.Fenster1 battery: ok
2015-09-20 13:44:06.861 CUL_HM Wohnung3.Wohnzimmer.Device.Fenster1 contact: open (to Wohnung3.Wohnzimmer.Device.Heizkoerperthermostat1)
2015-09-20 13:44:06.861 CUL_HM Wohnung3.Wohnzimmer.Device.Fenster1 open
2015-09-20 13:44:06.861 CUL_HM Wohnung3.Wohnzimmer.Device.Fenster1 trigger_cnt: 66
2015-09-20 13:44:06.878 at Wohnung3.Wohnzimmer.Device.Heizkoerperthermostat1_WindowRec.Reminder Next: 13:49:06
2015-09-20 13:44:06.908 Global global DEFINED Wohnung3.Wohnzimmer.Device.Heizkoerperthermostat1_WindowRec.Reminder
2015-09-20 13:44:06.913 CUL_HM Wohnung3.Wohnzimmer.Device.Heizkoerperthermostat1_WindowRec trigLast: Wohnung3.Wohnzimmer.Device.Fenster1:open
2015-09-20 13:44:06.913 CUL_HM Wohnung3.Wohnzimmer.Device.Heizkoerperthermostat1_WindowRec trig_Wohnung3.Wohnzimmer.Device.Fenster1: open
2015-09-20 13:44:13.101 Global global DELETED Wohnung3.Wohnzimmer.Device.Fenster1.Reminder
2015-09-20 13:44:13.120 CUL_HM Wohnung3.Wohnzimmer.Device.Fenster1 battery: ok
2015-09-20 13:44:13.120 CUL_HM Wohnung3.Wohnzimmer.Device.Fenster1 contact: closed (to CCD)
2015-09-20 13:44:13.120 CUL_HM Wohnung3.Wohnzimmer.Device.Fenster1 closed
2015-09-20 13:44:13.120 CUL_HM Wohnung3.Wohnzimmer.Device.Fenster1 trigger_cnt: 67
2015-09-20 13:44:13.617 CUL_HM Wohnung3.Wohnzimmer.Device.Fenster1 battery: ok
2015-09-20 13:44:13.617 CUL_HM Wohnung3.Wohnzimmer.Device.Fenster1 contact: closed (to Wohnung3.Wohnzimmer.Device.Thermostat1)
2015-09-20 13:44:13.617 CUL_HM Wohnung3.Wohnzimmer.Device.Fenster1 closed
2015-09-20 13:44:13.617 CUL_HM Wohnung3.Wohnzimmer.Device.Fenster1 trigger_cnt: 67
2015-09-20 13:44:13.636 Global global DELETED Wohnung3.Wohnzimmer.Device.Thermostat1_WindowRec.Reminder
2015-09-20 13:44:13.645 CUL_HM Wohnung3.Wohnzimmer.Device.Thermostat1_WindowRec trigLast: Wohnung3.Wohnzimmer.Device.Fenster1:closed
2015-09-20 13:44:13.645 CUL_HM Wohnung3.Wohnzimmer.Device.Thermostat1_WindowRec trig_Wohnung3.Wohnzimmer.Device.Fenster1: closed
2015-09-20 13:44:13.862 CUL_HM Wohnung3.Wohnzimmer.Device.Fenster1 battery: ok
2015-09-20 13:44:13.862 CUL_HM Wohnung3.Wohnzimmer.Device.Fenster1 contact: closed (to Wohnung3.Wohnzimmer.Device.Heizkoerperthermostat1)
2015-09-20 13:44:13.862 CUL_HM Wohnung3.Wohnzimmer.Device.Fenster1 closed
2015-09-20 13:44:13.862 CUL_HM Wohnung3.Wohnzimmer.Device.Fenster1 trigger_cnt: 67
2015-09-20 13:44:13.875 Global global DELETED Wohnung3.Wohnzimmer.Device.Heizkoerperthermostat1_WindowRec.Reminder
2015-09-20 13:44:13.881 CUL_HM Wohnung3.Wohnzimmer.Device.Heizkoerperthermostat1_WindowRec trigLast: Wohnung3.Wohnzimmer.Device.Fenster1:closed
2015-09-20 13:44:13.881 CUL_HM Wohnung3.Wohnzimmer.Device.Heizkoerperthermostat1_WindowRec trig_Wohnung3.Wohnzimmer.Device.Fenster1: closed
Sieht jemand was verdächtiges warum Events ausgelöst werden, die nicht ausgelöst werden sollen?
Also ... ich habe den Code mal überarbeitet. Habe das {1,2} mal weggelassen und einen Check eingebaut, ob was zu sprechendes für das Device hinterlegt wurde.
define Fenster.Status.Offen notify Wohnung3..*.Device.(Fenster|Tuer)[0-9]:open {\
my $device = "@";;\
my $speakText = AttrVal("$device", "speakText", "");;\
if ( $speakText ne "" ) {\
} else { \
Log 3, "@: Ignore";;\
return;;\
} \
\
if($defs{"@.Reminder"}) {\
return;;\
} \
\
my $deftype = $defs{"@"}{TYPE};;\
Log 3, "@: Type ".$deftype;;\
return if ( $deftype ne "CUL_HM" );;\
\
my $currentTempOutside = ReadingsVal("Wetter.Internet.Bischofsheim", "temp_c", "0");;\
Log 3, "@: Temperatur ".$currentTempOutside;;\
\
if($currentTempOutside <= 16.0) {\
Log 3, "@: Reminder set";;\
fhem("define @.Reminder at +*00:05:00 trigger Fenster.Status.Check @");;\
} else { \
Log 3, "@: Reminder not set";;\
} \
}
define Fenster.Status.Geschlossen notify Wohnung3..*.Device.(Fenster|Tuer)[0-9]:closed {\
if (($defs{"@.Reminder"})) {\
Log 3, "@: Reminder unset";;\
fhem("delete @.Reminder");;\
}\
}
define Fenster.Status.Check notify Fenster.Status.Check {\
my $device = "%";;\
my $deviceState = ReadingsVal("$device", "State", "nA");;\
Log 3, "@: $device -> ".Value("$device");;\
\
my $currentTempOutside = ReadingsVal("Wetter.Internet.Bischofsheim", "temp_c", "0");;\
Log 3, "@: Temperatur ".$currentTempOutside;;\
\
if(Value("$device") =~ /open/) {\
if($currentTempOutside <= 16.0) {\
Log 3, "@: $device -> Schliessen!";;\
my $speakText = AttrVal("$device", "speakText", "");;\
system('/opt/fhem/plugins/ttsqueue/ttsqueue-cli.sh add "Bitte '.$speakText.' schliessen" &');;\
} else { \
Log 3, "@: $device -> Schliessen nicht notwendig!";;\
} \
} else {\
Log 3, "@: Reminder unset";;\
fhem("delete @.Reminder");;\
}\
}
Wenn ich jetzt z.B. das Fenster öffne, kommt folgendes:2015.09.23 17:28:18.871 3: Wohnung3.Wohnzimmer.Device.Fenster1: Type CUL_HM
2015.09.23 17:28:18.872 3: Wohnung3.Wohnzimmer.Device.Fenster1: Temperatur 15
2015.09.23 17:28:18.872 3: Wohnung3.Wohnzimmer.Device.Fenster1: Reminder set
2015.09.23 17:28:19.414 3: Wohnung3.Wohnzimmer.Device.Thermostat1_WindowRec: Ignore
2015.09.23 17:28:19.671 3: Wohnung3.Wohnzimmer.Device.Heizkoerperthermostat1_WindowRec: Ignore
Sorry, aber irgendwo stimmt doch was mit FHEM nicht? Die letzten beiden Zeilen dürften überhaupt nicht auftauchen weil der Match nicht stimmt.