HM-PB-6-WM55 <-FHEM-> HM-LC-Sw4-DR: "Echte" Rückmeldung an Taster?

Begonnen von M_I_B, 21 November 2015, 22:59:44

Vorheriges Thema - Nächstes Thema

M_I_B

... schrieb ich doch:

1.:
LongRelease lässt sich ins perl nicht via $EVENT übergeben.

2.:
ReadingsVal/setreading verstehe ich nicht, da ich trotz stundenlanger Suche kein HowTo oder Beispiele habe finden können, die mich die Zusammenhänge hätten erkennen lassen.

Eines von beiden benötige ich, um weiter zu kommen. Da 1. wohl nicht möglich ist und ich 2. nicht verstehe, schmeiße ich erst mal das Handtuch, damit ich hier überhaupt mal weiter komme, den Kram einbauen kann und meine Zicken mich auch noch mal zu Gesicht bekommen.

stromer-12

Zitat von: M_I_B am 27 November 2015, 21:31:04
... schrieb ich doch:

1.:
LongRelease lässt sich ins perl nicht via $EVENT übergeben.
Glaub ich nicht.

Lasse dir in deiner Routine doch die Werte ins Log schreiben mit

Log <verbose-level>, <Text>;
zB:
Log 3, "mySub: Name=".$NAME." EVENT=".$EVENT;

Zitat
2.:
ReadingsVal/setreading verstehe ich nicht, da ich trotz stundenlanger Suche kein HowTo oder Beispiele habe finden können, die mich die Zusammenhänge hätten erkennen lassen.
my $var = ReadingsVal(<Device>,<Reading>,<Default>);
Der Variablen $var wird das <Reading> vom <Device> zugewiesen wenn <Reading> vorhanden, wenn nicht wird der Wert <Default> zugewiesen.
fhem("setreading <Device> <Reading> <Value>");
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

M_I_B

... ja, LOG habe ich inzwischen, aber über Data::Dumper ...

Glaube mir: LongRelease wird nicht erkannt; probier's mal aus ala:
# Aufruf:
define frosch notify Sensor { SetTimerOnTip("Aktor","$EVENT") }

# Sub:
sub SetTimerOnTip($$) {
my ($TARGET,$EVENT) = @_;
if ($EVENT =~ /\LongRelease.*/m ) {
fhem ( "set $TARGET toggle" );
}
}


... wird nicht klappen. Vielleicht gibt es einen anderen Weg, auf das "Release" zu reagieren, aber ich habe keinen gefunden. Auch wenn ich jedesmal mit "print Dumper ("ReVal  = : ".ReadingsVal($TARGET,"state","err"));" nachschaue, was übermittelt wird, taucht das LongRelease nie auf (ja, inzwischen habe ich durch viel Probieren  rausgefunden, wie das ReVal funktioniert). Da kommen lediglich "set_off", "set_on", "off", "on", "set_on-for-timer xxx"... das war's.
Wenn ich daher nur auf das "Long" reagiere, habe ich das Problem, das der Counter so lange hochläuft, wie die Taste gehalten wird. Damit wird das Endergebnis unkalkulierbar.


stromer-12

FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

martinp876

beachte: das "Release" kommt nur, wenn der Button gepeert ist.

M_I_B

@stromer-12:
Warum sollte sie nicht? Die Ausdrücke für Short und Long sind identisch aufgebaut und greifen ja auch.
https://wiki.selfhtml.org/wiki/Perl/Regul%C3%A4re_Ausdr%C3%BCcke#Modifiers
Wäre nett, wenn Du mir bei Irrtum meinerseits erklären möchtest, warum "\/Short/m" und "\/Long/m" greift, hingegen "\/LongRelease/m" nicht. Ich mache ja immerhin erst seit zwei Tagen mit RegEx rum und kann noch nicht alle Feinheiten kennen, welche bezogen auf das Problem da den Unterschied machen.

@martinp876:
... nicht das ich wieder falsch liege: peer = Device <-> FHEM /// pair = Device <-> Device ... Habe ich mir doch richtig gemerkt? Wenn ja...
Beide Geräte sind mit/über FHEM verbunden und nicht direkt, sonst würde ja der Rest auch nicht funktionieren. FHEM selbst erkennt auch die drei verschiedenen Zustände, nur zur Auswertung kann ich im Gegensatz zu den anderen beiden Zuständen den LongRelease nicht greifen, warum auch immer.

martinp876

Zitatpeer = Device <-> FHEM /// pair = Device <-> Device ... Habe ich mir doch richtig gemerkt?
nein. Sind doch alle Kommandos so beschrieben:

hmPairForSev: Device <->FHEM
hmPairserial: Device <->FHEM
PairedTo: Device <->FHEM

peerIDs: Channel<->Channel
peerList: Channel<->Channel
peerChan: Channel<->Channel

ZitatBeide Geräte sind mit/über FHEM verbunden und nicht direkt, sonst würde ja der Rest auch nicht funktionieren
ohne peering kein "Release" für diesen Kanal- period!

ZitatFHEM selbst erkennt auch die drei verschiedenen Zustände,
welche 3?
Zitatnur zur Auswertung kann ich im Gegensatz zu den anderen beiden Zuständen den LongRelease nicht greifen, warum auch immer.
weil es überall so beschrieben ist.
schaue einfach die Events an - wenn beim Press kein Release kommt, kommt kein Release das du auswerten kannst. Du musst also nicht bei der Auswertung suchen sondern der Generierung.

