[gelöst] Hilfe beim ersten DOIF // notify // mit zusätzlich bedingung

Begonnen von bastibasti, 31 Juli 2018, 14:25:06

Vorheriges Thema - Nächstes Thema

bastibasti

Hi,

also ich habe einen Button, und ein Relais die als getrennte Geräte erkannt sind.

Button: ESPEasy_ESP_Easy_R0Testdevice_BTN   BTN: off

Relais:  Sonoff01_R5Deckenlampe_Relais

bei einem tastendruck verändert der wert BTN seinen status (Bistabil) also draufdrücken: ON nochmal draufdrücken: OFF

Ich müsste nun:

- bei event on change reading:
- wert von Sonoff01_R5Deckenlampe_Relais Relais einlesen
- und auf den entgegengesetzten wert gesetzt.


Hat jemand vielleicht ein codeschnipselchen für mich?



MadMax-FHEM

Also mit sowas wie "event-on-chenge-reading" musst du aufpassen.

Du meinst (vermutlich) wenn sich der Wert ändert, dann...

Es ist aber auch ein Attribut das du setzen kannst und damit beeinflusst wann ein Event generiert wird und wann nicht (obwohl vielleicht neue aber gleiche Werte von einem Sensor kommen)...

So das nur dazu...
...jetzt zurück zum Eigentlichen:

Warum musst du den Zustand von "Sonoff01_R5Deckenlampe_Relais Relais" einlesen?
Du bekommst doch (so hab ich das verstanden) ja on/off vom Button!?

D.h. du kannst doch "Sonoff01_R5Deckenlampe_Relais Relais" dann jeweils auf "on/off" setzen...

Ansonsten hast du es "falsch" beschrieben... ;)

Ohne Abfragen passiert schlimmstenfalls, dass du das Relais noch mal ausschaltest oder halt noch mal einschaltest...

...aber wahrscheinlich kann dein Relais "nur" toggle!?

Hilfreich wären lists der betroffenen Geräte:

list ESPEasy_ESP_Easy_R0Testdevice_BTN

bzw.

list Sonoff01_R5Deckenlampe_Relais

in die fhem Web-Zeile Enter und in code-Tags (# über den Smilies) hier posten.

Eigentlich reicht auch ein notify...

Das kannst du dir ganz einfach über den Event-Monitor selber anlegen (lassen).
Eventmonitor öffnen warten bis das gewünschte Event des Button erscheint, markieren und auf "create/modify" und dann halt entsprechend die Deckenlampe ein/ausschalten.

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

bastibasti

Hi,

danke für den Hinweis mit dem event on change reading

Warum musst du den Zustand von "Sonoff01_R5Deckenlampe_Relais Relais" einlesen?
Du bekommst doch (so hab ich das verstanden) ja on/off vom Button!?


Genau das ist ja das Problem! :-)
Also das Relais ist ein ESPEasy, das zusätzlich eine eingebaute Taste hat. Diese Schaltet über eine interne Rule das Relais.

Folgende Fehlschaltung ist dann zB Möglich:

Button1:  ESPEasy_ESP_Easy_R0Testdevice_BTN   BTN: on
=> Licht (Relais) = 1
Button2 (Intern) => 0
Licht (Relais) =0

Jetzt ist allerdings der Status des Button1 != Relais . Dh. Wenn der nutzer jetzt auf BTN1 drückt, wird dieser auf 0 Gesetzt, und das Relais auf 0 gesetzt -> Es passiert für den Nutzer augenscheinlich nichts

Daher hatte ich an so was gedacht

DO IF (ESPEasy_ESP_Easy_R0Testdevice_BTN   BTN: CHANGED)
IF Reading(Relais)=1 then
       Relais=0
Else
       Relais=1
Endif

DH. Unabhängig vom sollwert der vom Button vorgegeben wird, wird das relais quasi getoggled

MadMax-FHEM

Ah, ok.

Wenn du noch die lists lieferst kann man genauer helfen...

Es reicht aber trotzdem ein notify ;)

define nToggleRelais notify ESPEasy_ESP_Easy_R0Testdevice_BTN:(on|off) {if(ReadingsVal("Sonoff01_R5Deckenlampe_Relais", "READING-KENNE-ICH-JETZT-NICHT-WEIL-LIST-FEHLT", "na") eq "ON-WERT") {fhem("set Sonoff01_R5Deckenlampe_Relais off") } else { fhem("set Sonoff01_R5Deckenlampe_Relais on") } }

oder so ähnlich.
Kann es grad nicht testen bzw. fehlen ja immer noch die lists ;)

Statt "nur" else geht nat auch elsif mit einer anderen Bedingung.
Wenn allerdings keine passt passiert auch nix.

Evtl. geht das setzen auch durch nutzen von FILTER besser/schöner (nutze ich aber nicht)...
...und wie so oft: es gibt bestimmt noch mind. 1000 andere Möglichkeiten...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

bastibasti

sorry hatte ich überlesen

Internals:
   DEF        192.168.123.160 80 espBridge Sonoff01_R5Deckenlampe_Relais
   ESP_BUILD  20000
   ESP_BUILD_GIT v2.0-20180311
   ESP_BUILD_NOTES  - Mega
   ESP_NODE_TYPE_ID 17: ESP Easy Mega
   ESP_SLEEP  0
   ESP_UNIT   0
   ESP_VERSION 2
   HOST       192.168.123.160
   IDENT      Sonoff01_R5Deckenlampe_Relais
   INTERVAL   300
   IODev      espBridge
   LASTInputDev espBridge
   MSGCNT     9
   NAME       ESPEasy_Sonoff01_R5Deckenlampe_Relais
   NOTIFYDEV  global
   NR         27
   NTFY_ORDER 50-ESPEasy_Sonoff01_R5Deckenlampe_Relais
   PORT       80
   STATE      off
   SUBTYPE    device
   TYPE       ESPEasy
   VERSION    1.39
   espBridge_MSGCNT 9
   espBridge_TIME 2018-07-31 15:36:43
   READINGS:
     2018-07-31 15:36:43   Relais          off
     2018-07-31 15:33:34   presence        present
     2018-07-31 15:36:43   state           Rel: off
   helper:
     fpc        1533043714
     pm:
       Encode     1
       JSON       1
     received:
       Relais     1533044203
