Fhem von Android steuern mi MQTT

Begonnen von kleinz, 10 Januar 2021, 11:51:32

Vorheriges Thema - Nächstes Thema

kleinz

So die Steuerung über SSH mit perl aufruf an Fhem klappt ja jetzt. aber die Reaktionszeiten finde ich etwas hoch ca 3 sekunden
Ich würde das ganze jetzt über MQTT machen.
in FHEM hab ich ich folgendes definiert.
#MQTT Server
define MQTT2_FHEM_Server MQTT2_SERVER 1883 global
setuuid MQTT2_FHEM_Server xxxxxxxx-xxxx-xxxx-xxxx-6069867b44d42722
attr MQTT2_FHEM_Server room Server

Wie kann ich nun testen ob der MQTT Server etwas empfängt.
Danke im voraus

kleinz

Ok Verbindung geht
Fhem zeigt mir im Log ankommende Nachrichten an

2021-01-10 12:14:11 MQTT2_DEVICE MQTT2_xxxxxx_xxxx_xxxx_xxxx_6069867b44d42722 test: daten
Also ich sende
Topic = tesz
Message = daten

Wie nun aber muss der richtige Befehl aussehen.
Muss ich die devices die ich schalten will in mqtt definieren und kann dann
Topic:   Device  z.b   GHoma_12345
Message set on
Wenn ich einfach nur den befehl in topic und message setze
set GHoma_625e60 on    dann passiert nix ausser das es im log angezeigt wird


Beta-User

Vielleicht hilft dir dieser Thread bzw. mein heutiger write-up zu MQTT_GENERIC_BRIDGE weiter: https://forum.fhem.de/index.php/topic,117423.msg1120252.html#msg1120252
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

kleinz

Danke werde ich lesen ,darf ich dich per pn fragen wenn ich was nicht verstehe?

Beta-User

Bitte offen fragen, dann haben ggf. auch andere was davon...
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

kleinz

Ok so sieht meine fhem.cfg aus

#MQTT Server
define MQTT2_FHEM_Server MQTT2_SERVER 1883 global
setuuid MQTT2_FHEM_Server 5ff119e2-f33f-ac0a-54ad-6069867b44d42722
attr MQTT2_FHEM_Server room Server

define SYS_MQTT MQTT_DEVICE
attr SYS_MQTT userattr subscribeReading_cmnd
attr SYS_MQTT IODev MQTTGW
attr SYS_MQTT alias MQTT_Command
attr SYS_MQTT icon mqtt_device
attr SYS_MQTT room MQTT_Bridge
attr SYS_MQTT subscribeReading_cmnd fhem/Befehlausfuehren

# MQTT command notify
define n_SYS_MQTT_cmnd notify SYS_MQTT:cmnd:.* \
{\
  if($EVENT =~ qr/.*?: (.*)/p)\
  {\
    my $cmnd = $1;;\
    Log3 ($NAME,5,"execute mqtt command : ".$cmnd);;\
    fhem($cmnd);;\
  }\
}
attr n_SYS_MQTT_cmnd alias Befehle über MQTT in FHEM ausfuehren
attr n_SYS_MQTT_cmnd icon mqtt
attr n_SYS_MQTT_cmnd room FHEM notify


Wenn ich jetzt über mqtt folgendes im topic
set GHoma_625e60 state on
an den MQTT Server sende bwkomme ich diese Antwort

2021-01-10 19:25:15 MQTT2_DEVICE MQTT2_GHoma_625e60_5ff316a6_f33f_99d1_77f7_7b194a3cd534debe set_GHoma_625e60_state_on: set GHoma_625e60 state on
2021-01-10 19:25:28 MQTT2_SERVER MQTT2_FHEM_Server nrclients: 8

Als Fehlermeldung von meiner APP bekomme ich

The arguments , ["set GHoma_625e60 state on"] are the wrong number of arguments for Publish
Note: You will not see another error reported for 5 seconds.

Lasse ich das state weg und setze es in 'set GHoma_xxxxx on'erhate ich das selbe von meiner APP
Ich habe verschiedene Kombinationen probiert .
Wie muss der Befehl aussehen den ich absetzen muss um ihn ein Device schalten zu lassen
?
Danke im voraus



Beta-User

Meine sehr kritischen Anmerkungen zu dieser notify-Konstruktion hattest du nicht wahrgenommen, oder?

Ich kann dir helfen, das ganze mit MQTT_GENERIC_BRIDGE ohne notify etc. aufzugleisen, aber diesen anderen Unsinn (meine deutliche Meinung) supporte ich nicht. Daher hatte ich auch auf einen bestimmten Beitrag verwiesen und nicht auf den ersten Beitrag in diesem Thread...
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

kleinz

Das war alles zu viel info.
Aber ich gehe gerne den weg wo du mir helfen kannst.
Mir gehts nur um das ergebnis nicht um den weg
Aber diese codeschnipsel habe ich nicht verstanden.
Also wie soll ich das ganze machen
#MQTT Server
define MQTT2_FHEM_Server MQTT2_SERVER 1883 global
setuuid MQTT2_FHEM_Server 5ff119e2-f33f-ac0a-54ad-6069867b44d42722
attr MQTT2_FHEM_Server room Server
das ist aber doch richtig oder


