Moin,
habe ein Relais:
defmod ESPEasy_SWZ1_Wandlicht ESPEasy 192.168.5.222 80 espBridge SWZ1_Wandlicht
attr ESPEasy_SWZ1_Wandlicht IODev espBridge
attr ESPEasy_SWZ1_Wandlicht Interval 300
attr ESPEasy_SWZ1_Wandlicht eventMap /gpio 14 on:off/gpio 14 off:on/
attr ESPEasy_SWZ1_Wandlicht group ESPEasy Device
attr ESPEasy_SWZ1_Wandlicht presenceCheck 1
attr ESPEasy_SWZ1_Wandlicht readingSwitchText 1
attr ESPEasy_SWZ1_Wandlicht room 01-Wohnzimmer,ESPEasy
attr ESPEasy_SWZ1_Wandlicht setState 3
attr ESPEasy_SWZ1_Wandlicht stateFormat {ReadingsVal($name,"presence","") eq "absent" ? "absent" : ReadingsVal($name,"Switch","")}
wie kann ich das denn per set ESPEasy-SWZ1-Wandlicht toggle" (oder ähnlich) toggeln? Was fehlt mir da denn noch?
cmdalias
OK, danke schon mal für den Hinweis... Aber ich bekomme da nichts hin.
Hier gibt es wohl das gleiche Problem nur ohne ESP:
https://forum.fhem.de/index.php/topic,83402.15.html
Nope, ich weiß nicht wie ich das umsetzen soll. Da reicht mir die commandref nicht :( Hilfe!
Als Schubser in die Richtung hier mein notify, mit dem ich über einen Taster toggle:
EG_TasterFlur_Btn_06:Short.* {if (ReadingsVal("ESPEasy_Wasserfall","GPIO12","") eq "on") {fhem ("set ESPEasy_Wasserfall gpio 12 0")}else {fhem ("set ESPEasy_Wasserfall gpio 12 1")};;;;}
oder als Beispiel im DOIF:
defmod Licht_DG1 DOIF ([GPIO_IN_12:"^on$"] and [?SONOFF_01] eq "off") (set SONOFF_01 on)\
DOELSEIF ([GPIO_IN_12:"^on$"] and [?SONOFF_01] eq "on") (set SONOFF_01 off)
GPIO_IN_12 -> Taster
SONOFF_01 -> ESPEasy Relais
Sorry im Falle eines falschverstehens.
Du möchtest einfach an und ausschalten?
Wenn ja sind deine Attribute bis auf :
attr ESPEasy_SWZ1_Wandlicht eventMap /gpio 14 on:off/gpio 14 off:on/
und das fehlende webCmd soweit OK!
Bei mir funktioniert es mit:
attr ESPEasy_SWZ1_Wandlicht eventMap /gpio 14 on:on/gpio 14 off:off/status gpio 14:check/
attr ESPEasy_SWZ1_Wandlicht webCmd :
Zusätzlich hab ich als Schalticon:
attr ESPEasy_SWZ1_Wandlicht on:rc_GREEN:off off:rc_RED:on absent:rc_BLUE:off gpio:rc_YELLOW:off
Achso nee, das passt bei mir. Geht wirklich um einen Toggle, also Umschalten des jetzigen Zustandes per set xyz toggle o. ä. bzw. das von oli und frank sollte es in meinem Notify tun ;-)
Meiner Meinung nach gehört der "gpio toggle" command in die ESPEasy Firmware. Es gab auch schon mal einen Pull Request dazu...
Trotz der anderen Tipps würde ich weiterhin cmdalias einsetzen, damit man diesen Workaround mit einem Klick (delete cmdalias) wieder entfernen kann ohne weitere Logiken in FHEM anpassen zu müssen. Mit einem cmadalias lassen sich dann alle Devices abdecken, wenn man die cmdalias regex entsprechend setzt.
define ESPEasy_SW_AAA 10.0.0.1 80 eb KE
...
attr ESPEasy_SW_AAA eventMap /gpio 12 on:on/gpio 12 off:off/
attr ESPEasy_SW_AAA stateFormat Relay1 # Reading für GPIO 12
define ESPEasy_SW_XYZ 10.0.0.2 80 eb KE
...
attr ESPEasy_SW_XYZ eventMap /gpio 15 on:on/gpio 15 off:off/
attr ESPEasy_SW_XYZ stateFormat Relay2 # Reading für GPIO 15
define c_espeasy_sw_toggle cmdalias set ESPEasy_SW_.+ toggle AS {fhem("set $EVTPART0 ".(InternalVal($EVTPART0,"STATE","")=~"on|1"?"off":"on"))}
set ESPEasy_SW_AAA toggle
set ESPEasy_SW_XYZ toggle
Ach so wird das definiert. Sehr schön! Gut dass ich noch nicht angefangen habe. Werde ich testen, danke!
Edit: Ich kann mich nicht im ESPEasy Forum anmelden, sonst hätte ich auch dort schon einige Fragen gestellt...
jup, geht mit cmdalias. Vielen Dank!
Moin Moin,
Bin gerade über den Thread gestolpert und wollte meine "Lösung" noch kund tun.
Ich toggle die ESPeasy Relais über die ESPeasy rules.
Hier die rule für pin5:
on toggle5 do
if [pin5#pinlevel] =1
gpio,5,0
else
gpio,5,1
endif
endon
Befehl in FHEM:
set ESPEASYDEVICE event toggle5
Klasse, beste Lösung, danke!
Hm, ich hab momentan ein Problem mit der Sache:
Ich hab eine Rule, die das Relais sofort einschaltet wenn er ESP Strom kriegt:
on System#Wake do
gpio,12,1
endon
Der ESP im Badezimmer wird über einen Wandschalter ganz regulär an/aus (Strom dran/Strom weg) geschaltet. Wenn ich nun Strom gebe, da schaltet die Rule korrekt sofort das Licht an.
Jedoch ist der Wert des Devices innerhalb von ESPEasy (in meinen Augen fälschlicherweise) immer noch "0", also aus. Also der Device-Zustand stimmt nicht mit dem tatsächlichen Zustand überein.
Das führt dazu, dass das Toggeln dann nicht klappt, da die Toggle-Rule einschalten möchte, aber es ist ja schon eingeschaltet und so passiert dann gar nichts. :(
Hat da jemand eine Idee? Bin auf Firmware "mega-20180402".
Ich bin nicht sicher ob ich das Problem richtig verstanden habe, aber ich würde es wie folgt versuchen:
- unter Hardware den Pin auf Output High stellen
- die Ruhe beim Booten weg lassen
- im Device switch die Option "send boot state" aktivieren.
Danach müssten eigentlich alle beteiligten den aktuellen Status kennen.
Hatte damit schonmal rumgespielt, aber gibt's andere Probleme :(
Zitat von: stefanpf am 07 April 2018, 20:52:08
Ich bin nicht sicher ob ich das Problem richtig verstanden habe, aber ich würde es wie folgt versuchen:
- unter Hardware den Pin auf Output High stellen
- die Ruhe beim Booten weg lassen
- im Device switch die Option "send boot state" aktivieren.
Danach müssten eigentlich alle beteiligten den aktuellen Status kennen.
Wenn ich das mache (Hardware High und Boot-Rule weg), dann geht beim Boot das Relay nur für den Bruchteil einer Sekunde an (offenbar ausgelöst durch Hardware High), aber sofort wieder aus. Offenbar ausgeschaltet durch mein Switch-Device (im Device-Tab). Wenn ich das Device lösche (testweise), dann bleibt das Relay eingeschaltet beim Booten. Das Device (unter Device-Tab) scheint also das zu "übersteuern", was als Hardware-Boot-State gesetzt wird (und schaltet aus).
Das "send boot state" bekomme ich gar nicht in Betrieb. Ich würde erwarten, dass beim Booten der aktuelle Status des Devices an Controller geschickt wird? Egal was ich versuche, da wird beim Booten nie etwas geschickt. :(
Seltsam: es geht jetzt offenbar. Ich hab bei dem Device jetzt mal das "Send boot state" ausgeschaltet und jetzt scheint es zu funktionieren: beim Boot geht das Relay an und hat im Device jetzt auch immer den Value "1". Damit klappt dann auch die "toggle"-Rule zuverlässig.
Offenbar macht "Send boot state" irgendwas völlig anderes als ich erwartet habe. Aber ich kann da partout keine Erläuterung finden im Netz. Hat evtl. jemand einen Link, der hilft? Danke!
Sorry, das kann ich dir spontan auch nicht erklären :(
Bei espeasy sind das manchmal auch so Nickel Kleinigkeiten, die einen Ärgern.
Ich habe das bei einer Steckdose mit dem Taster: wenn ich dem sage er soll den Bootstate schicken schaltet das Relais auch gleich automatisch wieder um.
Die Warnung unter
https://www.letscontrolit.com/wiki/index.php/ESP_Easy_web_interface#Hardware_page
weist allerdings auch darauf hin, dass die Startwert nicht umbenannt an jedem Gpio funktionieren.
Hallo, darf ich hier nochmal aufgreifen?
Ich habe auch mehrere ESP im Einsatz, insgesamt sind es 5 an denen auch Relais hängen.
Jetzt nutze ich auf dem Androiden FHEMswitch als APP um u.a auch diese Relais zu schalten.
Ich kann aber nur "set xxx on, off, toggle" schalten.
Wie bekomme ich es jetzt hin das ich bei allen ESP den Befehl toggle nutzen kann ohne für alle ein DOIF anlegen muss?
Das mit dem cmdalias verstehe ich nicht so ganz.
Zitat von: Tueftler1983 am 21 September 2018, 14:54:20
Hallo, darf ich hier nochmal aufgreifen?
Ich habe auch mehrere ESP im Einsatz, insgesamt sind es 5 an denen auch Relais hängen.
Jetzt nutze ich auf dem Androiden FHEMswitch als APP um u.a auch diese Relais zu schalten.
Ich kann aber nur "set xxx on, off, toggle" schalten.
Wie bekomme ich es jetzt hin das ich bei allen ESP den Befehl toggle nutzen kann ohne für alle ein DOIF anlegen muss?
Das mit dem cmdalias verstehe ich nicht so ganz.
Rules!
im ESPeasy:
on toggle5 do
if [pin5#pinlevel] =1
gpio,5,0
else
gpio,5,1
endif
endon
ich schicke "toggle5" um pin5 zu toggeln, "toggle12" für pin12 u.s.w.
Also kannst du dann einfach set DeviceName toggle5 senden um umzuschalten?
ZitatWie bekomme ich es jetzt hin das ich bei allen ESP den Befehl toggle nutzen kann ohne für alle ein DOIF anlegen muss?
Attribut combineDevices für die entsprechenden Devices deaktivieren und für jedes der einzelnen Devices dann mittels eventMap... funktioniert nicht?
So wie im Screenshot sind bei mir die Relais an den einzelnen ESP definiert
Zitat von: Tueftler1983 am 21 September 2018, 15:00:36
Also kannst du dann einfach set DeviceName toggle5 senden um umzuschalten?
ja, genau so.
Befehl den ich absetzte z.B.:
set Hoflicht raw event toggle5
über Eventmap könntest Du es so machen:
eventMap { usr=>{ 'toggle' => 'raw event toggle5'}}
dann funktioniert ein
set <DEVICE> toggle
auch ohne die pin nummer und ohne raw event.
ZitatSo wie im Screenshot sind bei mir die Relais an den einzelnen ESP definiert
Wenn die Antwort an mich gerichtet war, dann verstehe ich sie nicht.
Sorry
@ dev0 ja die Antwort war an dich, Screenshot um ZH zeigen wie bei mir eventMap definiert ist
/gpio 14 1:off/gpio 14 0:on/
@Frank_Huber
Leider funktioniert es so dann nicht bei mir, da von Fhemswitch nur
set DeviceName on
oder
set DeviceName off
oder
set DeviceName toggle
Gesendet werden kann, ein
set DeviceName raw event toggle5
Geht leider nicht
Zitat von: Tueftler1983 am 21 September 2018, 15:21:06
Sorry
@ dev0 ja die Antwort war an dich, Screenshot um ZH zeigen wie bei mir eventMap definiert ist
/gpio 14 1:off/gpio 14 0:on/
@Frank_Huber
Leider funktioniert es so dann nicht bei mir, da von Fhemswitch nur
set DeviceName on
oder
set DeviceName off
oder
set DeviceName toggle
Gesendet werden kann, ein
set DeviceName raw event toggle5
Geht leider nicht
schau dir mein letzten edit an, kannst über eventmap regeln. :-)
auch das hier sollte gehen:
/gpio 14 1:off/gpio 14 0:on/raw event toggle14:toggle/
Klar jetzt verstehe ich was bzw wie du es meinst,
ich sende zwar das set DeviceName toggle aber das eventMap ändert es ja in set DeviceName raw event toggle5 um und im ESP ist die entsprechende Regel definiert.
Okay super so gehts
Einfacher wäre es natürlich wenn lets control "on, off, toggle" als grundbefehle aufnehmen würde um nicht den Umweg über eventMap und Regeln gehen müßte.
Aber danke EUCH für die Hilfe.
LG Holger
Hmm leider schaltet mit der Definition so noch nix.
In FHEM
eventMap
/gpio 14 1:off/gpio 14 0:on/{ usr=>{ 'toggle' => 'raw event toggle'}}/
Und im ESP
on toggle do
if [pin14#pinlevel] =1
gpio,14,0
else
gpio,14,1
endif
endon
Meldung in FHEM wenn ich set DeviceName toggle in der Befehlszeile eingebettet
Unknown argument toggle, choose one of buzzer candle clearreadings dmx dots erase event gpio help inputswitchstate irsend lcd lcdcmd lights longpulse longpulse_ms mcpgpio mcplongpulse mcppulse motorshieldcmd neopixel neopixelall neopixelline nfx oled oledcmd oledframedcmd pcapwm pcfgpio pcflongpulse pcfpulse pulse pwm pwmfade raw reboot reset rtttl serialsend servo status statusrequest tone
Denke du kannst perl und normal hier nicht mischen.
Kuck mal was ich in meinem letzten post vorgeschlagen hab.
Das funktioniert.
Gesendet von meinem Doogee S60 mit Tapatalk
Ahh okay, aber da gibt es noch irgendwo nen Fehler denke in der Regel auf dem ESP.
Wenn das Relais an ist kann ich über toggle ausschalten aber wenn es aus ist kann ich es damit nicht ein schalten.
Zeig mal deine rules.
Hab es bei mir aus nen funktionierenden wemos rauskopiert.
Gesendet von meinem Doogee S60 mit Tapatalk
So habe ich sie drin,
on toggle14 do
if [pin14#pinlevel] =1
gpio,14,0
else
gpio,14,1
endif
endon
Das schaut OK aus, wie sieht dein device dazu aus?
Gesendet von meinem Doogee S60 mit Tapatalk
(https://uploads.tapatalk-cdn.com/20180921/814f95ef6f30a3bc22668b48d2cd1619.jpg)
Die Definition vom eventMap
eventMap
/gpio 14 1:off/gpio 14 0:on/event toggle14:toggle/
Und ein Screenshot vom gesamten DeviceName
OK, in der rule musst du auf deine Namen für device und Value anpassen.
Oben hab ich ein Bild von meinem device eingefügt.
Pin14 = device
Pinlevel = Value
Gesendet von meinem Doogee S60 mit Tapatalk
hmm aber das sollte doch stimmen oder?
Kann es ja mit toggle auch abschalten,
das Relais1 will ich schalten
p.s. ein bild von deinem Device sehe ich nicht
Ah, Tapatalk macht da nur nen link. Damn.
Deine rule müsste so sein:
on toggle14 do
if [Relais1#Switch] =1
gpio,14,0
else
gpio,14,1
endif
endon
Gesendet von meinem Doogee S60 mit Tapatalk
hmm auch so tut sich bei mir garnix, vorher konnte ich mit dem toggle ja noch ausschalten. Jetzt geht garnix mit toggle
Wie sehen denn die Details vom switch aus?
Speziell das "inversed logic", das hab ich aus.
angehängt mein Device und die Rule dazu.
inversed Logic ist bei mir gesetzt damit der zustand stimmt
dann versuch mal bitte so:
on toggle14 do
if [Relais1#Switch] =1
gpio,14,1
else
gpio,14,0
endif
endon
die Schaltbefehle sind vom invertieren nicht betroffen.
somit musst 1 senden zum ausschalten wenn dein Value 1 ist.
Jetzt hast Du quasi:
Wenn AN ist schalte AN,
ansonsten schalte AUS.
:-)
ahh okay so geht es.
Danke dir vielmals für deine Hilfe