Schalten eine mehrkanaligen MQTT2 Device (ESP8266) mit Portexpander (MCP23017)

Begonnen von stonev, 08 Juli 2019, 21:33:45

Vorheriges Thema - Nächstes Thema

stonev

Hallo,
noch drei Tage bis zum Urlaub und die zeitgesteuerte Gartenbewässerung sollte funktionieren. Ich sehe aber gerade den Wald vor Bäumen nicht und es gibt soviel noch zu tun...

Ich habe im Garten einen ESP 07 mit einer MCP23017 Porterweiterung (Output). An den Ports des MCP23ß17 habe ich 12 Relais. Installiert ist Tasmota.
Über die Tasmotakonsole lassen sich die Relais auch schalten. Nun soll das auch aus FHEM heraus gehen, aber irgendwie bin ich zu blöd.

Unter FHEM ist der MQTT2 Server installiert.
Das Device (ESP8266 mit Tasmota) wurde per autocreate erkannt und ein MQTT2 Device angelegt. Hier mal ein list dieses MQTT2 Devices:

Save config ?
Aussen
DOIF
Garage
MQTT2
MQTT2_DEVICE
Rolladen
Rolladenautomatik
SmartVisu
Unsorted
Zimmer Maya
Zimmer Tim
icoEverything Everything
Logfile
Commandref
Remote doc
Edit files
Select style
Event monitor
restart
update
updatecheck
reloadMyUt ils

Internals:
   CID        DVES_264C43
   DEF        DVES_264C43
   DEVICETOPIC MQTT2_DVES_264C43
   FUUID      5d239018-f33f-d066-0b96-253ef8aa117849ba
   IODev      MQTT2server
   LASTInputDev MQTT2server
   MQTT2server_MSGCNT 157
   MQTT2server_TIME 2019-07-08 20:55:37
   MSGCNT     157
   NAME       MQTT2_DVES_264C43
   NR         57
   STATE      ???
   TYPE       MQTT2_DEVICE
   READINGS:
     2019-07-08 20:53:49   BME280_Humidity 51.7
     2019-07-08 20:53:49   BME280_Pressure 1010.4
     2019-07-08 20:53:49   BME280_Temperature 18.1
     2019-07-08 20:50:29   LWT             Online
     2019-07-08 20:53:49   LoadAvg         19
     2019-07-08 20:53:49   MCP230XX_D0     0
     2019-07-08 20:53:49   MCP230XX_D1     0
     2019-07-08 20:53:49   MCP230XX_D10    0
     2019-07-08 20:53:49   MCP230XX_D11    0
     2019-07-08 20:53:49   MCP230XX_D12    0
     2019-07-08 20:53:49   MCP230XX_D13    0
     2019-07-08 20:53:49   MCP230XX_D14    0
     2019-07-08 20:53:49   MCP230XX_D15    1
     2019-07-08 20:53:49   MCP230XX_D2     0
     2019-07-08 20:53:49   MCP230XX_D3     0
     2019-07-08 20:53:49   MCP230XX_D4     0
     2019-07-08 20:53:49   MCP230XX_D5     0
     2019-07-08 20:53:49   MCP230XX_D6     0
     2019-07-08 20:53:49   MCP230XX_D7     0
     2019-07-08 20:53:49   MCP230XX_D8     0
     2019-07-08 20:53:49   MCP230XX_D9     0
     2019-07-08 20:53:49   MCP230_OUT_END  1
     2019-07-08 20:53:49   MCP230_OUT_OUT_D0 OFF
     2019-07-08 20:53:49   MCP230_OUT_OUT_D1 OFF
     2019-07-08 20:53:49   MCP230_OUT_OUT_D10 OFF
     2019-07-08 20:53:49   MCP230_OUT_OUT_D11 OFF
     2019-07-08 20:53:49   MCP230_OUT_OUT_D12 OFF
     2019-07-08 20:53:49   MCP230_OUT_OUT_D13 OFF
     2019-07-08 20:53:49   MCP230_OUT_OUT_D14 OFF
     2019-07-08 20:53:49   MCP230_OUT_OUT_D15 ON
     2019-07-08 20:53:49   MCP230_OUT_OUT_D2 OFF
     2019-07-08 20:53:49   MCP230_OUT_OUT_D3 OFF
     2019-07-08 20:53:49   MCP230_OUT_OUT_D4 OFF
     2019-07-08 20:53:49   MCP230_OUT_OUT_D5 OFF
     2019-07-08 20:53:49   MCP230_OUT_OUT_D6 OFF
     2019-07-08 20:53:49   MCP230_OUT_OUT_D7 OFF
     2019-07-08 20:53:49   MCP230_OUT_OUT_D8 OFF
     2019-07-08 20:53:49   MCP230_OUT_OUT_D9 OFF
     2019-07-08 20:50:29   POWER           
     2019-07-08 20:53:49   PressureUnit    hPa
     2019-07-08 20:55:37   S29cmnd_D4_COMMAND OFF
     2019-07-08 20:55:37   S29cmnd_D4_STATE OFF
     2019-07-08 20:53:49   Sleep           50
     2019-07-08 20:53:49   SleepMode       Dynamic
     2019-07-08 20:53:49   Switch1         ON
     2019-07-08 20:53:49   TempUnit        C
     2019-07-08 20:53:49   Time            2019-07-08T19:53:48
     2019-07-08 20:53:49   Uptime          0T22:16:00
     2019-07-08 20:53:49   Vcc             3.595
     2019-07-08 20:53:49   Wifi_AP         1
     2019-07-08 20:53:49   Wifi_BSSId      F0:B0:14:FE:C1:2C
     2019-07-08 20:53:49   Wifi_Channel    1
     2019-07-08 20:53:49   Wifi_Downtime   0T00:00:29
     2019-07-08 20:53:49   Wifi_LinkCount  4
     2019-07-08 20:53:49   Wifi_RSSI       48
     2019-07-08 20:53:49   Wifi_SSId       Stones
Attributes:
   IODev      MQTT2server
   alias      Gartenhaus
   readingList DVES_264C43:tele/Gartenhaus/LWT:.* LWT
DVES_264C43:cmnd/Gartenhaus/POWER:.* POWER
DVES_264C43:stat/Gartenhaus/RESULT:.* { json2nameValue($EVENT) }
DVES_264C43:tele/Gartenhaus/STATE:.* { json2nameValue($EVENT) }
DVES_264C43:tele/Gartenhaus/SENSOR:.* { json2nameValue($EVENT) }
   room       MQTT2_DEVICE



Ich brauch ja irgendwann mal 12 Schalter on:off für die Relais (derzeit reichen zwei für den Garten).
Kann ich die alle innerhalb dieses Devices mit setlist und webcmd anlegen, oder funktioniert das nur für ein Relais?

Falls das nur für ein Relais geht, muss ich dann für jedes Relais einen Dummy anlegen?

Ich habe mal so einen Dummy testweise angelegt, aber das mit den Topics unter setlist kriege ich auch irgendwie nicht hin...
Internals:
   CFGFN     
   DEVICETOPIC Rasensprenger
   FUUID      5d239524-f33f-d066-8bd9-6c222e8d05ba15a5
   IODev      MQTT2server
   NAME       Rasensprenger
   NR         96
   STATE      off
   TYPE       MQTT2_DEVICE
   READINGS:
     2019-07-08 21:25:04   state           off
Attributes:
   IODev      MQTT2server
   devStateIcon ON:rc_GREEN:OFF OFF:rc_RED:ON
   setList    on cmnd/Gartenhaus/MCP230XX_D1 on\
off cmnd/Gartenhaus/MCP230XX_D1 off
   webCmd     on:off


Wie müssen die Topics statt "cmnd/Gartenhaus/MCP230XX_D1" aussehen, damit das funktioniert?

stonev

So sieht die Konfiguration von MQTT unter Tasmota aus:

Beta-User

Hmm,

zum einen wäre es klarer, um was es geht, wenn aus dem Threadtitel hervorginge, dass es um ein mehrkanaliges Device und MQTT2_DEVICE geht...

Zum anderen: Du brauchst eher keinen Dummy, sondern mußt zunächst entscheiden, ob du pro Kanal ein Gerät haben willst oder mehrere Kanäle auf einem Gerät (oder Mischformen davon...). Das geht alles als MQTT2_DEVICE, es ist "nur" die Frage, wie die setList und die readingList jeweils aufgebaut ist.
Vielleicht schaust du dir mal die mqtt2.template-File an, da gibt es u.a. auch für Tasmota Konfigurationsbeispiele, wie man dieselbe Hardware als mehrkanaliges Großdevice oder als "gesplittete" Einzeldevices konfiguriert.

(Allgemein würde ich bei Tasmota im "nur-FHEM-Modus" auch empfehlen, die auf Kleinschreibung ("off" statt "OFF" usw.) umzustellen; auch dafür gibt es ein attrTemplate).

Da es hier etwas anders ist mit der I2C-Erweiterung, wäre es noch hilfreich zu wissen, auf welche topics die Schaltbefehle jeweils zu senden wären und über welchen Weg die Rückmeldung zum Schaltstatus der MCP-PINs kommen (wir müssen ggf. den JSON filtern, der über RESULT (?) zurückkommt...).

