MQTT2_DEVICE - "Geheimbefehl" inactive ?

Begonnen von pwlr, 16 Oktober 2019, 02:02:11

Vorheriges Thema - Nächstes Thema

pwlr

Moin,

ich steh auf dem Schlauch, vielleicht kann jemand helfen. Ich bastel mir mit dem ESP8266_12F ein Device, dass via MQTT mit dem MQTT2_Server kommuniziert. Im fhem habe ich dann noch ein MQTT2_DEVICE zur Steuerung und Anzeige angelegt. Zur Steuerung will ich den ESP auch individuell deaktivieren und aktieren konnen. Ging bis vor einigen Tagen alles sehr gut. Heute habe ich dann mit dem Befehl inactive zum ESP sowohl den ESP wunschgemäss schlafen gelegt - aber auch das MQTT2_DEVICE im fhem für immer ausgeschaltet.
Hier das List vom MQTT2_DEVICE
Internals:
   CFGFN     
   DEVICETOPIC bmw248716_2
   FUUID      5da651ed-f33f-5817-dd39-727d834fcb857383
   IODev      MQTT2_Broker
   LASTInputDev MQTT2_Broker
   MQTT2_Broker_MSGCNT 22
   MQTT2_Broker_TIME 2019-10-16 01:12:42
   MSGCNT     22
   NAME       bmw248716_2
   NR         487
   STATE      inactive
   TYPE       MQTT2_DEVICE
   .attraggr:
   .attrminint:
   READINGS:
     2019-10-16 01:12:42   AP              Fritz_xxx
     2019-10-16 01:12:42   D-serialNr      bmw248716
     2019-10-16 01:12:42   MAC             38:2B:78:03:CB:8C
     2019-10-16 01:12:42   SSID            Nord-IoT
     2019-10-16 01:12:42   battery         ok
     2019-10-16 01:12:42   interval            60
     2019-10-16 01:12:42   mqttDiscon      22
     2019-10-16 01:12:42   rssi            -64.0
     2019-10-16 01:12:53   state           inactive
     2019-10-16 01:12:41   watchdog        alive
Attributes:
   IODev      MQTT2_Broker
   autocreate 0
   group      Series_2
   readingList fhem/2CC82F/bmw_mqtt_0003/watchdog/set:.* watchdog
fhem/2CC82F/bmw_mqtt_0003/AP/set:.* AP
fhem/2CC82F/bmw_mqtt_0003/D-serialNr/set:.* D-serialNr
fhem/2CC82F/bmw_mqtt_0003/MAC/set:.* MAC
fhem/2CC82F/bmw_mqtt_0003/SSID/set:.* SSID
fhem/2CC82F/bmw_mqtt_0003/battery/set:.* battery
fhem/2CC82F/bmw_mqtt_0003/mqttDiscon/set:.* mqttDiscon
fhem/2CC82F/bmw_mqtt_0003/rssi/set:.* rssi
fhem/2CC82F/bmw_mqtt_0003/interval/set:.* interval
fhem/2CC82F/bmw_mqtt_0003/state/set:.* state
   room       Arduino
   setList    deviceRequest:noArg fhem/bmw_mqtt_0003/2CC82F/request deviceRequest
active:noArg fhem/bmw_mqtt_0003/2CC82F/request active
inactive:noArg fhem/bmw_mqtt_0003/2CC82F/request inactive
wifi_scan:noArg fhem/bmw_mqtt_0003/2CC82F/request wifi_scan
set_interval fhem/bmw_mqtt_0003/2CC82F/request set_interval


Der Befehl
inactive:noArg fhem/bmw_mqtt_0003/2CC82F/request inactive
wird mit dem richtigen Topic an den ESP geschickt aber leider wird offensichtlich auch dieses MQTT2_DEVICE deaktiviert.

Mit
active:noArg fhem/bmw_mqtt_0003/2CC82F/request active
wird leider das MQTT2_DEVICE nicht wieder aktiviert. Ich habe dann noch ein neues Device angelegt - das sofort funktioiert. Aber das konnte ich auch gleich wieder mit dem Befehl ausknipsen...

