ebus Weishaupt MQTT im Zusammenspiel

Begonnen von rob, 13 Juli 2021, 17:33:38

Vorheriges Thema - Nächstes Thema

rob

Hab es eingebaut.
list -r MQTT2_ebusd_21.2_1 sagt:

define MQTT2_ebusd_21.2_1 MQTT2_DEVICE ebusd
attr MQTT2_ebusd_21.2_1 autocreate 1
attr MQTT2_ebusd_21.2_1 bridgeRegexp (ebus\S[^/]*?)/(bai|\d+|cc|e7f|ehp|f\d\d|hc|hc\d+|he.|hmu|hwc|mc|mc.\d|omu|omu.\d|pms|rcc|rcc.\d|sc|sdr_p|solar|ui|uih|v\d\d|v81.\d|vd\d|vl\d|vr_\d\d|zeo)/.*:.* "$1_$2"\
(ebus\S[^/]*?)/(global|broadcast|general|scan[^/]+)/.*:.* "$1"
attr MQTT2_ebusd_21.2_1 comment NOTE: additional templates and code have been downloaded from svn (contrib).<br>Pls. inform the maintainer, if the bridgeRegexp doesn't fit to all of your devices connected to the bus.
attr MQTT2_ebusd_21.2_1 devStateIcon 1.true:it_net 1.false:it_net@red  2.true:lan_rs485 2.false:lan_rs485@red
attr MQTT2_ebusd_21.2_1 icon sani_boiler_temp
attr MQTT2_ebusd_21.2_1 model eBus_daemon_splitter
attr MQTT2_ebusd_21.2_1 readingList ebusd/scan[^/]+/.*:.* { $EVENT=~ s{[{]"value":\s("[^"]+")[}]}{$1}g;; $TOPIC =~ m,scan.([^/]+)/,;; json2nameValue($EVENT,"scan_${1}_") }\
ebusd/global/uptime:.* uptime\
ebusd/broadcast/datetime:.* { json2nameValue($EVENT) }\
ebusd/global/running:.* running\
ebusd/global/version:.* version\
ebusd/global/scan:.* scan\
ebusd/global/signal:.* signal
attr MQTT2_ebusd_21.2_1 room MQTT2_DEVICE
attr MQTT2_ebusd_21.2_1 setList getKnown:noArg ebusd/list onlyknown\
  getAll:noArg ebusd/list
attr MQTT2_ebusd_21.2_1 stateFormat Status: \
1:running\
Signal: \
2:signal\
<br>Uptime: formatedUptime
attr MQTT2_ebusd_21.2_1 userReadings formatedUptime:uptime.* {my $m = ReadingsVal($name,"uptime",0)/60;;;; return sprintf "0 000 00:%02d", $m if $m < 60;;;; my $h = $m / 60;;;; $m %= 60;;;; return sprintf "0 000 %02d:%02d", $h, $m if $h < 24;;;; my $d = $h / 24;;;; $h %= 24;;;; return sprintf "0 %03d %02d:%02d", $d, $h, $m if $d <365;;;; my $y = $d / 365;;;; $d %= 365;;;; return sprintf "%d %03d %02d:%02d", $y, $d, $h, $m}

setstate MQTT2_ebusd_21.2_1 Status: \
1:true\
Signal: \
2:true\
<br>Uptime: 0 000 00:00
setstate MQTT2_ebusd_21.2_1 2021-07-15 09:34:17 HW_value 0302
setstate MQTT2_ebusd_21.2_1 2021-07-15 09:34:39 ID_value ??
setstate MQTT2_ebusd_21.2_1 2021-07-15 09:34:17 MF_value Kromschroeder
setstate MQTT2_ebusd_21.2_1 2021-07-15 09:34:17 SW_value 1200
setstate MQTT2_ebusd_21.2_1 2021-07-15 12:34:18 associatedWith MQTT2_ebusd_21.2_1
setstate MQTT2_ebusd_21.2_1 2021-07-15 08:51:39 attrTemplateVersion 20200824
setstate MQTT2_ebusd_21.2_1 2021-07-15 12:34:42 date_value 15.07.2021
setstate MQTT2_ebusd_21.2_1 2021-07-15 12:34:50 formatedUptime 0 000 00:00
setstate MQTT2_ebusd_21.2_1 2021-07-15 12:34:42 outsidetemp_value 17.000
setstate MQTT2_ebusd_21.2_1 2021-07-15 12:34:02 running true
setstate MQTT2_ebusd_21.2_1 2021-07-15 12:34:49 scan "finished"
setstate MQTT2_ebusd_21.2_1 2021-07-15 09:37:46 scan_08_HW_value 0302
setstate MQTT2_ebusd_21.2_1 2021-07-15 09:37:46 scan_08_ID_value W
setstate MQTT2_ebusd_21.2_1 2021-07-15 09:37:46 scan_08_MF_value Kromschroeder
setstate MQTT2_ebusd_21.2_1 2021-07-15 09:37:46 scan_08_SW_value 1200
setstate MQTT2_ebusd_21.2_1 2021-07-15 12:34:48 scan_0c_ID ??
setstate MQTT2_ebusd_21.2_1 2021-07-15 12:34:13 scan_35_ID W
setstate MQTT2_ebusd_21.2_1 2021-07-15 09:34:15 scan_35_ID_value W
setstate MQTT2_ebusd_21.2_1 2021-07-15 12:34:13 scan_35_MF Kromschroeder
setstate MQTT2_ebusd_21.2_1 2021-07-15 09:34:15 scan_35_MF_value Kromschroeder
setstate MQTT2_ebusd_21.2_1 2021-07-15 12:34:13 scan_35_SW 2726
setstate MQTT2_ebusd_21.2_1 2021-07-15 09:34:15 scan_35_SW_value 2726
setstate MQTT2_ebusd_21.2_1 2021-07-15 12:34:16 scan_f6_HW 0302
setstate MQTT2_ebusd_21.2_1 2021-07-15 12:34:16 scan_f6_ID WWST?
setstate MQTT2_ebusd_21.2_1 2021-07-15 12:34:16 scan_f6_MF Kromschroeder
setstate MQTT2_ebusd_21.2_1 2021-07-15 12:34:16 scan_f6_SW 1200
setstate MQTT2_ebusd_21.2_1 2021-07-15 12:34:18 signal true
setstate MQTT2_ebusd_21.2_1 2021-07-15 08:51:39 state getKnown
setstate MQTT2_ebusd_21.2_1 2021-07-15 12:34:42 time_value 12:37:-
setstate MQTT2_ebusd_21.2_1 2021-07-15 09:36:40 updatecheck "OK"
setstate MQTT2_ebusd_21.2_1 2021-07-15 12:34:50 uptime 48
setstate MQTT2_ebusd_21.2_1 2021-07-15 12:34:02 version "ebusd 21.2.v21.2"


Zitat von: Beta-User am 15 Juli 2021, 11:32:23
Für "SetTemp_value" würde ich z.B. "desiredTemp" vorschlagen...
Für mich OK. Ich bin da leidenschaftslos. Du kannst besser einschätzen, was sich harmonisch einfügt/ Sinn macht.
Bei einigen Readings kann ich eh nur raten, was das sein soll z.B. TrendTemp_value - eingebaute Wettervorhersage?!? :o 8)

Wenn ich Dich richtig verstehe, möchtest Du zunächst die Readings harmonisieren, damit diese unabhängig vom Hersteller gleichartig sind. Korrekt?
Nächster Schritt wäre dann ein Template. Oder?
Ich hab die Templates durchgeschaut. Teilweise werden IODev und Topics gesetzt. Vielleicht kommt man garnicht um ein extriges "weishaupt-Templ." herum? So weit isses aber eh noch nicht.

Aus den anderen Weishaupt-Freds konnte ich nichts ziehen, was uns hier konkret helfen würde (ganz am Schluss ggf. ein paar Graphen). Was kann ich aus Deiner Sicht zur Entlastung noch beisteuern?

Beta-User

Zitat von: rob am 15 Juli 2021, 12:53:53
Für mich OK. Ich bin da leidenschaftslos. Du kannst besser einschätzen, was sich harmonisch einfügt/ Sinn macht.
Ich kann das aber auch nur bei einigen wenigen, von denen ich z.B. weiß, dass z.B. Sprachsteuerungslösungen die "gut" finden (und automatisch erkennen, um was es sich handelt ;) ). "Eigentlich" ist das im Wesentlichen eine Fleißaufgabe für User: https://forum.fhem.de/index.php/topic,117933.0.html (Hinweise bzgl. Heizungsgeräten sind v.a. bei den zigbee2mqtt-mqtt2.template-Threads zu finden).

Zitat
Bei einigen Readings kann ich eh nur raten, was das sein soll z.B. TrendTemp_value - eingebaute Wettervorhersage?!? :o 8)
Na ja, du hast "wenigstens" die Chance zu wissen, aus welchem Register die kommen; sehr vielleicht hat dann auch jemand eine Idee (von Doku ganz zu schweigen!), was sie zu bedeuten haben...

