Hallo liebe Automatisierungsfreunde,
ich möchte mit einem notify (eg_lueften_nt)
it files
Select style
Event monitor
Internals:
.COMMAND {
Log 3,("notify eg_lueftung_nt, ausgelöst durch: $NAME $EVENT");
my $eg_lueftung_aktuelle_stufe = ReadingsVal("eg_lueftung_stufe_anzeige_d","state","");
if ($EVENT eq "up") {
Log 3,("up=$EVENT");
Log 3,("aktuelle Stufe: $eg_lueftung_aktuelle_stufe");
fhem "sleep 1";
if ($eg_lueftung_aktuelle_stufe != 3) {
Log 3,("das ist ungleich 3, wir können also hochregeln ...");
$eg_lueftung_aktuelle_stufe += 1;
Log 3,("neue aktuelle Stufe (eins größer): $eg_lueftung_aktuelle_stufe");
fhem ("set eg_lueften $eg_lueftung_aktuelle_stufe");
fhem "sleep 1";
}
else {
Log 3,("3 ist schon die höchste Stufe, du Depp!");
}
}
if ($EVENT eq "down") {
Log 3,("down=$EVENT");
Log 3,("aktuelle Stufe: $eg_lueftung_aktuelle_stufe");
fhem "sleep 1";
if ($eg_lueftung_aktuelle_stufe != 0) {
Log 3,("das ist ungleich 0, wir können also herabregeln ...");
$eg_lueftung_aktuelle_stufe -= 1;
fhem "sleep 1";
Log 3,("neue aktuelle Stufe (eins kleiner): $eg_lueftung_aktuelle_stufe");
fhem ("set eg_lueften $eg_lueftung_aktuelle_stufe");
fhem "sleep 1";
}
else {
Log 3,("0 ist schon die kleinste Stufe, du Depp!");
}
}
if ($EVENT eq "0") {
if ($eg_lueftung_aktuelle_stufe == 1) {
fhem "set Lueftung_Stufe_a off";
fhem "set Lueftung_Stufe_c off";
}
elsif ($eg_lueftung_aktuelle_stufe == 2) {
fhem "set Lueftung_Stufe_a off";
fhem "set Lueftung_Stufe_b off";
}
elsif ($eg_lueftung_aktuelle_stufe == 3) {
fhem "set Lueftung_Stufe_b off";
fhem "set Lueftung_Stufe_c off";
}
else {
fhem "set Lueftung_Bedienmodul_AnAus on";
}
}
if ($EVENT eq "1") {
if ($eg_lueftung_aktuelle_stufe == 0) {
fhem "set Lueftung_Stufe_a on";
fhem "set Lueftung_Stufe_c on";
fhem "set Lueftung_Bedienmodul_AnAus off"
}
elsif ($eg_lueftung_aktuelle_stufe == 2) {
fhem "set Lueftung_Stufe_b off";
fhem "set Lueftung_Stufe_c on";
}
elsif ($eg_lueftung_aktuelle_stufe == 3) {
fhem "set Lueftung_Stufe_a on";
fhem "set Lueftung_Stufe_b off";
}
else {
}
}
if ($EVENT eq "2") {
if ($eg_lueftung_aktuelle_stufe == 0) {
fhem "set Lueftung_Stufe_a on";
fhem "set Lueftung_Stufe_b on";
fhem "set Lueftung_Bedienmodul_AnAus off"
}
elsif ($eg_lueftung_aktuelle_stufe == 1) {
fhem "set Lueftung_Stufe_b on";
fhem "set Lueftung_Stufe_c off";
}
elsif ($eg_lueftung_aktuelle_stufe == 3) {
fhem "set Lueftung_Stufe_a on";
fhem "set Lueftung_Stufe_c off";
}
else {
}
}
if ($EVENT eq "3") {
if ($eg_lueftung_aktuelle_stufe == 0) {
fhem "set Lueftung_Stufe_b on";
fhem "set Lueftung_Stufe_c on";
fhem "set Lueftung_Bedienmodul_AnAus off"
}
elsif ($eg_lueftung_aktuelle_stufe == 1) {
fhem "set Lueftung_Stufe_a off";
fhem "set Lueftung_Stufe_b on";
}
elsif ($eg_lueftung_aktuelle_stufe == 2) {
fhem "set Lueftung_Stufe_a off";
fhem "set Lueftung_Stufe_c on";
}
else {
}
}
fhem "sleep 1";
return;
}
.triggerUsed 1
CFGFN
DEF eg_lueften:.* {
Log 3,("notify eg_lueftung_nt, ausgelöst durch: $NAME $EVENT");
my $eg_lueftung_aktuelle_stufe = ReadingsVal("eg_lueftung_stufe_anzeige_d","state","");
if ($EVENT eq "up") {
Log 3,("up=$EVENT");
Log 3,("aktuelle Stufe: $eg_lueftung_aktuelle_stufe");
fhem "sleep 1";
if ($eg_lueftung_aktuelle_stufe != 3) {
Log 3,("das ist ungleich 3, wir können also hochregeln ...");
$eg_lueftung_aktuelle_stufe += 1;
Log 3,("neue aktuelle Stufe (eins größer): $eg_lueftung_aktuelle_stufe");
fhem ("set eg_lueften $eg_lueftung_aktuelle_stufe");
fhem "sleep 1";
}
else {
Log 3,("3 ist schon die höchste Stufe, du Depp!");
}
}
if ($EVENT eq "down") {
Log 3,("down=$EVENT");
Log 3,("aktuelle Stufe: $eg_lueftung_aktuelle_stufe");
fhem "sleep 1";
if ($eg_lueftung_aktuelle_stufe != 0) {
Log 3,("das ist ungleich 0, wir können also herabregeln ...");
$eg_lueftung_aktuelle_stufe -= 1;
fhem "sleep 1";
Log 3,("neue aktuelle Stufe (eins kleiner): $eg_lueftung_aktuelle_stufe");
fhem ("set eg_lueften $eg_lueftung_aktuelle_stufe");
fhem "sleep 1";
}
else {
Log 3,("0 ist schon die kleinste Stufe, du Depp!");
}
}
if ($EVENT eq "0") {
if ($eg_lueftung_aktuelle_stufe == 1) {
fhem "set Lueftung_Stufe_a off";
fhem "set Lueftung_Stufe_c off";
}
elsif ($eg_lueftung_aktuelle_stufe == 2) {
fhem "set Lueftung_Stufe_a off";
fhem "set Lueftung_Stufe_b off";
}
elsif ($eg_lueftung_aktuelle_stufe == 3) {
fhem "set Lueftung_Stufe_b off";
fhem "set Lueftung_Stufe_c off";
}
else {
fhem "set Lueftung_Bedienmodul_AnAus on";
}
}
if ($EVENT eq "1") {
if ($eg_lueftung_aktuelle_stufe == 0) {
fhem "set Lueftung_Stufe_a on";
fhem "set Lueftung_Stufe_c on";
fhem "set Lueftung_Bedienmodul_AnAus off"
}
elsif ($eg_lueftung_aktuelle_stufe == 2) {
fhem "set Lueftung_Stufe_b off";
fhem "set Lueftung_Stufe_c on";
}
elsif ($eg_lueftung_aktuelle_stufe == 3) {
fhem "set Lueftung_Stufe_a on";
fhem "set Lueftung_Stufe_b off";
}
else {
}
}
if ($EVENT eq "2") {
if ($eg_lueftung_aktuelle_stufe == 0) {
fhem "set Lueftung_Stufe_a on";
fhem "set Lueftung_Stufe_b on";
fhem "set Lueftung_Bedienmodul_AnAus off"
}
elsif ($eg_lueftung_aktuelle_stufe == 1) {
fhem "set Lueftung_Stufe_b on";
fhem "set Lueftung_Stufe_c off";
}
elsif ($eg_lueftung_aktuelle_stufe == 3) {
fhem "set Lueftung_Stufe_a on";
fhem "set Lueftung_Stufe_c off";
}
else {
}
}
if ($EVENT eq "3") {
if ($eg_lueftung_aktuelle_stufe == 0) {
fhem "set Lueftung_Stufe_b on";
fhem "set Lueftung_Stufe_c on";
fhem "set Lueftung_Bedienmodul_AnAus off"
}
elsif ($eg_lueftung_aktuelle_stufe == 1) {
fhem "set Lueftung_Stufe_a off";
fhem "set Lueftung_Stufe_b on";
}
elsif ($eg_lueftung_aktuelle_stufe == 2) {
fhem "set Lueftung_Stufe_a off";
fhem "set Lueftung_Stufe_c on";
}
else {
}
}
fhem "sleep 1";
return;
}
NAME eg_lueftung_nt
NOTIFYDEV eg_lueften
NR 7810
NTFY_ORDER 50-eg_lueftung_notify
REGEXP eg_lueften:.*
STATE active
TYPE notify
Readings:
2015-04-02 17:32:28 state active
Attributes:
room maschinenraum_eg
verbose 5
eine virtuelle Fernbedienung (eg_lueften) schalten:
NAME eg_lueften
NR 501
STATE 1
TYPE remotecontrol
Readings:
2015-04-02 17:14:01 state 1
Attributes:
icon vent_ventilation_control
rc_iconpath icons/remotecontrol
rc_iconprefix black_btn_
room maschinenraum_eg
row00 off:POWEROFF,down:DOWN,up:UP
row01 :blank,:blank,:blank
row02 1:1,2:2,3:3,0:4
row06 :blank,:blank,:blank
row11 :blank,:blank,:blank
webCmd off:up:down:0:1:2:3
Diese kann die Zustände 0, 1, 2, 3 und off annehmen, hat aber zusätzlich noch Tasten für 'up' und 'down'. set eg_lueften 0...3 schaltet korrekt. Die Aufforderung "fhem ("set eg_lueften $eg_lueftung_aktuelle_stufe");" erzeugt
2015.04.02 17:37:17.896 5: Triggering eg_lueftung_nt
2015.04.02 17:37:17.898 4: eg_lueftung_nt exec {...
}
2015.04.02 17:37:17.904 3: notify eg_lueftung_nt, ausgelöst durch: eg_lueften down
2015.04.02 17:37:17.905 3: down=down
2015.04.02 17:37:17.905 3: aktuelle Stufe: 2
2015.04.02 17:37:18.906 3: das ist ungleich 0, wir können also herabregeln ...
2015.04.02 17:37:19.907 3: neue aktuelle Stufe (eins kleiner): 1
2015.04.02 17:37:19.908 3: set eg_lueften 1 : 1
Das war's, das notify wird nicht erneut getriggert.
Im Eventmonitor taucht aber ein entsprechendes Event auf:
Events (Filter:.*):
2015-04-02 17:37:21.919 remotecontrol eg_lueften down
2015-04-02 17:37:21.919 remotecontrol eg_lueften 1
Vermutlich weist "2015.04.02 17:37:19.908 3: set eg_lueften 1 : 1" schon auf einen Fehler hin. Nur wieso entsteht der hier?
Oder ist gar aus irgendeinem Grunde nicht möglich, mit perl aus einem notify heraus ein Device vom Typ remotecontrol zu schalten?
Liebe Grüße
Dölmer
fhem info:
Fhem info:
Release : 5.6
OS : linux
Arch : i686-linux-gnu-thread-multi-64int
Perl : v5.14.2
uniqueID : dd84601a06a3a86505669076c31dc843
upTime : 1 day, 03:54:29
Defined modules:
CUL_HM : 140
DOIF : 42
FHEMWEB : 3
FHT : 11
FHZ : 1
FS20 : 56
FileLog : 157
HMLAN : 3
HMinfo : 1
PID20 : 1
SVG : 39
Weather : 1
at : 22
autocreate : 1
dewpoint : 1
dummy : 17
eventTypes : 1
logProxy : 1
notify : 26
readingsGroup : 2
remotecontrol : 3
telnet : 1
weblink : 3
Defined models per module:
CUL_HM : ActionDetector,CCU-FHEM,HM-CC-RT-DN,HM-CC-TC,HM-CC-VD,HM-LC-BL1-FM,HM-LC-Dim1TPBU-FM,HM-LC-SW1-PL2,HM-LC-SW2-PB-FM,HM-LC-SW4-WM,HM-PB-2-WM,HM-PB-4-WM,HM-RC-12-B,HM-RC-4-B,HM-SEC-SC,HM-SEC-WIN,HM-TC-IT-WM-W-EU,HM-WDS100-C6-O,HM-WDS30-T-O,virtual 1,virtual_1
FHT : fht80b
FS20 : dummyDimmer,fs20bs,fs20eam,fs20fms,fs20s20,fs20s4a,fs20sh-2,fs20st
Transmitting this information during an update: yes
You can change this via the global attribute sendStatistics
version:
# $Id: fhem.pl 8320 2015-03-29 10:49:31Z rudolfkoenig $
# $Id: 10_CUL_HM.pm 8258 2015-03-21 19:02:33Z martinp876 $
# $Id: 98_DOIF.pm 8177 2015-03-08 20:24:27Z damian-s $
# $Id: 01_FHEMWEB.pm 8288 2015-03-26 13:53:13Z rudolfkoenig $
# $Id: 11_FHT.pm 5070 2014-02-28 07:48:55Z rudolfkoenig $
# $Id: 00_FHZ.pm 3738 2013-08-18 14:13:59Z rudolfkoenig $
# $Id: 10_FS20.pm 7070 2014-11-27 12:45:34Z rudolfkoenig $
# $Id: 92_FileLog.pm 8264 2015-03-22 13:56:50Z rudolfkoenig $
# $Id: 00_HMLAN.pm 7822 2015-02-01 16:28:10Z martinp876 $
# $Id: 98_HMinfo.pm 8258 2015-03-21 19:02:33Z martinp876 $
# $Id: 98_PID20.pm 7089 2014-11-29 10:58:10Z john99sr $
# $Id: 99_SUNRISE_EL.pm 6765 2014-10-14 18:24:29Z rudolfkoenig $
# $Id: 98_SVG.pm 8292 2015-03-26 16:15:51Z rudolfkoenig $
# $Id: 99_Utils.pm 7914 2015-02-08 11:14:10Z rudolfkoenig $
# $Id: 59_Weather.pm 6705 2014-10-07 17:41:42Z borisneubert $
# $Id: 98_XmlList.pm 2895 2013-03-11 19:48:01Z rudolfkoenig $
# $Id: 90_at.pm 8326 2015-03-29 13:30:57Z rudolfkoenig $
# $Id: 98_autocreate.pm 8138 2015-03-02 19:26:54Z rudolfkoenig $
# $Id: 98_copy.pm 7789 2015-01-31 10:53:24Z justme1968 $
# $Id: 98_dewpoint.pm 6757 2014-10-12 18:58:57Z joachim09876 $
# $Id: 98_dummy.pm 4934 2014-02-15 08:23:12Z rudolfkoenig $
# $Id: 91_eventTypes.pm 8136 2015-03-02 19:09:18Z rudolfkoenig $
# $Id: 98_fheminfo.pm 7346 2014-12-29 08:38:52Z rudolfkoenig $
# $Id: 98_help.pm 8148 2015-03-04 11:32:36Z betateilchen $
# $Id: 98_logProxy.pm 7843 2015-02-03 12:17:25Z justme1968 $
# $Id: 91_notify.pm 8165 2015-03-07 14:35:16Z rudolfkoenig $
# $Id: 33_readingsGroup.pm 8227 2015-03-16 20:08:03Z justme1968 $
# $Id: $
# $Id: 98_telnet.pm 8229 2015-03-17 09:00:27Z rudolfkoenig $
# $Id: 98_weblink.pm 5608 2014-04-23 10:57:16Z rudolfkoenig $
Ich hab's selbst hingekriegt. Es ging wohl einfach zu schnell ...
Nebenbei habe ich jetzt auch sleep endlich verstanden. Es stoppt nicht das ganze notify, sondern stellt nur den anschließenden fhem-Befehl entsprechend zurück:
eg_lueften:.* {
my $eg_lueftung_aktuelle_stufe = ReadingsVal("eg_lueftung_stufe_anzeige_d","state","");
if ($EVENT eq "up") {
if ($eg_lueftung_aktuelle_stufe != 3) {
$eg_lueftung_aktuelle_stufe += 1;
fhem ("sleep ".(0.5)."; set eg_lueften $eg_lueftung_aktuelle_stufe");
}
else {
Log 3,("3 ist schon die höchste Stufe, du Depp!");
}
}
elsif ($EVENT eq "down") {
if ($eg_lueftung_aktuelle_stufe != 0) {
$eg_lueftung_aktuelle_stufe -= 1;
fhem ("sleep ".(0.5)."; set eg_lueften $eg_lueftung_aktuelle_stufe");
}
else {
Log 3,("0 ist schon die kleinste Stufe, du Depp!");
}
}
...
Dann helfe ich halt den anderen ... und das ist doch auch schön!