Attributes:
   IODev      espBridge
   Interval   300
   eventMap   /gpio 12 on:on/gpio 12 off:off/
   group      ESPEasy Device
   presenceCheck 1
   readingSwitchText 1
   room       ESPEasy
   setState   3
   stateFormat {ReadingsVal($name,"presence","") eq "absent" ? "absent" : ReadingsVal($name,"Relais","")}
   webCmd     on:off:on-for-timer 10

MadMax-FHEM

#5
Und von dem Button!? ;)

Vermutlich in dem Codeschnipsel "Reading-das-ich..." ersetzen durch "Relais", wenn das den gewünschten/aktuellen Zustand zeigt...

Und "On-Wert" ist vermutlich "on"...

Evtl. auch mal einen Auszug aus dem Eventmonitor posten, wenn der Button gedrückt wird/wurde...

Aber du darfst/solltest auch gerne mal testen was geht...
...den Beginn des notify (also define und Trigger) kannst du ja über den Eventmonitor anlegen (lassen) und danach dann mal den "Code" von mir mit den Anpassungen auf deine Umgebung...

Wenn was nicht geht gerne wieder melden...

Oder warten bis jemand mit einem DOIF-Beispiel hilft oder noch einer anderen (von den 1000 möglichen ;)  ) Idee...

Viel Erfolg, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

bastibasti

Hallo Joachim,

Danke für deine ausführliche Erklärung.  Ich bin Grad unterwegs kann es erst wieder heute abend testen. Doif oder nicht ist mir egal. Als kompletter noob versuche ich erstmal einen ersten weg zum Ziel zu finden.  Ich meld mich nachher nochmal wenn ich am PC sitze.

Grüße

Basti

MadMax-FHEM

Hi Basti,

gerne!

Gut, dass du mir nicht "übel nimmst", dass kein fertiger Code rauskommt (wobei fast ja ;)  )...

Kommt durchaus vor hier...

Aber ich denke, Dinge/Code was auch immer was man selbst gemacht hat und somit (halbwegs) verstanden hat lässt sich besser warten und erweitern als fertige Beispiele...

Ein Tipp noch (hoffe es stimmt, da ich es nicht verwende): es gibt auch noch "set-magic" damit kann man sowas machen [Gerät:Reading] eq "on" etc. statt ReadingsVal-Abfrage...
Mehr dazu in der commandref (würde ich vermuten)...

Noch ein Tipp: wenn ich ein notify etc. anlege, dann packe ich die "Funktionalität" lieber in eine Funktion/Sub in myUtils.
Beginnend mit einer Logausgabe um zu sehen, ob das notify (oder was auch immer) überhaupt auslöst...
https://wiki.fhem.de/wiki/99_myUtils_anlegen

Aber auch hier: ist Geschmackssache und jeder macht es anders... ;)

Heut Abend bin ich allerdings weg/unterwegs ohne groß Zugriff...
Aber das schaffst du schon...

Viel Spaß und Erfolg, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Otto123

Ich steure mal ein paar konkrete Links bei
https://wiki.fhem.de/wiki/Notify mit Anleitung zur Fehlersuche
https://wiki.fhem.de/wiki/Event_monitor Wie von Joachim schon erwähnt um sich Geräte einfach selbst erzeugen lassen
https://commandref.fhem.de/commandref_DE.html#set zu set magic :)

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

bastibasti

mmhh der such-regexp funktioniert anscheinend nicht.

kann man das was ich da im screenshot gemacht habe nicht irgendwie eleganter lösen?

MadMax-FHEM

Poste dann doch mal Ausgaben des Eventmonitors wenn du den Button drückst.

Du kannst auch einfach im Eventmonitor die Zeile markieren und dann create/modify das notify erzeugen (lassen) und dann einfach das "on" bzw. "off" (je nachdem was du erzeugt hast) um das jeweils andere erweitern...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

bastibasti

Hi,

sorry für die späte Rückmeldung, ich hatte da noch einige Dinge zu testen bevor ich wieder Poste.

1) Device Namen: Habe ich jetzt alle ESPEasy Komponenten umbenannt. Kürzere Namen für mehr Übersichtlichkeit

ESPEasy_R5_Deckenlampe_Relais
|- Kommt vom FHEM Modul
              |- R5_Deckenlampe Room5 Deckenlampe, reicht als beschreibung
                                         |- Relais sollte klar sein

2) um auf meinen Ursprünglichen Thread zurückzukommen

define nToggleRelais notify ESPEasy_ESP_Easy_R0Testdevice_BTN......(on|off) {if(ReadingsVal("ESPEasy_Sonoff01_R5Deckenlampe_Relais", "Relais", "na") eq "off") {fhem("set ESPEasy_Sonoff01_R5Deckenlampe_Relais on") } else { fhem("set ESPEasy_Sonoff01_R5Deckenlampe_Relais off") } }

sorry für den regexp mit 6 punkten :-P

Danke für die Hilfe nochmal ich denke ich fange langsam an zu verstehen. Aber ich bin sicher bald wieder da. Hab jetzt erstmal ein paar HM komponenten bestellt und den uart adapter