Frage zu HM-PB Tastern

Begonnen von yves, 10 Januar 2015, 17:29:31

Vorheriges Thema - Nächstes Thema

yves

Hallo zusammen,

habe folgendes in meiner fhem.cfg bezüglich eines HM-PB-Tasters (2fach):


define SchalterSZ CUL_HM 2806AD
attr SchalterSZ IODev HMLAN1
attr SchalterSZ autoReadReg 4_reqStatus
attr SchalterSZ expert 2_full
attr SchalterSZ firmware 1.4
attr SchalterSZ model HM-PB-2-WM55-2
attr SchalterSZ room CUL_HM
attr SchalterSZ serialNr LEQ0189587
attr SchalterSZ subType pushButton
attr SchalterSZ webCmd getConfig:clear msgEvents
define FileLog_SchalterSZ FileLog ./log/SchalterSZ-%Y.log SchalterSZ
attr FileLog_SchalterSZ logtype text
attr FileLog_SchalterSZ room CUL_HM
define SchalterSZ_Knopf1 CUL_HM 2806AD01
attr SchalterSZ_Knopf1 model HM-PB-2-WM55-2
attr SchalterSZ_Knopf1 peerIDs 00000000,
define SchalterSZ_Knopf2 CUL_HM 2806AD02
attr SchalterSZ_Knopf2 model HM-PB-2-WM55-2
attr SchalterSZ_Knopf2 peerIDs 00000000,
define virtueller_Schalter CUL_HM 123456
attr virtueller_Schalter IODev HMLAN1
attr virtueller_Schalter expert 2_full
attr virtueller_Schalter model virtual_2
attr virtueller_Schalter subType virtual
attr virtueller_Schalter webCmd virtual
define virtueller_Schalter_Btn1 CUL_HM 12345601
attr virtueller_Schalter_Btn1 model virtual_2
attr virtueller_Schalter_Btn1 peerIDs 2806AD01,
attr virtueller_Schalter_Btn1 webCmd press short:press long
define virtueller_Schalter_Btn2 CUL_HM 12345602
attr virtueller_Schalter_Btn2 model virtual_2
attr virtueller_Schalter_Btn2 peerIDs 2806AD02,
attr virtueller_Schalter_Btn2 webCmd press short:press long

# define SchalterEingang notify virtueller_Schalter_Btn1 IF ([HomeStatus:state] eq "Abwesend") (set HomeStatus Anwesend) ELSE (set HomeStatus Abwesend)
# define SchalterEingang notify SchalterSZ_Knopf1 IF ([HomeStatus:state] eq "Abwesend") (set HomeStatus Anwesend) ELSE (set HomeStatus Abwesend)


Dieses virtuelle bringt mich etwas durcheinander ehrlich gesagt  :o
Muss ich das notify auf den virtuellen oder den eigentlichen Schalter legen?
Mein Problem in beiden Fällen: Mein Anwesendheitsstatus wird mehrmals hin und her geändert. Denke das hat etwas mit der Fähigkeit der Schalter zu tun zwischen long und short press zu unterscheiden? Muss ich den Status irgendwie genauer abfragen um pro (kurzem) Tastendruck nur einmal zu triggern?

Danke für eure Hilfe!

Gruß

Yves

frank

ZitatMuss ich das notify auf den virtuellen oder den eigentlichen Schalter legen?
wenn du es richtig machst, sollte es egal sein.  ;)

ZitatMein Problem in beiden Fällen: Mein Anwesendheitsstatus wird mehrmals hin und her geändert.
das liegt an deinem notify. das toggelt bei jedem trigger des notify.

ZitatDenke das hat etwas mit der Fähigkeit der Schalter zu tun zwischen long und short press zu unterscheiden? Muss ich den Status irgendwie genauer abfragen um pro (kurzem) Tastendruck nur einmal zu triggern?
genau. es reicht die regex des notify spezieller zu gestallten. dazu schau dir den eventmonitor beim schalten an. dann suchst du dir ein passendes muster, was eindeutig ist, und passt die regex danach an.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

ToM_ToM

So ein ähnliches Problem habe ich auch.

Ich habe es folgendermaßen versucht, einzuschränken:

define Wandtaster1_long notify virtueller_Aktor_Btn1.ON {
my $pushTime = ReadingsVal("virtueller_Aktor_Btn1", "virtActTrigRpt", 0);;
if ($pushTime == 5 && ReadingsVal("virtueller_Aktor_Btn1", "virtActTrigType", "") == "long_Release")
{
fhem("set pushmsg msg \"FHEM\" \"Taster wurde für $pushTime . gedrückt.\" \"\" 0 \"siren\"");;
}
}


Wenn ich den Taster für etwas 3 Sekunden gedrückt halte, hat das Reading "virtActTrigRpt" den Wert 5. Nach 5 Sekunden schon den Wert 10.
Außerdem wollte ich dass er nur einmal eine PushMessage absendet. Aber er schickt 3 Stück los, da er anscheinen 3 mal schafft, auf das Event zu reagieren während virtActTrigRpt den Wert 5 hat.

Hier suche ich auch noch nach einer Lösung, dass das Event nur einmal ausgelöst wird.
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8

ToM_ToM

Hallo,

nach mehreren Stunden lesen und testen habe ich hier die Lösung. Vielleicht hilft es ja...

define Wandtaster1_long2 notify virtueller_Aktor_Btn1.ON {
my $pushTime = ReadingsVal("virtueller_Aktor_Btn1", "virtActTrigRpt", 0);;
my $trigType = ReadingsVal("virtueller_Aktor_Btn1", "virtActTrigType", "");;
  if ($pushTime >5 && $trigType eq "long_Release") {
   fhem("set pushmsg msg \"FHEM\" \"Taster wurde $trigType für $pushTime . gedrückt.\" \"\" 0 \"siren\"");;
  }
}


Damit ergeben sich interessante Möglichkeiten. Zum Beispiel, wenn man den Taster drückt, schalte die Lampe an, wenn man ihn für 2 Sekunden drückt, schalte alle Lampen an und wenn man ihn für 5 Sekunden gedrückt hält, schalte zusätzlich noch das Soundsystem an usw...
Hardware: BananaPi, Busmaster CUL, SanDisk 16GB Ultra SD, 16 GB USB-Stick | Software: Armbian, FHEM 5.8