FHEM Forum

FHEM - Hausautomations-Systeme => Homematic => Thema gestartet von: Herr Paschulke am 17 Juni 2013, 21:41:37

Titel: HM-SWI-3-FM toggle in on/off wandeln
Beitrag von: Herr Paschulke am 17 Juni 2013, 21:41:37
Hallo,

ich habe in meiner FHEM-Konfiguration (5.4 DEVELOPMENT, $Id: fhem.pl 3236 2013-06-01) einen HM-SWI-3FM per Autocreate (hmPairForSec) eingebunden, der
samt seiner drei Kanäle erscheint:
define Alarm CUL_HM 1DD0EE
attr Alarm .devInfo 030000
attr Alarm .stc 42
attr Alarm firmware 1.1
attr Alarm model HM-SWI-3-FM
attr Alarm room Wohnung
attr Alarm serialNr JEQ...
attr Alarm subType swi

define Alarm_CH01 CUL_HM 1DD0EE01
attr Alarm_CH01 model HM-SWI-3-FM
attr Alarm_CH01 room Wohnung

define Alarm_CH02 CUL_HM 1DD0EE02
attr Alarm_CH02 model HM-SWI-3-FM
attr Alarm_CH02 room Wohnung

define Alarm_CH03 CUL_HM 1DD0EE03
attr Alarm_CH03 model HM-SWI-3-FM
attr Alarm_CH03 room Wohnung


Sofern ein Taster (Alarm_CH01) betätigt wird, gibt es folgende Einträge in den Log-Dateien:
2013-06-17 21:33:08 CUL_HM Alarm_CH01 toggle (to broadcast)
2013-06-17 21:33:08 CUL_HM Alarm_CH01 trigger: Short_60
2013-06-17 21:33:08 CUL_HM Alarm battery: ok
2013-06-17 21:33:08 CUL_HM Alarm Alarm_CH01 toggle (to broadcast)


Aus anderen Beiträgen lese ich, dass eine direkte Zuordnung von on/off nicht so einfach möglich ist, da der Sender nur toggle als Änderung überträgt und erst beim Aktor entschieden wird, was damit gemeint sein soll.
Nun möchte ich diesen Sender nicht mit anderen Geräten direkt pairen, sondern mir nur in FHEM ein notify bauen, welches dann andere Geräte ein- bzw. ausschalten kann. Ich könnte mir vorstellen, dass hierfür das übertragene Short_nn in Frage kommt (gerade=EIN, ungerade=AUS).

Wer kann mir bitte über eine passende Definition auf die Sprünge helfen?
Danke!
Titel: Aw: HM-SWI-3-FM toggle in on/off wandeln
Beitrag von: betateilchen am 17 Juni 2013, 23:12:40
Schau mal in die 99_Utils.pm da gibts eine Funktion um toggle in on/off zu wandeln, vielleicht kommst Du damit schon weiter.

Titel: Aw: HM-SWI-3-FM toggle in on/off wandeln
Beitrag von: Herr Paschulke am 18 Juni 2013, 00:26:53
Hallo,

danke für deine Antwort. Ich glaube, dass mir diese Routinen dort nicht weiterhelfen, da sie für FS20 gedacht sind. Diese Sender liefern ausschließlich toggle-Ereignisse. Bei HM kommen direkt weitere Infos mit, die man auswerten könnte.
Leider kann ich diese nicht korrekt mittels ReadingsVal("Alarm_CH01", "trigger", 0) auslesen. Als Wert bekomme ich hier immer 1 zurück...
Titel: Aw: HM-SWI-3-FM toggle in on/off wandeln
Beitrag von: martinp876 am 18 Juni 2013, 08:14:50
Hallo Herr Paschulke,

Bei der wortwahl versiche ich immer exakt zu sein, vermeidet manche missverstaendnisse.
Ein Sensor (auch ein remote und SWI3) sendet immer nur "trigger", nie "toggel". Wie du vor schon erwaehnt hast, ist bei direkt peering der Aktor fuer die resultierende Aktion verantwortlich.
Der SWI3 ist ein Schalter interface und kann daher nur "short" trigger, da er nur ein 'kippen' des schalters signalisiert.
Dein Angang mit gerade/ungerage ist auch der, welchen HM devices beim direkt-peering nutzen koennen. Du kannst dort ein toggle-to-counter einstellen und schon ist dein on/off realisiert.

Aber da du es in FHEM leosen willst muesste es so aussehen
Das notify ist
Alarm_CH01 trigger:short_xx

somit liefert
ReadingsVal("Alarm_CH01", "trigger", 0) = short_xx.

also
my $bno = $1 if (ReadingsVal("Alarm_CH01", "trigger", 0) =~ m/(\d+)/)

also
define nf notify {\
my $bno = $1 if (ReadingsVal("Alarm_CH01", "trigger", 0) =~ m/(\d+)/);\
{fhem set Licht (($bno & 1)?"on":"off")}}