Ich würde immer einen genutzten Button peeren. Wegen Release, wegen der LED, wegen den Wiederholungen, weil es einem System entspricht.
Wenn du nicht Aktor mit Aktor peeren willst baue einen virtuellen Kanal. Der kann ein Kanal der vccu sein oder ein virtuelles Device.

Device<->Device => gibt es nicht


stromer-12

Hallo Martin,

Was mir heute morgen bei den Test aufgefallen ist:

LongRelease wird bei mehrfach gepeerten Devices weiter hochgezählt.
Sollte es beim letzten nicht auch 9_37 sein?

2015.11.28 01:19:34.679 2: xxxx Long 1_37 (to CUL_HM_SW4_01)
2015.11.28 01:19:34.682 2: xxxx trigger: Long_37
2015.11.28 01:19:34.685 2: xxxx trigger_cnt: 37
2015.11.28 01:19:35.031 2: xxxx Long 2_37 (to CUL_HM_SW4_01)
2015.11.28 01:19:35.178 2: xxxx Long 3_37 (to CUL_HM_SW4_01)
2015.11.28 01:19:35.434 2: xxxx Long 4_37 (to CUL_HM_SW4_01)
2015.11.28 01:19:35.686 2: xxxx Long 5_37 (to CUL_HM_SW4_01)
2015.11.28 01:19:35.941 2: xxxx Long 6_37 (to CUL_HM_SW4_01)
2015.11.28 01:19:36.197 2: xxxx Long 7_37 (to CUL_HM_SW4_01)
2015.11.28 01:19:36.451 2: xxxx Long 8_37 (to CUL_HM_SW4_01)
2015.11.28 01:19:36.738 2: xxxx LongRelease 9_37 (to CUL_HM_SW4_01)
2015.11.28 01:19:36.982 2: xxxx LongRelease 10_37 (to vccu)
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

martinp876


M_I_B

@martinp876:
... ok, habe mir jetzt eine Notiz an die Wand gepappt, damit ich nicht immer die Ausdrücke peer und pair verwechsle; scheiß Alzheimer  ::)
Mit den drei Stati meinte ich "Short", "Long", "LongRelease".

@all
Aber ist auch überholt; habe fertig  ;D
Was jetzt noch stört und was ich per Klimmzug eliminieren musste ist, das die SUB bei jedem Tastendruck genau 3 mal durchlaufen wird. Kann man das irgendwie verhindern oder ist das Systembedingt?

frank

1. wie immer erst auf den eventmonitor schauen, um alle events zu sehen.
2. je nach eventmonitor eventuell die regex vom notify spezieller gestalten.
3. und/oder mit event-on-change die eventgenerierung beeinflussen.
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

dev0

Schau Dir die Events an, die Deine Sub triggern (ggf. in der Sub mitloggen) und dann die Events weiter einschränken auf die das notify reagieren soll.
In dem folgenden Beispiel würde die Sub nur aufgerufen, wenn das Device "Sensor" einen Event auslöst, in dem "Long 1_.*" oder "Short" vorkommt.
define frosch notify Sensor:(Long.1_.*|Short) { SetTimerOnTip("Aktor","$EVENT") }


M_I_B

... ich hatte und rufe die SUB ja auf mit
define di_1 notify EG_FL_6CH_CH1 { SetTimerOnTip("$NAME","KG_ZS_4CH_CH1","$EVENT") }
Damit wird die SUB angesprungen, egal ob da Short, Long oder LongEvent auftaucht. Aber ich werde es auch mal auf Deinem Weg probieren beim nächsten Sensor/Aktor. Denn dieser hier wird heute in den Zählerschrank gestopft und der Taster an der Haustür angepappt, damit meine MamaZicke wieder etwas geschmeidiger wird wenn sie sieht, für was sie die letzen Tage auf meine Präsenz verzichten musste ;)

Wie gesagt habe ich nun eine funktionierende Lösung. Sicherlich nicht besonders elegant, aber sie funktioniert genau so, wie ich mir das vorgestellt habe (mit Ausnahme des jeweils dreifachen Durchlaufens der SUB).

Weg ist:

HM-PB-6-WM55 --> FHEM --> HM-LC-Sw4-DR
ITS-150 (A-III)  --> FHEM --> HM-LC-Sw4-DR
HM-PB-6-WM55 <-- FHEM-Dummy (LED)

Nachträglich lasse ich den Handsender noch auf ein Dummydevice in FHEM laufen, um darüber kurze und lange Tastendrücke auszuwerten, um so auch damit den Teimer aktivieren zu können.
Und wenn das fertig ist, kümmere ich mich um die entsprechende Darstellung in FEHM, damit man nicht nur ON/OFF sehen kann, sondern auch den Timerbetrieb erkennt und setzen kann... Aber das hat Zeit.

M_I_B

... darf ich eben noch mal eine DummFrage loswerden?!

Warum taucht im Folgenden beim Klick auf einen der beiden Timereinträge an Stelle des Icons (message_socket) kurz "set_05 MIN" auf, anschliessend aber wieder das Icon "message_socket" und nicht wie gewünscht "general_an_fuer_zeit"???

attr KG_ZS_4CH_CH1 eventMap /on:AN/on-for-timer 300:05 MIN/on-for-timer 1800:30 MIN/off:AUS
attr KG_ZS_4CH_CH1 devStateIcon AN:message_socket@green \d+.*/MIN:general_an_fuer_zeit@orange AUS:message_socket@gray
... blablub ...
attr KG_ZS_4CH_CH1 webCmd AN:05 MIN:30 MIN:AUS

stromer-12

Bei Befehlsübermittlung wird ein set_ vorangestellt, bis der Befehl bestätigt wurde.

Steht in deinem STATE 5 MIN drin?
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL