Schalten von GPIO's in ESPEasy durch Fhem

Begonnen von Gisbert, 15 April 2018, 10:32:39

Vorheriges Thema - Nächstes Thema

Gisbert

Hallo,

ich hab noch nicht die richtige Information gefunden, mit anderen Wort ich habe schon in der Commandref und Wiki gesucht, bin aber nicht weitergekommen.

Ich möchte auf ESP's, auf denen ESPEasy läuft, die GPIO's durch Fhem steuern.
Dies geht in der folgenden Form und kann in Fhem in der Kommandozeile, in einem DOIF oder notify genutzt werden:
"wget -qO /dev/null http://192.168.178.25/control?cmd=GPIO,0,0&"

In Fhem habe ich eine MQTT_DEVICE angelegt und kann Daten subscribieren, d.h. die Verbindung funktioniert und ich erhalte die gewünschten Informationen.
Ich erhalte bspw. Uptime, Wifi RSSI und den Status des GPIO0 (1 oder 0) vom ESP im Fhem-Device.

Wenn ich den GPIO0 schalten möchte, kommt der obige sperrige Befehl zum Zug.
Meine Frage: Was muss ich tun, damit ich einen einfacheren Befehl wie z.B. "set device on" bekomme?

Mein erfolgloser Versuch:
Im Device habe ich folgendes Attribut definiert:
attr Haushaltsraum.Ventilator publishSet 0 1 /Home/Ventilator
In ESPEasy ist das Subcribe Template entsprechend definiert:
Subcribe Template /Home/Ventilator

Im Log in ESPEasy sind folgende Einträge, wenn ich "set Haushaltsraum.Ventilator 0" sende, aber der Ventilator (GPIO0) wird nicht geschaltet:
1042244482 : MQTT : Topic: /Home/Ventilator
1042244482 : MQTT : Payload: 0


Gibt es eine Idee, wie ich mein Vorhaben umsetzten kann?

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

eisman

#1
Hi,


z.B.: Rolladen

RO03:off set ESPEasy_ESP33 pcfpulse 2 0 500
gpio 2 für 500ms auf 0
set ESPEasy_ESP33 gpio 2 0 aus
set ESPEasy_ESP33 gpio 2 1 ein

oder
Licht

fhem("set ESPEasy_ESP33 nfx line 1 5 0000;");

gruss

ps: vergessen

MQTT:

defmod LED_Flur MQTT_BRIDGE LED_0306_F
attr LED_Flur IODev MQTT
attr LED_Flur devStateStyle style="color:aliceblue;;font-weight:bold;;text-align:right;;"
attr LED_Flur publishReading_FarbeMQTT Haus/ESP36/SK6812/cmd
attr LED_Flur qos 2
attr LED_Flur retain 1
attr LED_Flur room mqtt
attr LED_Flur stateFormat {ReadingsTimestamp($name,"transmission-state","")}


defmod LED_0301_F dummy
attr LED_0301_F alias Nachtlicht<br>Arbeitszimmer
attr LED_0301_F devStateIcon 000000:light_wire_system_1@gray ff0000:light_wire_system_1@red 00ff00:light_wire_system_1@green 0000ff:light_wire_system_1@blue ffff00:light_wire_system_1@yellow 00ffff:light_wire_system_1@cyan ffffff:light_wire_system_1@white
attr LED_0301_F group SK6812
attr LED_0301_F readingList state FarbeMQTT
attr LED_0301_F room nachtlicht
attr LED_0301_F setList state:colorpicker,RGB FarbeMQTT
attr LED_0301_F sortby Nacht0001
attr LED_0301_F stateFormat state
attr LED_0301_F userReadings FarbeMQTT {'nfx line '\
  .ReadingsVal("LED_0301_C","LED-start",1).' '\
  .ReadingsVal("LED_0301_C","LED-ende",1).' ' \
  .ReadingsVal("LED_0301_F","state",0)}
attr LED_0301_F webCmd state:state 000000:state ffffff:state ff0000:state 00ff00:state 0000ff:state ffff00:state 00ffff


attr LED_Flur publishReading_FarbeMQTT Haus/ESP36/SK6812/cmd   wird als string übergeben
attr LED_0301_F userReadings FarbeMQTT  hier wirdder String zusammen gesetzt

defmod espBridge ESPEasy bridge 8383 geht es halt einfacher
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian, Homematic,ZigBee         / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian,MQTT                               / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

Gisbert

Hallo eismann,

ich hab ESPEasy Build 136 auf dem ESP8266 laufen, ich nutze aber nicht das ESPEasy-Modul in Fhem.
Ich nehme an, dass dein Vorschlag sich auf das ESPEasy-Modul in Fhem bezieht.

Gibt es ohne das ESPEasy-Modul eine Lösung?
Ansonsten muss ich mich mal mit diesem Modul auseinandersetzen.
Bisher habe das ESPEasy-Modul (ohne MQTT) nicht genutzt, da ich eigentlich mit dem Modul MQTT_DEVICE zurecht kam - bis auf die sperrigen Schaltbefehle für die GPIO's.