In der Doku habe ich nichts gefunden, was auf diese Steuerung hindeuted.

BUG, Geheimbefehl oder ein Dokuproblem ?

Moin und schon mal Danke für Eure Hilfe !
Bernd


Beta-User

Ohne das näher im Code gesucht zu haben: "inactive" ist (im STATE oder state?) tendenziell bei vielen Device-Typen das Signal, nichts mehr zu tun...
Ist an sich kein Geheimwissen, aber in der Regel ist ein Modul nicht so offen gestaltet wie MQTT2_DEVICE, als dass man da "einfach so" drüberstolpern könnte ;D .

Würde vorschlagen, das etwas anders zu gestalten und z.B. zum einen ein Reading "activation" mit den Optionen "activation:active,inactive" zu verwenden (und $EVTPART1 als Payload zu definieren), und zum anderen ggf. die setStateList irgendwie zu füllen (NICHT mit activation...).
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

pwlr

danke für die Infos !
Scheint wirklich so zu sein, dass das Device "von sich aus" auch auf inactive geht. Das muss aber durch eine Änderung in der letzten Zeit passiert sein, weil meine Abläufe vor kurzer Zeit noch funktioniert haben.

Wäre aber interessant zu wissen, wie man so ein MQTT2_DEVICE wieder aktivieren kann. Löschen und neu anlegen ist ja nun nicht besonders professionell.

Wie auch immer, ich habe wie folgt meine Befehle an den ESP geändert:
set_active:noArg fhem/bmw_mqtt_0003/2CC82F/request set_active
set_sleeping:noArg fhem/bmw_mqtt_0003/2CC82F/request set_sleeping


Nach Ausführung des Befehls quittiert mein ESP dann mit "CMDs done" bzw. einer anderen Statusmeldung/Fehlermeldung auf das Reading state.

ZitatWürde vorschlagen, das etwas anders zu gestalten und z.B. zum einen ein Reading "activation" mit den Optionen "activation:active,inactive" zu verwenden (und $EVTPART1 als Payload zu definieren), und zum anderen ggf. die setStateList irgendwie zu füllen (NICHT mit activation...).

Geh leider nicht, weil ich strukturell die Topics für Befehle und Readings getrennt habe, um ein möglichst kompatibles Bild zum Beispiel zu meinen HM-Devices zu bekommen und um auch in den Readings wirklich nur die Infos vom ESP zu sehen.

Nur mit
<ommand>:<noArg|arguments> fhem/bmw_mqtt_0003/2CC82F/request <command>
wird der Command-Interpreter im ESP angesteuert. Als Antwort wird dann state gesendet.
readingList fhem/2CC82F/bmw_mqtt_0003/state/set:.* state\ ...usw

ok, das ist meine individuelle Programmierung des ESP, hat nix mit dem MQTT2_DEVICE zu tun und das kann niemand wissen.

Danke für Deine Hilfe !!!!
Bernd



Beta-User

Vermutlich reicht es, das Reading zu ändern (setreading oder deletereading).

Was den Rest angeht, kann ich das mit "kompatiblem Bild" nicht richtig nachvollziehen. Es ist klar, dass die zurückgelieferte Info und der Befehl irgendwie einen geschlossenen Kreis bilden sollten, aber das kann man auf mehrere Arten erreichen. Gerade "state" zu nutzen finde ich persönlich immer etwas kritisch, weil sich das auf essentielle Funktionen beschränken sollte (das scheint hier aber zu passen). mit "activation" hätte man z.B. auch das Reading in der Rücklieferung so benennen können und dann das Reading via stateFormat in STATE schreiben...
Da man eine Perl-Funktion für die Auswertung nutzen kann, ist prinzipiell "alles möglich" ;) . (Nur eben nicht "inactive" und evtl. noch ein oder zwei andere Schlüsselwörter in state).
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