Gerät vom Typ "remotecontrol" per notify und perl-Variable schalten

Begonnen von Dölmer, 02 April 2015, 17:48:35

Vorheriges Thema - Nächstes Thema

Dölmer

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

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 $

Dölmer

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!