Viele Grüße Gisbert

Edit: Ich hab zu spät gesehen, dass du deinen Beitrag noch editiert hast - schaue ich mir an.
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

eisman

Hi,

ich gehe grade vom MQTT weg, weil es noch andere Problem gibt,
bei mir laufen auf alle ESP, ESPEasy 2.0 dev13
da hatte ich am anfang immer reboots jetzt laufen sie Perfekt (ipv6 rausgenommen aus dem Netzwerk)

bei dem ESP-Device geht das schalten einfacher.

bei mqtt unbeding die punkte
qos
retain
beachten, so das die nachricht nur einmal gesendet wird. (gab bei mir fehl Schaltung und beim Booten wurde geschaltet)

gruss
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian, Homematic,ZigBee         / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian,MQTT                               / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

hexenmeister

Zitat von: eisman am 15 April 2018, 12:05:25
ich gehe grade vom MQTT weg, weil es noch andere Problem gibt
EspEasy-spezifisch oder MQTT generell? Hast du ein Beispiel?
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

eisman

hi,

ja, direkt geht schneller und der Aufwand ist geringer

beispiel ist das LED nachtlicht. (open)

neu

sub ledBewegung($$$)
{
  my ($Raum,$Regler,$Farbe) = @_;
  my $Start = ReadingsVal($Raum,"LED-start","");
  my $Ende  = ReadingsVal($Raum,"LED-ende","");
  my $Dim   = ReadingsVal($Raum,"dim","");
 
  fhem("set " . $Regler ." nfx dim " . $Dim . ";");
  fhem("set " . $Regler ." nfx line " . $Start . " " . $Ende . " " . $Farbe . ";");
  return 0;
}


damit steuer ich 5 Räume mit bewegungsmelder und Nachtlicht

gruss
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian, Homematic,ZigBee         / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian,MQTT                               / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

eisman

Zitat von: hexenmeister am 15 April 2018, 13:15:08
EspEasy-spezifisch oder MQTT generell? Hast du ein Beispiel?

hi,

@hexenmeister

nein mit MQTT habe ich keine Probleme das läuft klasse (ps:hatte von anfang an keine Probleme)

es geht nur den Aufwand und nutzen (Systempflege,Programierung usw.)
und mit ESP Easy kann ich auch zwei Systeme bedienen, ich nutze MQTT z.Z. für einen Raspberry(FHEM) zum daten austausch.
dieser wird aber in nächster Zeit durch einen ESP ersetzt (der CUL USB wird durch MapleCUN netzwerk ersetzt)

gruss
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian, Homematic,ZigBee         / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian,MQTT                               / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

hexenmeister

So hat jeder seine Vorlieben. Ich finde MQTT einfacher und übersichtlicher. Zugegeben, die Fummelei mit MQTT_DEVICE und _BRIDGES in FHEM war nicht wirklich ideal, daher schreibe ich gerade ein neues Modul (MQTT_GENERIC_BRIDGE). Damit kann man die MQTT-Einstellungen direkt an den betroffenen Devices konfigurieren.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

eisman

hi,

das finde ich auch klasse und werde ich mir auch anschauen.
vielleicht macht es dann einige Sachen auch einfacher.
ein paar Projekte habe ich ja auch noch.

gruss
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian, Homematic,ZigBee         / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian,MQTT                               / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

Gisbert

Hallo,

ich komme nochmals auf meine Eingangsfrage zurück.

Ich möchte von Fhem anstatt der http-Befehle zum Schalten von Relais MQTT-Befehle einsetzen.

Ich nutze auf dem ESP jetzt ESPEasy Mega. Dort ist bei Controller Subscribe: /Wemos-Temp-OG/# eingetragen, um das Beispiel konkret zu machen.

Welche konkreten Attribute benötige ich um GPIO0 und GPIO2 zu schalten?

Bitte postet Beispiele und Vorschläge so ausführlich und umfassend wie möglich. Ich komme mit den Beispielen im Wiki und in der commandref leider noch nicht zurecht.

Viele​n Dank im voraus und viele Grüße
Gisbert​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Gisbert

Hallo zusammen,

ein entscheidender Hinweis ist hier zu finden: https://forum.fhem.de/index.php/topic,87320.msg797780.html#msg797780:
Das man die GPIOs schalten muss, da wäre ich z.B. nie drauf gekommen, man muss aber auch den ESP nach dem einstellen des Contoller (MQTT Sub) neustarten, damit der das Aktiviert... =D
Nachdem ich also den ESP rebootet habe, kann ich per MQTT die GPIO's schalten.

In ESPEasy MEGA ist folgendes eingetragen:
Unit Name: Wemos-Temp-EG
Controller Subscribe: /%sysname%/#

