Mehrfachbelegung von von HM-LC-Sw1PBU-FM

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

Vorheriges Thema - Nächstes Thema

Abraxsas

Hallo zusammen,

vielleicht habt ihr einen heißen Tip für mich. Ich habe einen HM-LC-Sw1PBU-FM (Unterputzschaltaktor) mit dem ich eine Deckenlampe schalte. Folgendes stell ich mir vor.
Einmal on: Deckenlicht an
zweites on: Deckenlicht UND Stehlampe an (über eine schaltbare steckdose)
Einmal Off: deckenlicht aus
zweites off: Stehlampe aus,

ich habe hier einiges von Longpress usw gelesen aber es scheint nicht genau auf mein Problem zu passen.

Ist so eine Schaltung möglich?
Vielen Dank schonmal für die Hilfe
Gruß
Abraxsas

Pfriemler

#1
Schon oft gefragt, aber selten zufriedenstellend gelöst.
Die von Dir gewünschte Schaltfolge ist so n.m.E. gar nicht machbar. Was Du Dir wünscht, entspricht eher einem Schaltrelais mit zwei Ausgängen und vier Stellungen (0, 1, 1+2, 2). Sowas gab es früher mal als Stromstoßschalter.

Allenfalls wäre Doppelklick möglich.

Primär geht es aber auch erst mal um eine Fernbedienbarkeit eines entfernen Aktors. Auch das ist prinzipiell nicht möglich, weil die Wandschalter mit integrierten Tasten deren Betätigung nicht nach außen melden. Für den von Dir genannten Schalter gibt es eine alternative Firmware, die das könnte - die draufzubekommen erfordert aber Garantieverzicht und ein gerüttelt Maß an Wissen und Experimentierfreude.

Sonst bliebe die Sache mit dem Longpress. Auch das geht nicht ohne aktive FHEM-Hilfe. Man kann den Schalter so programmieren, dass er bei long und short jeweils leicht unterschiedliche Zustände annimmt, die FHEM erkennt und zur Schaltung des entfernten Aktors verwendet. Machbar wäre hier eine Schaltfolge
- kurz ein = Deckenlampe ein, Stehlampe aus
- lang ein = Deckenlampe und Stehlampe ein
- kurz oder lang aus = beides aus.

Die einfachste Lösung wird ein zweiter Sender für die Stehlampe sein.
"Ä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

#2
Hmm ne einen Stromstoßschalter meine ich nicht... (gut der funktioniert ähnlich)

vielleicht hab ich mich jetzt missverständlich ausgedrückt. Ich stells mir so vor:

Ich schalte die Deckenlampe über den Schalter, den Schaltbefehl bekommt FHEM mit und setzt den Status der Deckenlampe auf  "an". Jetzt kommt ein zweiter Befehl vom Schalter (nochmal "an"),
und jetzt sieht FHEM Deckenpampe ist "an", dann muss jetzt auch Stehlampe "an".

Eigentlich ist es eher die Frage ob man das "An" Signal weiterverwenden kann.

Umgekehrt dann das ganze auch für "aus".

Ich hoffe so ist es eindeutiger...


Otto123

#3
Zitat von: Abraxsas am 03 März 2018, 13:18:34
Eigentlich ist es eher die Frage ob man das "An" Signal weiterverwenden kann.
Kann man, aber der Schalter liefert kein zweites an wenn schon an :)erst nach Verzögerung von > 3 sec ein zweites an.

So was kann man übrigens prima selbst austesten: https://wiki.fhem.de/wiki/Event_monitor

Es bleibt nur das was Pfriemler schon vorgeschlagen hat. Glaub mir der hat die Frage schon oooft beantwortet  ;)

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

Abraxsas

ahhh genau das is die antwort die ich Brauchte... aber leider nicht wollte, gut man kann nicht alles haben.

Vielen Dank nochmal

Hollo

Der 2. ist also ein getrennter Aktor.
Probiere es doch mal aus...
Lege ein notify auf "Lichttaster EIN" an und setze damit den Steckdosenaktor EIN, sofern die Deckenlampe schon EIN ist.

Ob das geht, weiss ich nicht...
gibt es überhaupt ein notify und ist das ganze schneller, als der state-Wechsel, weil sonst würde die Bedingung ja auch beim ersten Tasten wahr werden.
FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"

