MQTT device für Android Controllino [gelöst]

Begonnen von Maxl, 23 Juni 2023, 12:13:11

Vorheriges Thema - Nächstes Thema

Maxl

Hallo,

ich möchte mir wie den Shellys ein Device anlegen um Eingäne einlesen bzw. Ausgänge zu schalten.
Das Device selbst erscheint inzwischen in der Oberfläche. Dazu sollten nun auch ein paar ICONs
für die I/Os ergänmzt werden. Ich hätte versucht ein ähnliches Konstrukt wie bei den Shelly 4fach
Aktuator zu bauen, will aber nicht. Gibt es irgendwo ein Codeschnipsel wie vorgegangen werden soll,
aus dem Wiki https://wiki.fhem.de/wiki/MQTT werde ich nicht ganz schlau.

define MQTT2_controllino_pool MQTT2_DEVICE controllino_pool
setuuid MQTT2_controllino_pool 6495681e-f33f-49a1-2815-43f59a8605e6f95a
attr MQTT2_controllino_pool icon HutschIcon3
attr MQTT2_controllino_pool readingList controllino_pool:/relais/0/:.* relais_0\
controllino_pool:/relais/1/:.* relais_1\
controllino_pool:/relais/2/:.* relais_2\
controllino_pool:/relais/3/:.* relais_3\
controllino_pool:/relais/4/:.* relais_4\
controllino_pool:/pumpspeed/:.* pumpspeed
attr -MQTT2_controllino_pool devStateIcon {my $onl = ReadingsVal($name,"online","false") eq "false" ? "rot" : ReadingsVal($name,"new_fw","false") eq "true" ? "gelb" : "gruen";;;; my $light = ReadingsVal($name,"state","off");;;; my $show = '<a href="';;;;$show .= $onl eq "gelb" ? "/fhem?cmd.dummy=set $name x_update&XHR=1\">" : "http://".ReadingsVal($name,"ip","none").' "target="_blank">';;;;$show .= FW_makeImage("10px-kreis-".$onl)."</a>";;;; "<div> $show <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($light)."</a></div>" }
attr -MQTT2_controllino_pool model shelly4pro_unified
attr -MQTT2_controllino_pool setList relay0:iconSwitch,on,li_wht_off,off,li_wht_on controllino_pool/relay/0/command $EVTPART1\
  relay1:iconSwitch,on,li_wht_off,off,li_wht_on controllino_pool/relay/1/command $EVTPART1\
  relay2:iconSwitch,on,li_wht_off,off,li_wht_on controllino_pool/relay/2/command $EVTPART1\
  relay3:iconSwitch,on,li_wht_off,off,li_wht_on controllino_pool/relay/3/command $EVTPART1\
  x_update:noArg controllino_pool/command update_fw\
  x_mqttcom controllino_pool/command $EVTPART1
attr -MQTT2_controllino_pool stateFormat R0: relay0 R1: relay1 R2: relay2 R3: relay3
attr -MQTT2_controllino_pool webCmd relay0:relay1:relay2:relay3
attr MQTT2_controllino_pool room MQTT2_DEVICE
#define FileLog_MQTT2_controllino_pool FileLog ./log/MQTT2_controllino_pool-%Y.log MQTT2_controllino_pool
#setuuid FileLog_MQTT2_controllino_pool 6495681e-f33f-49a1-1170-43414c3de7427aad
#attr FileLog_MQTT2_controllino_pool logtype text
#attr FileLog_MQTT2_controllino_pool room MQTT2_DEVICE

Du darfst diesen Dateianhang nicht ansehen.
FHEM auf Raspberry mit HM, HMC und AVR Netios.

Beta-User

a) "Schritt für Schritt" dürfte zu MQTT2_DEVICE die bessere Adresse im wiki sein.
b)
controllino_pooldürfte in setList (im Moment) zu viel sein.
c) diese sehr kurzen topics (in readingList) sind m.E. zu schlecht unterscheidbar.
d) besser (erst) mal "den Hauptschalter" nach "state" mappen.
e) keine config-Auszüge Posten. "Copy for forum" (oder raw-list)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

TomLee

#2
Die Vermutung liegt nahe das du in der fhem.cfg die Device-Definition ergänzt/bearbeitet hast und dabei bei mehreren Attributen dem Devicenamen einen Bindestrich vorangestellt hast. Wenn du den entfernst und die zuvor genannten Punkte b und c anpasst, sollte dein Vorhaben schon tun.

