HM-PB-2-WM55 anlernen

Begonnen von docb, 28 Mai 2013, 15:23:21

Vorheriges Thema - Nächstes Thema

martinp876

Hi Doc,

ja, wozu sind die virtuellen "Entities" gut? (Entities, weil es Aktoren und Sensoren sein koennen).
Eigentlich sind sie nur dazu gut, einem realen HM Device einen Peer zu simulieren. Einigen User wollen HM Geraete mit anderen Familien kombinieren (FS20,1-wire, wasauchimmer....) und koennen daher nicht direkt peeren. Oder sie wollen in der Zentrale komplexe Auswertungen machen...

Beispiel HM Fernbedienung, aber kein HM Aktor. Also muss die Zentrale den Trigger der FB fangen und verarbeiten. Ein virtueller Channel kann hier einen Aktor simulieren.
- ohne virtuellem Aktor wird die FB den Trigger an Broadcast senden. Das Kommando wird nicht wiederholt, es gibt kein ACK, die FB leuchtet orange
- mit virtuellem Aktor wird die FB ein ACK des Aktors erwarten. Das Kommando wird ggf wiederholt bis ein ACK kommt, die FB leuchtet gruen (ok) oder rot (Trigger nicht angekommen)
Im virtuellen Channel wird noch ein fiktiver schaltzustand mitgefuehrt, falls den jemand brauchen kann.

Beispiel HM Aktor mit virtuellem Sensor. Man hat die Moeglichkeit einen Peer zu simulieren und kann HM funktionen nutzen, die im Aktor zu verfuegung stehen. Man kann ueber FHEM auch FBs anderer Hersteller Adaptieren.

Zum Beispiel:
devicepair gibt es nicht mehr. pair und peer hat viele User verwirrt (und tut es evtl immer noch). Daher heist das Kommando jetzt peerChan und soll eingaengiger sein. Ich versuche durchgangig die Namen zu nutzen
- pairen: Device mit Zentrale, nur einmal moeglich
- peeren: Aktor Channel mit Sensor Channel, meist mehrfach je channel moeglich
- Device: ein Geraet mit Protokoll-Instanz. Bedient die im Device eingebauten Channel
- Channel: Funktionseinheit eines Device (ein Button, ein Schalter, ein Rollo-Aktor...)
Somit war devicepair doppelt falsch.
Nutze einfach peerChan

Gruss
Martin

docb

Hallo,
bin wieder aus dem Kurzurlaub zurück und gleich wieder am Verzeifeln ;-)
Also ich hab jetzt auch noch den HM-Anhang der Einsteiger-Pdf durch, aber auch der ist für mich nur extrem schwer zu verstehen. Dank deiner Erklärung von oben, weiß ich aber zumindest wofür ich das machen möchte. Ich erkläre mal kurz den Hintergrund: Momentan ist der Schalter im Bad und schaltet meinen Yamaha Receiver ein -> Musik im Bad ;-) Dazu habe ich das Ding an Fhem angelernt und mit

define BA_Taster_on_notify notify BA_Taster_Btn_01 set Yamaha_Z2 on
define BA_Taster_off_notify notify BA_Taster_Btn_02 set Yamaha_Z2 of

schalte ich. Allerdings bekommt der Taster natürlich keine Rückmeldung, soweit habe ich das gerafft. Jetzt würde ich ihn dazu eben gerne mit dem virtuellen Aktor paaren, doch irgendwie haut da was nicht hin (den Code habe ich mir aus dem Einsteiger-Pdf rausgebastelt):

set BA_Taster_Btn_01 peerChan 0 Vact_BA_Taster_Btn1 single set actor

habe ich ausgeführt.
Bei Taster steht immer noch:
BA_Taster_Btn_01   Short (to broadcast)
und beim virtuellen Aktor steht:
Vact_BA_Taster_Btn1  set_?  press short  press long
und wenn ich den Vact_BA-TAster_Btn1 auf der Weboberfläche anklicke steht zwar unten peerIDs aber danach kein Eintrag.

Wie bekomme ich denn das hin - was mache ich (mal wieder) falsch?
Wie immer dankbar für Tipps ;-)
Beste Grüße
Doc


I love FHEM!

martinp876