Beta-User

Ja, bis dahin paßt es.

Dann das Perl-Modul installieren und FHEM neu starten.

Ab da dann bitte alle Code-Schnippsel über FHEMWEB eingeben, kein direktes edit in der cfg mehr!

Bitte im Wiki nach "Import von Code-Snippets" suchen und dann RAW-Definition-Code posten.
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

kleinz

Aber ich glaube ich habe das perl modul drauf denn ich gebe die befehle mit perl /opt/fhem/fhem.pl xxxxxx ein und es klappt
soll ich trotzdem installieren

kleinz

So habe es installiert und in welches Gerät soll die RAW definition rein ?
Ich denke mqtt2 server?
Welche schnipsel soll ich jetzt rein machen

kleinz

Was ich nicht vestehe
Wenn ich als Topic set device on sende dann legt er in der fhem.cfg folgendes an.

define MQTT2_GHoma_625e60_5ff316a6_f33f_99d1_77f7_7b194a3cd534debe MQTT2_DEVICE GHoma_625e60_5ff316a6_f33f_99d1_77f7_7b194a3cd534debe
setuuid MQTT2_GHoma_625e60_5ff316a6_f33f_99d1_77f7_7b194a3cd534debe 5ffb5320-f33f-99d1-73b1-c3d757128790c7da
attr MQTT2_GHoma_625e60_5ff316a6_f33f_99d1_77f7_7b194a3cd534debe IODev MQTT2_FHEM_Server
attr MQTT2_GHoma_625e60_5ff316a6_f33f_99d1_77f7_7b194a3cd534debe readingList GHoma_625e60_5ff316a6_f33f_99d1_77f7_7b194a3cd534debe:GHoma_625e60\x20on:.* GHoma_625e60_on\
GHoma_625e60_5ff316a6_f33f_99d1_77f7_7b194a3cd534debe:set\x20GHoma_625e60\x20on:.* set_GHoma_625e60_on
attr MQTT2_GHoma_625e60_5ff316a6_f33f_99d1_77f7_7b194a3cd534debe room MQTT2_DEVICE
define FileLog_MQTT2_GHoma_625e60_5ff316a6_f33f_99d1_77f7_7b194a3cd534debe FileLog ./log/MQTT2_GHoma_625e60_5ff316a6_f33f_99d1_77f7_7b194a3cd534debe-%Y.log MQTT2_GHoma_625e60_5ff316a6_f33f_99d1_77f7_7b194a3cd534debe
setuuid FileLog_MQTT2_GHoma_625e60_5ff316a6_f33f_99d1_77f7_7b194a3cd534debe 5ffb5320-f33f-99d1-d5b6-0354fd99c247e192
attr FileLog_MQTT2_GHoma_625e60_5ff316a6_f33f_99d1_77f7_7b194a3cd534debe logtype text
attr FileLog_MQTT2_GHoma_625e60_5ff316a6_f33f_99d1_77f7_7b194a3cd534debe room MQTT2_DEVICE


Der Eventlog zeigt folgendes

2021.01.10 21:13:19 2 : autocreate: define MQTT2_GHoma_625e60_5ff316a6_f33f_99d1_77f7_7b194a3cd534debe MQTT2_DEVICE GHoma_625e60_5ff316a6_f33f_99d1_77f7_7b194a3cd534debe MQTT2_FHEM_Server
2021.01.10 21:13:19 2 : autocreate: define FileLog_MQTT2_GHoma_625e60_5ff316a6_f33f_99d1_77f7_7b194a3cd534debe FileLog ./log/MQTT2_GHoma_625e60_5ff316a6_f33f_99d1_77f7_7b194a3cd534debe-%Y.log MQTT2_GHoma_625e60_5ff316a6_f33f_99d1_77f7_7b194a3cd534debe
2021-01-10 21:13:19 Global global UNDEFINED MQTT2_GHoma_625e60_5ff316a6_f33f_99d1_77f7_7b194a3cd534debe MQTT2_DEVICE GHoma_625e60_5ff316a6_f33f_99d1_77f7_7b194a3cd534debe MQTT2_FHEM_Server
2021-01-10 21:13:19 Global global DEFINED MQTT2_GHoma_625e60_5ff316a6_f33f_99d1_77f7_7b194a3cd534debe
2021-01-10 21:13:19 Global global DEFINED FileLog_MQTT2_GHoma_625e60_5ff316a6_f33f_99d1_77f7_7b194a3cd534debe
2021-01-10 21:13:19 Global global ATTR MQTT2_GHoma_625e60_5ff316a6_f33f_99d1_77f7_7b194a3cd534debe readingList GHoma_625e60_5ff316a6_f33f_99d1_77f7_7b194a3cd534debe:set\x20GHoma_625e60\x20on:.* set_GHoma_625e60_on
2021-01-10 21:13:19 MQTT2_DEVICE MQTT2_GHoma_625e60_5ff316a6_f33f_99d1_77f7_7b194a3cd534debe set_GHoma_625e60_on:


