Mehrfachbelegung von von HM-LC-Sw1PBU-FM

Begonnen von Abraxsas, 03 März 2018, 12:37:56

Vorheriges Thema - Nächstes Thema

Abraxsas

#15
der zweite Trigger kommt vom zweiten Druck auf den Schalter... Das Notify soll nur erkennen das die Deckenlampe schon an ist und dann die Steckdose schalten, die übrigens nicht von HM ist, sondern ne einfache vom Obi

Otto123

Man könnte ein Reading im ersten Aktor modulo 2 zählen lassen...
Da habe ich jetzt bloß Pseudo CodeSchalter_Wand_Wohnzimmer:(on|off) {"setreading Schalter_Wand_Wohnzimmer moduloreading (modulo 2)";; if(ReadingsVal("Schalter_Wand_Wohnzimmer","moduloreading","") eq (modulo 2)){fhem("set myITSwitch $EVENT")}}

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

martinp876

ok, ohne HM auch kein peeren. Dann ist das Notify der korrekte Weg

Abraxsas

Also ich habe folgenes versucht, somit schaltet es an und aus (gemeinsam)

DEF Schalter_Wand_Wohnzimmer:.* {if(Value("Schalter_Wand_Wohnzimmer") eq "on") {fhem("set myITSwitch on")}else{fhem("set myITSwitch off")}}


Ich bekomme nur die UND verknüpfung nicht hin, mein Ansatz war


DEF
Schalter_Wand_Wohnzimmer:.* {if(Value("Schalter_Wand_Wohnzimmer") eq "on" && Value("deviceMsg:) eq "on" {fhem("set myITSwitch on")}else{fhem("set myITSwitch off")}}


klappt nicht da bleibt myIT Switch aus

Pfriemler

Hier is ja der Bär los ... also ...
1. peering hätte auch so nicht geklappt - der Schalter ist ein Sw1PBU, dessen Tasten self01 und self02 nur mit dem eigenen Gerät peeren
2. Zur Eräuterung: Mein Vorschlag beruht darauf, den Wandaktor bei einem langen Tastendruck nicht dauerhaft einzuschalten, sondern für eine maximale Laufzeit (ca 31 Stunden sind möglich). Bei Beleuchtung ist das eigentlich wie Dauerbetrieb. Bei Zeitbegrenzung wechselt das reading "timedOn" von "off" auf "running". Ein Notify wertet das aus und schaltet die Steckdose dann ein, anderenfalls aus, was aber bedeutet, dass die Stehlampe auch beim Ausschalten des Deckenlichts ausgeht. Das ist eben der Nachteil.

3. Es gibt noch eine weitere Lösung: Den Austausch des Sw1PBU durch einen Sw2PBU. Der erste Kanal schaltet die Deckenlampe, der zweite schaltet nix, aber ein Notify zieht den Zustand der Schaltsteckdose dem des zweiten Aktorkanals nach.
Leider geht dabei die Haptik flöten, denn hier wird auf einer Wippenseite der zugehörige Aktor nur getoggelt. Oben würde dann bspw. das Deckenlicht ein-aus, unten die Stehlampe ein-aus geschaltet.

4. Ich würde mal die Quotes sortieren, und deviceMsg ist ein Reading (ohne Gewähr):

Schalter_Wand_Wohnzimmer:.* {if(Value("Schalter_Wand_Wohnzimmer") eq "on" && ReadingsVal("Schalter_Wand_Wohnzimmer","deviceMsg","") eq "on (to vccu)") {fhem("set myITSwitch on")}else{fhem("set myITSwitch off")}}

deviceMsg liefert eben nicht nur "on" oder "off" ... zumindest bei mir ...
Allerdings weiß ich noch nicht was damit gewonnen sein soll.
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Otto123

Nochmal mein regEx von ganz oben in Erinnerung: Schalter_Wand_Wohnzimmer:.* ist aus meiner Sicht total kontraproduktiv. Da muss das notify 5 mal anspringen! Ich würde immer minimal triggern! bei mir liefert der Schalter einen sauberen on bzw. off Event!
Schalter_Wand_Wohnzimmer:(on|off)

Wenn ich heute noch etwas Zeit habe denke ich nochmal über modulo 2 nach :)
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

Abraxsas

#21
Gut einverstanden... was vielleicht auch ne möglichkeit wäre ist eine variable durch tastenimpulse zählen zu lassen und dann nach vaiabelen wert zu schalten... Ich bin in Perl nicht wirklich fit... aber müssete doch möglich sein also

On = x+1 off x-1

In Basic käme dann danach ein Select Case... gibt es sowas in Perl?

Wobei man eben damit leben muss das der aktor direkt schaltet.

Otto123

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

Ellert


Pfriemler

Erst hä? dann ah!
In der Tat könnte man als Trigger für das DOIF den Schaltzustand des Aktors nehmen und Mehrfachbetätigungen "in der gleichen Richtung", also ein wiederholtes gemeldetes "on" oder "off" auf den Stehlampenaktor nachziehen.
Es bleibt aber einfach eine Unwägbarkeit, die die praktische Nutzung vermiesen könnte: Wann - außer der gezielten Betätigung des Wandschalters - der Aktor noch zusätzlich ein Status(update) sendet, bleibt offen. Nicht ohne Grund wird für HomeMatic, wo es gern mal mehr Statusmitteilungen als nötig gibt (Stichwort: actCycle), immer ein "event-on-change-reading" als Grundeinstellung empfohlen, was die hier diskutierte Notify-oder DOIF Lösung auf den Status allein ohnehin unmöglich machen würde. Soll heißen:
Das DOIF oder eine Notifykonstruktion so zu bauen, dass erst die zweite Off-Meldung des Wandaktors auch ein Ausschalten der Stehlampe bewirkt, wie auch beim Einschalten, wäre problemlos machbar, aber die Konstruktion wird zwangsläufig ein Eigenleben entwickeln - soll heißen, die Stehlampe wird bei eingeschaltetem Deckenlicht nach einer nicht vorhersehbaren Zeit spontan von allein angehen, oder eben aus. Mir wär' das alles nix... Aber bitte, ein Experiment kann höchstens schiefgehen.

Bin gespannt, wie der TE das Problem schließlich tatsächlich lösen wird ...
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Abraxsas

#25
Ich hab für mich ne Lösung gefunden (glaube ich) Leider komme ich mit dem Variablen nicht zurecht...

als versuch hab ich 2 Dummy´s (Schalter) und ein Notify welches in welchem die Variable $Wert um eins erhöhr werden soll wenn Schalter 1 auf on gedrückt wird und um -1 wenn off geschaltet wird. Das ergebnis soll als state ausgegeben werden.

my $Wert = ReadingsVal("schalter","$EVENT","0");
if($EVENT eq "on"){
$Wert = $Wert + 1;
fhem ("setreading testzaehler state $Wert")}
if($EVENT eq "off"){
$Wert = $Wert - 1;
fhem ("setreading testzaehler state $Wert")}}


Problem ist jetzt das der "state" beim ersten on auf eins zählt aber dann bei off auf -1 springt wo eigentlich dann wieder 0 stehen müsste.

Hat da jemand eine Idee?

nils_

Zitat von: Abraxsas am 09 März 2018, 11:11:09
Problem ist jetzt das der "state" beim ersten on auf eins zählt aber dann bei off auf -1 springt wo eigentlich dann wieder 0 stehen müsste.

Hat da jemand eine Idee?
ja hab ich :)

