MQTT2_DEVICE und eigene Readings

Begonnen von eisman, 11 November 2026, 12:56:12

Vorheriges Thema - Nächstes Thema

eisman

hi,

wie kann man im  MQTT2_DEVICE eigene readingList und setList Einträge machen,

wie z.B.

readingList
  ESP/ESP15/door:.* door
  ESP/ESP15/temp:.* temperature
  ESP/ESP15/hum:.* humidity
  Test
 
setlist
  led_gruen:0,1,2 ESP/ESP15/led_gruen/cmd $EVTPART1
  led_rot:0,1,2 ESP/ESP15/led_rot/cmd $EVTPART1
  Test:1,2,3,4

Danke
gruss
1x FHEM Debian, Homematic,Z2M,FS20 / 1X VM / 7x ESP
1x FHEM Debian, Homematic,Z2M         / 1X VM / 6x ESP
1x FHEM Debian                                      / 1X VM / 2x ESP
1x Proxmox * 1x MQTT * 1x Raspbery  *  Unifi

Beta-User

Ist die Frage ernst gemeint?

Einfach die betreffenden Attribute setzen...

Format siehe commandref, z.B. ist die gezeigte Zeile mit "Test" unzulässig.
Server: HP-elitedesk@Debian 13, 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

eisman

hi,

Test war nur ein Beispiel,

als reading: mode          // ESP15 attr readingList: more parameters needed
als set      mode:1,2,3,4  // ESP15 attr setList: more parameters needed

beim dummy (bild) geht es leider nicht MQTT2_DEVICE

gruss
1x FHEM Debian, Homematic,Z2M,FS20 / 1X VM / 7x ESP
1x FHEM Debian, Homematic,Z2M         / 1X VM / 6x ESP
1x FHEM Debian                                      / 1X VM / 2x ESP
1x Proxmox * 1x MQTT * 1x Raspbery  *  Unifi

Beta-User

Zitat von: eisman am 11 November 2026, 12:56:12wie z.B.

readingList
  ESP/ESP15/door:.* door
  ESP/ESP15/temp:.* temperature
  ESP/ESP15/hum:.* humidity
Hier zeigst du doch schon die eine Variante einer formal korrekten readingList: Jede Zeile "Topic:Payload-regex Reading". Warum nimmst du das dann nicht als funktionierenden Basis und entwickelst es (in Übereinstimmung mit der commandref zu MQTT2_DEVICE) weiter?

Anders als bei "dummy" gibt es bei MQTT doch (typischerweise) zum einen eine Datenquelle, die das Reading befüllt (Topic), und ein Ziel, auf den ein set-Befehl am Ende ein "publish" verursachen soll, was dann wieder per Topic-Payload ausgeführt wird...
Server: HP-elitedesk@Debian 13, 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

eisman

hi,

nein, das Problem ist die daten kommen über MQTT,
das klappt ja auch, nur müsste ich ein reading haben das:

z.B. erlaubt:wert1,wert2,wert3,usw. enthält, was nicht über mqtt kommt,
was über userattr: erlaubt geht, was aber wieder ein Nachteil mit dem save ist.

jetzt wäre eine Lösung
  1. ein dummy mit den werten, was dan aber für den fall zwei readings benötigt, was dann 4 device ergibt
  2. ein dummy mit MQTT_GENERIC_BRIDGE was ich jetzt aktuell mache und alles funktioniert, aber andere Nachteile hat

gruss

1x FHEM Debian, Homematic,Z2M,FS20 / 1X VM / 7x ESP
1x FHEM Debian, Homematic,Z2M         / 1X VM / 6x ESP
1x FHEM Debian                                      / 1X VM / 2x ESP
1x Proxmox * 1x MQTT * 1x Raspbery  *  Unifi

Beta-User

Zitat von: eisman am 12 November 2026, 12:34:18hi,

nein, das Problem ist die daten kommen über MQTT,
das klappt ja auch, nur müsste ich ein reading haben das:

z.B. erlaubt:wert1,wert2,wert3,usw. enthält, was nicht über mqtt kommt,
was über userattr: erlaubt geht, was aber wieder ein Nachteil mit dem save ist.

jetzt wäre eine Lösung
  1. ein dummy mit den werten, was dan aber für den fall zwei readings benötigt, was dann 4 device ergibt
  2. ein dummy mit MQTT_GENERIC_BRIDGE was ich jetzt aktuell mache und alles funktioniert, aber andere Nachteile hat

gruss


Vermutlich versteht das niemand, der das Umfeld und den Anwendungsfall nicht kennt...

