EspEasy GPIO über fhem schalten

Begonnen von The-Holgi, 09 März 2016, 15:09:38

Vorheriges Thema - Nächstes Thema

The-Holgi

Hallo,
über http mit einem notify:


led01 {
if ("$EVENT" eq "on") {
system "wget -O /dev/null -q http://192.168.178.43/control?cmd=GPIO,16,1&"
}0;
if ("$EVENT" eq "off") {
system "wget -O /dev/null -q http://192.168.178.43/control?cmd=GPIO,16,0&"
}0;
}

Kann ich die GPIO problemlos schalten.
Versuche schon seit Stunden das über MQTT zum laufen zu bringen. Auf dem ESP8266 läuft EspEasy R78 als Protokoll PiDome.
Vielleicht könnte jemand ein Beispiel posten.
Temperatursensoren DHT22 und DS18B20 habe ich erfolgreich eingerichtet und die Daten werden bis jetzt sehr zuverlässig an fhem gesendet.

Gruß Holgi

HP T610 Thin Client; Docker Fhem 5.9; 2X CUL V3 868mhz; Max Heizungssteuerung; FS20kse; FS20UWS; FS20S8-3; 2 FS20DI; HM-CFG-LAN,HM-LC-SW1-PL,HM-SEC-SD, HM-SE1PBU-FM;
Harmony Hub;Hue-Bridge mit Iris, E27 Bulb & FLS-PP

Bapt. Reverend Magersuppe

Ich habe das so gelöst. Also, ein Taster am ESP sendet eine Tastung per MQTT, fhem sendet dann den Zustand zurück.


define mqswitch1 MQTT_BRIDGE switch1
attr mqswitch1 IODev espnet
attr mqswitch1 publishReading_state /switch1/state
attr mqswitch1 publishState /esp8266/GPIO/14
attr mqswitch1 stateFormat transmission-state
attr mqswitch1 subscribeSet /esp8266/switch1/Switch


Es wird also das Topic /switch1 vom esp überwacht und wenn sich das tut, dieses auf den esp zurückgepublisht.
Das kann man sicher noch ganz schön verbessern und so, aber erstmal grundsätzlich geht das.

Wie machst Du das mit den Temperatursensoren?

--
If I was born in 1453, Leonardo da Vinci would be jealous of me.
Reverend Paul Egon Magersuppe
Aus versicherungstechnischen Gründen sind sämtliche Beiträge von mir rein spekulativer und theoretischer Natur und sollten nicht in die Tat umgesetzt werden!
Bin hier selten DRIN. AUS GRÜNDEN!

The-Holgi

Hallo, verstehe ich nicht so ganz. Hast du am ESP einen switch input eingerichtet?
Wie schaltest du denn dann den GPIO aus fhem heraus ?

Die Temperatursensoren hab ich nach der Anleitung hier: https://forum.fhem.de/index.php/topic,46205.0.html eingerichtet.
Sieht in der fhem.cfg bei mir so aus:
define MyBroker MQTT 127.0.0.1:1883 attr MyBroker room MQTT
und für die einzelnen Sensoren so:
define DHT22 MQTT_DEVICE DHT22
attr DHT22 IODev MyBroker
attr DHT22 room MQTT
attr DHT22 stateFormat Temperatur: Temperature°C <br>Luftfeuchte: Humidity
attr DHT22 subscribeReading_Humidity /hooks/devices/10/SensorData/Humidity
attr DHT22 subscribeReading_Temperature /hooks/devices/10/SensorData/Temperature


define ESP8266 MQTT_DEVICE DS18B20
attr ESP8266 IODev MyBroker
attr ESP8266 room MQTT
attr ESP8266 stateFormat Temperatur: Temperature°C
attr ESP8266 subscribeReading_Temperature /hooks/devices/1/SensorData/temperature


Gruß Holgi
HP T610 Thin Client; Docker Fhem 5.9; 2X CUL V3 868mhz; Max Heizungssteuerung; FS20kse; FS20UWS; FS20S8-3; 2 FS20DI; HM-CFG-LAN,HM-LC-SW1-PL,HM-SEC-SD, HM-SE1PBU-FM;
Harmony Hub;Hue-Bridge mit Iris, E27 Bulb & FLS-PP

Bapt. Reverend Magersuppe

Hi,

ja genau, der im ESPEasy habe ich einen Input-Switch angelegt, der publisht in den State ob gedrückt oder nicht.
Das kann man auf dem mosquitto-server selber ganz gut mit mosquitto_sub verfolgen was ankommt. Dieses Topic benutzt man dann im fhem und subscribed sich da drauf.
Ich habe das so gemacht dass ich das Ergebnis dann dann in das GPIO-Topic vom esp publishe. Ich habe den ESP auf openHab MQTT eingestellt.
In den Advanced-Settings steht das subscribe-Topic vom esp auf /%sysname%/#
Also wenn der ESP den Namen: bulby hat, subscribed er sich am mqtt auf /bulby/#, alles was da hingeht bekommt er.
Die GPIOs spricht man dann über /bulby/GPIO an. Als Payload schickt man 1 oder 0. In meinem Fall schicke ich einfach den State vom  switch zurpck der eben empfangen wurde. Der GPIO geht dann an/aus.
Testen kann man auch auf der Konsole mit mosquitto_pub:

