ESP-8266 mit Fhem steuern, aber wie?

Begonnen von lissi, 29 Mai 2016, 18:03:46

Vorheriges Thema - Nächstes Thema

lissi

Hi Leute!

ich bin neu in der Fhem-Welt :)

Ich möchte einen ESP-8266 über Fhem steuern. Ziel ist ein Rolle hoch und runter fahren zu lassen. Die ganze Hardware steht und ich kann den ESP-8266 mit einem integrierten Webserver steuern.

FEHM ist auf einem Raspberry installiert und soll entweder via UDP oder http das Rolle steuern, nur ich weiß nicht wie ich das umsetzten kann.

Könnt Ihr mir weiter helfen?

Vielen Dank!

MadMax-FHEM

Hallo,

hmmm, da HW UND Software (offenbar) schon steht vielleicht nicht mehr ganz so interessant aber es gibt inzwischen ein "Unterforum" speziell für den ESP und die Suche z.B. 'esp8266' lässt einige Threads darüber leicht finden.

Z.B.:

https://forum.fhem.de/index.php/topic,46205.html

https://forum.fhem.de/index.php/topic,28905.html

https://forum.fhem.de/index.php/topic,28905.html

https://forum.fhem.de/index.php/topic,50697.html

https://forum.fhem.de/index.php/topic,50238.html

um dir nur mal eine kleine Auswahl zu geben...

Allerdings wird dort halt auch neben der HW (die bei dir vermutlich bleiben kann) auch immer entsprechende Software "geliefert", die zur beschriebenen Einbindung/Verwendung in fhem halt notwendig ist...

Müsstest du halt anpassen.

Wenn du nur per HTTP "steuern" willst was du hast, dann ist evtl. HTTPMOD interessant oder halt ein eigenes Modul schreiben und dort dann beispielsweise per HTTPUtils (denke ich) entsprechende HTTP-Aufrufe absetzen...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

dev0

Alternativen wären noch: wget via system call oder HttpUtils verwenden: http://www.fhemwiki.de/wiki/HttpUtils

lissi

Vielen Dank!

gibt es keine direktere Möglichkeit?

Das mit dem MQTT ist ganz interessant, nur durchschaue ich dort nicht wie man dem ESP dann Befehle senden kann. Da nur Sensoren angeschlossen, die dann publishen. Aber wie kann ich von "extern" denen sagen, dass das Rollo hoch soll oder auf 10% fahren soll...?

dev0

HTTPMOD und HttpUtils wären sogar "direkter" als MQTT, da kein zusätzlicher Broker dazwischen hängt.
FHEM/MQTT <=> MQTT message broker (z.b. mosquitto) <=> ESP8266/MQTT

chunter1

Ich kann ESPeasy wärmstens empfehlen.
Supereasy und viele Möglichkeiten zur Erweiterung.

pink99panther

#6
Hallo lissi,

Rollo mit ESPeasy hab ich bei mir so:
ESPeasy eingestellt wie auf den Bildern zu sehen.
In FHEM einen MQTT-Schalter für up und down angelegt.

define ESPRolSw MQTT_DEVICE
attr ESPRolSw IODev MyBroker
attr ESPRolSw eventMap 1:off 0:on
attr ESPRolSw publishSet_down /Wohnzimmer/gpio/12
attr ESPRolSw publishSet_up /Wohnzimmer/gpio/13
attr ESPRolSw room Wohnzimmer
attr ESPRolSw stateFormat transmission-state


Dann ein Device Rollo

define Rollo1 ROLLO
attr Rollo1 automatic-enabled on
attr Rollo1 devStateIcon offen:fts_shutter_10:geschlossen geschlossen:fts_shutter_100:offen schlitz:fts_shutter_80:geschlossen drive-up:fts_shutter_up@red:stop drive-down:fts_shutter_down@red:stop position-100:fts_shutter_100:offen position-90:fts_shutter_80:geschlossen position-80:fts_shutter_80:geschlossen position-70:fts_shutter_70:geschlossen position-60:fts_shutter_60:geschlossen position-50:fts_shutter_50:geschlossen position-40:fts_shutter_40:offen position-30:fts_shutter_30:offen position-20:fts_shutter_20:offen position-10:fts_shutter_10:offen position-0:fts_shutter_10:geschlossen
attr Rollo1 device ESPRolSw
attr Rollo1 drive-down-time-to-100 14.5
attr Rollo1 drive-up-time-to-100 14.5
attr Rollo1 funktionsweise Typ2
attr Rollo1 kanal1 up
attr Rollo1 kanal2 down
attr Rollo1 room Wohnzimmer
attr Rollo1 userReadings Rollo1_rollo_pos { ReadingsVal ("Rollo1", "position", 100)*2.55;;;;}
attr Rollo1 webCmd offen:geschlossen:schlitz:position