Maxl

#3
Hallo,

nun im richtigen Format, ich hätte hoffentlich nun alles richtig abgeändert, mir kommt es aber so vor als ob FHEM keinen Befehl zum Devive versendet, zumindest sehe ich nichts im Netz mit WIRESHARK oderFHEM Log, FHEM zeigt mir aber alles an was vom ARDUINO versendet wird. Die Lämpchen wie beim SHELLY Aktor erscheinen ebenfalls nicht, was könnte noch falsch sein?

[code]define MQTT2_controllino_pool MQTT2_DEVICE controllino_pool
attr MQTT2_controllino_pool devStateIcon {my $onl = ReadingsVal($name,"online","false") eq "false" ? "rot" : ReadingsVal($name,"new_fw","false") eq "true" ? "gelb" : "gruen";;;; my $light = ReadingsVal($name,"state","off");;;; my $show = '<a href="';;;;$show .= $onl eq "gelb" ? "/fhem?cmd.dummy=set $name x_update&XHR=1\">" : "http://".ReadingsVal($name,"ip","none").' "target="_blank">';;;;$show .= FW_makeImage("10px-kreis-".$onl)."</a>";;;; "<div> $show <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($light)."</a></div>" }
attr MQTT2_controllino_pool icon HutschIcon3
attr MQTT2_controllino_pool model shelly4pro_unified
attr MQTT2_controllino_pool readingList controllino_pool:/relais0/:.* relais0\
controllino_pool:/relais1/:.* relais1\
controllino_pool:/relais2/:.* relais2\
controllino_pool:/relais3/:.* relais3\
controllino_pool:/relais4/:.* relais4\
controllino_pool:/pumpspeed/:.* pumpspeed
attr MQTT2_controllino_pool room MQTT2_DEVICE
attr MQTT2_controllino_pool setList relay0:iconSwitch,on,li_wht_off,off,li_wht_on controllino_pool/relay/0/command $EVTPART1\
  relay1:iconSwitch,on,li_wht_off,off,li_wht_on controllino_pool/relay/1/command $EVTPART1\
  relay2:iconSwitch,on,li_wht_off,off,li_wht_on controllino_pool/relay/2/command $EVTPART1\
  relay3:iconSwitch,on,li_wht_off,off,li_wht_on controllino_pool/relay/3/command $EVTPART1\
  relay4:iconSwitch,on,li_wht_off,off,li_wht_on controllino_pool/relay/4/command $EVTPART1\
  x_update:noArg controllino_pool/command update_fw\
  x_mqttcom controllino_pool/command $EVTPART1
attr MQTT2_controllino_pool stateFormat R0: relay0 R1: relay1 R2: relay2 R3: relay3 R4: relay4
attr MQTT2_controllino_pool webCmd relay0:relay1:relay2:relay3:relay4
#   CID        controllino_pool
#   DEF        controllino_pool
#   FUUID      64993057-f33f-49a1-9c51-c262a9ce9a080baa
#   IODev      MQTT2_FHEM_Server
#   LASTInputDev MQTT2_FHEM_Server
#   MQTT2_FHEM_Server_CONN MQTT2_FHEM_Server_192.168.1.16_49236
#   MQTT2_FHEM_Server_MSGCNT 234
#   MQTT2_FHEM_Server_TIME 2023-06-28 08:33:22
#   MSGCNT     234
#   NAME       MQTT2_controllino_pool
#   NR         79
#   STATE      R0: relay0 R1: relay1 R2: relay2 R3: relay3 R4: relay4
#   TYPE       MQTT2_DEVICE
#   eventCount 239
#   READINGS:
#     2023-06-28 08:14:34   IODev           MQTT2_FHEM_Server
#     2023-06-28 08:33:22   pumpspeed       0
#     2023-06-28 08:33:22   relais0         on
#     2023-06-28 08:33:22   relais1         off
#     2023-06-28 08:33:22   relais2         off
#     2023-06-28 08:33:22   relais3         off
#     2023-06-28 08:33:22   relais4         off
#     2023-06-28 08:20:49   state           relay0
#     2023-06-28 08:09:53   subscriptions   /controllino_pool/relais0 /controllino_pool/relais1 /controllino_pool/relais2 /controllino_pool/relais3 /controllino_pool/relais4
#
setstate MQTT2_controllino_pool R0: relay0 R1: relay1 R2: relay2 R3: relay3 R4: relay4
setstate MQTT2_controllino_pool 2023-06-28 08:14:34 IODev MQTT2_FHEM_Server
setstate MQTT2_controllino_pool 2023-06-28 08:33:22 pumpspeed 0
setstate MQTT2_controllino_pool 2023-06-28 08:33:22 relais0 on
setstate MQTT2_controllino_pool 2023-06-28 08:33:22 relais1 off
setstate MQTT2_controllino_pool 2023-06-28 08:33:22 relais2 off
setstate MQTT2_controllino_pool 2023-06-28 08:33:22 relais3 off
setstate MQTT2_controllino_pool 2023-06-28 08:33:22 relais4 off
setstate MQTT2_controllino_pool 2023-06-28 08:20:49 state relay0
setstate MQTT2_controllino_pool 2023-06-28 08:09:53 subscriptions /controllino_pool/relais0 /controllino_pool/relais1 /controllino_pool/relais2 /controllino_pool/relais3 /controllino_pool/relais4

[/code]
FHEM auf Raspberry mit HM, HMC und AVR Netios.

Beta-User

Vergleich mal "subscriptions" mit den Topics der setList ;) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Maxl

