MQTT-Neuling braucht Hilfe (p4d - Fröling S1 Turbo Holzscheitkessel mit S-3200)

Begonnen von hoppel118, 19 April 2020, 23:12:06

Vorheriges Thema - Nächstes Thema

hoppel118

Hallo Leute,

ich habe meinen Fröling Holzscheitkessel über einen RPi mit usb2serial Interface an mein FHEM angebunden. Die MQTT-Verbindung zw. Holzscheitkessel und FHEM steht. Ich habe von MQTT bisher keine Ahnung. Also habt bitte Nachsicht mit mir. Das Wiki und Commandref habe ich gelesen, verstehe aber nur die Hälfte bzw. finde zu meiner Problamtik nichts. ;)

Nähere Details zur Installation sind in folgendem Beitrag zu finden: https://forum.fhem.de/index.php/topic,65573.15.html

Da dort momentan niemand reagiert, möchte ich gern einen eigenen Thread hier im MQTT-Bereich starten. Ich habe einen MQTT2_SERVER eingerichtet. Per autocreate wurde ein MQTT2_DEVICE mit einer großen readingList angelegt:

Internals:
   CID        p4d_publisher
   DEF        p4d_publisher
   DEVICETOPIC MQTT2_p4d_publisher
   FUUID      5e99776c-f33f-5dcf-2ab6-b971959880093aca
   IODev      mqtt2server
   LASTInputDev mqtt2server
   MSGCNT     230868
   NAME       MQTT2_p4d_publisher
   NR         573
   STATE      ???
   TYPE       MQTT2_DEVICE
   mqtt2server_MSGCNT 230868
   mqtt2server_TIME 2020-04-19 22:57:50
   READINGS:
     2020-04-19 22:57:50   name            Kesselzustand
     2020-04-19 22:57:50   state_topic     p4d2mqtt/sensor/Kesselzustand_0x1c9/state
     2020-04-19 22:57:50   unique_id       Kesselzustand_0x1c9_p4d2mqtt
     2020-04-19 22:57:50   unit_of_measurement
     2020-04-19 22:57:50   value           5.00
     2020-04-19 22:57:50   value_template  {{ value_json.value }}
