HM-RC-2-PBU-FM richtig programmieren

Begonnen von Benwish, 07 Januar 2017, 13:02:48

Vorheriges Thema - Nächstes Thema

Benwish

Hallo zusammen,

kein Problem dieses mal, aber eine Optimierungsfrage ;-)
Habe gerade einen Homematic HM-RC-2-PBU-FM Funkaktor hinzugefügt und damit meinen Lichtschalter im Schlafzimmer ersetzt.
Nun habe ich drei neue Devices:

  • Lichtschalter_Schlafzimmer
  • Lichtschalter_Schlafzimmer_Btn_01
  • Lichtschalter_Schlafzimmer_Btn_02

Nun möchte ich bei einem langen Tastendruck beide Lampen im Raum anschalten, bei einem kurzen Tastendruck nur eine. Gelöst habe ich es über ein Notify auf das erste Device:

Lichtschalter_Schlafzimmer.Lichtschalter_Schlafzimmer_Btn.* {
if (Value("Lichtschalter_Schlafzimmer") eq "Lichtschalter_Schlafzimmer_Btn_02 Long") {
  fhem("set HUEDevice8 on; set HUEDevice7 on;");
} elsif (Value("Lichtschalter_Schlafzimmer") eq "Lichtschalter_Schlafzimmer_Btn_02 Short") {
  fhem("set HUEDevice8 on;");
} elsif (Value("Lichtschalter_Schlafzimmer") eq "Lichtschalter_Schlafzimmer_Btn_01 Long") {
  fhem("set HUEDevice8 off; set HUEDevice7 off;");
} elsif (Value("Lichtschalter_Schlafzimmer") eq "Lichtschalter_Schlafzimmer_Btn_01 Short") {
  fhem("set HUEDevice8 off;");
}
}


Funktionieren tut das genau so, wie ich möchte. Aber da man ja auch immer noch ein bisschen was lernen möchte, die Frage: Geht das auch irgendwie eleganter? :)

Devender

Hi,

danke für deinen noch unkommentierten Beitrag :-).
Hat mir geholfen die beiden Short und Long Devices unter Unsorted zu finden  ::)

Ich habe die Schaltung mit einem DOIF gelöst:

   DEF        (
[Bad.Haupt_Btn_01:state] eq "Short (to CUL1)" and [?Alarmsystem:state] eq "aus" and ([?st_anwesenheit:state] eq "present" or [?st_autos:state] eq "present")
and [Bad.Decke:state] eq "off"
)
(set Bad.Decke on)
(set Bad.Decke on)
DOELSEIF
(
[Bad.Haupt_Btn_01:state] eq "Short (to CUL1)"  and [?st_anwesenheit:state] eq "present"
and [Bad.Decke:state] eq "on"
)
(set Bad.Decke off)
(set Bad.Decke on)
DOELSE


Ich sende den Befehl doppelt, da ich mit IT Funksteckern arbeite und die manchmal den ersten Befehl nicht mitbekommen. Zusätzlich prüfe ich noch noch auf Anwesenheit
Für Long habe ich noch keine nützliche Funktion implementiert.

Grüsse,
Dirk
FHEM 5.8 auf RasPi mit Jessy - CUL868, JeeLink Lacrosse
Komponenten: HM, IT, ELV, FB7390, FritzPL543,Sonos Play3
Mehrere Wandtablets sowie einen Smart Mirror
https://wiki.fhem.de/wiki/Anwesenheitserkennung#PRESENCE-Modul

Conqueror

#2
Hallo zusammen,
ich habe zum ersten mal versucht ein DOIF-Element einzusetzen - mit mäßigem Erfolg  ;D

Kurz zum Setup:
Ich habe ein halbwegs ordentlich aufgebautes FHEM auf einem RasPi 3 mit einem FS20 CUL und einem HmUART für Homematic.
Mit diesem DOIF möchte ich mit einem HM-RC-2-PBU-FM (HM_431E6B) einen fs20su (Cubelicht) schalten, an dem ein paar Deckenlampen hängen.