Hallo Doc,
du hast also einen Virtuellen Channel Vact_BA_Taster_Btn1.
Wenn du den peeren willst musst du aktor UND sensor peeren. Der letzte Parameter ist eigentlich zum Aufraeumen, also wenn man eben - aus irgenrwelchen Gruenden - nur dem Aktor oder nur der remote bescheid sagen will. Demnach brauchst du "both" oder eben den default.

set BA_Taster_Btn_01 peerChan 0 Vact_BA_Taster_Btn1 single set

Jetzt sollte
- der BA_Taster_Btn_01 als peer im Vact_BA_Taster_Btn1 auftauchen
- der BA_Taster ein paar pending commands haben (siehe Device, nicht Channel!)

2teres ist eine Vermuting da es wahrscheinlich ein device ist, das man erst erwecken muss. Also anlernen druecken (kurz) - dann sollten die Kommandos abgearbeitet werden.

Nach dem peeren eines virtuellen Aktors musst du natuerlich speichern. Das peering ist ja nur in der FHEM SW und wuerde mit einem FHEM restart verschwinden.

Kontrolle:
set BA_Taster getConfig
anlernen kurz
warten...
peerList des BA_Taster_Btn_01 ansehen, der Vact_BA_Taster_Btn1 sollte auftauchen.

Gruss Martin

docb

Moin moin,
also wenn ich den Befehl von dir eingebe zeigt der EventMonitor:
013-06-18 11:54:57 CUL_HM Vact_BA_Taster CMDs_pending
2013-06-18 11:54:57 CUL_HM Vact_BA_Taster CMDs_processing...
2013-06-18 11:55:03 CUL_HM Vact_BA_Taster CMDs_done_events:3
2013-06-18 11:55:03 CUL_HM Vact_BA_Taster CMDs_done_events:3
2013-06-18 11:55:03 CUL_HM Vact_BA_Taster MISSING ACK
Beim Vact_BA_Taster_Btn_1 stehgt bei peerIDs nichts drin.
Beim BA_Taster habe ich 18 CMDs_pending

Soll ich jetzt am Taster trotzdem einfach mal kurz den "Anlernen"-Knopf drücken?
Und wie speichere ich das eigentlich wie du geschrieben hast?
Ich mache das schon richtig, wenn ich das einfach in der Weboberfläche mache und den Befehl oben im Eingabefenster von fhem reintippe?
Viele Grüße
Doc

I love FHEM!

docb

Ach ja und nochwas - ich brauche ja zwei virtuelle Kanäle (für den zweiten Kanal des Schalters),
kann ich das, wenn ich einen neuen virtuellen Aktor anlege mit
set Vact virtual 2 machen?
und wie ergänze ich das bei meinem bestehenden?
viele grüße
doc
I love FHEM!

martinp876

Hi Doc,

das mit den Vact_BA_Taster CMDs_done_events:3
werde ich mir ansehen... sollte nicht sein. Ist der Vact_BA_Taster auch ein virtueller Aktor-channel? Eine Channelnummer fehlt...
Sollte angelegt sein mit
define Vact_BA_dev CUL_HM 332211
set Vact_BA_dev virtual 1

dann hast du einen
Vact_BA_dev_Btn1
das ist dein Channel, den kannst du renamen, wenn du willst nach
rename Vact_BA_dev_Btn1 Vact_BA_Taster

Immer wenn am BA_Taster commands pending sind kannst du anlernen druecken. Erst dann werden diese angearbeitet. Liegt daran, dass der BA zum stromsparen taub ist - und nur aufwacht, wenn man eine Taste drueckt. Um Kommandos zu empfangen muss es die Anlerntaste sein! (lang ist reset, also nur Kurz).

Ja, die Eingabe ueber die web-oberflaeche ist ok.
speichern:
- FHEM daten und alles was virtuellen aktoren sind macht man mit "save"
- Alles was du in die HM devices schreibst (peering, Register und pairen) wird von device permanent gespeichert
Kuer:
wenn du die Daten der HM devices sichern willst musst du die erst lesen (getConfig) Sicherheitshalber pruefen, dass keine Fehler aufgetreten sind (protokol-events aufgetreten?) und dann ein get saveConfig <filename> machen.
Tip: getConfig und saveConfig  am besten auf das Device ausfuehren, dann werden alle Channels gleich mit bearbeitet