Attributes:
   IODev      mqtt2server
   readingList p4d_publisher:homeassistant/sensor/Kesseltemperatur_0x0/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/Kesseltemperatur_0x0/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/Status/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/Status/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/Abgastemperatur_0x1/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/Abgastemperatur_0x1/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/Betriebsmodus/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/Betriebsmodus/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/Boardtemperatur_0x2/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/Boardtemperatur_0x2/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/Uhrzeit/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/Uhrzeit/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/Au\xc3\x9fentemperatur_0x4/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/Au\xc3\x9fentemperatur_0x4/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/Saugzugdrehzahl_0x7/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/Saugzugdrehzahl_0x7/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/Zykluszeit_0xe/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/Zykluszeit_0xe/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/Saugzug-Ansteuerung_0xf/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/Saugzug-Ansteuerung_0xf/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/Kesselstellgr\xc3\xb6\xc3\x9fe_0x12/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/Kesselstellgr\xc3\xb6\xc3\x9fe_0x12/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/Abgas-Solltemperatur_0x13/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/Abgas-Solltemperatur_0x13/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/Vorlauf-Isttemperatur_0x15/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/Vorlauf-Isttemperatur_0x15/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/Vorlauf-Solltemperatur_0x16/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/Vorlauf-Solltemperatur_0x16/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/BetriebsartHeizkreis_0x17/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/BetriebsartHeizkreis_0x17/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/Vorlauf-Isttemperatur_0x19/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/Vorlauf-Isttemperatur_0x19/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/Vorlauf-Solltemperatur_0x1a/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/Vorlauf-Solltemperatur_0x1a/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/BetriebsartHeizkreis_0x1b/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/BetriebsartHeizkreis_0x1b/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/Boilertemperaturoben_0x5d/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/Boilertemperaturoben_0x5d/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/Betriebsstunden_0x62/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/Betriebsstunden_0x62/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/BetriebsstundeninderFeuererhaltung_0x73/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/BetriebsstundeninderFeuererhaltung_0x73/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/Puffertemperaturoben_0x76/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/Puffertemperaturoben_0x76/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/Puffertemperaturunten_0x78/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/Puffertemperaturunten_0x78/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/PufferpumpenAnsteuerung_0x8c/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/PufferpumpenAnsteuerung_0x8c/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/BoilerpumpeAnsteuerung_0x90/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/BoilerpumpeAnsteuerung_0x90/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/TemperaturdesZweitkessel_0xc4/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/TemperaturdesZweitkessel_0xc4/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/Lambdasondenspannunggemessen_0xd3/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/Lambdasondenspannunggemessen_0xd3/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/StundenseitletzterWartung_0xd5/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/StundenseitletzterWartung_0xd5/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/Lambdasondenspannungkorrigiert_0xdc/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/Lambdasondenspannungkorrigiert_0xdc/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/PufferpumpenbegrenzungdurchAbgastemperatur_0xde/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/PufferpumpenbegrenzungdurchAbgastemperatur_0xde/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/Pufferladezustand_0xe1/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/Pufferladezustand_0xe1/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/F\xc3\xbchleramHydraulikmodul03_0xff/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/F\xc3\xbchleramHydraulikmodul03_0xff/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/BetriebsstundenvonKessel2Brennerkontakt_0x109/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/BetriebsstundenvonKessel2Brennerkontakt_0x109/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/EmpfohleneHolzmengebeimNachlegen_0x10a/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/EmpfohleneHolzmengebeimNachlegen_0x10a/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/BetriebsartBoiler_0x156/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/BetriebsartBoiler_0x156/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/Build_0x16f/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/Build_0x16f/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/Raumf\xc3\xbchlerKBGTouch_0x191/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/Raumf\xc3\xbchlerKBGTouch_0x191/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/Pufferladezustand_0x1bf/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/Pufferladezustand_0x1bf/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/PufferladezustandDiskret_0x1c0/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/PufferladezustandDiskret_0x1c0/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/VergangeneZeitseitletzterW\xc3\xa4rmetauscherreinigung_0x1c7/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/VergangeneZeitseitletzterW\xc3\xa4rmetauscherreinigung_0x1c7/state:.* { json2nameValue($EVENT) }
p4d_publisher:homeassistant/sensor/Kesselzustand_0x1c9/config:.* { json2nameValue($EVENT) }
p4d_publisher:p4d2mqtt/sensor/Kesselzustand_0x1c9/state:.* { json2nameValue($EVENT) }
   room       System->MQTT


Warum werden wie Readings auf diese Weise dargestellt?

Was muss ich tun, damit die Readings FHEM-typisch im Device dargestellt werden.

Testweise habe ich nun weitere Devices manuell angelegt, um dem auf die Schliche zu kommen. Das klappt allerdings nicht.

Hier heißt das Reading "value" und der Messwert passt:

Internals:
   CFGFN     
   CID        p4d_publisher
   DEF        p4d_publisher
   DEVICETOPIC EG_HZR_Heizung
   FUUID      5e9cb8ae-f33f-5dcf-6eb9-6c53bbe48bb640fb
   IODev      mqtt2server
   LASTInputDev mqtt2server
   MSGCNT     14
   NAME       EG_HZR_Heizung
   NR         2252
   STATE      ???
   TYPE       MQTT2_DEVICE
   mqtt2server_MSGCNT 14
   mqtt2server_TIME 2020-04-19 23:00:44
   READINGS:
     2020-04-19 23:00:44   value           58.00
Attributes:
   IODev      mqtt2server
   readingList p4d_publisher:p4d2mqtt/sensor/Kesseltemperatur_0x0/state:.* { json2nameValue($EVENT) }
   room       System->MQTT