#5
Verstanden, funktioniert jetzt, ich sehe die Symbole und kann auch schalten, aber ein Befehl wird immer noch nicht an das Device gesendet,
es gibt kein "publish message" seitens FHEM bei meinem Device, da komme ich einfach nicht weiter.

2023-06-28_12:52:57 MQTT2_at_home_controllino_pool relay_0
2023-06-28_12:53:01 MQTT2_at_home_controllino_pool relay_0
2023-06-28_12:53:03 MQTT2_at_home_controllino_pool relay_0: on
2023-06-28_12:53:03 MQTT2_at_home_controllino_pool relay_1: on
2023-06-28_12:53:03 MQTT2_at_home_controllino_pool relay_2: off
2023-06-28_12:53:03 MQTT2_at_home_controllino_pool relay_3: off
2023-06-28_12:53:03 MQTT2_at_home_controllino_pool relay_4: on
2023-06-28_12:53:03 MQTT2_at_home_controllino_pool pumpspeed: 0

[code]define MQTT2_at_home_controllino_pool MQTT2_DEVICE at_home_controllino_pool
attr MQTT2_at_home_controllino_pool devStateIcon {my $onl = ReadingsVal($name,"online","false") eq "false" ? "rot" : ReadingsVal($name,"new_fw","false") eq "true" ? "gelb" : "gruen";;;; my $light = ReadingsVal($name,"state","off");;;; my $show = '<a href="';;;;$show .= $onl eq "gelb" ? "/fhem?cmd.dummy=set $name x_update&XHR=1\">" : "http://".ReadingsVal($name,"ip","none").' "target="_blank">';;;;$show .= FW_makeImage("10px-kreis-".$onl)."</a>";;;; "<div> $show <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($light)."</a></div>" }
attr MQTT2_at_home_controllino_pool readingList at_home_controllino_pool:at_home/controllino_pool/relay/0:.* relay_0\
at_home_controllino_pool:at_home/controllino_pool/relay/1:.* relay_1\
at_home_controllino_pool:at_home/controllino_pool/relay/2:.* relay_2\
at_home_controllino_pool:at_home/controllino_pool/relay/3:.* relay_3\
at_home_controllino_pool:at_home/controllino_pool/relay/4:.* relay_4\
at_home_controllino_pool:at_home/controllino_pool/pumpspeed:.* pumpspeed
attr MQTT2_at_home_controllino_pool room MQTT2_DEVICE
attr MQTT2_at_home_controllino_pool setList relay_0:iconSwitch,on,li_wht_off,off,li_wht_on at_home/controllino_pool/relay/0/command $EVTPART1\
  relay_1:iconSwitch,on,li_wht_off,off,li_wht_on at_home/controllino_pool/relay/1/command $EVTPART1\
  relay_2:iconSwitch,on,li_wht_off,off,li_wht_on at_home/controllino_pool/relay/2/command $EVTPART1\
  relay_3:iconSwitch,on,li_wht_off,off,li_wht_on at_home/controllino_pool/relay/3/command $EVTPART1\
  relay_4:iconSwitch,on,li_wht_off,off,li_wht_on at_home/controllino_pool/relay/4/command $EVTPART1\
  x_update:noArg shellies/shelly4pro-4D114C/command update_fw\
  x_mqttcom at_home/controllino_pool/command $EVTPART1
attr MQTT2_at_home_controllino_pool stateFormat R0: relay_0 R1: relay_1 R2: relay_2 R3: relay_3 R4: relay_4
attr MQTT2_at_home_controllino_pool webCmd relay_0:relay_1:relay_2:relay_3:relay_4
#   CID        at_home_controllino_pool
#   DEF        at_home_controllino_pool
#   FUUID      649c0d9b-f33f-7117-5b06-01cf27b07908f380
#   IODev      MQTT2_FHEM_Server
#   LASTInputDev MQTT2_FHEM_Server
#   MQTT2_FHEM_Server_CONN MQTT2_FHEM_Server_192.168.1.16_49302
#   MQTT2_FHEM_Server_MSGCNT 36
#   MQTT2_FHEM_Server_TIME 2023-06-28 12:55:01
#   MSGCNT     36
#   NAME       MQTT2_at_home_controllino_pool
#   NR         84
#   STATE      R0: on R1: on R2: off R3: off R4: on
#   TYPE       MQTT2_DEVICE
#   eventCount 38
#   READINGS:
#     2023-06-28 12:52:11   IODev           MQTT2_FHEM_Server
#     2023-06-28 12:55:01   pumpspeed       0
#     2023-06-28 12:55:01   relay_0         on
#     2023-06-28 12:55:01   relay_1         on
#     2023-06-28 12:55:01   relay_2         off
#     2023-06-28 12:55:01   relay_3         off
#     2023-06-28 12:55:01   relay_4         on
#     2023-06-28 12:53:01   state           relay_0
#
setstate MQTT2_at_home_controllino_pool R0: on R1: on R2: off R3: off R4: on
setstate MQTT2_at_home_controllino_pool 2023-06-28 12:52:11 IODev MQTT2_FHEM_Server
setstate MQTT2_at_home_controllino_pool 2023-06-28 12:55:01 pumpspeed 0
setstate MQTT2_at_home_controllino_pool 2023-06-28 12:55:01 relay_0 on
setstate MQTT2_at_home_controllino_pool 2023-06-28 12:55:01 relay_1 on
setstate MQTT2_at_home_controllino_pool 2023-06-28 12:55:01 relay_2 off
setstate MQTT2_at_home_controllino_pool 2023-06-28 12:55:01 relay_3 off
setstate MQTT2_at_home_controllino_pool 2023-06-28 12:55:01 relay_4 on
setstate MQTT2_at_home_controllino_pool 2023-06-28 12:53:01 state relay_0

FHEM auf Raspberry mit HM, HMC und AVR Netios.

rudolfkoenig

Es ist verwirrend, dass im letzten Listing kein subscriptions mehr vorhanden ist.

Beta-Users Hinweis sagt, dass wenn in subscriptions alle Elemente mit /controllino_pool/... anfangen, dann muessen auch alle Elemente in setList mit /controllino_pool anfangen und nicht mit controllino_pool (ohne / am Anfang) oder at_home.

subscriptions ist das, was der MQTT-Client vom Server hoeren will.
Alles andere interessiert ihn nicht.

Beta-User

Ergänzend:
Da stand ....relais1
In setList kann daher ..../relay/1 nicht richtig (gewesen) sein. Das ganze wirkt auf mich imoment so, als würde der TE gleichzeitig an mehreren Stellen rumschrauben. Das wäre dann (ohne explizite Hinweise ) nicht hilfreich für uns Helfer!
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Maxl

Hallo,

ich dachte ich habe die Hinweise richtig gedeutet,
Zitatc) diese sehr kurzen topics (in readingList) sind m.E. zu schlecht unterscheidbar.
-> darum jetzt länger gemacht
ZitatVergleich mal "subscriptions" mit den Topics der setList
-> darum aus relais - relay in Arduino damit alles zusammenpasst

