Mehrfachbelegung von von HM-LC-Sw1PBU-FM

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

Vorheriges Thema - Nächstes Thema

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