ESPEasy und MQTT

Begonnen von Wernieman, 15 Dezember 2022, 16:37:21

Vorheriges Thema - Nächstes Thema

Wernieman

Hallo Freunde,

ist jetzt nicht wirklich "Bastelecke", wusste aber nicht wohin damit ...

Habe hier einen 16 Kanal PWM Controller (Selbstbau) mit espeasy im Betrieb. Bisher immer mit dem ESPEasy-Modul von Fhem betrieben. Da ich andere "Dosen" mit Tasmota und MQTT betreibe dachte ich, nun könnte ich doch auch den ESPEasy-PWM-Controller mit MQTT betreiben. MQTT vom Controller zu FHEM zu senden ist bekanntlich kein Problem. Einfach "nur" im ESPEasy ein MQTT Controller definieren und bei den passenden Devices entsprechend das senden "einschalten" (Und noch etwas FHEM-Config). Nur .. kann mir jemand den umgekehrten Weg beschreiben?

Im FHEM-ESPEasy-Modul sende ich einfach ein Event um einen Befehl auf dem Controller abzusetzen.
z.B. "set esp_lampe_02 event Dimm=$Device,$Soll"

Kann man mir sagen, wie man das mit MQTT macht, bzw. wie man den ESPEasy dazu bringt, auf MQTT zu "hören"? Habe jetzt 2 Wochen versucht zu lesen und kriege den Knoten nicht gelöst ...

Danke fürs lesen (und hoffentlich Knoten lösen)

Gruß,
Werner
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Beta-User

..ist doch eher MQTT, oder?

Es gibt lediglich einige wenige Anfragen zu ESPEasy und MQTT in FHEM, von daher würde ich mal verlinken:
https://forum.fhem.de/index.php/topic,121316.0.html
https://forum.fhem.de/index.php/topic,109124.0.html

Im Prinzip geht da alles an denselben Topic (<MQTT subscribe template>/cmd) und braucht halt ein spezielles Format. Für dimmer scheint das "command" zu sein:
PWM,<GPIO>,<state>
PWM,<GPIO>,<state>,<duration>


Setzt halt voraus, dass ein MQTT-Server da ist, den Rest könnte man zusammenpuzzeln, wenn man ein raw-List hätte von dem von autocreate erzeugten Device und wüßte, welcher GPIO (0-15) den Dimmer-output macht (Werte 0-1023).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Wernieman

Bei MQTT verwende ich den FHEM, also "Vorhanden".

Bisher habe ich eine Event im ESPEasy gebaut, so das er bei dem oben genannten Aufruf das passende PWM,<GPIO>,<state> zusammenbastelt (wobei ich <duration> gar nicht kannte).
Danke für die 2 verlinkten Beiträge. Habe diese bei meiner eigenen Suche gar nicht gefunden.
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

DasQ

#3
Geht relativ easy über die rules und einer setlist in FHEM.

Ich muss nur eben auf'n Rechner Switch und fang hier an zu antworten, kommt gleich mehr.

ich hab mir ein IR Sender und empfänger gebaut mit dem ich fernbedienungssignale simuliere und empfang von verschiedensten geräten um mein fernseher, (damals) ist so nimmer im betrieb weis sich da zuviel geändert hat. ich boot aber extra für die den esp nochmals um an die konfigs zu kommen.

hiermit habe ich von fhem aus zum esp gesendet per mqtt(2)
raw von der setlist
attr ESP_IR setList Lauter         ESP-IR/cmd event,Lauter\
Leiser         ESP-IR/cmd event,Leiser\
Pioneer_on_off ESP-IR/cmd event,Pioneer_on_off\
samsung_oben   ESP-IR/cmd event,samsung_oben\
samsung_unten  ESP-IR/cmd event,samsung_unten\
samsung_links  ESP-IR/cmd event,samsung_links\
samsung_rechts ESP-IR/cmd event,samsung_rechts\
samsung_ok     ESP-IR/cmd event,samsung_ok\
samsung_on_off ESP-IR/cmd event,samsung_on_off\
samsung_lauter ESP-IR/cmd event,samsung_lauter\
samsung_leiser ESP-IR/cmd event,samsung_leiser\
samsung_return ESP-IR/cmd event,samsung_return\
samsung_exit   ESP-IR/cmd event,samsung_exit\
samsung_source ESP-IR/cmd event,samsung_source


was dann auf der gegenseite in espeasy in den "Rules" so aussah

rule1
On System#Boot do
Publish %sysname%/ip,%ip%
timerSet,1,60
endon
//       aufruf ---> http://192.168.1.164/control?cmd=event,vu_on_off

On vu_on_off do
  IRSEND,RAW2,UE57575F5FFF*757AFAF57AG9F57AF*757A75F575,38,90,57
endon

On Pioneer_on_off do
IRSEND,PIONEER,A55A38C7A55A38C7,64
endon

On Lauter do
IRSEND,PIONEER,A55A50AFA55A50AF,64
endon

On Leiser do
IRSEND,PIONEER,A55AD02FA55AD02F,64
endon