Nachdem ich ewig gebraucht habe herauszufinden, dass man die DEF-Befehle in den DEF-Bereich des defmod-Elementes schreibt, sieht meine cfg jetzt so aus:


define HM_431E6B CUL_HM 431E6B
attr HM_431E6B IODev HmUART
attr HM_431E6B autoReadReg 4_reqStatus
attr HM_431E6B expert 2_raw
attr HM_431E6B firmware 1.1
attr HM_431E6B model HM-RC-2-PBU-FM
attr HM_431E6B room HomeMatic
attr HM_431E6B serialNr MEQ0760444
attr HM_431E6B subType remote
attr HM_431E6B webCmd getConfig:clear msgEvents
#
define HM_431E6B_Btn_01 CUL_HM 431E6B01
attr HM_431E6B_Btn_01 model HM-RC-2-PBU-FM
attr HM_431E6B_Btn_01 peerIDs 00000000,
attr HM_431E6B_Btn_01 room HomeMatic


DEF
(
[HM_431E6B_Btn_01:state] eq "Short*" and [Cubelicht:state] eq "off"
)
(set Cubelicht on)
(set Cubelicht on)

DOELSEIF
(
[HM_431E6B_Btn_01:state] eq "Short*" and [Cubelicht:state] eq "on"
)
(set Cubelicht off)
(set Cubelicht off)
DOELSE


Leider macht der HM-RC-2-PBU-FM das nicht mit. Es wird nichts geschaltet und ich sehe keine Reaktion im Event Monitor:

Der Event Monitor sagt:
2018-06-30 22:27:30 CUL_HM HM_431E6B battery: ok
2018-06-30 22:27:30 CUL_HM HM_431E6B CMDs_done
2018-06-30 22:27:30 CUL_HM HM_431E6B HM_431E6B_Btn_01 Short
2018-06-30 22:27:30 CUL_HM HM_431E6B_Btn_01 Short 1_137 (to HmUART)
2018-06-30 22:27:30 CUL_HM HM_431E6B_Btn_01 trigDst_11406E: noConfig
2018-06-30 22:27:30 CUL_HM HM_431E6B_Btn_01 trigger: Short_137
2018-06-30 22:27:30 CUL_HM HM_431E6B_Btn_01 trigger_cnt: 137


Mehr nicht.

Zur Fehlersuche: Ich habe gesehen, dass beim HM-RC-2-PBU-FM im STATE immer "Short 1_xxx (to HmUART)" ausgegeben wird. Daher habe ich einen Stern* hinter das "Short" geschrieben, damit die sich verändernde Zahl 1_xxx mitgenommen wird. Meine Vermutung: beim "Short*" wird der Stern nicht richtig interpretiert, allerdings funktioniert nur "Short" auch nicht.

Habt ihr eine Idee? Oder seht ihr an einer anderen Stelle einen Fehler?

Otto123

#3
Hi,

eine einfache Möglichkeit mit diesem Problem umzugehen ist der Eventmonitor. Der kann mehr als man denkt.

Ich würde allerdings für diese Aufgabe, den Event nehmen:
HM_431E6B HM_431E6B_Btn_01 Short
Und ein notify erzeugen lassen.

Das Licht schaltest Du dann einfach mit toggle? Oder kann FS20 kein toggle?

Man kann in einem Gerät übrigens sowohl ein die DEF editieren oder das Gerät mittels defmod über die Kommandozeile modifizieren, oder mehrere Befehler über die Raw Definition eingeben.

BTW. Short* ist kein regEx, bei FHEM braucht man normalerweise ein regEx. Das sähe so aus: Short.*
Das Ganze ist nicht zu verwechseln mit der Verwendung von Wildcards. Da findest Du im Internet bestimmt genug Stoff zum lesen.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Damian

[HM_431E6B_Btn_01:state] =~ "Short" and ...

hätt' auch getan ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Conqueror

#5
GELÖST

Ihr seid der Hammer, vielen Dank!!!  ;D

Ich habe es jetzt mit dem

[HM_431E6B_Btn_01:state] =~ "Short"