Als Start wäre es vermutlich erst mal am besten, das als "Großdevice" zu konfigurieren; evtl. ist es dann einfacher (wg. der Topic-Struktur usw.), die Kanäle dann jeweils mit einem ReadingsProxy zu vereinzeln.
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

DasQ

Würde ich nicht mit tasmota, sondern mit espeasy machen.
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

Beta-User

Zitat von: DasQ am 09 Juli 2019, 10:04:47
Würde ich nicht mit tasmota, sondern mit espeasy machen.
Ist zwar aus meiner Warte OT, aber kannst du  kurz erläutern warum, einschließlich der Frage, ob mit dem/n ESPEasy-Modul(en) oder weiter über den MQTT-Weg?

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

DasQ

#5
Er hat nen esp8266-07und da bietet espeasy weit mehr und einfachere Möglichkeiten.
Und klar ist es jetzt z.b. Bei mqtt besonders geeignet. Da ich mir die topics basteln kann wie ich will.

Aber der wohl entscheidendste Faktor ist die wesentlich leichtere Konfiguration/Bedienung ... mit Klickibunti webif und als autarker client.

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

stonev

Zitat von: Beta-User am 09 Juli 2019, 07:33:59
Da es hier etwas anders ist mit der I2C-Erweiterung, wäre es noch hilfreich zu wissen, auf welche topics die Schaltbefehle jeweils zu senden wären und über welchen Weg die Rückmeldung zum Schaltstatus der MCP-PINs kommen (wir müssen ggf. den JSON filtern, der über RESULT (?) zurückkommt...).

Das ist mein vorrangiges Problem. Normalerweise ist der Pfad für normale Relais unter Tasmota

cmnd/%topic%/<command> <parameter>
z. B. cmnd/Gartenhaus/Power1 on   


Den MCP230XX kann ich nicht mit Power<x> ansprechen - das ist klar. Aber was muss hin?

Folgende Varianten habe ich erfolglos versucht:

cmnd/Gartenhaus/sensor29 1
cmnd/Gartenhaus/MCP230XX_D1
cmnd/Gartenhaus/MCP230_OUT_OUT_D1
cmnd/Gartenhaus/S29cmnd_D1


Wie kann ich am schnellsten den MQTT Befehl testen? Ich nehme an im MQTT2 Server oben in dem Eingabefeld neben publish, oder?

Zitat von: Beta-User am 09 Juli 2019, 07:33:59
Zum anderen: Du brauchst eher keinen Dummy, sondern mußt zunächst entscheiden, ob du pro Kanal ein Gerät haben willst oder mehrere Kanäle auf einem Gerät (oder Mischformen davon...). Das geht alles als MQTT2_DEVICE, es ist "nur" die Frage, wie die setList und die readingList jeweils aufgebaut ist.
Vielleicht schaust du dir mal die mqtt2.template-File an, da gibt es u.a. auch für Tasmota Konfigurationsbeispiele, wie man dieselbe Hardware als mehrkanaliges Großdevice oder als "gesplittete" Einzeldevices konfiguriert.

Das mit den mehreren Einzeldevices habe ich gesehen. Also ein MQtt2 Device für eines der zwölf Relais. Dann kann ich unter setlist und webcmd die Schaltflächen für on und off definieren.
Was ich noch nicht verstanden habe - wie soll das als Großdevice funktionieren? Mit setlist kann ich doch nur einmal on oder off definieren. Ich möchte aber alle Relais getrennt voneinander schalten können. Natürlich könnte ich mir für das nächste Relais was neues ausdenken, z. B. an und aus, aber das sähe später ziemlich gruselig aus und wäre furchtbar zu bedienen. Ideal wäre, wenn im Großdevice in der Webansicht für jedes Relais ein Name vergeben werden könnte mit jeweils on,off Schaltflächen. Unter diesen Namen sollten die Relais auch anderweitig in FHEM angesprochen werden können.

Beta-User

Was der korrekte Pfad ist, weiß ich auch nicht, ggf. bitte im Tasmota-Forum (extern) nachfragen, wenn sich hier dazu keiner meldet...

Wie du schon bemerkt hast, kann man u.a. auch das IO direkt zum publishen/testen nutzen.

Was Einzel/Sammeldevice angeht: das ginge ggf. auch parallel, bei den mehrkanaligen in der template-file müßte es auch Beispiele geben mit dropdowns ("Kanal1:on,off"). Aber z.B. die SetExtensions gingen damit nicht bzw. nur in einem Kanal... Ich würde also zunächst sehen, dass ich das mit einem Großdevice funktional bekäme, danach kann man das leicht splitten oder auch doppelte Devices anlegen.