Mit dem topic: /Wemos-Temp-EG/cmd und der Payload GPIO,0,0 kann ich jetzt den GPIO0 von 1 auf 0 schalten, z.B. von der App myMQTT (Android) oder mqttfx (Win10).
Damit ist diese Hürde genommen, jetzt kann ich mich der Fhemseite zuwenden.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Gisbert

#11
Hallo zusammen,

wenn ich folgende eventMap für 7 GPIOs definiere, dann funktioniert das Schalten per MQTT:
defmod Stellantriebe.EG MQTT_DEVICE
attr Stellantriebe.EG IODev MyBroker
attr Stellantriebe.EG autoSubscribeReadings /Wemos-Temp-EG/+/+
attr Stellantriebe.EG event-min-interval .*:350
attr Stellantriebe.EG event-on-change-reading .*
attr Stellantriebe.EG eventMap /\
cmd GPIO,0,0:GPIO0on/cmd GPIO,0,1:GPIO0off/\
cmd GPIO,2,0:GPIO2on/cmd GPIO,2,1:GPIO2off/\
cmd GPIO,4,0:GPIO4on/cmd GPIO,4,1:GPIO4off/\
cmd GPIO,5,0:GPIO5on/cmd GPIO,5,1:GPIO5off/\
cmd GPIO,12,0:GPIO12on/cmd GPIO,12,1:GPIO12off/\
cmd GPIO,13,0:GPIO13on/cmd GPIO,13,1:GPIO13off/\
cmd GPIO,14,0:GPIO14on/cmd GPIO,14,1:GPIO14off
attr Stellantriebe.EG icon sani_heating
attr Stellantriebe.EG publishSet_cmd /Wemos-Temp-EG/cmd


Der Schaltbefehl lautet demnach, z.B.:
set Stellantriebe.EG GPIO0on

Leider habe ich das nur so geschafft, d.h. ohne ein Leerzeichen zwischen "GPIO" und "on".
Weiß da jemand einen Rat wie man das mit Leerzeichen umsetzten könnte?


Viele Grüße Gisbert

[Edit]:
Ich habe festgestellt, dass ein Befehl, z.B. set Stellantriebe.EG GPIO0on nicht ausgeführt wird, sehr wohl aber set Stellantriebe.EG cmd GPIO,0,0.
Eigenartigerweise funktioniert danach wieder der erst genannte Befehl - sehr merkwürdig.
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

eisman

Hi,

warum nicht direkt in der espBridge, geht bei mir für Rollo Schalter usw.

set ESP34 pcfpulse 1 0 500                setzt den Port 1 PCF8574 nach 500 ms wieder zurück
set ESP34 gpio 2 0    (1)                    setzt den GPIO auf ei oder aus
set ESP33 neopixelline 2 5 255 0 0     setzt SK6812 LED 2 bis 5 auf Rot 100% Helligkeit

geht dmit doch alles warum also MQTT

gruss
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian, Homematic,ZigBee         / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian,MQTT                               / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

Gisbert

Hallo eismann,

danke für den Hinweis.
Ich hatte bisher alles mit dem Modul MQTT_DEVICE gemacht und habe die neueren Module noch nicht im Einsatz. Das ist ja wie immer alles kein Selbstläufer und in 5 Minuten umgestellt, sondern man muss sich damit beschäftigen, einlesen, Hürden überwinden ...
Da ich bisher mit MQTT gut zurecht gekommen bin, sehe ich jetzt noch keine zwingende Notwendigkeit umzusteigen. Ich hab ja im Grunde genommen eine Lösung gefunden, mit der man per MQTT aus Fhem heraus Relais schalten kann.
Dann war noch der Anspruch es "schön" hinzubekommen, was vermutlich aber gar nicht notwendig ist, da der Befehl "set Stellantriebe.EG cmd GPIO,0,0" knackig kurz ist und auch funktioniert. Null = low ist in der Regel einschalten, aber nicht immer, das muss man sich merken, oder als Kommentar in das Device reinschreiben.
Falls ich irgendwann viel mehr Zeit habe, kann ich mich den neueren MQTT-Varianten in Fhem widmen.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

eisman

hi,

also von MQTT auf ESP ist eigendlich schnell gemacht.

in espEASY controller eintragen (FHEM HTTP//IP) und in den Devices den Kontroller eintagen.
das ganze kann man parallel laufen lassen und so stück für stück umsetzen.
ich habe jetzt so 8 Stück am laufen mit i2c,1wire, Nextion, lcd usw.
und es läuft sehr gut, MQTT setze ich auch noch ein anstelle von FHEM2FHEM (raspberry).
Auf dem ESP Programiere ich nichts alles nur in FHEM, ausser bei NEOPIXEL(RULES sezte ich die LEDs auf aus nach einem Reboot)
gruss
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian, Homematic,ZigBee         / 1X Raspberry, ConBee / 5x ESP
1x FHEM Debian,MQTT                               / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S