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?
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
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
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
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
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
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
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
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
mmhh der such-regexp funktioniert anscheinend nicht.
kann man das was ich da im screenshot gemacht habe nicht irgendwie eleganter lösen?
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
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