du legst die variable jedes mal _neu_ an.
my $Wert;
vermutlich wird sie mit 0 vorbelegt  ::)
dann führst du deine rechenoperation aus, also +1 bzw. -1
und dann schreibst du diesen wert in deinen testzähler. er wird also nie erhöht, zB bei einem zweiten 'on', sondern es wird immer eine 1 (bei on) bzw. -1 (bei off) gesetzt.

änderung:
vor dem rechnen, den aktuellen wert auslesen.
dann verändern (+ bzw -) und dann wieder in deinen testzähler schreiben.


//edit:
und während ich so schrieb, änderst du deinen code  :P ;)
viele Wege in FHEM es gibt!

Abraxsas

#27
Ja sorry hatte gesehen das ich versehentlich den Falschen kopiert hatte  :o

ändert aber meine ich nichts an der tatsache... ;-)
Ok was du sagst macht auf jeden fall sinn, ich frage mich gerade wie ich das anstelle. Also ich muss sie ja deklarieren da bekommt sie den wert "0", wie kann ich sie dann auslesen sie hat ja dann schon wieder einen wert, bzw der wert davor wird doch überschrieben.

ahh teufelskreis


Vergess es, geistige Umnachtung... ich muss ja den Zähler und nicht die Variable neu auslesen... A
:-X

Abraxsas

ahh ich komm nicht weiter...


$my $Wert ;
if(ReadingsVal("schalter","state","") eq "on"){
$Wert = ReadingsVal("testzaehler","state","") + 2;
fhem ("setreading testzaehler state $Wert")}
if($Wertschalter eq "off"){
$Wert = ReadingsVal("testzaehler","state","") - 1;
fhem ("setreading testzaehler state $Wert")}]


Wäre jemand so nett und könnte mal drüber schauen, es zählt einfach nicht und ich komme auf keinen grünen zweig.

Otto123

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