2. Virtuellen Channel
du kannst mit 2 virtuellen Channel arbeiten, musst aber nicht. Wenn du nur willst, dass der virtActor ein ack schickt kannst du den "Button1" mit beiden (oder mehr) realen Button peeren.
Trennen kannst du auch, wenn du willst.

Du kannst jederzeit die Anzahl der Kanaele eines virtuellen Devices aendern. Die neuen kanaele weden einfach addiert, oder ueberzaehlige reduziert. Achtung, bestehende peerings in realen HM channels bleiben bestehen.

Gruss
Martin

docb

Guten Morgen,
ich hab jetzt einfach mal folgendes gemacht: alles virtuelle mit delete gelöscht und dann wie folgt neu angelegt (nach deiner Beschreibung):

define Vact_BA_dev CUL_HM 332211
set Vact_BA_dev virtual 1
rename Vact_BA_dev_Btn1 Vact_BA_Taster
set BA_Taster_Btn_01 peerChan 0 Vact_BA_Taster single set
set BA_Taster_Btn_02 peerChan 0 Vact_BA_Taster single set

Das Ergebnis habe ich mal als Bilder angehängt.

(siehe Anhang / see attachement)


(siehe Anhang / see attachement)


(siehe Anhang / see attachement)


(siehe Anhang / see attachement)


Ich habe auch nachdem ich die Screenshots gemacht habe mal kurz auf Anlernen gedrückt.
Allerdings bekommt der Schalter offensichtlich kein ACK, weil er immer noch orange und rot blinkt nachdem ich eine Taste drücke... so ein Widerporst!
Viele Grüße
Doc
I love FHEM!

martinp876

hm - mal sehen, was ich alles erkennen kann:

der Vact_BA_dev_Btn1 sollte die HMID 33221101 haben. Da er diese nicht hat ist wohl das define schief gegangen. Sicher hast du die Fehlermeldung erhalten, dass das device schon existiert. Musst du beachten! erst ein delete machen

da es schon existiert haben wir also
Vact_BA_dev CUL_HM 100001
Vact_BA_Taster CUL_HM 10000101

Nachdem du alle Kommandos abgesetzt hast sollten die peering Kommandos 'bereitgestellt' sein.
Nicht gesendet hast du die Info über das device
BA_Taster
Hier waere enthalten, ob die Kommandos auch gesendet wurden oder noch auf senden warten. Hast du dies kontrolliert?
Sollte dies ok sein, keine Kommandos pending und keine Protokoll-fehler (siehe protoxxx parameter im device) dann sind die peers eingerichtet.

Dann kommt der Punkt, dass die Infos aus den Device ausgelesen werden muessen. Also ein
set BA_Taster getConfig
wieder die Anlerntaste druecken (kurz!!!!, kein reset !!!) und dann noch einmal nachsehen.

Da deine Tasten in den Registern "set_" stehen haben kann man sehen, dass du kein getConfig ausgefuehrt hast.

Gruss
Martin



docb

Oh Mann. Das mit der HMID ist ok, ich habs falsch abgetippt. Hab dem Vact_BA_dev die 100001 zugewiesen und nur hier falsch gepostet.
Ich habe jetzt folgendes gemacht:

set BA_Taster getConfig