Anmerkungen:
Sowohl in readingList wie in setList kann man schlicht Perl verwenden um z.B.:
- via readingList von MQTT-Seite "unzulässige Werte" auszufiltern oder beliebig umzumappen (Rückgabe des Ergebnisses aus der Funktion als Hash)
- via setList beliebige Kommandos auszulösen. Damit kann man u.A. auch so einen Schnippsel einbauen '{fhem(setreading $name allowedvalue $EVTPART1)}'

Aber das ist Gestochere im Nebel...
Server: HP-elitedesk@Debian 13, 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

eisman

hi,

danke für deine Bemühungen,

dachte eigentlich das ich es sehr einfach erklärt habe.

einfacher Ablauf, ich bekomme von einem entfernten device, eine Meldung Baum (Baum oder Haus oder Mensch)
die Nachricht wird über MQTT an mein FHEM gesendet, Mein FHEM filtert die Nachricht, an Hand meiner
liste im Reading >Erlaubt< in der steht Haus(oder mehrere), da Baum nicht erlaubt ist führt FHEM eine
anderen Befehl aus als bei erlaubt.

wie kann ich also in einem Reading eine Auswahl erstellen ohne Save und im Betrieb, was am besten über setList geht.

gruss
1x FHEM Debian, Homematic,Z2M,FS20 / 1X VM / 7x ESP
1x FHEM Debian, Homematic,Z2M         / 1X VM / 6x ESP
1x FHEM Debian                                      / 1X VM / 2x ESP
1x Proxmox * 1x MQTT * 1x Raspbery  *  Unifi

rabehd

Zitat von: eisman am 12 November 2026, 13:31:15in einem Reading eine Auswahl erstellen

Du kannst dem Reading einen Wert aus einer Liste zu weisen. In einem Reading gibt es keine Auswahl!
Die Zuweisung wäre z.B. in der Definition eine Userreadings umzusetzen.

Zitat von: eisman am 12 November 2026, 13:31:15Mein FHEM filtert die Nachricht, an Hand meiner
liste im Reading >Erlaubt< in der steht Haus(oder mehrere), da Baum nicht erlaubt ist führt FHEM eine
anderen Befehl aus als bei erlaubt.
Klingt eher nach Aktionen, die von einem Event ausgelöst werden.

Auch funktionierende Lösungen kann man hinterfragen.

Beta-User

Zitat von: eisman am 12 November 2026, 13:31:15wie kann ich also in einem Reading eine Auswahl erstellen ohne Save und im Betrieb, was am besten über setList geht.

Indem du umsetzt, was bereits geschrieben ward?
Zitat von: Beta-User am 12 November 2026, 13:05:35- via setList beliebige Kommandos auszulösen. Damit kann man u.A. auch so einen Schnippsel einbauen '{fhem(setreading $name allowedvalue $EVTPART1)}'
Hier ein Beispiel aus mqtt2.template (OpenMQTTGateway_MCU), das halt was anderes macht. Damit wird aber aus MQTT2_DEVICE auch kein "guter und einfacher" dummy-Ersatz.

attr DEVICE setList\
  restart:noArg $\DEVICETOPIC/commands/MQTTtoSYS/config {"cmd":"restart"}\
  update { my $payload = $EVENT; $payload =~ s/$EVTPART0 //; qq($\DEVICETOPIC/commands/MQTTtoSYS/firmware_update $payload) }\
  BT_config { my $payload = $EVENT; $payload =~ s/$EVTPART0 //; qq($\DEVICETOPIC/commands/MQTTtoBT/config $payload) }\
  BT_scan_now:noArg $\DEVICETOPIC/commands/MQTTtoBT/config {"interval":0}\
  [...]
  deleteReadings:noArg {fhem "deletereading -q $NAME (?!associatedWith|attrTemplateVersion|last|LWT|version|Sys_).* 86400"}

Zitat von: rabehd am 12 November 2026, 13:46:39Klingt eher nach Aktionen, die von einem Event ausgelöst werden.
Sehe ich ähnlich, wobei es durchaus erlaubt ist, direkt via Perl-Funktion die Payload beliebig auszuwerten. Kommt ein Hash zurück, werden die Paare als Reading-Aktualisierung verwendet, kommt nichts, passiert auch nichts. Direkt Perl (+Anweisung an andere Devices) verwende ich bei einigen Fernbedienungen.
Volle Freiheit, wie man sowas konstuiert...
Server: HP-elitedesk@Debian 13, 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