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

TomLee

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

Meinst Du sowas?
attr <devname> setList allowed:{'multiple,'.ReadingsVal($name,'allowed','none')} {sleep 0.5;;fhem('setreading $NAME $EVTPART0 $EVTPART1')}

eisman

hi,

nein,

ich zeig es noch mal an mein List Stehlampe, die ein umbau auf LED ist,

define LS_0101 dummy
attr LS_0101 DbLogExclude .*
attr LS_0101 alias Stehlampe
attr LS_0101 devStateIcon on:light_floor_lamp@#00FF00:off\
off:light_floor_lamp@#8C8C8C:on\
.*:message_attention@#FF0000:off
attr LS_0101 group LED-Steuerung
attr LS_0101 mqttPublish CMD:topic={"ESP/ESP11/LED/set"}
attr LS_0101 readingList LED-start LED-ende brightness color state
attr LS_0101 room ESP
attr LS_0101 setList state:on,off \
LED-start:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 \
LED-ende:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 \
brightness:0,10,20,30,40,50,60,70,80,90,100 \
color:textField\
on\
off
attr LS_0101 stateFormat state
attr LS_0101 useSetExtensions 1
attr LS_0101 userReadings CMD { ReadingsVal($name,"LED-start",1)    . "," . ReadingsVal($name,"LED-ende",15)    . "," .  \
      ReadingsVal($name,"color","FF0000") . "," . ReadingsVal($name,"brightness",100) . "," . \
      ReadingsVal($name,"state","off")    . ",14" }
attr LS_0101 webCmd :
#   FUUID      6ae0dc14-f33f-3e5d-a72b-43edd5e05eeee637
#   NAME       LS_0101
#   NR         347
#   STATE      off
#   TYPE       dummy
#   READINGS:
#     2026-11-10 07:54:43   CMD             1,15,FFFFFF,100,off,14
#     2026-10-27 18:15:53   LED-ende        15
#     2026-10-28 17:06:19   LED-start       1
#     2026-11-06 13:57:57   brightness      100
#     2026-10-29 23:36:50   color           FFFFFF
#     2026-11-10 07:54:43   state           off
#
setstate LS_0101 off
setstate LS_0101 2026-11-10 07:54:43 CMD 1,15,FFFFFF,100,off,14
setstate LS_0101 2026-10-27 18:15:53 LED-ende 15
setstate LS_0101 2026-10-28 17:06:19 LED-start 1
setstate LS_0101 2026-11-06 13:57:57 brightness 100
setstate LS_0101 2026-10-29 23:36:50 color FFFFFF
setstate LS_0101 2026-11-10 07:54:43 state off


hier gebe ich werte vor die bei on und off verwendet werden,
es funktioniert sehr gut.

ohne großen aufwand wird die LED ein und ausgeschaltet
und
das selbe gibt es als Nachtlicht, und auch hier sind die
vorgaben im Device über set eingestellt.

Beides sind die Stehlampe.

jetzt wollte ich das selbe ausprobieren über MQTT2_Device, da JSON genutzt werden kann.
da ich einige Arduino NANO rumliegen habe, denen ich eine bessere Aufgabe zukommen
lassen wollte. Eine Raumsteuerung über modbus, als im dunklen Schrank zu schlafen.

Zum übertragen brauche ich halt MQTT. Der erste Prototyp läuft auch schon, die Daten
werden über RTU an einen ESP weiter gegeben und von dort über MQTT an FHEM gesendet.
Halt an einem dummy ohne JSON. Und wenn es über MQTT2 nicht klappen, bleibe ich halt
bei einem Dummy als Device.

danke für die Hilfe
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

OK, jetzt ist wenigstens nachvollziehbar, wie das Konzept aussieht: Alle relevanten Infos müssen im Paket gesendet werden, und egal, was du änderst, soll das Paket geschnürt und an dieselbe Adresse gesendet werden.

Generelle Anmerkungen dazu:
- MQTT sollte nach meinem Geschmack in der Regel bidirektional gedacht werden, das angesprochene Device sollte also zurückmelden, dass (und wie) die Anweisung ausgeführt wurde. Gerade für solche Szenarien ist "setStateList" gedacht: Damit kann man regeln, ob z.B. bei brightness-Anweisungen der Zielwert in das Reading geschrieben werden soll - dann landet der Wert auch da, allerdings erst mal (bis zur Bestätigung) in der Form "set_xy".
- Viele Devices akzeptieren "isolierte" Befehle wie (nur) "on" oder "brightness 12" und schalten dann auf den letzten (bzw. mitgegebeben) Wert ein. Dann muss man sich auf der FHEM-Seite nicht dahingehend verkünsteln, dass man umständliche Gesamtpakete schnüren muss...
- Wenn doch notwendig: Das Gesamtpaket kann man auch via myUtils (auzurufen via setList) zusammenpacken, indem man den die aktuelle Anweisung mit dem "bekannten Rest" kombiniert.

Alles Geschmackssache. Ich würde versuchen, nur jeweils den geänderten Wert (JSON-verpackt?) zu übermitteln, und das dann auf der Arduino-Seite entsprechend meiner Erwartungen zu coden (und mit dem "Änderungs-Datensatz" in JSON zu beantworten).

(Vermutlich ist das einigermaßen schwer zu verstehen).
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