Vielleicht schaust du dir ggf. vorab die genannte Alternative mit ESPEasy mal an, auch wenn mir die Erläuterung von DasQ mangels Kenntnis des Moduls nicht vollständig einleuchtet?

Was den JSON und die Filterei angeht: Da brauchen wir erst mal zusätzlich den unausgepackten JSON (readingList-Eintrag doppeln, aber die Kopie ohne json2nameValue() als eigenes Reading nutzen. Vielleicht schaust du dir mal das Tasmota-RF und -IR-template an und überfliegst den Thread zum RF, da sollte das "ansatzweise" erläutert sein...
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

Nighthawk

Hallo,

ich setze ebenfalls Tasmota mit dem MCP23017 Modul ein.
Bei mir werden die Readings in ein MQTT Device geschrieben.
Das MCP23017  habe ich in 8 Eingänge (wovon ich aktuell nur 1 nutze) und 8 Ausgänge eingeteilt.

Die Readingslist sieht folgendermaßen aus:
tele/Garage/LWT:.* LWT
  tele/Device/STATE:.* { json2nameValue($EVENT) }
  tele/Device/SENSOR:.* { json2nameValue($EVENT) }
  tele/Device/INFO.:.* { json2nameValue($EVENT) }
  tele/Device/UPTIME:.* { json2nameValue($EVENT) }
  stat/Device/RESULT:.* { json2nameValue($EVENT) }



Zum steuern von den Ausgängen habe ich folgende Setlist:

green cmnd/Device/sensor29 8,
red cmnd/Device/sensor29 9,
blue cmnd/Device/sensor29 10,


geschaltet wird dann mit set Device green on

Gruß
Alex

stonev

Moin,
meine Setlist funktioniert nun mit folgendem Eintrag:
on cmnd/Gartenhaus/sensor29 1,on
off cmnd/Gartenhaus/sensor29 1,off


Danke dafür  :D

Damit das für den Urlaub mit der Bewässerung klappt, habe ich erstmal zwei Einzeldevices angelegt und darauf einen Weekdaytimer gesetzt. Die Pflanzen sind also erstmal save. In 3 Wochen würde ich den Thread dann wieder hoch holen, um den Rest mal sauber umzusetzen.

Canon.Fritz

Moin,

ich probiere ebenfalls den MCP23017 (Tasmota) über Fhem anzusprechen.
Bis jetzt leider ohne Erfolg.
Bei mir ist Mosquitto als MQTT Server installiert

Ich habe das Beispiel von Nighthawk bei mir mal eingepflegt. Allerdings mit meinen Werten.

green cmnd/Device/sensor29 8,Leider brachte es mich nicht weiter

Anbei mal meine Settings.

defmod Werkstatt MQTT_DEVICE
attr Werkstatt IODev Mosquitto
attr Werkstatt publishSet green cmnd/Werkstatt/sensor29 0,
attr Werkstatt subscribeReading_INFO tele/Device/INFO:.* { json2nameValue($EVENT) }
attr Werkstatt subscribeReading_LWT tele/Garage/LWT:.* LWT
attr Werkstatt subscribeReading_RESULT tele/Device/RESULT:.* { json2nameValue($EVENT) }
attr Werkstatt subscribeReading_SENSOR tele/Device/SENSOR:.* { json2nameValue($EVENT) }
attr Werkstatt subscribeReading_STATE tele/Device/STATE:.* { json2nameValue($EVENT) }


Ich hoffe ihr habt einen Tipp für mich  ;)
FHEM auf Raspberry3, Betriebssystem Raspberry Pi OS, diverse Wemos D1 mini Boards, Sonoff S20, Shellys

rudolfkoenig


Nighthawk

@Canon.Fritz

Hast Du in Tasmota die Option für den Mode "output" auch in der User_config_override.h aktiviert und die IOs auch entsprechend konfiguriert (Pinmode 5 oder 6 zum Schalten als Ausgang)?
Hier mehr Infos zur Konfiguration: https://github.com/arendst/Sonoff-Tasmota/wiki/MCP23008-MCP23017

Bitte beachte auch dass green in meinem Fall ein frei gewählter Name für einen Ausgang ist und 8 der entsprechende Ausgang am MCP.

Gruß
Alex

Canon.Fritz

Mit der Hilfe von rudolfkoenig hat es nun funktioniert  :)

Zitat von: rudolfkoenig am 04 August 2019, 13:00:50
Ja, von MQTT_DEVICE auf MQTT2_DEVICE umzusteigen :)

Vielen Dank für die schnelle Hilfe  8)
FHEM auf Raspberry3, Betriebssystem Raspberry Pi OS, diverse Wemos D1 mini Boards, Sonoff S20, Shellys