setze ich set device off
zeigt der Eventmonitor folgendes

2021-01-10 21:15:10 MQTT2_DEVICE MQTT2_GHoma_625e60_5ff316a6_f33f_99d1_77f7_7b194a3cd534debe set_GHoma_625e60_off:



Er legt also doh ein mqtt2 device an oder ?
Muss ich jetzt nicht nur das event auswerten und sagen wenn das kommt mache das  ?

Beta-User

Zitat von: kleinz am 10 Januar 2021, 21:17:38
Muss ich jetzt nicht nur das event auswerten und sagen wenn das kommt mache das  ?
So _kann_ man das machen. Aber wie ich in dem anderen Thread bereits deutlichst geäußert hatte, ist es einfach KEINE GUTE IDEE, FHEM-Befehle im Klartext via MQTT zu versenden.
Wenn du das unbedingt willst, findest du in dem genannten Thread auch eine Lösung, die direkt aus dem MQTT2_DEVICE den Befehl ausführt, was aber weiter NICHT EMPFEHLENSWERT bleibt.

Der Weg über MQTT_GENERIC_BRIDGE wäre, an das Zieldevice dann noch zwei Attribute zu bringen:

attr Licht_Essen mqttGB1Publish state:topic={"$base"}
attr Licht_Essen mqttGB1Subscribe state:stopic={"$base"}

Ersetze "Licht_Essen" durch deinen Device-Namen (GHoma_625e60?) und den von mir gewählten Präfix für die MQTT_GENERIC_BRIDGE (mqttGB1) durch deine eigenene Werte, und du kannst on und off senden und Empfangen wie hier dargestellt...
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

kleinz

Ich würde es gerne so machen wie du meinst.
Also ich setze diese beiden attr ein und was muss ich noch machen.
Bin von der menge Code überfordert weil von verschiedenen Sachen geredet wird
Ich möchte Fhem als MQTT server und keinen externen.
Ich möchte es auch sicherer machen also nix inverschlüsselt wenn es geht.
Aber reicht es wenn ich meinen code nur um deine beiden attr ergänze oder muss ich dann noch was definieren?

Beta-User

#14
Also der Reihe nach:

1. Du brauchst eine laufende MQTT_GENERIC_BRIDGE. Diese beiden Befehle müssen daher ohne Beschwerden durchlaufen:

defmod MGB1 MQTT_GENERIC_BRIDGE mqttGB1
attr MGB1 globalDefaults sub:base={"FHEM_main/MQTT2FHEM/$device"} pub:base={"FHEM_main/FHEM2MQTT/$device"} pub:qos=0 sub:qos=2 retain=0

(EDIT: code korrigiert)

"Im Prinzip" kannst du da an ein paar Stellen entscheiden, die Dinge anders zu benennen: MGB1, mqttGB1, FHEM_main und MQTT2FHEM bzw. FHEM2MQTT sind einfach Textbausteine, die mehr oder weniger beliebig gewählt sind, aber im Folgenden gehe ich davon aus, dass es in Sende- und Empfangsrichtung je einen _unterschiedlichen_ Topic gibt und der irgendwo auch $device enthält.

2. Wenn du MQTT2_SERVER verwendest und autocreate aktiv hast, solltest du ein MQTT2_DEVICE haben, das dir die gemeinsame Verwendung von MQTT_GENERIC_BRIDGE und autocreate ermöglicht:

define MQTT2_MGB1_bridgeRegexp MQTT2_DEVICE
attr MQTT2_MGB1_bridgeRegexp bridgeRegexp FHEM_main/MQTT2FHEM/.*:.* ""

Selbstredend sollte diese zweite Zeile auf ggf. geänderte Pfade angepaßt werden...

3. Dann kannst du dein eigentliches "Zieldevice" (das heißt doch GHoma_625e60, oder?) um die Attribute für die Steuerung via MQTT ergänzen:
attr GHoma_625e60 mqttGB1Publish state:topic={"$base"}
attr GHoma_625e60 mqttGB1Subscribe state:stopic={"$base"}

Die Namen der Attribute sind dabei im ersten Teil abhängig von dem, was du oben gewählt hattest.

4. Testen:
a) In Empfangsrichtung solltest du jetzt einen in FHEM ausgelösten Schaltvorgang übermittelt bekommen, und der Ausgangs-Zähler im Device MGB1 sollten sich erhöhen. Wie du das mit deiner App machst, kann ich nicht sagen, ich habe dazu die mosquitto_sub-Befehle hingepinselt.
Wenn das klappt, kannst du Teil b) testen:
b) In Senderichtung musst du dann einfach nur die Payload "on" an den entsprechenden Topic versenden, wie das bei mir ausschaut, war für mosquitto_pub in dem anderen Thread zu erkennen.

Weniger Code wird es nicht, und ich hoffe, du kannst das jetzt so nachbauen. Aber bitte dabei immer einen Schritt nach dem anderen, wenn die Aktivierung von MQTT_GENERIC_BRIDGE fehlschlägt, kann man auch keine Attribute irgendwo anders setzen...
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