Toggle für Relais ESPEasy

Begonnen von MAC66666, 19 Februar 2018, 19:24:38

Vorheriges Thema - Nächstes Thema

MAC66666

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?
FHEM @ Ubuntu 20.04 VM@ Windows 2019 Hyper-V @ NVMe
MAXCube als CUL_MAX (Thermostate)
MAXCube als SlowRF (FS20, wird durch ESPs ersetzt, teilweise geschehen)
Einige ESPs mit ESPEasy, zwei GHoma und ein Sonoff Tasmota

dev0


MAC66666

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

FHEM @ Ubuntu 20.04 VM@ Windows 2019 Hyper-V @ NVMe
MAXCube als CUL_MAX (Thermostate)
MAXCube als SlowRF (FS20, wird durch ESPs ersetzt, teilweise geschehen)
Einige ESPs mit ESPEasy, zwei GHoma und ein Sonoff Tasmota

MAC66666

Nope, ich weiß nicht wie ich das umsetzen soll. Da reicht mir die commandref nicht  :( Hilfe!
FHEM @ Ubuntu 20.04 VM@ Windows 2019 Hyper-V @ NVMe
MAXCube als CUL_MAX (Thermostate)
MAXCube als SlowRF (FS20, wird durch ESPs ersetzt, teilweise geschehen)
Einige ESPs mit ESPEasy, zwei GHoma und ein Sonoff Tasmota

oli82

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")};;;;}

Frank_Huber

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

kabanett

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

Hardware: Fhem auf Raspi3 / selbtsbau CUL 433 und 868 MHz / MAX Thermostate / IT-Dosen nur noch Weihnachten / diverse ESP Aktoren/Sensoren / X10 Fernbedienung / Shelly 1, 1L, 2, 2.5, Dimmer, RGB2 / LaCrosseGateway / Zigbee2531 / diverse Zigbee Aktoren/Sensoren

MAC66666

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 ;-)
FHEM @ Ubuntu 20.04 VM@ Windows 2019 Hyper-V @ NVMe
MAXCube als CUL_MAX (Thermostate)
MAXCube als SlowRF (FS20, wird durch ESPs ersetzt, teilweise geschehen)
Einige ESPs mit ESPEasy, zwei GHoma und ein Sonoff Tasmota

dev0

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

MAC66666

#9
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...
FHEM @ Ubuntu 20.04 VM@ Windows 2019 Hyper-V @ NVMe
MAXCube als CUL_MAX (Thermostate)
MAXCube als SlowRF (FS20, wird durch ESPs ersetzt, teilweise geschehen)
Einige ESPs mit ESPEasy, zwei GHoma und ein Sonoff Tasmota

MAC66666

jup, geht mit cmdalias. Vielen Dank!
FHEM @ Ubuntu 20.04 VM@ Windows 2019 Hyper-V @ NVMe
MAXCube als CUL_MAX (Thermostate)
MAXCube als SlowRF (FS20, wird durch ESPs ersetzt, teilweise geschehen)
Einige ESPs mit ESPEasy, zwei GHoma und ein Sonoff Tasmota

Frank_Huber

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

vbs

Klasse, beste Lösung, danke!

vbs

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".

stefanpf

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.

vbs

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. :(

vbs

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!

stefanpf

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.

Tueftler1983

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.

Frank_Huber

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.

Tueftler1983

Also kannst du dann einfach set DeviceName toggle5 senden um umzuschalten?

dev0

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?

Tueftler1983

So wie im Screenshot sind bei mir die Relais an den einzelnen ESP definiert

Frank_Huber

#23
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.

dev0

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.

Tueftler1983

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

Frank_Huber

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/

Tueftler1983

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

Tueftler1983

#28
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

Frank_Huber

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


Tueftler1983

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.

Frank_Huber

Zeig mal deine rules.
Hab es bei mir aus nen funktionierenden wemos rauskopiert.

Gesendet von meinem Doogee S60 mit Tapatalk


Tueftler1983

So habe ich sie drin,

on toggle14 do
if [pin14#pinlevel] =1
   gpio,14,0
else
   gpio,14,1
endif
endon

Frank_Huber

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)

Tueftler1983

Die Definition vom eventMap

eventMap
/gpio 14 1:off/gpio 14 0:on/event toggle14:toggle/


Und ein Screenshot vom gesamten DeviceName

Frank_Huber

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


Tueftler1983

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

Frank_Huber

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


Tueftler1983

hmm auch so tut sich bei mir garnix, vorher konnte ich mit dem toggle ja noch ausschalten. Jetzt geht garnix mit toggle

Frank_Huber

#39
Wie sehen denn die Details vom switch aus?
Speziell das "inversed logic", das hab ich aus.

angehängt mein Device und die Rule dazu.


Tueftler1983

inversed Logic ist bei mir gesetzt damit der zustand stimmt

Frank_Huber

#41
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.

:-)

Tueftler1983

ahh okay so geht es.

Danke dir vielmals für deine Hilfe