Abraxsas

ja genau, eine geschaltete Steckdose wie oben beschrieben,
Ich habe jetzt gerade den EventMonitor bemüht,

Ich werde das jetzt mal testen

2018-03-03 12:38:29 LightScene Scene_Wohnzimmer Schalter_Wand_Wohnzimmer.state:   Created by potrace 1.8, written by Peter Selinger 2001-2007                   
2018-03-03 12:38:29 CUL_HM Schalter_Wand_Wohnzimmer deviceMsg: on (to nanocul868)
2018-03-03 12:38:29 CUL_HM Schalter_Wand_Wohnzimmer level: 100
2018-03-03 12:38:29 CUL_HM Schalter_Wand_Wohnzimmer pct: 100
2018-03-03 12:38:29 CUL_HM Schalter_Wand_Wohnzimmer on
2018-03-03 12:38:29 CUL_HM Schalter_Wand_Wohnzimmer timedOn: off
2018-03-03 12:38:35 LightScene Scene_Wohnzimmer Schalter_Wand_Wohnzimmer.state:   Created by potrace 1.8, written by Peter Selinger 2001-2007                   
2018-03-03 12:38:35 CUL_HM Schalter_Wand_Wohnzimmer deviceMsg: on (to nanocul868)
2018-03-03 12:38:35 CUL_HM Schalter_Wand_Wohnzimmer level: 100
2018-03-03 12:38:35 CUL_HM Schalter_Wand_Wohnzimmer pct: 100
2018-03-03 12:38:35 CUL_HM Schalter_Wand_Wohnzimmer on
2018-03-03 12:38:35 CUL_HM Schalter_Wand_Wohnzimmer timedOn: off


sehe ich das richtig das ich so zwei "an" befehle hab?

Otto123

Du hast zweimal die taste gedrückt? Oder per FHEM zwei Befehle geschickt?
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


Otto123

Ok, er tut das offenbar wenn man ihm Zeit lässt  :-[
Ich hatte vorhin im Abstand von 1-2 sec gedrückt, da passierte nichts. Bei 5 oder mehr Sekunden geht es.

Und meine Eventmonitor veralbert mich momentan, irgendwie ist derzeit der Browserwurm drin  :'(

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

Abraxsas

:-) die 5 sec reichen auch... ich versuche das ganze jetzt mal in ein Notify zu gießen und dann schauen wir mal

Hollo

Sieht zumindest erstmal nach einer Möglichkeit aus.
Sollte das mit dem state vom 1. Aktor zeitlich nicht klappen, könnte man etwas verzögert einen Dummy setzen, und den dann als Bedingung nutzen.
FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"

Abraxsas

#12
Hmm ich komm da gerade nicht weiter, bzw sehe den Wald vor lauter Bäumen nicht,

ich möchte jetzt rein zum testen beides gleichzeitig anschalten

Notify

Schalter_Wand_Wohnzimmer:deviceMsg:.* {if("EVTPART1" eq "on"){fhem("set myITSwitch on")}}

Habt ihr ne Idee wo der Fehler ist?

Otto123

