type und value ermittle ich aktuell über einen regulären Ausdruck - werden also nur "ausgeschnitten" und nicht konvertiert.
Für type egal, da nur 1 Wort; bei value führt dies nicht immer zum gewünschten Format.
- graphviz liefert als value einen für JSON konvertierten String, daher die Maskierungen
$DEVICETOPIC/bridge/response/networkmap {"data":{"routes":false,"type":"graphviz","value":"digraph G {\nnode[shape=record];\n \"0x00124b0025e70bd8\" [style=\"bold, filled\", fillcolor=\"#e04e5d\", fontcolor=\"#ffffff\", label=\"{Coordinator|0x00124b0025e70bd8 (0x0000)|0 seconds ago}\"];\n \"0x0017880103abf482\" [style=\"rounded, dashed, filled\", fillcolor=\"#fff8ce\", fontcolor=\"#000000\", label=\"{motionSensor2|0x0017880103abf482 (0x1b0b)|Philips Hue motion sensor (9290012607)|1 minute, 8 seconds ago}\"];\n \"0x0017880103abf482\" -> \"0x00124b0025e70bd8\" [penwidth=1, weight=0, color=\"#994444\", label=\"143\"]\n}"},"status":"ok"}
- raw liefert als value ein JSON-Objekt
$DEVICETOPIC/bridge/response/networkmap {"data":{"routes":false,"type":"raw","value":{"links":[{"depth":1,"linkquality":135,"lqi":135,"relationship":1,"routes":[],"source":{"ieeeAddr":"0x0017880103abf482","networkAddress":6923},"sourceIeeeAddr":"0x0017880103abf482","sourceNwkAddr":6923,"target":{"ieeeAddr":"0x00124b0025e70bd8","networkAddress":0},"targetIeeeAddr":"0x00124b0025e70bd8"}],"nodes":[{"definition":null,"failed":[],"friendlyName":"Coordinator","ieeeAddr":"0x00124b0025e70bd8","lastSeen":null,"networkAddress":0,"type":"Coordinator"},{"definition":{"description":"Hue motion sensor","model":"9290012607","supports":"temperature, occupancy, battery, illuminance_lux, illuminance, motion_sensitivity, led_indication, occupancy_timeout, linkquality","vendor":"Philips"},"friendlyName":"motionSensor2","ieeeAddr":"0x0017880103abf482","lastSeen":1645255436416,"manufacturerName":"Philips","modelID":"SML001","networkAddress":6923,"type":"EndDevice"}]}},"status":"ok"}
Um anzutesten, ob ich die Werte nicht besser von json2nameValue ermitteln lassen kann, habe ich Folgendes ausprobiert:
zigbee4mqtt/bridge/response/networkmap:.* { my %j2v = %{json2nameValue($EVENT,"",{"data_type"=>"type","data_value"=>"value"},".*(type|value).*")}; return { $j2v{'type'}=>$j2v{'value'} }; }
Ergebnis war, dass für graphviz tatsächlich der bereinigte Wert im Reading landete und somit auch die neighbor map angezeigt werden konnte. Wert vom Reading kann in dieser Form auch für externe "Apps" genutzt werden.
Für raw kam es zu einem Fehler, da in der Antwort zwar ein value vorhanden ist, aber dessen Wert wiederum ein eigenes JSON-Objekt darstellt - folglich existiert value bei Anwendung von json2nameValue nicht wirklich ...
@rudolfkoenig
Gibt es bereits bzw. besteht die Chance auf eine Möglichkeit, die Tiefe der "Auflösung" zu begrenzen (value also nicht mehr weiter aufbröseln) ?
@Beta-User
Bzgl. devices steht bei mir autom. in der readingList:
$DEVICETOPIC/bridge/devices:.* devices
Information steht lt. Doku ständig auf dem MQTT-Server bereit und wird beim MQTT-Anmelden bzw. bei jeder Änderung von Gerätedefinitionen veröffentlicht
$DEVICETOPIC/bridge/devices [{"definition":null,"endpoints":{"1":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"10":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"11":{"bindings":[],"clusters":{"input":["ssIasAce"],"output":["ssIasZone","ssIasWd"]},"configured_reportings":[],"scenes":[]},"110":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"12":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"13":{"bindings":[],"clusters":{"input":["genOta"],"output":[]},"configured_reportings":[],"scenes":[]},"2":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"242":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"3":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"4":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"47":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"5":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"6":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"8":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]}},"friendly_name":"Coordinator","ieee_address":"0x00124b0025e70bd8","interview_completed":true,"interviewing":false,"network_address":0,"supported":false,"type":"Coordinator"},{"date_code":"20190219","definition":{"description":"Hue motion sensor","exposes":[{"access":1,"description":"Measured temperature value","name":"temperature","property":"temperature","type":"numeric","unit":"°C"},{"access":1,"description":"Indicates whether the device detected occupancy","name":"occupancy","property":"occupancy","type":"binary","value_off":false,"value_on":true},{"access":1,"description":"Remaining battery in %","name":"battery","property":"battery","type":"numeric","unit":"%","value_max":100,"value_min":0},{"access":1,"description":"Measured illuminance in lux","name":"illuminance_lux","property":"illuminance_lux","type":"numeric","unit":"lx"},{"access":1,"description":"Raw measured illuminance","name":"illuminance","property":"illuminance","type":"numeric"},{"access":7,"name":"motion_sensitivity","property":"motion_sensitivity","type":"enum","values":["low","medium","high"]},{"access":7,"description":"Blink green LED on motion detection","name":"led_indication","property":"led_indication","type":"binary","value_off":false,"value_on":true},{"access":7,"name":"occupancy_timeout","property":"occupancy_timeout","type":"numeric","unit":"second","value_max":65535,"value_min":0},{"access":1,"description":"Link quality (signal strength)","name":"linkquality","property":"linkquality","type":"numeric","unit":"lqi","value_max":255,"value_min":0}],"model":"9290012607","options":[{"access":2,"description":"Number of digits after decimal point for temperature, takes into effect on next report of device.","name":"temperature_precision","property":"temperature_precision","type":"numeric","value_max":3,"value_min":0},{"access":2,"description":"Calibrates the temperature value (absolute offset), takes into effect on next report of device.","name":"temperature_calibration","property":"temperature_calibration","type":"numeric"},{"access":2,"description":"Number of digits after decimal point for illuminance, takes into effect on next report of device.","name":"illuminance_precision","property":"illuminance_precision","type":"numeric","value_max":3,"value_min":0},{"access":2,"description":"Calibrates the illuminance value (percentual offset), takes into effect on next report of device.","name":"illuminance_calibration","property":"illuminance_calibration","type":"numeric"},{"access":2,"description":"Number of digits after decimal point for illuminance_lux, takes into effect on next report of device.","name":"illuminance_lux_precision","property":"illuminance_lux_precision","type":"numeric","value_max":3,"value_min":0},{"access":2,"description":"Calibrates the illuminance_lux value (percentual offset), takes into effect on next report of device.","name":"illuminance_lux_calibration","property":"illuminance_lux_calibration","type":"numeric"}],"supports_ota":true,"vendor":"Philips"},"endpoints":{"1":{"bindings":[],"clusters":{"input":["genBasic"],"output":["genBasic","genIdentify","genGroups","genOnOff","genLevelCtrl","lightingColorCtrl","genScenes"]},"configured_reportings":[],"scenes":[]},"2":{"bindings":[{"cluster":"genPowerCfg","target":{"endpoint":1,"ieee_address":"0x00124b0025e70bd8","type":"endpoint"}},{"cluster":"msIlluminanceMeasurement","target":{"endpoint":1,"ieee_address":"0x00124b0025e70bd8","type":"endpoint"}},{"cluster":"msTemperatureMeasurement","target":{"endpoint":1,"ieee_address":"0x00124b0025e70bd8","type":"endpoint"}},{"cluster":"msOccupancySensing","target":{"endpoint":1,"ieee_address":"0x00124b0025e70bd8","type":"endpoint"}}],"clusters":{"input":["genBasic","genPowerCfg","genIdentify","msOccupancySensing","msIlluminanceMeasurement","msTemperatureMeasurement"],"output":["genOta"]},"configured_reportings":[{"attribute":"batteryPercentageRemaining","cluster":"genPowerCfg","maximum_report_interval":62000,"minimum_report_interval":3600,"reportable_change":0},{"attribute":"occupancy","cluster":"msOccupancySensing","maximum_report_interval":3600,"minimum_report_interval":0,"reportable_change":0},{"attribute":"measuredValue","cluster":"msTemperatureMeasurement","maximum_report_interval":3600,"minimum_report_interval":10,"reportable_change":100},{"attribute":"measuredValue","cluster":"msIlluminanceMeasurement","maximum_report_interval":3600,"minimum_report_interval":10,"reportable_change":5}],"scenes":[]}},"friendly_name":"motionSensor2","ieee_address":"0x0017880103abf482","interview_completed":true,"interviewing":false,"manufacturer":"Philips","model_id":"SML001","network_address":6923,"power_source":"Battery","software_build_id":"6.1.1.27575","supported":true,"type":"EndDevice"}]