hoffentlich halten sich die Tipfehler in Grenzen

Gruss Martin
ups - trigger vergessen  - also
define nf notify Alarm_CH01:trigger.* {\
my $bno = $1 if (ReadingsVal("Alarm_CH01", "trigger", 0) =~ m/(\d+)/);\
{fhem set Licht (($bno & 1)?"on":"off")}}


oder besser gleich
define nf notify Alarm_CH01:trigger.* {\
my $bno = $1 if ($EVENT =~ m/(\d+)/);\
{fhem set Licht (($bno & 1)?"on":"off")}}


Titel: Aw: HM-SWI-3-FM toggle in on/off wandeln
Beitrag von: Herr Paschulke am 18 Juni 2013, 21:43:01
Hallo Martin,


danke für deine Code-Zeilen und die genaue Erklärung zu den Schaltern! Ich habe mal die beiden Vorschläge übernommen, komme aber nicht so recht weiter.
Bei beiden Varianten bekomme ich eine Fehlermeldung wegen einer unbekannten Variablen:
Global symbol "$bno" requires explicit package name at (eval 328) line 1, <> line 8.
Unmatched right curly bracket at (eval 328) line 1, at end of line
syntax error at (eval 328) line 1, near "}}"


Ich habe meine Konfiguration in Einzeldateien getrennt, die ich in fhem.cfg mittels include einbinde.
Liegt es daran?
Titel: Aw: HM-SWI-3-FM toggle in on/off wandeln
Beitrag von: betateilchen am 18 Juni 2013, 22:31:25
Unmatched right curly bracket at

Du hast einen Klammer-Fehler in Deinen Eingaben gemacht. Vermutlich runde mit geschweifter Klammer verwechselt oder irgendwo eine Klammer vergessen.

Zeig doch mal die Definition Deines notify, vielleicht sieht man den Fehler ja auf Anhieb.
Titel: Aw: HM-SWI-3-FM toggle in on/off wandeln
Beitrag von: Herr Paschulke am 18 Juni 2013, 23:01:07
Ich hatte genau den Teil von Martin kopiert und nur in der letzten Zeile meinen Aktor ausgetauscht:
define nf notify Alarm_CH01:trigger.* {\
my $bno = $1 if (ReadingsVal("Alarm_CH01", "trigger", 0) =~ m/(\d+)/);\
{fhem set Fenster (($bno & 1)?"on":"off")}}
Titel: Aw: HM-SWI-3-FM toggle in on/off wandeln
Beitrag von: martinp876 am 19 Juni 2013, 08:07:43
Hi,

ich hatte es nicht testen koennen - daher die Anmerkung auf Tippfehler... und das unten ist auch nur teilgetestet.
Probier einmal. Ich hoffe, der $bno wird im FHEM kommando korrekt geparsed.

define nf notify Alarm_CH01:trigger.* {\
my $bno = $1 if (ReadingsVal("Alarm_CH01", "trigger", 0) =~ m/(\d+)/);;\
{fhem ("set Fenster (($bno & 1)?'on':'off')")}}
Gruss Martin
Titel: Aw: HM-SWI-3-FM toggle in on/off wandeln
Beitrag von: martinp876 am 19 Juni 2013, 08:17:20
so, habs mal schnell getestet - die Variable wird in FHEM "" nicht geparst. Also musst du es ausserhalb machen, siehe:

define nf notify Alarm_CH01:trigger.* {\
my $bno = $1 if (ReadingsVal("Alarm_CH01", "trigger", 0) =~ m/(\d+)/);;\
if ($bno & 1) {fhem ("set Fenster on");;}\
else{fhem ("set Fenster off")}}



Das sollte jetzt aber funktionieren, hat bei meinem Dummy geklappt
Titel: Aw: HM-SWI-3-FM toggle in on/off wandeln
Beitrag von: Herr Paschulke am 19 Juni 2013, 21:15:45
Klasse, vielen herzlichen Dank für eure tolle Hilfe!
Funktioniert jetzt super. Vielleicht könnte man als Hilfestellung daraus eine Funktion
schreiben, die mit in die 99_Utils wandert, so dass sich dieser Schalter
am Ende ähnlich in FHEM benutzen lässt wie ein HM-SCI-3-FM (der wohl direkt open/close
bzw. on/off zurückliefert).
Titel: Aw: HM-SWI-3-FM toggle in on/off wandeln
Beitrag von: martinp876 am 20 Juni 2013, 07:33:39
ein SCI3 liefert kein on/off. Er liefert nur einen geraden oder ungeraden trigger. Da er bei jeden aendern einmal hochzaehlt ist gerade und ungerade immer an der gleichen position.
Es ist wieder der Aktor, der es interpretieren muss.

HM hat das in Aktoren intern schon vorgesehen.