#13
Gab es den Code auf dem Wochenmarkt?  :P -> if("EVTPART1"  :-[ Du meintest if($EVTPART1 ?

Schalter_Wand_Wohnzimmer:on {if(Value("Schalter_Wand_Wohnzimmer") eq "on"){fhem("set myITSwitch on")}}

Aber das funktioniert nicht, weil das jetzt immer einschaltet. Du musst den Status vorher wissen....

Für ein und aus
Schalter_Wand_Wohnzimmer:(on|off) {if(Value("Schalter_Wand_Wohnzimmer") eq $EVENT){fhem("set myITSwitch $EVENT")}}
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

Es laesst sich sicher ueber notify loesen. Allerdings ist mir noch nicht klar, woran man einen 2. Druck erkennen kann. Was wenn zwischendurch der andere trigger kam?

Ich (wiedermal) würde es ohne Zentrale lösen, mit direktem peering und wie es Pfriemler beschrieben hat. Da hast du die Auswahl:
Sw1 kurz: decke an
Sw1 lang: decke und steh an .... Oder steh an
Sw2 kurz: decke und steh aus ... Oder decke aus
Sw2 lang: steh aus

Du kannst also mit sw1 lang sofort beides einschalten. Oder nur steh.

Falls du es nutzen willst peere sw1 und 2 mit decke und steh. Nenne mit den aktor und ich schicke dir ein template, das du nur aktivieren musst.
Ok, du musst nur noch sagen, was du willst.

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

Abraxsas

#30
ah mist das hab ich nicht korrigiert. Ich wollte erst den Schalter in eine Variable schreiben mit einem ReadingsVal in $Wertschalter, brauch ich aber nicht, ich kann das ja auch direkt einsetzen... dachte ich zumindest.
so sollte es sein:

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

Otto123

#31
Ich würde die "Zählung anders machen. Allerdings verstehe ich den Code und dessen Verwendungszweck noch nicht richtig.
Ich versteh schon das gar nichts geht.  ;D Aber du müsstest Fehler ohne Ende bekommen
Die Zuweisung der lokalen Variablen erfolgt vor dem trigger?  :o
Das "=" ist der Zuweisungs Operator!  :o -> http://perldoc.perl.org/perlop.html#Operator-Precedence-and-Associativity

setreading und dann state setzen? Warum nicht set? Das setzt den state!

Man kann so etwas machen:
set wert {([wert:state] +1)}

set testzaehler {([testzaehler:state] + 2)}
set testzaehler {([testzaehler:state] - 1)}

Und ein if $EVENT ist auch einfacher und Perl braucht man dann gar nicht, die zweite Abfrage ist auch redundant:
schalter:(on|off) IF ($EVENT eq "on") (set testzaehler {([testzaehler:state] + 2)}) ELSE (set testzaehler {([testzaehler:state] - 1)})

Korrektur:  $EVENT muss in "" -> "$EVENT"

Ich hoffe, ich habe jetzt keine Fehler übernommen, ich habe das komplett nicht getestet!  :-[

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

Abraxsas

Hmm ne Fehler gibt es keine... ich bin jetzt nicht mehr zu Hause, ich hoffe ich schaffe es morgen deinen vorschlag umzusetzen. Ich erkläre es morgen mal was ich mir genau vorstelle... Vielen Dank schonmal

Abraxsas

#33
Hmm tuts leider nicht, der Zähler bleibt bei Null... Zum Hintergrund des ganzen,
da ich im Programmieren (wie man sieht) nicht so wirklich fit bin hatte ich gedacht das is alles in möglichst kleine Einzelschritte verpackte...

also 3 Dummy´s Schalter und Schalter 2 (on/off) und den testzähler. Wenn Schalter auf on wechselt dann soll Testzähler um 2 steigen, wechselt schalter auf off dann um -1 sinken.

Schalter 2 soll dann später ober ein weiteres notify je nach wert des testzählers mit geschaltet werden.

testwert = 2 Schalter und Schalter 2 = On
testwert = 1 Schalter aus und Schalter 2 = on
testwert = 0 alles aus.

So war meine ursprüngliche idee

Otto123

ZitatHmm tuts leider nicht,
ist eine völlig ungenügende Fehlerbeschreibung
Hast Du meinen Zähler verstanden und getestet? Also einfach mal per Kommandozeile:set testzaehler {([testzaehler:state] + 2)}
Das Problem: "Mein notify geht nicht" zerfällt immer in zwei Teilprobleme: triggert das notify? Geht mein Code im Ausführunsgteil?

Wie kann man Dir jetzt helfen?

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

Abraxsas

#35
Oh sorry so wars nicht gemeint...

also in der Komandozeile:
set testzaehler {([testzaehler:state] + 2)}
Klappt, der Wert ändert sich

set testzaehler {([testzaehler:state] - 1)}
Klappt auch

Im Notify
schalter:(on|off) IF ($EVENT eq "on") (set testzaehler {([testzaehler:state] + 2)}) ELSE (set testzaehler {([testzaehler:state] - 1)})
Klappt nicht, hier bleibt der testzähler unverändert.

ich dachte eben man müßte es in Perl lösen, da ich im nächsten Schritt den Wert von testzähler auf max 2 begrenzen will, als Fehlerausschluss falls jemand 2 mal auf "on" drückt.

Ich hoffe ich hab es eindeutiger beschrieben?!


Otto123

#36
Gibt es Fehler im Log?

Der Event kommt? Eventmonitor!
Ursprünglich hieß der Schalter nicht schalter  ;)

Das notify wird getriggert? Weil: das IF sollte gehen und irgendetwas müsste es ja machen.

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

Abraxsas

#37
Fehler im Log gibt es nur ich kanns nicht interpretieren:

2018.03.10 20:08:16 3: zaehlen return value: Bareword "off" not allowed while "strict subs" in use at (eval 410) line 1.

2018.03.10 20:08:21 1: ERROR evaluating my $EVENT='on';my $NAME='schalter';my $EVTPART0='on';my $SELF='zaehlen';my $TYPE='dummy';{if(on eq "on"){fhem('set testzaehler 3')}else{fhem('set testzaehler 0')}}: Bareword "on" not allowed while "strict subs" in use at (eval 415) line 1.

2018.03.10 20:08:21 3: zaehlen return value: Bareword "on" not allowed while "strict subs" in use at (eval 415) line 1.


Der Eventmonitor zeichnet nur die beiden Schaltvorgänge:

2018-03-10 20:03:00 dummy schalter off
2018-03-10 20:03:04 dummy schalter on


sieht dann wohl so aus also würde es nicht triggern...

Wenn ich das richtig verstehe

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

Abraxsas

Das Notify...?!

Internals:
   DEF        schalter:(on|off) IF ($EVENT eq "on") (set testzaehler {([testzaehler:state] + 2)}) ELSE (set testzaehler {([testzaehler:state] - 1)})
   NAME       zaehlen
   NR         55
   NTFY_ORDER 50-zaehlen
   REGEXP     schalter:(on|off)
   STATE      2018-03-10 20:08:17
   TYPE       notify
   Helper:
     DBLOG:
       state:
         DBLogging:
           TIME       1520712130.64416
           VALUE      active
   READINGS:
     2018-03-10 20:02:10   state           active
Attributes:
   room       test


hab ich da was falsch verstanden wo dein code rein sollte?!

Otto123

#40
Nein alles richtig, irgendwie hab ich einen Fehler bei dem IF, ich bin am testen...

Edit:
Sorry das $EVENT muss in "$EVENT"
defmod zaehlen notify schalter:(on|off) IF ("$EVENT" eq "on") (set testzaehler {([testzaehler:state] + 2)}) ELSE (set testzaehler {([testzaehler:state] - 1)})


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

Abraxsas

Wahnsinn, funktioniert, Vielen Dank schonmal ich muss jetzt nur noch schauen das ich die Syntax verstehe.
Und eben die Werte auf die Funktionen der Schalter verweise.

:-)
Bin nur leider jetzt eine Woche Dienstlich raus..

aber nochmal vielen Dank

Abraxsas

#42
So ich hab soweit was ich möchte... Kurze zusammenfassung

Zwei Schalter (on|off) als Dummy (schalter, schalter2)

testzähler, hier werden die Schaltvorgänge gezählt (Dummy)

Notify zählen: Druck auf auf Schalter (on) > testzaehler +1, Druck auf schalter (off) testzaehler -1
schalter:(on|off) IF ("$EVENT" eq "on") (set testzaehler {([testzaehler:state] + 1)}) ELSE (set testzaehler {([testzaehler:state] - 1)})

Notify wert: Legt den Schaltstatus fest
testzaehler:state {if($EVENT eq "2") {fhem("set schalter2 on")} if($EVENT eq "0") {fhem("set schalter2 off")}})

Ich hab jetzt noch zwei Fragen, einmal wie kann ich den Max/Min Wert von testzähler auf 2 bzw 0 setzen / begrenzen.

das hab ich jetzt über ein drittes notify grenzen gelöst

testzaehler:.* {if ($EVENT > 2) {fhem("set testzaehler 2")} if ($EVENT < 0) {fhem("set testzaehler 0")} }

Allerdings mit scheint das auf diese weise zu komplex bzw zu aufwendig, deshalb: macht es Sinn es auf diese Weise zu lösen, oder wäre es besser dieses in 99_myUtils.pm zu schreiben bzw. zu programmieren?

Gruß Abraxsas