Zitat
Wenn ich Dich richtig verstehe, möchtest Du zunächst die Readings harmonisieren, damit diese unabhängig vom Hersteller gleichartig sind. Korrekt?
Einheitliche "Benennungen" von der eBus-Seite für identische Inhalte zu bekommen, wäre das Optimum, was man erreichen kann. So wie ich das verstanden habe, ginge das nur, wenn die csv's identisch wären (und z.B. bekannt, was sich eigentlich hinter welchem Register verbirgt usw.).

Soweit würde ich im Moment _nicht_ gehen wollen, das wird sonst uferlos!

Was wir beeinflussen können, sind folgende Punkte:
- sinnvolle Reading-Namen => "finden" und "festzurren", und dann ab nach jsonMap,
- Beispiele kreieren, anhand denen man als User erkennen kann, wie es funktioniert. Dann kann der User jeweils entscheiden, ob er lieber seine csv anfasst, oder die jsonMap.

Das mit den Beispielen _kann_ als attrTemplate erfolgen, und wenn wir Glück haben, könnte man dann ggf. auch einfach die jsonMap "Weishaupt"- oder "Vaillant"-spezifisch gestalten und über RADIO-Optionen in ein- und demselben attrTemplate auswählbar machen. Ich würde aber eher vermuten, dass man z.B. für ein "allgemeines Zentralheizungsgerät" ein attrTemplate hat und dann (im Wiki) erläutert, wie man es von "Weishaupf-flavour-3" auf "Vaillant-Geschmacksrichtung-b" anpasst...

Zitat
Ich hab die Templates durchgeschaut. Teilweise werden IODev und Topics gesetzt.
IODev sollte vermutlich nicht mehr gesetzt werden, was Topics angeht, wäre es nicht das erste Mal, dass man den vorhandenen readingList-Topic nimmt und dann daraus eine setList etc. bastelt. Die Struktur ist eh' klar, denn der ebusd nimmt das ja auch wieder auf "seine Art" auseinander.

Ergo: erst mal "gute Geräte" bauen, dann schauen wir, was ggf. in den "Mustergeräten" in der csv angepasst werden kann/soll, und dann sehen wir weiter ;) .

ZitatWas kann ich aus Deiner Sicht zur Entlastung noch beisteuern?
Du kannst morgen ggf. nochmal ein update machen, ich hoffe, dass ich vorher die myUtils nochmal angepaßt bekomme und einen wrapper für j2nv() reinnehme, mit dem man allg. dieses "_value" unterdrücken kann, ohne jedesmal ausdrücklich die Regex davorzuschreiben ;) .

Ansonsten ist es an dir rauszufinden, was das für "Baugruppen" sind und welche Werte die eigentlich liefern (und, falls du doch steuern magst: welche Werte du setzen können möchtest...), und ggf. dann mal das "at"->periodicCmd-Thema aufzugreifen...

Ich für meinen Teil bin dann eigentlich weitestgehend "fertig", es bleibt eigentlich "nur noch",
- einmal zu zeigen, wie man den Kreis von setList bzw. getList-Argumenten bis zur Rückmeldung des Geräts "hab's erledigt" schließt,
- zu klären, wie man ggf. mit "neuer" und "alter" Version der attrTemplates umgehen will (würde eine Zeitlang die alten dann als "legacy"-Versionen vorhalten und die desc. entsprechend anpassen)
- ggf. beim Coden für ebus <=> MQTT2_DEVICE <=> weekprofile zu unterstützen (falls jemand mitliest, der das haben will: bitte neuen Thread im MQTT-Bereich aufmachen und Topic-Payload-Daten speziell zu dem Wochenprofil bereitstellen)

Das wäre es dann für's erste auch schon wieder gewesen, oder übersehe ich was...?
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

TomLee

ZitatFür "SetTemp_value" würde ich z.B. "desiredTemp" vorschlagen...

Les ja nur mit, meinst nicht eher DHWSetTemp_value 48.0, verstehe es so das der Wert die eingestellte Warmwassertemperatur ist, k.A. was SetTemp_value ist vermute Warmwasseraufbereitungshysterese.

Und angenommen in dem MQTT2_ebusd_hc1 kommen (in der Heizperiode) zwei Werte, einmal für Tages.- und einmal für die Nachttemperatur, was würdest du dann vorschlagen, dann klappt das was du dir vorstellst doch mit desiredTemp nicht mehr, ausser man macht zwei Geräte daraus ?

Beta-User

Zitat von: TomLee am 15 Juli 2021, 13:40:50
Les ja nur mit, meinst nicht eher DHWSetTemp_value 48.0, verstehe es so das der Wert die eingestellte Warmwassertemperatur ist, k.A. was SetTemp_value ist vermute Warmwasseraufbereitungshysterese.
Das kann schon sein mit der Hysterese...

Es ist und bleibt so: ich habe keine Ahnung, was sich hinter den Etiketten verbirgt. Mein Teil beschränkt sich im wesentlichen darauf, dass z.B.
- der "Hauptschalter" möglichst nach "state" gemappt wird und "on" bzw. "off" ist
- die "Zieltemperatur" in "desiredTemp" landet, und eine gemessene Temperatur tendenziell eben "temperature" belabelt wird...

Wo das keinen Sinn macht, stellt sich schnell die Frage nach "guten Standards", und das will ich eigentlich gar nicht für alle aus der Hüfte festschreiben. Tag- und Nachttemperatur kenne ich z.B. von CUL_HM her als dayTemp bzw. nightTemp; bei ZWave heißt das wieder anders, usw. usf..

Zur Klarstellung: das muss alles nicht von heute auf morgen "stehen", aber optimalerweise klären wir eben vorab, was bereits gut supportet wird und sich daher als "gute Lösung" empfiehlt.

Zitat
ausser man macht zwei Geräte daraus
Das kann im Einzelfall ggf. auch rauskommen.
Z.B. die bridgeRegexp in der heutigen Form ist halt mal entstanden, um "irgendwie" überhaupt handhabbare "Baugruppen" zu haben. Wenn man das besser weiter aufdröselt (oder anders gruppiert), soll mir das recht sein, wenn man es besser "uneindeutig" läßt: Mir auch recht, ich will in der Hinsicht nur "guten Support" leisten, damit v.a. die User, die neu in das jeweilige Thema einsteigen nicht vor einem zu ungeordneten "Aha, jetzt habe ich hier irgendwelche Daten, und nun...?!?" sitzen.
Ansonsten gäbe es auch noch readingsProxy und andere Hilfsmittel...
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