On Rules#Timer=1 do
Publish %sysname%/uptime,%c_m2dhm%(%uptime%)
Publish %sysname%/BMP280/DruckBMP280,[BMP280#DruckBMP280]
Publish %sysname%/BMP280/TempBMP280,[BMP280#TempBMP280]
Publish %sysname%/BMP280/FeuchteBMP280,[BMP280#FeuchteBMP280]
Publish %sysname%/DHT11/TempDHT11,[DHT11#TempDHT11]
Publish %sysname%/DHT11/FeuchteDHT11,[DHT11#FeuchteDHT11]
Publish %sysname%/ip,%ip%
timerSet,1,600
endon


und rule2

//SamsungTV + AppleTV

On samsung_on_off do
  IRSEND,SAMSUNG,E0E040BF,32
endon

On samsung_oben do
  IRSEND,SAMSUNG,E0E006F9,32
endon

On samsung_unten do
  IRSEND,SAMSUNG,E0E08679,32
endon

On samsung_rechts do
  IRSEND,SAMSUNG,E0E046B9,32
endon

On samsung_links do
  IRSEND,SAMSUNG,E0E0A659,32
endon

On samsung_ok do
  IRSEND,SAMSUNG,E0E016E9,32
endon

On samsung_lauter do
  IRSEND,SAMSUNG,E0E0E01F,32
endon

On samsung_leiser do
  IRSEND,SAMSUNG,E0E0D02F,32
endon

On samsung_return do
  IRSEND,SAMSUNG,E0E01AE5,32
endon

On samsung_exit do
  IRSEND,SAMSUNG,E0E0B44B,32
endon

On samsung_source do
  IRSEND,SAMSUNG,E0E0807F,32
endon




rules muß in espeasy unter "tools--> advanced" aktiviert werden.
ich häng noch ein paar screenshots von der mqtt konfig in espeasy an

Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

Wernieman

Warum pushed Du die "Werte" per Timer, wenn doch espeasy bei den Devices selber pushen kann?

Danke für die Info!
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

DasQ

Ganz einfach,zum einen kann ich an einer zentralen Stelle viele Parameter manipulieren und verändern, z.b. wird uptime oder ip nicht unweigerlich wiederholt oder die sende Frequenz an einem Timer.

Gibt verschiedene Begründungen dafür, läuft seit 4 Jahren absolut stabil und hält mr das Netzwerk mit alle 10min ein pack Infos je esp schön ruhig.

Ich find es übersichtlicher die rules zu pflegen und es geht ja noch bedeutend mehr.
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

Wernieman

OT:
Wie gut kennst Du Dich mit Rules aus?
Muß mir noch eine "Blink-Roul" als Alarm definieren und habe da auch noch keine Idee ....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

DasQ

Eingerostet aber normal ganz gut.

Wenn man mal die espeasy Manual/Tutorial durchstiegen hat, gehts bei mir recht einfach. Aber dort ist eben der Anfang immer etwas steinig.


Erzähl was soll's können.
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

Wernieman

Per FHEM möchte ich das "Blinken" ein/ausschalten können. Das Blinken selber (Blinkrythmus >1sec) würde ich über Timer definieren. Nur ... Normalerweise würde ich den Neuen Zustand definieren über Devicewert=1-Devicewert. Wenn der Alte 0, dann ist der Neue 1 und umgekehrt. irgendwie habe ich einen Blocker im Hirn, wie ich das in den Rules umsetzen würde ....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

DasQ

Da sind zwei (vermutlich auch mehr) gute Beispiele auf der espeasy Seite.

Ich bin mal so plump und kopier die einfach nur raus.

ZitatTaskValueSet
Dummy Device is a single way to store and read value on variable. Just create Generic - Dummy Device and variables inside it.

TaskValueSet TASKnr,VARnr,Value

This example for two switches that toggle one device (LED and Relay on GPIO 13 and 16).

on sw1#state do
  if [dummy#var1]=0
    TaskValueSet 12,1,0
  else
    TaskValueSet 12,1,1
  endif
  gpio,16,[dummy#var1]
  gpio,13,[dummy#var1]
endon

on sw1a#state do
  if [dummy#var1]=0
    TaskValueSet 12,1,1
  else
    TaskValueSet 12,1,0
  endif
  gpio,16,[dummy#var1]
  gpio,13,[dummy#var1]
endon


Und

ZitatStarting/stopping repeating timers with events
To disable an existing timer, set it to 0. This is useful to make repeating timers for things like alarms or warnings:

//start the warning signal when we receive a start_warning event:
On start_warning do
   timerSet,1,2
endon

//stop the warning signal when we receive a stop_warning event:
On stop_warning do
   timerSet,1,0
endon

//create an actual warning signal, every time timer 1 expires:
On Rules#Timer=1 do
   //repeat after 2 seconds
   timerSet,1,2

   //pulse some led on pin 4 shortly
   Pulse,4,1,100

   //produce a short 1000hz beep via a piezo element on pin 14
   tone,14,1000,100

endon
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

Wernieman

O.K. .. scheinbar habe ich aktuell "Tomaten auf den Augen" ..... manchmal ist es doch einfach so simpel ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html