und dann anlernen gedrückt. Da hat sich beim BA_Taster einiges getan. Aber wenn ich den Schalter drücke blinkt er immer noch orange und rot :(
Und weder beim Vact_BA_Taster noch bei den beiden Tastern steht bei peerID etwas drin.
Das ist ja echt ne extrem schwere Geburt!
Viele Grüße
Doc

(siehe Anhang / see attachement)


(siehe Anhang / see attachement)
I love FHEM!

martinp876

Hi,

jetzt fehlt der Kanal...
noch einmal langsam
BA_Taster ist das Device. Es ist fuer den message-ablauf zustaendig.Hier siehst du
+ pairing des Device
+ Welche Channels UNTERGEORDNET sind
+ Ob messages zum Transfere anstehen
+ ob Message-fehler aufgetreten sind.
+ devices werden NIE gepeert und haben auch keine peers!!!

BA_Taster_Btn1 ist ein Kanal.
+ ein kanal kann nicht senden, er nutzt IMMER sein Device zum Senden
+ Kanaele koennen gepeert werden. Hier findest du ggf peers eintraege.
=> Da du den Channel nicht gepostet hast, kann ich nicht sagen, ob er einen peer hat.

Zur vereinfachung werden die Daten/register/peers bei einem getConfig, falls auf ein Device angewendet, immer auch aus allen Kanaelen gelesen.

Sonderfaelle: Nur damit du nicht spaeter einmal alles in Frage stellen musst - wenn ein geraet nur einen Channel hat kann man Kanal und Device in einer FHEM instanz verwalten. Somit ist alles in einem 'fenster' zu sehen, peers, protokol und pairs....
Trifft hier nicht zu.

Also was steht jetzt im 'Button'?

Falls dort kein peer steht mache Folgendes:
attr global mseclog 1
attr global verbose 1
attr <hmlan> loglevel 1

< peerChan kommando>
< getConfig>

und dann die logs aus dem haupt-logfile posten

Gruss
Martin

docb

Alter Vatter, Licht am Ende des Tunnels.
Ich habs nochmal gemacht, ohne Erfolg. Dann shutdown restart, nochmal gemacht... und siehe da... er schnallts!!!
Bei den BA_Taster_Btn_01 und 02 ist der Vact_BA_Taster drin!
JUHEEEEEEE!
So, jetzt noch eine Verständnisfrage und eine neue und du bist mich hoffentlich los ;-)
Verständnisfrage: das notify lasse ich auf den BA_Taster_Btn_01 - der Vact ist ja nur dazu da um quasi einen Empfänger vorzugauckeln und ein ACK zu senden.
Erweiterte Frage: ich lese bei den Readings des BA_Taster_Btn_01 jetzt so tolle sachen wie R-dblPress 0s und R-longPress 0,4s.
Könntest Du mir bitte eine Notify-Beispiel aufzeigen, wie ich so einen doppelten oder langen Tastendruck nutzen kann?
Wenn du darauf keinen Bock mehr hast, kein Problem - herzlichen Dank für deine ausdauernde Hilfe!!! Echt großes Kino!
Beste Grüße
Doc


I love FHEM!

martinp876

Hi,

super.
ja, den Notify wuerde ich so nahe wie moeglich an der Quelle lassen. Ihm auf den virtuellen zu legen bringt keine Vorteile.

Zu den Registern: Das sind Einstellungen - und mangles Optionen in FHEM werden sie in Readigns dargestellt. Also erst einmal macht es keinen Sinn direkt auf die Register ein notify zu setzen. Diese Werte werden von dir per Hand geaendert.

Im Detail Double Press, meine interpretation: HM buttons generieren keinen trigger bei Double-press. Man kann aber einstellen, dass ein 2. Trigger ignoriert wird, sollte er zu schnell kommen. Du kannst also eine Mindestzeit zwischen gültigen Triggern programmieren.

Long: Hier kannst du die Zeit programmieren, ab wann es ein long-press ist. Ich denke es ist auch die Zeit, in der die long-press trigger wiederholt werden.

Um long-press zu testen mache einfach einen und schau dir die Trigger an, die FHEM vermeldet.
Das sollten sein
<button_name> trigger:Long_<$no> # mit der Nummer des Drueckens!
<button_name> Long <no> # mit der Nummer der wiederholung!

Gruss Martin

p.s. HM devices koennen selbstaendig zwischen long und short unterscheiden - aberdirekt peeren willst du nicht...

docb

Ok - die habe ich ausgelesen und mein notify angepasst:

define no_BA_Taster_on notify BA_Taster_Btn_01:Short.* set Yamaha_Z2 on
define no_BA_Taster_on_long notify BA_Taster_Btn_01:Long.* set TagNacht on

Die Schaltung funktioniert auch - allerdings bekomme ich jetzt kein ack mehr. Wenn ich

define no_BA_Taster_on notify BA_Taster_Btn_01:Short* set Yamaha_Z2 on
define no_BA_Taster_on_long notify BA_Taster_Btn_01:Long* set TagNacht on

Also jeweils zwischen Short/Long und * keinen . setze, funktioniert zwar die Schaltung nicht, aber ich bekomme ein ack. Ich muss gestehen, dass ich das mit der Ergänzung Long/Short per Try und Error und ein paar anderen Forumseinträgen gebastelt habe, also keine Ahnung habe, was das genau macht.