gelöst.

Für die Nachwelt:

Um mit einem Schalter (HM-RC-2-PBU-FM) (wichtig: sollte bidirektional sein!) mit zwei Kanälen zwei Lampen zu schalten (Wenn Lampe AUS, dann schalte AN / Wenn Lampe AN, dann schalte AUS), könnt ihr folgendes in eure cfg übernehmen:


# Lampe 1
define HM_431E6B_Btn_01 CUL_HM 431E6B01 # <-- hier natürlich euren Schalter bzw, den jeweiligen Kanal eintragen
attr HM_431E6B_Btn_01 model HM-RC-2-PBU-FM # <-- hier natürlich euren Schalter bzw, den jeweiligen Kanal eintragen
attr HM_431E6B_Btn_01 peerIDs 00000000, # <-- hier natürlich euren Schalter bzw, den jeweiligen Kanal eintragen
attr HM_431E6B_Btn_01 room HomeMatic # <-- hier natürlich euren Schalter bzw, den jeweiligen Kanal eintragen

# DOIF-Device (wird als Device angelegt, der Bereich ab dem "DOIF" kann in dem Gerät "Schreibtisch-Schaltung" in der Variable "DEF" bearbeitet werden)

# Wenn Lampe aus, dann schalte an
define Schreibtisch_Schaltung DOIF ([HM_431E6B_Btn_01:state] =~ "Short" and [Schreibtisch:state] eq "off") \
(set Schreibtisch on)\
\
# Wenn Lampe an, dann schalte aus
DOELSEIF\
(\
[HM_431E6B_Btn_01:state] =~ "Short" and [Schreibtisch:state] eq "on"\
) \
(set Schreibtisch off)\
DOELSE



# Lampe 2
define HM_431E6B_Btn_02 CUL_HM 431E6B02
attr HM_431E6B_Btn_02 model HM-RC-2-PBU-FM
attr HM_431E6B_Btn_02 peerIDs 00000000,
attr HM_431E6B_Btn_02 room HomeMatic

# DOIF-Device (wird als Device angelegt, der Bereich ab dem "DOIF" kann in dem Gerät "Cubelicht-Schaltung" in der Variable "DEF" bearbeitet werden)
define Cubelicht_Schaltung DOIF ([HM_431E6B_Btn_02:state] =~ "Short" and [Cubelicht:state] eq "off") \
(set Cubelicht on)\
\
DOELSEIF\
(\
[HM_431E6B_Btn_02:state] =~ "Short" and [Cubelicht:state] eq "on"\
) \
(set Cubelicht off)\
DOELSE


Natürlich braucht ihr noch je einen beliebigen Aktor (bei mir sind es ein fs20su (Cubelicht) und eine fs20st (Schreibtisch))


P.S.: Danke auch Otto für den Tipp mit dem Event Monitor - das hat mir direkt bei meinem nächsten Projekt geholfen!


EDIT:
Leider etwas zu früh gefreut. Da der STATE bei den unidirektionalen FS20-Aktoren nicht wirklich zuverlässig geht, schaltet der Schalter leider nicht mehr, sobald man den Aktor über ein anderes Device in einen anderen Zustand (ON/OFF) versetzt.

Daher jetzt doch die toggle-Variante:


# Cubelicht Schaltung
define HM_431E6B_Btn_01 CUL_HM 431E6B01
   attr HM_431E6B_Btn_01 model HM-RC-2-PBU-FM
   attr HM_431E6B_Btn_01 peerIDs 00000000,
   attr HM_431E6B_Btn_01 room HomeMatic

define HM_431E6B_notify_1 notify HM_431E6B:HM_431E6B_Btn_01.Short set Cubelicht toggle




@Otto123: toggle hatte ich bisher nicht verwendet, weil bei mir die Lampen dann immer geblinkt haben (als ob der toggle-Befehl mehrfach abgesetzt wird). Mit dem attribut "UseSetExtension" geht es jetzt!

Amenophis86

Gelöst kann der Threadersteller selbst machen, in dem er den ersten Beitrag editiert.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...