ZitatBeta-Users Hinweis sagt, dass wenn in subscriptions alle Elemente mit /controllino_pool/... anfangen, dann muessen auch alle Elemente in setList mit /controllino_pool anfangen und nicht mit controllino_pool (ohne / am Anfang) oder at_home.
das müsste doch nun der Fall sein oder ich verstehe den Satz nicht  :'(
attr MQTT2_at_home_controllino_pool setList relay_0:iconSwitch,on,li_wht_off,off,li_wht_on at_home/controllino_pool/relay/0/command $EVTPART1\
  relay_1:iconSwitch,on,li_wht_off,off,li_wht_on at_home/controllino_pool/relay/1/command $EVTPART1\
attr MQTT2_at_home_controllino_pool readingList at_home_controllino_pool:at_home/controllino_pool/relay/0:.* relay_0\
at_home_controllino_pool:at_home/controllino_pool/relay/1:.* relay_1\
at_home_controllino_pool:at_home/controllino_pool/relay/2:.* relay_2\

es werden nun auch die Lämpchen angezeigt
Du darfst diesen Dateianhang nicht ansehen.
 
Der Controllino x.x.x.16 sendet und FHEM x.x.x.119 empfängt auch richtig
Du darfst diesen Dateianhang nicht ansehen.

Mir fällt auf, wenn ich mein Controllino Device betätige ist nie ein "on" oder "off" enthalten, sobald ich eine angelernte Shelly-Plug betätige sehe ich im LOG das "on" oder "off" und auch eine MQTT Message in Wire-Shark. Wieso wird beim Controllino das "on" oder "off" nicht ergänzt?