rob

Zitat von: Beta-User am 15 Juli 2021, 13:40:32
Ansonsten ist es an dir rauszufinden, was das für "Baugruppen" sind und welche Werte die eigentlich liefern (und, falls du doch steuern magst: welche Werte du setzen können möchtest...), und ggf. dann mal das "at"->periodicCmd-Thema aufzugreifen...
... das habe ich befürchtet  ;) Es kommen halt Werte in Fhem an und ich habe wenig Ahnung, was das sein soll  :-[

Gestern hatte ich ungelogen john30s WIKI zu den CSV 10x durchgelesen (https://github.com/john30/ebusd/wiki/4.-Configuration) und anhand J0ek3rs CSVen nachvollziehen wollen. Ich find da nix zusammen. Keine Ahnung, warum das so funktioniert.
Die einfachsten Dinge schaffe ich dort nicht in Einklang zu bringen. Mit Datenbanken, SQL und Relationen hab ich kein Problem und denk mich auch gerne in Programmsourcen rein, aber dieses CSV-Zeugs ist für mich offenbar zu hoch.
Mappings kenne ich via key-value u.ä.. Die CSV sind aber dermaßen verschachtelt und includes gibt es auch noch  :-X Schaut für mich aus wie transponierte Datentabellen ➜ statt viele Zeilen, gibt es viele Spalten - keys finden sich in den Spalten etc..

Hc1 kann ich mir noch zusammenreimen ➜ heating circuit 1
Bei sc muss ich schon passen. Scheint eine stehende Abkürzung zu sein. Jedenfalls wird es in d. CSV nicht kommentiert, aufgelöst oder übersetzt. Oder ich finde es nur nicht.
Nunja, CSV passt so natürlich nicht zum hiesigen MQTT-Thema. Bin aber dran.

Das CSV-Gedöns muss ich versuchen in den passenden Freds zu beleuchten. Ich fürchte nur, dass es nicht viele Leute gibt, die diese CSV-Teile verstehen. Nicht umsonst sucht J0ek3r einen Maintainer...

Zitat von: Beta-User am 15 Juli 2021, 13:40:32
...Dann kann der User jeweils entscheiden, ob er lieber seine csv anfasst, oder die jsonMap.
Ernsthaft? Ich finde Perl & Co 100x einfacher als diese CSVen (was nicht heißt, dass ich darin ein Crack bin...). Ich würde mich immer am json versuchen bevor ich was mit den CSV mach'.
Jetzt schweife ich aber ab  ::)

Ich werde mich jetzt in die Dokus eingraben und versuchen die offenen Punkte zu recherchieren.

Viele Grüße
rob

Beta-User

Ich vermute ja mal, dass das mit den cvs eigentlich auch keine wirkliche Geheimwissenschaft ist, sondern auch nur strukturiertes search&replace, aber das ist nun wirklich nicht meine Baustelle...

Jedenfalls ist die aktualisierte Fassung der mqtt2.template und der myUtils für ebus im svn, wer mag, kann sich das schon von da holen:
{ Svn_GetFile("FHEM/lib/AttrTemplate/mqtt2.template", "FHEM/lib/AttrTemplate/mqtt2.template", sub(){ AttrTemplate_Initialize() }) }

Die myUtils kommt dann, wenn man das template für den splitter  nochmal anwendet...



Fyi: da ist auch ein Code-Fragment für "weekprofile" drin - paßt vermutlich noch nicht zu 100% und ist auch erklärungsbedürftig, aber das aktuelle Zwischenergebnis sähe schon mal ganz ok aus. Werde das aber auch im "Hauptthread" dann nochmal verlauten lassen, mir scheint, das ist (als "Nachbildung" von den dummy's) ein Vaillant-Thema...
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

rob

Zitat von: Beta-User am 15 Juli 2021, 19:12:55
...aber das ist nun wirklich nicht meine Baustelle...
Nein, soll es auch nicht. Meine Hoffnung ist, dass von d. ebus-Profis zu diesem Thema vielleicht jmd. Input geben mag. Kommt Zeit, kommt Rat  ;D

Immerhin bin ich Dank J0ek3rs Fred ein kleines Schrittchen weiter und kann, so glaube ich, diese Frage beantworten:
Zitat von: rob am 14 Juli 2021, 10:01:52
Woher kenne ich die Topics um sie via get zu holen, wenn sie bislang nirgends published wurden?

- in Docker einsteigen

docker exec -it ebus /bin/bash

- dort ebusctl loslassen

ebusctl f

- es kommt eine lange Liste und überall wo "= no data stored" erscheint, haben wir die gesuchte Info

broadcast datetime = 16.000;21:09:-;15.07.2021
broadcast error = no data stored
broadcast id = no data stored
broadcast id = no data stored
broadcast signoflife = no data stored
hc1 Adaption = 32768
hc1 BCAST1 = no data stored
hc1 BCAST2 = no data stored
hc1 DHWMin = no data stored
hc1 DHWMode = no data stored
hc1 DHWSetpoint = no data stored
hc1 DHWSetValue = no data stored
hc1 DHWTemperature = no data stored
hc1 EndOfHoliday.Day = no data stored
hc1 EndOfHoliday.Month = no data stored
hc1 EndOfHoliday = no data stored
hc1 ExternalTemperature = no data stored
hc1 FrostProtection = no data stored
hc1 Gradient = no data stored
hc1 HeatDemand = no data stored
hc1 HeatingDemand = no data stored
hc1 HolidayTemp = no data stored
hc1 HP1.Di.1 = no data stored
hc1 HP1.Di.2 = no data stored
hc1 HP1.Di.3 = no data stored
hc1 HP1.Do.1 = no data stored
hc1 HP1.Do.2 = no data stored
hc1 HP1.Do.3 = no data stored
hc1 HP1.Fr.1 = no data stored
hc1 HP1.Fr.2 = no data stored
hc1 HP1.Fr.3 = no data stored
hc1 HP1.Mi.1 = no data stored
hc1 HP1.Mi.2 = no data stored
hc1 HP1.Mi.3 = no data stored
hc1 HP1.Mo.1 = no data stored
hc1 HP1.Mo.2 = no data stored
hc1 HP1.Mo.3 = no data stored
hc1 HP1.Sa.1 = no data stored
hc1 HP1.Sa.2 = no data stored
hc1 HP1.Sa.3 = no data stored
hc1 HP1.So.1 = no data stored
hc1 HP1.So.2 = no data stored
hc1 HP1.So.3 = no data stored
hc1 HP2.Di.1 = no data stored
hc1 HP2.Di.2 = no data stored
hc1 HP2.Di.3 = no data stored
hc1 HP2.Do.1 = no data stored
hc1 HP2.Do.2 = no data stored
hc1 HP2.Do.3 = no data stored
hc1 HP2.Fr.1 = no data stored
hc1 HP2.Fr.2 = no data stored
hc1 HP2.Fr.3 = no data stored
hc1 HP2.Mi.1 = no data stored
hc1 HP2.Mi.2 = no data stored
hc1 HP2.Mi.3 = no data stored
hc1 HP2.Mo.1 = no data stored
hc1 HP2.Mo.2 = no data stored
hc1 HP2.Mo.3 = no data stored
hc1 HP2.Sa.1 = no data stored
hc1 HP2.Sa.2 = no data stored
hc1 HP2.Sa.3 = no data stored
hc1 HP2.So.1 = no data stored
hc1 HP2.So.2 = no data stored
hc1 HP2.So.3 = no data stored
hc1 HP3.Di.1 = no data stored
hc1 HP3.Di.2 = no data stored
hc1 HP3.Di.3 = no data stored
hc1 HP3.Do.1 = no data stored
hc1 HP3.Do.2 = no data stored
hc1 HP3.Do.3 = no data stored
hc1 HP3.Fr.1 = no data stored
hc1 HP3.Fr.2 = no data stored
hc1 HP3.Fr.3 = no data stored
hc1 HP3.Mi.1 = no data stored
hc1 HP3.Mi.2 = no data stored
hc1 HP3.Mi.3 = no data stored
hc1 HP3.Mo.1 = no data stored
hc1 HP3.Mo.2 = no data stored
hc1 HP3.Mo.3 = no data stored
hc1 HP3.Sa.1 = no data stored
hc1 HP3.Sa.2 = no data stored
hc1 HP3.Sa.3 = no data stored
hc1 HP3.So.1 = no data stored
hc1 HP3.So.2 = no data stored
hc1 HP3.So.3 = no data stored
hc1 LegionnairesFunction = no data stored
hc1 MaxDHWTemp = -
hc1 MaxSupplyTemperature = no data stored
hc1 MinSupplyTemperature = no data stored
hc1 MixedExternalTemperature = no data stored
hc1 NormalSetTemp = no data stored
hc1 ProgramChooseSwitch = Sommer
hc1 ReducedSetTemp = no data stored
hc1 Reduces = no data stored
hc1 RoomInfluence = no data stored
hc1 RoomSensorCorrection = no data stored
hc1 RoomSetValue = no data stored
hc1 RoomTemperature = no data stored
hc1 RoomThermostat = no data stored
hc1 Set = hotwater;stopconsumer;5.00;-;-;48.0;-
hc1 StartOfHoliday.Day = 25
hc1 StartOfHoliday.Month = August
hc1 StartOfHoliday = no data stored
hc1 Status = no data stored
hc1 SummerWinterChangeOverTemperature = 20.0
hc1 SupplySetValueHC = no data stored
hc1 SupplyTemperatureHC = no data stored
hc1 SupplyTemperatureWTC = no data stored
hc1 SwitchOffSetting = no data stored
hc1 SwitchOnSetting = no data stored
hc1 TypeOfConstruction = no data stored
hc1 WP.Di.1 = no data stored
hc1 WP.Di.2 = no data stored
hc1 WP.Di.3 = no data stored
hc1 WP.Do.1 = no data stored
hc1 WP.Do.2 = no data stored
hc1 WP.Do.3 = no data stored
hc1 WP.Fr.1 = no data stored
hc1 WP.Fr.2 = no data stored
hc1 WP.Fr.3 = no data stored
hc1 WP.Mi.1 = no data stored
hc1 WP.Mi.2 = no data stored
hc1 WP.Mi.3 = no data stored
hc1 WP.Mo.1 = no data stored
hc1 WP.Mo.2 = no data stored
hc1 WP.Mo.3 = no data stored
hc1 WP.Sa.1 = no data stored
hc1 WP.Sa.2 = no data stored
hc1 WP.Sa.3 = no data stored
hc1 WP.So.1 = no data stored
hc1 WP.So.2 = no data stored
hc1 WP.So.3 = no data stored
hc1 ZP.Di.1 = no data stored
hc1 ZP.Di.2 = no data stored
hc1 ZP.Di.3 = no data stored
hc1 ZP.Do.1 = no data stored
hc1 ZP.Do.2 = no data stored
hc1 ZP.Do.3 = no data stored
hc1 ZP.Fr.1 = no data stored
hc1 ZP.Fr.2 = no data stored
hc1 ZP.Fr.3 = no data stored
hc1 ZP.Mi.1 = no data stored
hc1 ZP.Mi.2 = no data stored
hc1 ZP.Mi.3 = no data stored
hc1 ZP.Mo.1 = no data stored
hc1 ZP.Mo.2 = no data stored
hc1 ZP.Mo.3 = no data stored
hc1 ZP.Sa.1 = no data stored
hc1 ZP.Sa.2 = no data stored
hc1 ZP.Sa.3 = no data stored
hc1 ZP.So.1 = no data stored
hc1 ZP.So.2 = no data stored
hc1 ZP.So.3 = no data stored
hc2 HeatingDemand = no data stored
hc2 Status = no data stored
hc3 HeatingDemand = no data stored
hc3 Status = no data stored
hc4 HeatingDemand = no data stored
hc4 Status = no data stored
hc5 HeatingDemand = no data stored
hc5 Status = no data stored
hc6 HeatingDemand = no data stored
hc6 Status = no data stored
hc7 HeatingDemand = no data stored
hc7 Status = no data stored
hc8 HeatingDemand = no data stored
hc8 Status = no data stored
memory eeprom = no data stored
memory ram = no data stored
sc Act = 1;BrennerAus;1;1;1;0;0;0;0;0;0;Summer;0;0;0;0;0;Heating;0;40.0;-;47.0;0.0;16;17.137;8
sc BoilerSensorDefective = no data stored
sc BurnerOperationSinceLastService = no data stored
sc CRCErrorHeatingEngeneerParameter = no data stored
sc CRCErrorManufacturerParameter = no data stored
sc DHWSensorDefective = no data stored
sc Enduser = no data stored
sc ErrorHistory = no data stored
sc ErrorSCOTCalibration4 = no data stored
sc ErrorSCOTCalibration5 = no data stored
sc ErrorSCOTCalibration6 = no data stored
sc ErrorSCOTCalibration8 = no data stored
sc ErrorSCOTControlInput = no data stored
sc ErrorSCOTIOControl = no data stored
sc ErrorVoltagSupply = no data stored
sc ExternalSensorDefektive = no data stored
sc FanFaultDuringOperation = no data stored
sc FanFaultDuringShutdown = no data stored
sc FlameFailureDuringOperation = no data stored
sc FlameSimulation = no data stored
sc FlueGasSensorDefective = no data stored
sc GasValveCycleV1V2Defective = no data stored
sc GPSFailureDuringSafetyTime = no data stored
sc H2EmergencyOffFunction = no data stored
sc Manufacturer1 = no data stored
sc Manufacturer2 = no data stored
sc NoFlameFormation = no data stored
sc NoGasPressureAvailable = no data stored
sc ProcessValues1 = no data stored
sc ProcessValues2 = no data stored
sc ProcessValues3 = no data stored
sc ProcessValues4 = no data stored
sc ProcessValues5 = no data stored
sc ProcessValues6 = no data stored
sc PWMPumpDefective = no data stored
sc SetpointDHW = no data stored
sc SetpointTempSystem = no data stored
sc Statistic1 = no data stored
sc Statistic2 = no data stored
sc Statistic3 = no data stored
sc Statistic4 = no data stored
sc Statistic5 = no data stored
sc Statistic6 = no data stored
sc StatisticUkn01 = no data stored
sc StatisticUkn02 = no data stored
sc StatisticUkn03 = no data stored
sc StatisticUkn04 = no data stored
sc StatisticUkn05 = no data stored
sc WWTurbineDefective = no data stored
scan.08  = Kromschroeder;W ;1200;0302
scan.0c  = -;??;-;-
scan.35  = Kromschroeder;W ;2726;-
scan.f6  = Kromschroeder;WWST?;1200;0302

- jetzt könnte man dort direkt eine Aktualisierung veranlassen ➜ z.B. steht in obiger Liste "hc1 HolidayTemp = no data stored", also holen wir uns das (für den Wert kann ich nix ;))

ebusctl r -f -c hc1 HolidayTemp       
32768

- und nun isser drin

ebusctl f | grep HolidayTemp       
hc1 HolidayTemp = 32768

- oder wir holen das gleich von Fhem aus via MQTT

set myMQTT_Server publish ebusd/hc1/HolidayTemp/get

!Obacht: das kommt in Fhem so an
_16_TempReduced_value 32768

An dem Beispiel kommt dann wieder das Thema "Punkt" hoch:
attr MQTT2_ebusd_hc1 readingList ebusd/hc1/Set:.* { json2nameValue($EVENT) }\
ebusd/hc1/MaxDHWTemp:.* { json2nameValue($EVENT) }\
ebusd/hc1/ProgramChooseSwitch:.* { json2nameValue($EVENT) }\
ebusd/hc1/SummerWinterChangeOverTemperature:.* { json2nameValue($EVENT) }\
ebusd/hc1/StartOfHoliday\x2eDay:.* { json2nameValue($EVENT) }\
ebusd/hc1/StartOfHoliday\x2eMonth:.* { json2nameValue($EVENT) }\
ebusd/hc1/Adaption:.* { json2nameValue($EVENT) }\
ebusd/hc1/HolidayTemp:.* { json2nameValue($EVENT) }

setstate MQTT2_ebusd_hc1 2021-07-15 20:51:20 _16_HolidayDay_value 25
setstate MQTT2_ebusd_hc1 2021-07-15 20:56:14 _16_HolidayMonth_value August
setstate MQTT2_ebusd_hc1 2021-07-15 21:13:43 _16_TempReduced_value 32768


Umgekehrt müsste dann auch set via MQTT klappen. Allerdings düften nicht alle Werte schreibbar sein.
Ich baue gerade eine Liste an "gettern" auf, die man z.B. alle 12h holen könnte, anhand Deines Vorschlags (periodicCmd).

Ein paar Mappings konnte ich auch bereits lokalisieren. Vom Warum/ Wie bin ich noch weit weg. Aber beim Wo bin ich etwas voran gekommen. OK, ich tauch wieder ab  :D

VG
rob

Beta-User

@Rudi: Irgendwie kaue ich grade gedanklich auf dem Doku-Thema rum (<a id="..." data-part=...). Hier wäre ggf. über einen vorhandenen Setter der von @rob beschriebene Umweg gar nicht nötig gewesen, aber anscheinend ist es entweder nicht ausreichend, was im Wiki steht, die Links dahin sind nicht ausreichend, ..., whatever.
Meine Idee wäre, ggf. die cref von M2D zu ergänzen durch was, was z.B. in myUtils (sind hier eh' da) steht, um "spezielle setter" zu erläutern. Die Abgrenzung könnte anhand des "model"-Attributs erfolgen? Vielleicht hast du ja eine Idee...?
(Dass es nicht so einfach ist, diese verstreuten Dokumente zu pflegen, ist schon klar, mir ist nur auch nichts stringentes eingefallen; höchstens "comment". Aber da umfangreichere und "schön anzusehende" Doku unterzubringen, dürfte auch schwierig sein...)

Zitat von: rob am 15 Juli 2021, 21:37:12
- dort ebusctl loslassen

ebusctl f

Wie bereits angedeutet: Ich meine, dass wir damals in Abstimmung mit john30 extra einen setter kreiert hatten - "getAll". Mit dem sollte sich ohne große Umwege ein Komplettscan auf dem Bus durchführen lassen, es ist nur nicht zu empfehlen, das häufiger zu machen, weil das den Bus sehr belastet...

Das hier
Zitat
_16_TempReduced_value 32768
Kann man in Teilen vermeiden, wenn man json2nameValue() durch die "wrapper-Funktion" ersetzt, dann ist zumindest das "-value" weg...
(Völlig unqualifizierte Vermutung wäre: Das sind 1.000tel Grad C?)

Aber wichtiger: Wie kommst du darauf, dass das "zusammengehört"? (Das kann schon sein, aber ohne die MQTT-Verkehrsdaten zu kennen, kann man m.E. keinen Zusammenhang erkennen, und auch die zeitliche Abfolge ist nur sowas wie ein schwacher Indikator...)

ZitatAn dem Beispiel kommt dann wieder das Thema "Punkt" hoch:
Ich meine, dass Rudi's Fix das Problem im Zusammenspiel mit bridgeRegexp behoben hat - bleibt dann noch die Frage, ob man das manuell/für attrTemplate "zurück" auf den Punkt dreht, was vermutlich "effizienter" wäre. (?)
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

rob

Ich habe jetzt das Update ausgeführt und den Splitter angewendet. Alles wieder up to date.
Mit dem Punkt-Thema habe ich kein Problem. Wollte nur beschreiben was ich beobachte. Aktuell lasse ich die Readings so anlegen wie es ankommt. Kosmetik mache ich ggf. danach.

Strukturiertes search&replace: Ja, kann auch klappen. Wollte es gerne verstehen u.a. wg. John30s Hinweis:
Zitat
WARNING: There is absolutely no warranty at all for using any of the files provided here and you should definitely know what you're doing.

Otherwise: keep your hands off!!!
Scheint mir aber auch uferlos. Da geb ich Dir recht.

Zitat von: Beta-User am 16 Juli 2021, 07:33:52
Aber wichtiger: Wie kommst du darauf, dass das "zusammengehört"? (Das kann schon sein, aber ohne die MQTT-Verkehrsdaten zu kennen, kann man m.E. keinen Zusammenhang erkennen, und auch die zeitliche
Reading war noch nicht vorhanden. Kommando im Cli ausgeführt - Wert 32768 erscheint. MQTT publish explizit damit ausgeführt, Regex wird autom. ergänzt und Reading neu hinzugefügt mit selbem Wert. Ist reprodizerbar. Lösche ich das Reading erscheint es nicht mehr bis ich wieder das entsp. publish mache.
MQTT-Verkehrsdaten könnte ich natürlich auch noch direkt mitschneiden. Fand es halt eindeutig genug.

Dieses "getAll" könnte vielleicht das im Wiki genannte "../list" sein. Bin nicht sicher. Vielleicht würde alles auf einen Schlag kommen. In dem Fall könnte ich dann tatsächlich nicht mehr zuordnen was was ist. Der MQTT-Traffic würde mir da nicht viel helfen, denn die Topics sehe ich ja auch in Fhem, aber am Traffic sehe ich nicht, welches Reading daraus wird.
Zum Beispiel wurden diese Regex in Fhem autom. ergänzt (davon gibt es 63):

ebusd/hc1/HP1\x2eMo\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/HP1\x2eMo\x2e2:.* { json2nameValue($EVENT) }

Es entstehen zunächst die zwei Readings "Start_value" und "End_value" und nur diese werden danach immer aktualisiert, egal welches der gen. Topics. Im MQTT-Traffic sehe ich nur, dass die Topics sauber getrennt sind. Fhem-seitig muss ich natürlich Hand anlegen und z.B. ein Prefix setzen (hier wg. 3x Heizprogramm x7 Wochentage x3 Werten =63). Dann wird es reproduzierbar auch in Fhem sauber getrennt. 
Diese Handarbeit hätte ein Template später für andere vereinfachen können, wenn es einmal definiert wurde. Ich bin noch dabei einzeln alles dafür auszuklamüsern.

Dachte dies könnte dem einen oder anderen nützlich sein. Vielleicht verwirrt es auch nur  :-\

Viele Grüße und ein schönes Wochenende
rob

Beta-User

Zitat von: rob am 16 Juli 2021, 09:50:44
Dachte dies könnte dem einen oder anderen nützlich sein. Vielleicht verwirrt es auch nur  :-\
8) Sehr nützliche Info...

Das Wochenprogramm-Thema würde ich gerne noch zurückstellen, es wäre aber super, wenn du mir einen "Satz" "einfangen" könntest (zum Testen, also möglichst ein komplettes Wochenprogramm, zur Not tut es aber auch nur ein einzelner Tag, Format: topic/payload, z.B. aus mosquitto_sub).

Zitat
Strukturiertes search&replace: Ja, kann auch klappen. Wollte es gerne verstehen u.a. wg. John30s Hinweis:Scheint mir aber auch uferlos. Da geb ich Dir recht.
Jein, da hast du vermutlich was anderes verstanden, als ich sagen wollte...:
Ich versuch's nochmal anders zu erklären. Falls du einen mehrkanaligen Tasmota hast, kannst du dir ja mal die Struktur der (split-) attrTemplate dazu ansehen, dann wird es evtl. etwas klarer. Erst wird der ESP konfiguriert; dazu gibt es ein Basistemplate (für alle(!) Modelle/Varianten). Dann wird der erste Kanal konfiguriert, auf den 2. (-x-ten) kopiert, und danach wird dann nochmal nachgesteuert (z.B. durch den einzelnen Aufruf der Sprachsteuerungs-attrTemplate), so dass am Ende eben (hoffentlich) eine vollständige Konfiguration aller Devices entsteht.
Dabei wird aber uU. der Inhalt einzelner Attribute gleich mehrfach immer wieder durch eine "bessere Kopie" überschrieben...

Ich nehme stark an, dass das bei den ebus-csv's ähnlich ist: erst wird ein "allgemeiner Register-Satz" für eine bestimmter Gerätegruppe geladen (z.B. "Brenner"), dann werden ggf. weitere "includes" gemacht, um z.B. zwischen Öl- und Gas zu unterscheiden, und zum Schluss werden ggf. die Register noch angepaßt/ergänzt, die (nur) bei einer bestimmten Gerätegenerationvorhanden sind usw usf. Eben immer vom Allgemeinen zum Speziellen.
Da kann es dann durchaus sein, dass sich einzelne Angaben scheinbar widersprechen, es gilt dann halt das "letzte Wort".

"search" in diesem Sinne ist eben: nach einem bestimmten Register
"replace" dann jeweils die Beschreibung (vermutlich immer eine Zeile in den csv's).

Zitat
Dieses "getAll" könnte vielleicht das im Wiki genannte "../list" sein. Bin nicht sicher.
...aber ich. Steht so in der setList ;) . Und kann mit und ohne Payload gepublisht werden.

Zitat
Vielleicht würde alles auf einen Schlag kommen. In dem Fall könnte ich dann tatsächlich nicht mehr zuordnen was was ist. Der MQTT-Traffic würde mir da nicht viel helfen, denn die Topics sehe ich ja auch in Fhem, aber am Traffic sehe ich nicht, welches Reading daraus wird.
Da bin ich auch unsicher, was da alles kommt (und wie); vermutlich wäre es gut, es würde jemand ausprobieren... (Und am besten gleich Notizen machen, damit man das "anfängertauglich" ins Wiki übertragen kann!)

Für diesen Anwendungsfall würde ich dann tatsächlich empfehlen
- den MQTT-Verkehr komplett mitzuschneiden und
- autocreate auf "complex" zu stellen. Dann gibt der prefix einen deutlichen Hinweis auf die Quelle (den Topic, wo der Wert herkommt).

[OT]
Ich würde dir empfehlen, das mal (ggf. auch nur mit einzelnen Zweigen) zu machen. Wenn man topic/JSON-Payload und das Ergebnis aus j2nv("complex") nebeneinanderlegt, ist mAn. relativ gut zu erkennen, wie die Zusammenhänge sind.
[/OT]

Zitat
Zum Beispiel wurden diese Regex in Fhem autom. ergänzt (davon gibt es 63):
[...]
Diese Handarbeit hätte ein Template später für andere vereinfachen können, wenn es einmal definiert wurde. Ich bin noch dabei einzeln alles dafür auszuklamüsern.
Kannst du (hoffentlich) sein lassen: Mein Vorschlag wäre, diese Zweige komplett (per attrTemplate) an eine Funktion zu übergeben, die dann die "Tage" in dem Format zusammensetzt, das man auch verwenden müßte, um das Wochenprogramm zu ändern. Das sähe dann z.B. (als Reading) so aus:
ZitatSaturday 11:30;16:30;18:30;20:20;24:00;24:00;selected
bzw.
setstate MQTT2_ebusd_sc 2021-07-16 08:47:03 Sunday 11:00;;15:00;;17:30;;21:00;;24:00;;24:00;;selected

Was du da siehst, ist übrigens das Ergebnis von
set wp send_to_device test MQTT2_ebusd_sc
"wp" ist ein weekprofile-Device, "test" ist ein dort gespeichertes Profil; wie gesagt: Details folgen, ein "eingefangenes ebus-Wochenprofil" würde helfen...
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

Beta-User

#40
...bißchen was zum Testen:

attr MQTT2_ebusd_hc1 readingList ebusd/hc1/Set:.* { FHEM::aTm2u_ebus::j2nv($EVENT, '', $JSONMAP) }\
  ebusd/hc1/MaxDHWTemp:.* { FHEM::aTm2u_ebus::j2nv($EVENT, '', $JSONMAP) }\
  ebusd/hc1/ProgramChooseSwitch:.* { FHEM::aTm2u_ebus::j2nv($EVENT, '', $JSONMAP) }\
  ebusd/hc1/SummerWinterChangeOverTemperature:.* { FHEM::aTm2u_ebus::j2nv($EVENT, '', $JSONMAP) }\
  ebusd/hc1/StartOfHoliday.Day:.* { FHEM::aTm2u_ebus::j2nv($EVENT, 'Day_', $JSONMAP) }\
  ebusd/hc1/StartOfHoliday.Month:.* { FHEM::aTm2u_ebus::j2nv($EVENT, 'Month_', $JSONMAP) }\
  ebusd/hc1/Adaption:.* { FHEM::aTm2u_ebus::j2nv($EVENT, '', $JSONMAP) }\
  ebusd/hc1/HolidayTemp:.* { FHEM::aTm2u_ebus::j2nv($EVENT, '', $JSONMAP) }\
  ebusd/hc1/HP1.*:.* { FHEM::aTm2u_ebus::upd_day_profile( $NAME, $TOPIC, $EVENT, 'So|Mo|Di|Mi|Do|Fr|Sa' ) }\
  ebusd/hc1/HP1.*:.* HP1_last_json

"Interessant" ist v.a. die vorletzte Zeile. Dazu brauchst du die beigefügte myUtils-Fassung, das sollte dann deine Tagesprofile (lesend) halbwegs sinnstiftend zusammenbauen - lediglich bei der letzten Angabe bin ich unschlüssig. Aus den alten dummy-attrTemplate ergibt sich, dass das eines von "selected","Mo-Fr","Mo-So" und "Sa-So" sein müßte, die myUtils belegt das jetzt mit Mo-So vor, was vermutlich grob falsch ist (und auch nicht englisch). Mir fehlt aber bisher die Idee, wo die Info (wie) herkommen könnte.

Ich vermute ja, dass da irgendwo eine Info dazu kommt, und dass das auch über denselben Topic kommt, aber nichts genaueres weiß man nicht, daher die zusätzliche Zeile, damit man das erst mal unkompliziert sehen/loggen kann, was da durchrauscht...
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

ZitatMeine Idee wäre, ggf. die cref von M2D zu ergänzen durch was, was z.B. in myUtils (sind hier eh' da) steht, um "spezielle setter" zu erläutern.
Ich meine das waere zu speziell und detailliert, mir waere ein Link ins Wiki lieber.
Kann sein, dass ich Dich nicht genau verstehe, und mich irre.

Beta-User

Zitat von: rudolfkoenig am 17 Juli 2021, 12:49:30
Ich meine das waere zu speziell und detailliert, [...]
Kann schon sein. Dass man (funktional wirksame) eigene setter haben kann, ist nicht besonders verbreitet, neben MQTT(2) gibt's das aber auch z.B. bei HTTPMOD.

Andererseits ist es schon richtig: Wer es "bis hierhin" geschafft hat, sollte eigentlich dann auch weitere Infos finden, die nicht "auf dem Präsentierteller" liegt - habe jetzt mal noch einige Hinweise in comment (usw.) reingenommen.

Zitat von: Beta-User am 16 Juli 2021, 10:39:56
Das Wochenprogramm-Thema würde ich gerne noch zurückstellen, es wäre aber super, wenn du mir einen "Satz" "einfangen" könntest (zum Testen, also möglichst ein komplettes Wochenprogramm, zur Not tut es aber auch nur ein einzelner Tag, Format: topic/payload, z.B. aus mosquitto_sub).
Habe dazu jetzt mal einen separaten Thread angefangen, die Info wäre aber weiter hilfreich.
Da ist auch erläutert, wie das in etwa funktioniert mit weekprofile.
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

rob

Hallo.

Da sind ein wieder paar Punkte zusammengekommen. Ich versuch mal das schrittweise abzuarbeiten.

Den Hinweis hatte ich noch nicht verstanden:
Zitat von: Beta-User am 16 Juli 2021, 07:33:52
Das hierKann man in Teilen vermeiden, wenn man json2nameValue() durch die "wrapper-Funktion" ersetzt, dann ist zumindest das "-value" weg...
(Völlig unqualifizierte Vermutung wäre: Das sind 1.000tel Grad C?)
Meinst Du mit Wrapper das Attribut JSONMAP? Also z.B. so?
jsonMap    FrostProtection_value:FrostProtection
Hatte damit noch nichts weiter gemacht, weil ich erst alle Topic + Readings in Erfahrung bringen wollte.

rob

#44
...so und das wäre die bruteforce-mäßig ermittelte Liste an Topics gemäß "ebusctl f". Siehe Anhang.
Die Zeitprogrammdinger folgen...

An dem Beispiel kann man sehen, dass hier und da etwas Feintuning nötig ist - in den CSV am besten.

set myMQTT_Server publish ebusd/hc1/DHWSetpoint/get
set myMQTT_Server publish ebusd/hc1/DHWSetValue/get
set myMQTT_Server publish ebusd/hc1/DHWTemperature/get


ergibt via mosquitto_sub...

Client mosqsub/17443-OpenWRT received PUBLISH (d0, q0, r0, m0, 'ebusd/hc1/DHWSetpoint/get', ... (0 bytes))
ebusd/hc1/DHWSetpoint/get (null)
Client mosqsub/17443-OpenWRT received PUBLISH (d0, q0, r0, m0, 'ebusd/hc1/DHWSetpoint', ... (37 bytes))
ebusd/hc1/DHWSetpoint {
     "_16_Temp10": {"value": 48.0}}
Client mosqsub/17443-OpenWRT received PUBLISH (d0, q0, r0, m0, 'ebusd/hc1/DHWSetValue/get', ... (0 bytes))
ebusd/hc1/DHWSetValue/get (null)
Client mosqsub/17443-OpenWRT received PUBLISH (d0, q0, r0, m0, 'ebusd/hc1/DHWSetValue', ... (37 bytes))
ebusd/hc1/DHWSetValue {
     "_16_Temp10": {"value": 48.0}}
Client mosqsub/17443-OpenWRT received PUBLISH (d0, q0, r0, m0, 'ebusd/hc1/DHWTemperature/get', ... (0 bytes))
ebusd/hc1/DHWTemperature/get (null)
Client mosqsub/17443-OpenWRT received PUBLISH (d0, q0, r0, m0, 'ebusd/hc1/DHWTemperature', ... (36 bytes))
ebusd/hc1/DHWTemperature {
     "_16_Temp10": {"value": 0.0}}

Landet also im selben Reading.

Vom HC1 schaut die ReadingList zunächst so aus:

ebusd/hc1/Set:.* { json2nameValue($EVENT) }
ebusd/hc1/MaxDHWTemp:.* { json2nameValue($EVENT) }
ebusd/hc1/ProgramChooseSwitch:.* { json2nameValue($EVENT) }
ebusd/hc1/SummerWinterChangeOverTemperature:.* { json2nameValue($EVENT) }
ebusd/hc1/StartOfHoliday\x2eDay:.* { json2nameValue($EVENT) }
ebusd/hc1/StartOfHoliday\x2eMonth:.* { json2nameValue($EVENT) }
ebusd/hc1/Adaption:.* { json2nameValue($EVENT) }
ebusd/hc1/HolidayTemp:.* { json2nameValue($EVENT) }
ebusd/hc1/DHWMin:.* { json2nameValue($EVENT) }
ebusd/hc1/DHWMode:.* { json2nameValue($EVENT) }
ebusd/hc1/DHWSetpoint:.* { json2nameValue($EVENT) }
ebusd/hc1/DHWSetValue:.* { json2nameValue($EVENT) }
ebusd/hc1/DHWTemperature:.* { json2nameValue($EVENT) }
ebusd/hc1/EndOfHoliday\x2eDay:.* { json2nameValue($EVENT) }
ebusd/hc1/EndOfHoliday\x2eMonth:.* { json2nameValue($EVENT) }
ebusd/hc1/EndOfHoliday:.* { json2nameValue($EVENT) }
ebusd/hc1/ExternalTemperature:.* { json2nameValue($EVENT) }
ebusd/hc1/FrostProtection:.* { json2nameValue($EVENT, '', $JSONMAP) }
ebusd/hc1/Gradient:.* { json2nameValue($EVENT) }
ebusd/hc1/HeatDemand:.* { json2nameValue($EVENT) }
ebusd/hc1/HeatingDemand:.* { json2nameValue($EVENT) }
ebusd/hc1/HP1\x2eDi\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/HP1\x2eDi\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/HP1\x2eDi\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/HP1\x2eDo\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/HP1\x2eDo\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/HP1\x2eDo\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/HP1\x2eFr\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/HP1\x2eFr\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/HP1\x2eFr\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/HP1\x2eMi\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/HP1\x2eMi\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/HP1\x2eMi\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/HP1\x2eMo\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/HP1\x2eMo\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/HP1\x2eMo\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/HP1\x2eSa\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/HP1\x2eSa\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/HP1\x2eSa\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/HP1\x2eSo\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/HP1\x2eSo\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/HP1\x2eSo\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/HP2\x2eDi\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/HP2\x2eDi\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/HP2\x2eDi\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/HP2\x2eDo\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/HP2\x2eDo\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/HP2\x2eDo\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/HP2\x2eFr\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/HP2\x2eFr\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/HP2\x2eFr\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/HP2\x2eMi\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/HP2\x2eMi\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/HP2\x2eMi\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/HP2\x2eMo\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/HP2\x2eMo\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/HP2\x2eMo\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/HP2\x2eSa\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/HP2\x2eSa\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/HP2\x2eSa\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/HP2\x2eSo\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/HP2\x2eSo\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/HP2\x2eSo\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/HP3\x2eDi\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/HP3\x2eDi\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/HP3\x2eDi\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/HP3\x2eDo\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/HP3\x2eDo\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/HP3\x2eDo\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/HP3\x2eFr\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/HP3\x2eFr\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/HP3\x2eFr\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/HP3\x2eMi\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/HP3\x2eMi\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/HP3\x2eMi\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/HP3\x2eMo\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/HP3\x2eMo\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/HP3\x2eMo\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/HP3\x2eSa\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/HP3\x2eSa\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/HP3\x2eSa\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/HP3\x2eSo\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/HP3\x2eSo\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/HP3\x2eSo\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/LegionnairesFunction:.* { json2nameValue($EVENT) }
ebusd/hc1/MaxSupplyTemperature:.* { json2nameValue($EVENT) }
ebusd/hc1/MinSupplyTemperature:.* { json2nameValue($EVENT) }
ebusd/hc1/MixedExternalTemperature:.* { json2nameValue($EVENT) }
ebusd/hc1/NormalSetTemp:.* { json2nameValue($EVENT) }
ebusd/hc1/ReducedSetTemp:.* { json2nameValue($EVENT) }
ebusd/hc1/Reduces:.* { json2nameValue($EVENT) }
ebusd/hc1/RoomInfluence:.* { json2nameValue($EVENT) }
ebusd/hc1/RoomSensorCorrection:.* { json2nameValue($EVENT) }
ebusd/hc1/RoomSetValue:.* { json2nameValue($EVENT) }
ebusd/hc1/RoomTemperature:.* { json2nameValue($EVENT) }
ebusd/hc1/RoomThermostat:.* { json2nameValue($EVENT) }
ebusd/hc1/StartOfHoliday:.* { json2nameValue($EVENT) }
ebusd/hc1/Status:.* { json2nameValue($EVENT) }
ebusd/hc1/SupplySetValueHC:.* { json2nameValue($EVENT) }
ebusd/hc1/SupplyTemperatureHC:.* { json2nameValue($EVENT) }
ebusd/hc1/SupplyTemperatureWTC:.* { json2nameValue($EVENT) }
ebusd/hc1/SwitchOffSetting:.* { json2nameValue($EVENT) }
ebusd/hc1/SwitchOnSetting:.* { json2nameValue($EVENT) }
ebusd/hc1/TypeOfConstruction:.* { json2nameValue($EVENT) }
ebusd/hc1/WP\x2eDi\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/WP\x2eDi\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/WP\x2eDi\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/WP\x2eDo\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/WP\x2eDo\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/WP\x2eDo\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/WP\x2eFr\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/WP\x2eFr\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/WP\x2eFr\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/WP\x2eMi\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/WP\x2eMi\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/WP\x2eMi\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/WP\x2eMo\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/WP\x2eMo\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/WP\x2eMo\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/WP\x2eSa\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/WP\x2eSa\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/WP\x2eSa\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/WP\x2eSo\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/WP\x2eSo\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/WP\x2eSo\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/ZP\x2eDi\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/ZP\x2eDi\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/ZP\x2eDi\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/ZP\x2eDo\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/ZP\x2eDo\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/ZP\x2eDo\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/ZP\x2eFr\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/ZP\x2eFr\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/ZP\x2eFr\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/ZP\x2eMi\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/ZP\x2eMi\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/ZP\x2eMi\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/ZP\x2eMo\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/ZP\x2eMo\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/ZP\x2eMo\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/ZP\x2eSa\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/ZP\x2eSa\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/ZP\x2eSa\x2e3:.* { json2nameValue($EVENT) }
ebusd/hc1/ZP\x2eSo\x2e1:.* { json2nameValue($EVENT) }
ebusd/hc1/ZP\x2eSo\x2e2:.* { json2nameValue($EVENT) }
ebusd/hc1/ZP\x2eSo\x2e3:.* { json2nameValue($EVENT) }


Und vom SC so:

ebusd/sc/Act:.* { json2nameValue($EVENT) }
ebusd/sc/Manufacturer1:.* { json2nameValue($EVENT) }
ebusd/sc/BoilerSensorDefective:.* { json2nameValue($EVENT) }
ebusd/sc/BurnerOperationSinceLastService:.* { json2nameValue($EVENT) }
ebusd/sc/CRCErrorHeatingEngeneerParameter:.* { json2nameValue($EVENT) }
ebusd/sc/CRCErrorManufacturerParameter:.* { json2nameValue($EVENT) }
ebusd/sc/DHWSensorDefective:.* { json2nameValue($EVENT) }
ebusd/sc/Enduser:.* { json2nameValue($EVENT) }
ebusd/sc/ErrorHistory:.* { json2nameValue($EVENT) }
ebusd/sc/ErrorSCOTCalibration4:.* { json2nameValue($EVENT) }
ebusd/sc/ErrorSCOTCalibration5:.* { json2nameValue($EVENT) }
ebusd/sc/ErrorSCOTCalibration6:.* { json2nameValue($EVENT) }
ebusd/sc/ErrorSCOTCalibration8:.* { json2nameValue($EVENT) }
ebusd/sc/ErrorSCOTControlInput:.* { json2nameValue($EVENT) }
ebusd/sc/ErrorSCOTIOControl:.* { json2nameValue($EVENT) }
ebusd/sc/ErrorVoltagSupply:.* { json2nameValue($EVENT) }
ebusd/sc/ExternalSensorDefektive:.* { json2nameValue($EVENT) }
ebusd/sc/FanFaultDuringOperation:.* { json2nameValue($EVENT) }
ebusd/sc/FanFaultDuringShutdown:.* { json2nameValue($EVENT) }
ebusd/sc/FlameFailureDuringOperation:.* { json2nameValue($EVENT) }
ebusd/sc/FlameSimulation:.* { json2nameValue($EVENT) }
ebusd/sc/FlueGasSensorDefective:.* { json2nameValue($EVENT) }
ebusd/sc/GasValveCycleV1V2Defective:.* { json2nameValue($EVENT) }
ebusd/sc/GPSFailureDuringSafetyTime:.* { json2nameValue($EVENT) }
ebusd/sc/H2EmergencyOffFunction:.* { json2nameValue($EVENT) }
ebusd/sc/Manufacturer2:.* { json2nameValue($EVENT) }
ebusd/sc/NoFlameFormation:.* { json2nameValue($EVENT) }
ebusd/sc/NoGasPressureAvailable:.* { json2nameValue($EVENT) }
ebusd/sc/ProcessValues1:.* { json2nameValue($EVENT) }
ebusd/sc/ProcessValues2:.* { json2nameValue($EVENT) }
ebusd/sc/ProcessValues3:.* { json2nameValue($EVENT) }
ebusd/sc/ProcessValues4:.* { json2nameValue($EVENT) }
ebusd/sc/ProcessValues5:.* { json2nameValue($EVENT) }
ebusd/sc/ProcessValues6:.* { json2nameValue($EVENT) }
ebusd/sc/PWMPumpDefective:.* { json2nameValue($EVENT) }
ebusd/sc/SetpointDHW:.* { json2nameValue($EVENT) }
ebusd/sc/SetpointTempSystem:.* { json2nameValue($EVENT) }
ebusd/sc/Statistic1:.* { json2nameValue($EVENT) }
ebusd/sc/Statistic2:.* { json2nameValue($EVENT) }
ebusd/sc/Statistic3:.* { json2nameValue($EVENT) }
ebusd/sc/Statistic4:.* { json2nameValue($EVENT) }
ebusd/sc/Statistic5:.* { json2nameValue($EVENT) }
ebusd/sc/Statistic6:.* { json2nameValue($EVENT) }
ebusd/sc/WWTurbineDefective:.* { json2nameValue($EVENT) }


Es gibt eine ganze Reihe an Readings aus Error-History. An sich interessant, aber ohne weiteres Wissen sind die Werte  nicht interpretierbar.