Hier ist es andersherum. Der Readingname passt, aber beim Messwert steht "{ "value" : "57.50" }":

Internals:
   CFGFN     
   CID        p4d_publisher
   DEF        p4d_publisher
   DEVICETOPIC EG_HZR_Heizung
   FUUID      5e9cb8ae-f33f-5dcf-6eb9-6c53bbe48bb640fb
   IODev      mqtt2server
   LASTInputDev mqtt2server
   MSGCNT     24
   NAME       EG_HZR_Heizung
   NR         2252
   STATE      ???
   TYPE       MQTT2_DEVICE
   mqtt2server_MSGCNT 24
   mqtt2server_TIME 2020-04-19 23:10:44
   READINGS:
     2020-04-19 23:10:44   Kesseltemperatur { "value" : "57.50" }
Attributes:
   IODev      mqtt2server
   readingList p4d_publisher:p4d2mqtt/sensor/Kesseltemperatur_0x0/state:.* Kesseltemperatur
   room       System->MQTT


Wenn ich so einen homeassistant-Eintrag nehme, sieht es so aus:

Internals:
   CFGFN     
   CID        p4d_publisher
   DEF        p4d_publisher
   DEVICETOPIC EG_HZR_Heizung
   FUUID      5e9cb8ae-f33f-5dcf-6eb9-6c53bbe48bb640fb
   IODev      mqtt2server
   LASTInputDev mqtt2server
   MSGCNT     29
   NAME       EG_HZR_Heizung
   NR         2252
   STATE      ???
   TYPE       MQTT2_DEVICE
   mqtt2server_MSGCNT 29
   mqtt2server_TIME 2020-04-19 23:15:44
   OLDREADINGS:
   READINGS:
     2020-04-19 23:15:44   name            Kesseltemperatur
     2020-04-19 23:15:44   state_topic     p4d2mqtt/sensor/Kesseltemperatur_0x0/state
     2020-04-19 23:15:44   unique_id       Kesseltemperatur_0x0_p4d2mqtt
     2020-04-19 23:15:44   unit_of_measurement °C
     2020-04-19 23:15:44   value_template  {{ value_json.value }}
Attributes:
   IODev      mqtt2server
   readingList p4d_publisher:homeassistant/sensor/Kesseltemperatur_0x0/config:.* { json2nameValue($EVENT) }
   room       System->MQTT


Ich hoffe, ihr könnt mir helfen. ;)

Danke euch und Gruß Hoppel
Server: Openmediavault, XEON E3-1240L-v5, Supermicro X11SSH-CTF, 64GB ECC RAM, SSD, RAID-Z2
Homebridge | Alexa | Yowsup
Homematic | HomeConnect | MQTT | Philips Hue | Sonos | Unifi Network & Protect | vbus | Xiaomi

rudolfkoenig

Wenn ich aus den gezeigten Readings richtig rate,  dann koennte man mit Folgendem readingList mehr Erfolg haben:

homeassistant.* { undef }\
p4d2mqtt.* { my $r1=json2nameValue($EVENT);; my %r2;; $r2{$r1->{name}} = $r1->{value} if($r1->{name});; \%r2 }


Damit ich diesen Vorschlag selbst testen kann, brauche ich topic/message Paare, je mehr, desto besser.

hoppel118

#2
Wenn du das wie folgt meinst, funktioniert es nicht. Die Readings erscheinen nicht:

Internals:
   CID        p4d_publisher
   DEF        p4d_publisher
   DEVICETOPIC EG_HZR_Heizung
   FUUID      5e9cc17b-f33f-5dcf-59f0-01f59be74e89a1ad
   IODev      mqtt2server
   LASTInputDev mqtt2server
   MSGCNT     162
   NAME       EG_HZR_Heizung
   NR         575
   STATE      ???
   TYPE       MQTT2_DEVICE
   mqtt2server_MSGCNT 162
   mqtt2server_TIME 2020-04-20 00:53:49
   READINGS:
Attributes:
   IODev      mqtt2server
   readingList homeassistant.* { undef }
p4d2mqtt.* { my $r1=json2nameValue($EVENT);; my %r2;; $r2{$r1->{name}} = $r1->{value} if($r1->{name});; \%r2 }
   room       System->MQTT


Wo finde ich diese topic/message Paare bzw. wie erzeuge ich diese?

Danke dir
Server: Openmediavault, XEON E3-1240L-v5, Supermicro X11SSH-CTF, 64GB ECC RAM, SSD, RAID-Z2
Homebridge | Alexa | Yowsup
Homematic | HomeConnect | MQTT | Philips Hue | Sonos | Unifi Network & Protect | vbus | Xiaomi

rudolfkoenig

ZitatWo finde ich diese topic/message Paare bzw. wie erzeuge ich diese?
"attr mqtt2server verbose 5" setzen, und FHEM-Log pruefen. Alternativ in einem Shell "mosquitto_sub -v -t #" starten.

hoppel118

Server: Openmediavault, XEON E3-1240L-v5, Supermicro X11SSH-CTF, 64GB ECC RAM, SSD, RAID-Z2
Homebridge | Alexa | Yowsup
Homematic | HomeConnect | MQTT | Philips Hue | Sonos | Unifi Network & Protect | vbus | Xiaomi

Beta-User

Zitat von: rudolfkoenig am 20 April 2020, 00:02:25
Wenn ich aus den gezeigten Readings richtig rate,  dann koennte man mit Folgendem readingList mehr Erfolg haben:

homeassistant.* { undef }\
p4d2mqtt.* { my $r1=json2nameValue($EVENT);; my %r2;; $r2{$r1->{name}} = $r1->{value} if($r1->{name});; \%r2 }


Damit ich diesen Vorschlag selbst testen kann, brauche ich topic/message Paare, je mehr, desto besser.
Hi Rudi,
hast du vor, den autodiscovery-Mechanismus aus Homeassistant nachzubilden?

Wenn nein: afaik handelt es sich bei dem, was unter "homeassistant/#" reinkommt, ganz allgemein um Konfigurationsanweisungen für diesen speziellen Controller. Meine Empfehlung wäre, die auf Ebene des IO's (hier: MQTT2_SERVER?) per "ignoreRegexp" "auszuknipsen.

Dann ist hier noch "doof", dass der eigentliche Sensor- bzw. "Reading"-name irgendwo im Topic-Pfad verborgen ist und dann auch noch Umlaute enthält...

Vielleicht wäre eine ähnliche Konstruktion wie in https://svn.fhem.de/trac/browser/trunk/fhem/FHEM/lib/AttrTemplate/mqtt2.template#L2657 sinnvoll?

Wir können gerne versuchen, da ein attrTemplate draus zu basteln...
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

rudolfkoenig

@hoppel118:
Derjenige, der MQTT fuer dieses Geraet implementiert hat, muss ein "Kuenstler" gewesen sein, und das mehrfach.
Versuchs mal mit Folgendem readingsList:
p4d2mqtt/sensor/.* { $TOPIC=~s,.*sensor/([^/]*)/.*$,$1,; my $h=json2nameValue($EVENT); my %r; $r{makeReadingName($TOPIC)}=$h->{value}; \%r }
homeassistant.* {undef}



@Beta-User:
- mir ist egal, wo man homeassistant ignoriert, ich habs halt hier gemacht.
- wg. L2657: ich verstehe noch nicht, warum $TOPIC da geaendert wird: es zaehlt doch nur die Rueckgabe von json2nameValue, oder uebersehe ich etwas?

Beta-User

"An sich" - und für das eine Device - ist es egal, wo man die homeassisstant-Infos wegwirft, korrekt. Aber da das nicht nur dieses Gerät sendet, sondern manche anderen auch bereits mit den default-Einstellungen, macht es m.E. Sinn, das zentral zu machen, sobald man das erste mal über dieses Ding gestolpert ist.

Habe ehrlich gesagt nie darüber nachgedacht, ob in Zeile 2657 $TOPIC geändert wird ("m,"?); was man halt im Ergebnis braucht, ist das Topic-Element, um es nachher verwenden zu können.

Aber die direkte Lösung über die readingList wie von dir vorgeschlagen ist sicher die bessere Variante :)
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

rudolfkoenig

ZitatHabe ehrlich gesagt nie darüber nachgedacht, ob in Zeile 2657 $TOPIC geändert wird ("m,"?); was man halt im Ergebnis braucht, ist das Topic-Element, um es nachher verwenden zu können.
Sage ich doch: ich habe was uebersehen :)

rudolfkoenig

#9
Eine mAn elegantere Variante ist
p4d2mqtt/sensor/.* { $TOPIC=~m,.*sensor/([^/]*)/,; json2nameValue($EVENT, '', {value=>$1}) }
erzeugt aber Readings mit UTF-8-Umlauten.
Ich habe MQTT2_DEVICE angepasst, damit readingNamen ueber makeReadingName validiert werden, evtl. erzeugt das aber anderswo Nebeneffekte.

Edit: weiter verkuerzt.

Beta-User

Sieht gut aus!

Vielleicht noch zwei Kleinigkeiten in dem Zusammenhang:

1. Ich habe immer mehr den Verdacht, dass grade diese autodiscovery-Geschichten von homeassistant "schuld" sind, dass wir diese "Geisterreadings" haben. Ich neige daher dazu, das bewußt abzubrechen, wenn es keinen match gibt, ähnlich wie in https://svn.fhem.de/trac/browser/trunk/fhem/FHEM/lib/AttrTemplate/mqtt2.template#L2659

2. Da steht noch ein "return undef". Aus der Diskussion an anderer Stelle hatte ich jetzt entnommen, dass es "richtiger" wäre, ein einfaches "return;" zu verwenden.

Käme daher "im Paket" auf folgendes (unless finde ich immer noch nicht "sooo böse"):

p4d2mqtt/sensor/.* { return unless $TOPIC=~m,sensor/([^/]+)/,; my %r=(value=>$1); json2nameValue($EVENT, '', \%r) }\
homeassistant.* {return;}

(letzteres könnte man auch mit einer leeren Klammer schreiben, aber das Schlüsselwort dürfte besser klarmachen, dass eigentlich eine "mach nix"-Reaktion gewünscht ist.
Vermutlich werde ich bei Gelegenheit versuchen, da ein "generalisiertes" ignoreRegexp-Template zu basteln, das man dem IO verpassen kann...)
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

rudolfkoenig

Ich kann mich mit unless nicht befreunden, fuehrt meiner Ansicht nach zu mehrfach verneinte Logik, aber jeder wie es mag.
Man kann es samt return sparen, wenn man das Regexp anders baut.

Die Diskussion um "return undef" wird meiner Ansicht nach nur gefuehrt, damit man was diskutieren kann. Ja, es gibt Faelle, wo ein Anfaenger das Rueckgabewert falsch interpretieren koennte. Hier ist das nicht der Fall, und mir ist im FHEM Umfeld auch keins bekannt, wo das irgendein Unterschied machen wuerde. Und ob es in diesem Fall return oder undef besser ausdrueckt, dass man nichts will, ist Geschmacksache.

Btw: ich habe den Ausdruck weiter verkuerzt, s.o.

hoppel118

Hallo Jungs,

man hier ist ja richtig Action gewesen. Jetzt habe ich Mittagspause. ;)

Folgendes habe ich nun getestet:

Zitat von: Beta-User am 20 April 2020, 11:14:59
p4d2mqtt/sensor/.* { return unless $TOPIC=~m,sensor/([^/]+)/,; my %r=(value=>$1); json2nameValue($EVENT, '', \%r) }\
homeassistant.* {return;}


Das sieht ziemlich genau so aus, wie ich mir das vorgestellt habe. Hier nochmal ein list:

Internals:
   CID        p4d_publisher
   DEF        p4d_publisher
   DEVICETOPIC EG_HZR_Heizung
   FUUID      5e9cc17b-f33f-5dcf-59f0-01f59be74e89a1ad
   IODev      mqtt2server
   LASTInputDev mqtt2server
   MSGCNT     58470
   NAME       EG_HZR_Heizung
   NR         575
   STATE      ???
   TYPE       MQTT2_DEVICE
   mqtt2server_MSGCNT 58470
   mqtt2server_TIME 2020-04-20 12:47:39
   READINGS:
     2020-04-20 12:47:35   Abgas-Solltemperatur_0x13 219.00
     2020-04-20 12:47:34   Abgastemperatur_0x1 119.00
     2020-04-20 12:47:35   Außentemperatur_0x4 11.50
     2020-04-20 12:47:39   BetriebsartBoiler_0x156 1.00
     2020-04-20 12:47:36   BetriebsartHeizkreis_0x17 0.00
     2020-04-20 12:47:36   BetriebsartHeizkreis_0x1b 0.00
     2020-04-20 12:47:34   Betriebsmodus   Dauerlast
     2020-04-20 12:47:36   Betriebsstunden_0x62 9825.00
     2020-04-20 12:47:37   BetriebsstundeninderFeuererhaltung_0x73 27.00
     2020-04-20 12:47:38   BetriebsstundenvonKessel2Brennerkontakt_0x109 2425.00
     2020-04-20 12:47:34   Boardtemperatur_0x2 38.50
     2020-04-20 12:47:37   BoilerpumpeAnsteuerung_0x90 100.00
     2020-04-20 12:47:36   Boilertemperaturoben_0x5d 58.00
     2020-04-20 12:47:39   Build_0x16f     2.00
     2020-04-20 12:47:38   EmpfohleneHolzmengebeimNachlegen_0x10a 0.00
     2020-04-20 12:47:38   FühleramHydraulikmodul03_0xff 58.00
     2020-04-20 12:47:35   Kesselstellgröße_0x12 100.00
     2020-04-20 12:47:34   Kesseltemperatur_0x0 75.50
     2020-04-20 12:47:39   Kesselzustand_0x1c9 3.00
     2020-04-20 12:47:37   Lambdasondenspannunggemessen_0xd3 24.14
     2020-04-20 12:47:38   Lambdasondenspannungkorrigiert_0xdc 24.14
     2020-04-20 12:47:39   PufferladezustandDiskret_0x1c0 4.00
     2020-04-20 12:47:39   Pufferladezustand_0x1bf 97.00
     2020-04-20 12:47:38   Pufferladezustand_0xe1 97.00
     2020-04-20 12:47:37   PufferpumpenAnsteuerung_0x8c 64.00
     2020-04-20 12:47:38   PufferpumpenbegrenzungdurchAbgastemperatur_0xde 8.00
     2020-04-20 12:47:37   Puffertemperaturoben_0x76 75.50
     2020-04-20 12:47:37   Puffertemperaturunten_0x78 74.50
     2020-04-20 12:47:39   RaumfühlerKBGTouch_0x191 19.00
     2020-04-20 12:47:35   Saugzug-Ansteuerung_0xf 90.00
     2020-04-20 12:47:35   Saugzugdrehzahl_0x7 2702.00
     2020-04-20 12:47:34   Status          Heizen
     2020-04-20 12:47:38   StundenseitletzterWartung_0xd5 9825.00
     2020-04-20 12:47:37   TemperaturdesZweitkessel_0xc4 17.00
     2020-04-20 12:47:34   Uhrzeit         Monday, 20. Apr. 2020 12:36:10
     2020-04-20 12:47:39   VergangeneZeitseitletzterWärmetauscherreinigung_0x1c7 334.00
     2020-04-20 12:47:35   Vorlauf-Isttemperatur_0x15 47.50
     2020-04-20 12:47:36   Vorlauf-Isttemperatur_0x19 33.00
     2020-04-20 12:47:36   Vorlauf-Solltemperatur_0x16 48.50
     2020-04-20 12:47:36   Vorlauf-Solltemperatur_0x1a 48.50
     2020-04-20 12:47:35   Zykluszeit_0xe  54.00