2023-06-28 21:42:02.427 MQTT2_DEVICE MQTT2_at_home_controllino_pool relay_0
2023-06-28 21:42:02.823 MQTT2_DEVICE MQTT2_at_home_controllino_pool relay_0
2023-06-28 21:42:03.271 MQTT2_DEVICE MQTT2_at_home_controllino_pool relay_0
2023-06-28 21:42:03.701 MQTT2_DEVICE MQTT2_at_home_controllino_pool relay_0
2023-06-28 21:42:04.345 MQTT2_DEVICE MQTT2_shellyplug_s_083A8DC14BA4 on
2023-06-28 21:42:05.989 MQTT2_DEVICE MQTT2_shellyplug_s_083A8DC14BA4 off

FHEM auf Raspberry mit HM, HMC und AVR Netios.

Beta-User

relay/0/command ist aber vermutlich nicht das, was in subscriptions (fehlt!) zu finden war. "relay0" wäre mein Tipp in diesem Ratespiel.

Ansonsten macht dieses unstrukturierte Gestochere auf mich den Eindruck, dass die gegebenen Hinweise nicht gelesen werden - frustrierend...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

rudolfkoenig

Zitatdas müsste doch nun der Fall sein oder ich verstehe den Satz nicht  :'(
Ich versuche es nochmal.

Das zweite Wort(*) in jeder setList Zeile muss genau einem Wort in subscriptions entsprechen.
Wenn subscriptions "/controllino_pool/relais0 /controllino_pool/relais1 ..." ist, dann muss das in setList genauso hinterlegt sein:
attr MQTT2_controllino_pool setList\
relay0:iconSwitch,on,li_wht_off,off,li_wht_on /controllino_pool/relais0 $EVTPART1\
relay1:iconSwitch,on,li_wht_off,off,li_wht_on /controllino_pool/relais1 $EVTPART1\
...

Alles andere wird vom MQTT2_SERVER nicht zu controllino geschickt, weil sie vom controllino nicht bestellt wurde.

(*) Mit Wort meine ich hier eine durch Leerzeichen getrennte Zeichenfolge.

Maxl

Hallo,

jetzt habe ich es verstanden, was gemeint ist - DANKE - und siehe da es funktioniert  :-)
es ging um das subscribe cmd unter Arduino, dies sollte zusammenpassen mit der setList in FHEM

   client.subscribe("at_home/controllino_pool/relay/0/command");   
 
relay_0:iconSwitch,on,li_wht_off,off,li_wht_on at_home/controllino_pool/relay/0/command $EVTPART1\
FHEM auf Raspberry mit HM, HMC und AVR Netios.

Beta-User

:)

Schritt 2 wäre dann zu überlegen, ob es (nur) einen "Hauptschalter" gibt, der "state" sein soll und direkt per on/off geschaltet werden soll, oder ob alle relay-Elemente je gesondert behandelt werden sollten (=> "split"-Variante mit 4 M2D-Instanzen)?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors