Trigger auf Taste mit DOIF

Begonnen von Ronald, 12 Februar 2017, 22:44:51

Vorheriges Thema - Nächstes Thema

Ronald

Hallo zusammen,
Ich möchte auf einen Trigger durch eine Taste von HomeMatic Fernbedienung mit DOIF zwei verschiedene Aktionen ausführen, bekomme aber Fehler.
Die Funktionen gehen, wenn ich die so direkt auslöse:
set Licht.Arbeitsplatte on; set Wohnzimmer.Stehlampe 25
set  Licht.Arbeitsplatte off; set Wohnzimmer.Stehlampe off

Das möchte ich mit Trigger auf Taste 4 koppeln:
define Hintergrund_lamp_on notify Remote8_1_Btn_04 DOIF

Zusammengesetzt sieht es dann bei mir so aus:
define Hintergrund_lamp_on notify Remote8_1_Btn_04 DOIF ([Wohnzimmer.Stehlampe] eq "off" and [Licht.Arbeitsplatte] eq "off") (set Licht.Arbeitsplatte on; set Wohnzimmer.Stehlampe 25) DOELSE (set  Licht.Arbeitsplatte off; set Wohnzimmer.Stehlampe off)

Als Fehlermeldung bekomme ich das zurück:
Unknown argument off), choose one of assignHmKey clear deviceRename down fwUpdate getConfig getDevInfo getRegRaw getSerial getVersion inhibit off old on-for-timer on-till on pair pct peerBulk peerIODev press raw regBulk regSet reset sign statusRequest stop toggle unpair up

Was mache ich da verkehrt?

VG, Ronald

KernSani

äh... DOIF oder notify, was möchtest du?
Sowohl notify als auch DOIF sind "devices", mit jedem einzeln solltest du dein Ziel erreichen können, beides zusammen geht aber nicht.
Guck dir am besten mal das Einsteiger-Handbuch an. Ich würde dir empfehlen, dich zunächst mit notify vertraut zu machen um die Grundlagen zu verstehen. Das Wiki sollte dir dabei ein paar wertvolle Hinweise geben.

Grüße,

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

MadMax-FHEM

Entweder notify ODER DOIF...

Das sind zwei verschiedene Dinge die u.U. ähnliche/gleiche Dinge tun...

Ich bin jetzt kein DOIF Spezialist...

Aber lies mal noch mal in der Commandref unter DOIF nach wie genau die Syntax ist und lass das mit dem notify weg.

Oder mach nur ein notify und dann die if-Abfragen als normale "if-Abfragen" (statt dem DOIF) oder lagere es in eine sub in myUtils aus...

Du kannst auch hier mal schauen: https://forum.fhem.de/index.php/topic,66830.0.html ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Ronald

Danke für die Infos,

ich bin noch nicht so firm mit FHEM und habe da wohl zu viel zusammen gemischt.
Habe jetzt auf Basis notify angefangen, ODER Verknüpfung der Fernbedienungen funktioniert.
Auf Trigger drei verschiedene Fernbedienungen Dimmer und Schalter setzen:
define Hintergrund_lamp_on notify (Remote8_._Btn_04|Wohnzimmer.Remote_Btn_04) set Licht.Arbeitsplatte on;; set Wohnzimmer.Stehlampe 25
Ziel ist allerdings den Trigger auf Button 4 mit einer UND Verknüpfung auf den Zustand Dimmer / Schalter abzufragen.
HomeMatic Dimmer ist HM-LC-DIM1T-FM, Schalter HM-LC-Sw1-Pl-DN-R1.
Das bekomme ich aktuell noch nicht geregelt, verzweifle an den eckigen, runden, geschweiften Klammern :-)
Das Wiki für notfy beschreibt auch UND Verknüpfungen mit KNX drei Rollos, habe ich aber noch nicht so ganz geblickt.
Wie mus denn die Abfrage ausgelegt werden?
der Teil
{ if (Value("Wohnzimmer.Stehlampe") eq "off") {fhem("set("Licht.Arbeitsplatte on;; set Wohnzimmer.Stehlampe 25")} }
funktioniert so noch nicht.


KernSani

Zitat von: Ronald am 14 Februar 2017, 07:45:08
der Teil
{ if (Value("Wohnzimmer.Stehlampe") eq "off") {fhem("set("Licht.Arbeitsplatte on;; set Wohnzimmer.Stehlampe 25")} }
funktioniert so noch nicht.
fhem ist ein perl befehl, der einen String als Parameter übergeben bekommt. Das sollte also so aussehen:
fhem("mein FHEM Kommando")
Hoffe damit den richtigen Schubser gegeben zu haben...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Ronald

Ich habe mich jetzt erst Mal weiter rangetastet, mit
define Remote8_1.Button6_WohnzimmerLampe25 notify Remote8_1_Btn_06 {if (Value("Wohnzimmer.Lampe") eq "off") { fhem("set Wohnzimmer.Lampe 25")} }
bekomme ich auch nur einen Trigger wenn der State von Wohnzimmer.Lame off ist.
Wenn ich dann ein else hinzfüge
define Remote8_1.Button6_WohnzimmerLampe25 notify Remote8_1_Btn_06 {if (Value("Wohnzimmer.Lampe") eq "off") { fhem("set Wohnzimmer.Lampe 25")}  else { fhem("set Wohnzimmer.Lampe off")}}
passiert folgendes:
2017.02.19 20:01:01 3: CUL_HM set Wohnzimmer.Lampe 25
2017.02.19 20:01:01 3: CUL_HM set Wohnzimmer.Lampe off
2017.02.19 20:01:01 3: CUL_HM set Wohnzimmer.Lampe off
2017.02.19 20:01:01 3: CUL_HM set Wohnzimmer.Lampe off
Wohnzimmer.Lamer hatte state off, wird 1 x auf Pegel 25 geschaltet, dann direkt wieder auf off???
Ideen, woran das liegt?




automatisierer

so spontan würde ich sagen, dass dein notify getriggert wird und der else Fall eintritt, da die Lampe auf 25 steht...

dein notify triggert ja auf alles was mit 'Remote8_1.Button6_WohnzimmerLampe25' durch den EventMonitor läuft... es würde uns weiter helfen, wenn du einen EventMonitor ausschnitt von einem Tastendruck der Fernbedienung postest.

Ronald

Status ist Wohnzimmer.Lampe off, hier das Ergebnis von List Wohnzimmer.Lampe:
DEF        49E1FD
   HMUART_MSGCNT 55
   HMUART_RAWMSG 04030038B7800249E1FD19A5F70101000040
   HMUART_RSSI -56
   HMUART_TIME 2017-02-19 23:06:03
   IODev      HMUART
   LASTInputDev HMUART
   MSGCNT     55
   NAME       Wohnzimmer.Lampe
   NOTIFYDEV  global
   NR         61
   NTFY_ORDER 50-Wohnzimmer.Lampe
   STATE      off


Wenn ich dann den Button 6 betätige sieht der Event Monitor so aus:

2017-02-19 23:08:02 CUL_HM Remote8_1 battery: ok
2017-02-19 23:08:02 CUL_HM Remote8_1 CMDs_done
2017-02-19 23:08:02 CUL_HM Remote8_1 Remote8_1_Btn_06 Short
2017-02-19 23:08:02 structure Wohnraum undefined
2017-02-19 23:08:02 structure Wohnzimmer undefined
2017-02-19 23:08:02 CUL_HM Wohnzimmer.Lampe level: set_25
2017-02-19 23:08:02 structure Wohnraum undefined
2017-02-19 23:08:02 structure Wohnzimmer undefined
2017-02-19 23:08:03 CUL_HM Wohnzimmer.Lampe set_25
2017-02-19 23:08:03 structure Wohnraum undefined
2017-02-19 23:08:03 structure Wohnzimmer undefined
2017-02-19 23:08:03 CUL_HM Wohnzimmer.Lampe set_off


Zuerst off erkannt und auf 25 geschaltet.
Ich dachte danach wäre das Event fertig, es kommt aber dann wohl noch der Teil else - wenn 25 schalte off.
Wie kann ich das anders definieren?

automatisierer

#8

2017-02-19 23:08:02 CUL_HM Remote8_1 battery: ok
2017-02-19 23:08:02 CUL_HM Remote8_1 CMDs_done
2017-02-19 23:08:02 CUL_HM Remote8_1 Remote8_1_Btn_06 Short


Diese drei Events triggern dein notify nicht. Wenn das eine HM Fernbedienung ist, dann müssten da noch mehr Events kommen... Die die du gepostet hast, sind nur von dem Device, der Channel müsste auch noch welche raus hauen...

Device:
Remote8_1

Channel:
Remote8_1_Btn_06


define Remote8_1.Button6_WohnzimmerLampe25 notify Remote8_1_Btn_06:Short {if (Value("Wohnzimmer.Lampe") eq "off") { fhem("set Wohnzimmer.Lampe 25")}  else { fhem("set Wohnzimmer.Lampe off")}}
Wenn du dein notify so umbaust, wird es nur von einem Event 'Short' des Device/Channel 'Remote8_1_Btn_06' getriggert. Der regex sollte in deinem Fall präzise zu dem Event passen, damit das notify immer nur einmal pro Tastendruck ausgeführt wird.


Ronald

OK, schaue ich mir heuteabend an, ob da noch mehr kommt.

Ronald

Noch ein Nachtrag, habe mich gerade per VPN verbunden:
Die Fernbedienung ist eine 8er HM, hier das List dazu:
   DEF        4FAFC4
   HMUART_MSGCNT 11
   HMUART_RAWMSG 05010032B1A2404FAFC419A5F70652
   HMUART_RSSI -50
   HMUART_TIME 2017-02-19 23:08:02
   IODev      HMUART
   LASTInputDev HMUART
   MSGCNT     11
   NAME       Remote8_1
   NOTIFYDEV  global
   NR         23
   NTFY_ORDER 50-Remote8_1
   STATE      Remote8_1_Btn_06 Short
   TYPE       CUL_HM
   channel_01 Remote8_1_Btn_01
   channel_02 Remote8_1_Btn_02
   channel_03 Remote8_1_Btn_03
   channel_04 Remote8_1_Btn_04
   channel_05 Remote8_1_Btn_05
   channel_06 Remote8_1_Btn_06
   channel_07 Remote8_1_Btn_07
   channel_08 Remote8_1_Btn_08
   lastMsg    No:B1 - t:40 s:4FAFC4 d:19A5F7 0652
   protLastRcv 2017-02-19 23:08:02
   protSnd    11 last_at:2017-02-19 23:08:02
   protState  CMDs_done
   rssi_at_HMUART avg:-52.9 max:-48 cnt:11 lst:-50 min:-59
   Readings:
     2017-01-01 13:59:00   CommandAccepted yes
     2016-12-31 11:29:52   D-firmware      1.1
     2016-12-31 11:29:52   D-serialNr      NEQ1274626
     2016-12-31 11:34:27   PairedTo        0x19A5F7
     2016-12-31 11:34:27   R-pairCentral   0x19A5F7
     2016-12-31 11:34:27   RegL_00.        02:01 0A:19 0B:A5 0C:F7 18:00 00:00
     2016-12-31 11:17:17   alive           yes
     2017-02-19 23:08:02   battery         ok
     2016-12-31 11:17:17   powerOn         2016-12-31 11:17:17
     2016-12-31 11:17:17   recentStateType info
     2017-02-19 23:08:02   state           Remote8_1_Btn_06 Short

Wie gesagt, die Ergänzung :short trage ich heuteabend ein und schaue mir dann das feedback an.

automatisierer

bitte Code Tags benutzen... (Im Forum Editor die # über dem  :-X)

Ronald

Danke für die Tipps, bin etwas weiter gekommen:
define Remote8_1.Button6_WohnzimmerLampe25 notify Remote8_1_Btn_06:Short {if (Value("Wohnzimmer.Lampe") eq "off") { fhem("set Wohnzimmer.Lampe 25")}  else { fhem("set Wohnzimmer.Lampe off")}}
triggert bei mir gar nicht???
define Remote8_1.Button6_WohnzimmerLampe25 notify Remote8_1_Btn_06:Short.* {if (Value("Wohnzimmer.Lampe") eq "off") { fhem("set Wohnzimmer.Lampe 25")}  else { fhem("set Wohnzimmer.Lampe off")}}
triggert und funktioniert  :)
Was macht das .* ?
Das mehrfache Senden einer Taste scheint damit zusammen zu hängen, dass die Tasten nicht gepeert sondern gepairt sind.
Hatte gefunden, dass der HM Taster dann wohl kein feedback bekommt.
Kann ich das abschalten?
Habe etwas von dummy event gefunden aber nicht richtig verstanden.

Beim trigger auf Remote8_1_Btn_06:Short.*  kommt jetzt aber auch nur noch dies im Event Monitor (siehe nachfolgende Liste) und im Logfile tauchen nur noch abwechselnd
3: CUL_HM set Wohnzimmer.Lampe off und 3: CUL_HM set Wohnzimmer.Lampe 25 auf, keine mehrfachevents durch eine Tastenbetätigung.
Ist also evtl. gar nicht mehr notwendig Dummy Events anzulegen.
Sorry für meine unkenventionellen posts, bin Neuling und noch nicht so firm mit FHEM / Forenkonventionen.
Hoffe, mit den Lists und codes jetzt die richtige Form gewählt zu haben

  • 2017-02-20 22:08:53 CUL_HM Remote8_1 battery: ok
    2017-02-20 22:08:53 CUL_HM Remote8_1 CMDs_done
    2017-02-20 22:08:53 CUL_HM Remote8_1 Remote8_1_Btn_06 Short
    2017-02-20 22:08:53 structure Wohnraum undefined
    2017-02-20 22:08:53 structure Wohnzimmer undefined
    2017-02-20 22:08:53 CUL_HM Wohnzimmer.Lampe set_off
    2017-02-20 22:08:53 CUL_HM Remote8_1_Btn_06 Short (to HMUART)
    2017-02-20 22:08:53 CUL_HM Remote8_1_Btn_06 trigDst_19A5F7: noConfig
    2017-02-20 22:08:53 CUL_HM Remote8_1_Btn_06 trigger: Short_100
    2017-02-20 22:08:53 CUL_HM Remote8_1_Btn_06 trigger_cnt: 100
    2017-02-20 22:08:53 structure Wohnraum undefined
    2017-02-20 22:08:53 structure Wohnzimmer undefined
    2017-02-20 22:08:53 CUL_HM Wohnzimmer.Lampe deviceMsg: off (to HMUART)
    2017-02-20 22:08:53 CUL_HM Wohnzimmer.Lampe dim: stop:off
    2017-02-20 22:08:53 CUL_HM Wohnzimmer.Lampe level: 0
    2017-02-20 22:08:53 CUL_HM Wohnzimmer.Lampe overheat: off
    2017-02-20 22:08:53 CUL_HM Wohnzimmer.Lampe overload: off
    2017-02-20 22:08:53 CUL_HM Wohnzimmer.Lampe pct: 0
    2017-02-20 22:08:53 CUL_HM Wohnzimmer.Lampe reduced: off
    2017-02-20 22:08:53 CUL_HM Wohnzimmer.Lampe off
    2017-02-20 22:08:53 CUL_HM Wohnzimmer.Lampe timedOn: off

automatisierer

.* steht für:
Der Punkt ersetzt ein beliebiges Zeichen und das Sternchen steht für eine beliebige Anzahl an Wiederholungen des vorigen Zeichens, auch kein mal. Bei .* Muss also noch mindestens ein Zeichen folgen, sonst passts nicht.
Remote8_1_Btn_06:Short steht halt auch nur für genau dieses Event.

bei Remote8_1_Btn_06:Short.* kann hinter Short noch beliebiger Text stehen, aber mindestens noch ein beliebiges Zeichen.

Ronald

Warum das Event auf
Remote8_1_Btn_06:Short
nicht triggert erschließt sich mir zwar nicht, da es aber mit
Remote8_1_Btn_06:Short:*
funktioniert, bin ich zufrieden.
Habe meine Config mit den notifys auf :Short.* umgestellt und seitdem keine 3fach Auslösungen mehr, alles funzt prima.
Danke für die Hilfe, ich kann dieses Thema schließen.
Habe ein neues aufgemacht, Trigger auf :Long* abwechseln Dimmmer up / down.