Attributes:
   IODev      mqtt2server
   readingList p4d2mqtt/sensor/.* { return unless $TOPIC=~m,sensor/([^/]+)/,; my %r=(value=>$1); json2nameValue($EVENT, '', \%r) }
homeassistant.* {return;}
   room       System->MQTT


Eine Frage habe ich nun dennoch:

Ich habe jetzt das von mir manuell angelegte MQTT2_DEVICE und das per autocreate angelegte Device. Am Liebsten wäre mir natürlich, wenn das per autocreate angelegte Device direkt richtig funktioniert und ich das manuell angelegte Device wieder löschen kann.

Seht ihr da eine Chance oder ist das ab morgen per Update der Fall?

Zitat von: rudolfkoenig am 20 April 2020, 10:07:03
@hoppel118:
Derjenige, der MQTT fuer dieses Geraet implementiert hat, muss ein "Kuenstler" gewesen sein, und das mehrfach.

Das Kompliment gebe ich gern weiter. ;)

DICKES FETTES DANKE SCHÖN! TOP!!!

Viele Grüße Hoppel
Server: Openmediavault, XEON E3-1240L-v5, Supermicro X11SSH-CTF, 64GB ECC RAM, SSD, RAID-Z2
Homebridge | Alexa | Yowsup
Homematic | HomeConnect | MQTT | Philips Hue | Sonos | Unifi Network & Protect | vbus | Xiaomi

rudolfkoenig

Ich habe noch keine Idee, wie man diese vermurkste Schnittstelle automatisch entdecken koennte.
Template zaehlt fuer mich nicht als automatisch, und ist in diesem Fall die beste Loesung.

Achtung: mit dem update werden die "schoenen" Umlaut-Readings  kaputtgemacht.

Beta-User

@Rudi: Das shier habe ich (noch?) nicht verstanden:
ZitatMan kann es samt return sparen, wenn man das Regexp anders baut.

@hoppel118:

"Von alleine" wird weder autocreate noch attrTemplate dieses "Ding" nicht in den Griff bekommen ;D . Du wirst also mit dem händisch erstellten "leben müssen" ;D ;D ;D .

Die erste Zeile kannst du entweder nach Rudi's Vorschlag oder auch so schreiben:
p4d2mqtt/sensor/.* { return unless $TOPIC=~m,sensor/([^/]+)/,; json2nameValue($EVENT, '', {value=>$1}) }
Bei dem ganzen würden mich die mitgelieferten Hex-Adressen noch stören. Da die aber von Bedeutung zu sein scheinen (mind. 2 Vorlauftemp sind genannt), müßte man da doch ggf. irgendwas mit jsonMap umbenennen, wenn man das haben wollte.
Kannst ja mal (parallel an einer Kopie) das hier testen:
p4d2mqtt/sensor/.* { return unless $TOPIC=~m,sensor/([^/]+)/,; json2nameValue($EVENT, "${1}_", $JSONMAP) }

und dazu ein jsonMap-Attribut (aus der Hüfte geschossene Beispiele):

Puffertemperaturoben_0x76_value:Puffertemperatur_oben Kesseltemperatur_0x0_value:Kesseltemperatur
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