chunter1

ESPeasy und FHEM geht übrigens auch direkt ohne MQTT broker.
Mein esp im rollo läuft ohne MQTT einwandfrei ohne zusätzliche fehlerquelle 😉

amithlon

Hallo,

über die Problematik MQTT ja oder nein habe ich gerade mit einem Bekannten diskutiert.
Fehlerquelle ais Transportschicht und MQTT-Software bei mir definitv nein. Mosquitto als Broker läuft einfach stabil.
Bestimmte Sachen kann man mit MQTT sehr einfach nutzen: QoS kostet das setzen eines Parameters und der Broker kümmert sich drum, daß die Nachricht beim Client auch ankommt.
LastWill: ein Parameter und ich erfahre vom Broker automatisch, wenn ein Client nach Ablauf der keepAlive-Zeit nicht geantwortet hat durch eine passende Nachricht.
Meine MQTT-Clients senden z.B. beim Anmelden am Broker ein Status online und haben als "letzten Willen" Status offline hinterlegt.
Damit habe ich alle Clienten in FHEM im Bliick (entweder rot weil offline oder grün weil online).
Retain sorgt dafür, daß der Broker die letzte Nachricht eines Clients versendet, wenn sich ein neuer Client anmeldet, der das topic abboniert hat.
FHEM bekommt also nach einem Restart o.ä. die letzten Meldungen der Clients automatisch und meine Anziegen stimmen sofort.
Wenn eben zuletzt "ein" von einem Schalter gemeldet wurde, steht der in FHEM auch gleich wieder auf ein.

Das kann man alles auch "zu Fuß" in FHEM einbauen, der Aufwand ist dafür aber merklich größer.

Für mich wird wohl bei den ESP8266 vorerst die Kombination mit MQTT gewinnen, Problem sind Sensoren, die Schalfen und nur alle xx Minuten geweckt werden und was senden.
Da macht die Statusmeldung keinen Sinn. Ich werde da wohl einen Watchdog in FHEM drüberlegen: wenn FHEM 2 oder 3x keine Meldung im Zeitraster bekommen hat, geht der Status auf rot bis wieder eine Meldung eintrifft.
Vielleicht setze ich dort auch bei MQTT keepAlive einfach hoch genug, das muß ich erstmal ausprobieren.

Gruß aus Berlin
Michael

rsteinkuhl

Hallo alle miteinander,

@amithlon, du schreibst in diesem Thread
ZitatMeine MQTT-Clients senden z.B. beim Anmelden am Broker ein Status online und haben als "letzten Willen" Status offline hinterlegt.

kannst du mir bitte einen Denkanstoß geben, wie ich das in FHEM und Mosquitto anlegen muss, ich suche seit längerem ohne Erfolg danach und möchte auch gerne diese Funktionalität nutzen.

Vielen Dank

bugster_de

ZitatUnfortunately it has: the dyno has a design failure and ITS-PL recalled all the outstanding quotes
Dem stimme ich mal uneingeschränkt zu: ich hatte meine Arduino-Bewässerungssteuerung zwei Jahre auf etwas probrietärem und habe nun auf MQTT umgestellt. Broker läuft auf meinem FHEM-Pi. Läuft alles stabil

Meine MQTT Messages sind immer wie folgt aufgebaut
/Device/Type/No/Command  payload
bsp:
/Garten/Ventil/3/set on
Somit kann man mit MQTT_DEVICE das direkt abdecken und den state dann auf set mappen

In der Arduino Software kann man dann relativ einfach dieses Kommando zerlegen: ich habe ein Array aus Ventil-Klassen Instanzen und somit kann man die Nummer (im Bsp die 3) direkt im Klassen-Array verwenden
ventilklasse[3]-->set( "on" );

Etwaige andere Statusmeldungen wie /Garden/Ventil/3/status kann man dann auf Readings mappen (z.B. auch last-will) und dann ggf. mit einem notify darauf reagieren.

Nebenbemerkung: ich habe im Arduino auch einen Webserver (parallel zu MQTT). deshalb auch eine Klasse, die zentral den konsistenten Zugriff regelt. Sollte man nun via Web-Interface ein ventil einschalten, dann sendet die Klasse auch den MQTT Befehl raus.
Über den Webserver kann ich aber z.B. auch die IP-Adresse des MOSQUITTO Server vorgeben, falls ich den mal ändere. Dann muß ich nicht die Arduino SW neu kompilieren.