Mal die Events:
2013-06-20 11:40:05 CUL_HM BA_Taster_Btn_01 Long 1-8440- (to Vact_BA_dev)
2013-06-20 11:40:05 CUL_HM BA_Taster_Btn_01 trigger: Long_3
2013-06-20 11:40:05 CUL_HM BA_Taster battery: ok
2013-06-20 11:40:05 CUL_HM BA_Taster BA_Taster_Btn_01 Long 1-8440- (to Vact_BA_dev)
2013-06-20 11:40:21 CUL_HM BA_Taster_Btn_02 Long 1-8440- (to Vact_BA_dev)
2013-06-20 11:40:21 CUL_HM BA_Taster_Btn_02 trigger: Long_1
2013-06-20 11:40:21 CUL_HM BA_Taster battery: ok
2013-06-20 11:40:21 CUL_HM BA_Taster BA_Taster_Btn_02 Long 1-8440- (to Vact_BA_dev)
2013-06-20 11:40:21 CUL_HM BA_Taster_Btn_02 Long 2-8440- (to Vact_BA_dev)
2013-06-20 11:40:21 CUL_HM BA_Taster_Btn_02 trigger: Long_1
2013-06-20 11:40:21 CUL_HM BA_Taster battery: ok
2013-06-20 11:40:21 CUL_HM BA_Taster BA_Taster_Btn_02 Long 2-8440- (to Vact_BA_dev)
2013-06-20 11:40:21 CUL_HM BA_Taster_Btn_02 Long 3-8440- (to Vact_BA_dev)
2013-06-20 11:40:21 CUL_HM BA_Taster_Btn_02 trigger: Long_1
2013-06-20 11:40:21 CUL_HM BA_Taster battery: ok
2013-06-20 11:40:21 CUL_HM BA_Taster BA_Taster_Btn_02 Long 3-8440- (to Vact_BA_dev)

Vielleicht wirst du schlau daraus...
Viele Grüße
doc
I love FHEM!

martinp876

von wem bekommst du kein ack?

Die notifies sind wie sehr viel in fhem regilar expressions. Die sind SEHR komplex, aber einen einfachen level kann man sich erarbeiten.

. ist ein beliebiges Zeichen
* ist beliebig viele Wiederholungen des elements vorher
.* ist demnach eine beliebige Zeichenkette
a* waere eine beliebig lange Folge von 'a' also 'aaaaa' 'a'...

Ein problem beim parsen sind immer blanks, da diese gleichzeitig trennzeichen sind. Daher sollte man blanks mit '.' ersetzen, dann weiss FHEM, dass der String weitergeht.

BA_Taster_Btn_01 trigger: Long_3
BA_Taster_Btn_01 Long 1-8440- (to Vact_BA_dev)

sind 2 Events, die beim Druecken des Tasters kommen koennen.

BA_Taster_Btn_01              ist der Name und
Long 1-8440- (to Vact_BA_dev) oder
trigger: Long_3
sind die events.

Diese werden immer zusammengebaut mit
name:event
das ist in commandref notify beschrieben.

regexp ist 'allgemeinwissen' und man findet endlos viel im Internet, daher beschreibt es fhem nicht.

dass
BA_Taster_Btn_01:Long*
funktioniert klingt seltsam da es als event auf Long Lon oder Longggggg triggern sollte, nicht aber auf "Long 1-8440- (to Vact_BA_dev)"

Long.1-.*
findet also den ersten 'press' deines long: "Long 1-8440- (to Vact_BA_dev)"
Long.1.*
findet
"Long 1-8440- (to Vact_BA_dev)"
"Long 10-8440- (to Vact_BA_dev)"
"Long 11-8440- (to Vact_BA_dev)"
"Long 100-8440- (to Vact_BA_dev)"
....

Also schaue dir an, welche Zeichen in regexp sonderfunktionen haben, das sind noch viele mehr...

das mit dem ack habe ich nicht verstanden
Gruss
Martin

docb

Oh mann, warum ist das nur alles so schwierig. Ich glaube ich bin ein wenig vom fhem-pech verfolgt. Könnte ja auch mal gleich was klappen ;-)
Danke für die Erklärung, habe alles soweit verstanden und die Schaltungen funktionieren.
Ich bekomme bei einem langen Tastendruck allerdings kein ack zurück, dh. der Schalter blinkt orange rot. Bei den kurzen funktioniert es meistens und blinkt orange grün (aber bei weitem nicht immer). Muss ich für die langen noch irgendetwas machen?
viele Grüße
doc
I love FHEM!