mosquitto_pub -q 1 -d -t /bulby/GPIO/12 -m 0


Insgesamt ist das bei mir recht primtiv gelöst, der esp sendet den state des Schalters und der wird gleich zurückgesendet.
Sendet man jetzt aus einem dummy heraus eine Schalte, dann läuft das aus dem Ruder.

Gar nicht so einfach zu erklären, ist das so nachvollziehbar?
--
If I was born in 1453, Leonardo da Vinci would be jealous of me.
Reverend Paul Egon Magersuppe
Aus versicherungstechnischen Gründen sind sämtliche Beiträge von mir rein spekulativer und theoretischer Natur und sollten nicht in die Tat umgesetzt werden!
Bin hier selten DRIN. AUS GRÜNDEN!

wingfighter

Hallo The-Holgi

Ich habe mich in den letzten Tagen auch intensiver mit dem ESPEasy beschäftigt.
Es gibt für die Ausgabe in der Tat keine eigenen Objekte, die man in der Device-Liste anlegen kann.
Auf dieser Seite ist das auch beschrieben.
http://www.esp8266.nu/index.php/GPIO
Und auf diese Weise hast Du es ja auch schon erfolgreich getestet.

Wenn man im Quelltext  von ESPEasy nachschaut, sieht man aber auch, dass der ankommende Topic eines MQTT-Publish's auch auf das am Ende stehende "cmd" getestet wird.
Wenn dort ein "cmd" steht, wird das Kommando interpretiert und sofort ausgeführt. Das funktioniert mit allen GPIO's, die nicht per Device-Definition eine andere Funktion bekommen haben.
Als Payload muss dann hinter dem "cmd" das stehen, was auch in der URL definiert ist.

z.B.
attr mqswitch1 publishState GPIO,14,1 GPIO,14,0 /esp8266/GPIO/14/cmd

Testen kannst Du das auch per mosquitto_pub z.B. so:
mosquitto_pub -d -t /esp8266/GPIO/14/cmd -m GPIO,14,1

Im Grunde ist es ziemlich egal, wie der Topic aussieht. Es kommt nur drauf an, wie Du das Subscribe Template in ESPEasy definiert hast.
Für das Beispiel würde es z.B. so aussehen können:
/esp8266/GPIO/#
oder so:
/esp8266/#
oder auch so:
/esp8266/GPIO/14/#
In allen drei Definitionen wird das Topic angenommen und das Ende mit "cmd" erkannt und der Payload ausgeführt werden.

Selbst wenn Du mit:
mosquitto_pub -d -t /esp8266/GPIO/14/cmd -m GPIO,8,1
einen anderen GPIO ansprichst als im Topic steht, wird das funktionieren, weil eben  nur auf das "cmd" getestet wird.

Ich persönlich finde aber die Definition im fhem noch nicht so schick.
Sicher gibt es da eine Möglichkeit wie so etwas:
on:GPIO,14,1 off:GPIO,14,0
damit in den Readings und Set's statt der GPIO,x,y ein on bzw off steht. Wobei es so, wie hier geschrieben nicht funktioniert.
Vielleicht hat dazu einer eine Idee.

Viele Grüße
wingfighter


pink99panther

Hab das bei mir im Moment so wie im Beispiel am laufen.
Nicht wundern über 0=on, ist wegen den negativen Logik der Relaisplatiene.
Verwende im ESPeasy das Openhab-Protokoll.
Da sind die Publishs schon recht aussagekräftig.

define licht_wohnzimmer MQTT_DEVICE
attr licht_wohnzimmer IODev MyBroker
attr licht_wohnzimmer devStateIcon on:FS20.on off:FS20.off
attr licht_wohnzimmer eventMap 0:on 1:off
attr licht_wohnzimmer publishSet 1 0 /Test2/gpio/14
attr licht_wohnzimmer stateFormat state

The-Holgi

#6
Hallo,
Danke für eure Hilfe. Der entscheidende Hinweis war der:
ZitatIm Grunde ist es ziemlich egal, wie der Topic aussieht. Es kommt nur drauf an, wie Du das Subscribe Template in ESPEasy definiert hast...
Es funktioniert aber nur mit dem OpenHab Protocol.

Gruß Holgi
HP T610 Thin Client; Docker Fhem 5.9; 2X CUL V3 868mhz; Max Heizungssteuerung; FS20kse; FS20UWS; FS20S8-3; 2 FS20DI; HM-CFG-LAN,HM-LC-SW1-PL,HM-SEC-SD, HM-SE1PBU-FM;
Harmony Hub;Hue-Bridge mit Iris, E27 Bulb & FLS-PP

netbus

Hallo,
kann man für das Schalten am ESP auch einen Status abfragen?
Ich möchte gerne das Schalten bidrektional schicken (wie bei Homematic)

wingfighter

Hallo netbus

Deine Frage ist leider etwas unspezifisch um sie korrekt beantworten zu können.
Natürlich kann man beim ESP den Zustand der Ausgänge abfragen und dann auch in geeigneter Weise an einen externen Empfänger senden.
Die Frage wäre aber, welcher Transportweg Dir vorschwebt.
Da der Thread mit ESPEasy beginnt, vermute ich, dass Du das Schalten per MQTT auf eben diesem Wege zurück gemeldet haben möchtest. Und das Ganze im ESPEasy? Richtig?


Gruß wingfighter