Hier nochmal das gesamte Thema auf einen Blick:
Mein Adapter liefert im Objekt 'mqtt.0.espaltherma.ATTR' folgenden JSON-String:
[{"Outdoor air temp.(R1T)":"11.500000","Discharge pipe temp.":"35.000000","Heat exchanger mid-temp.":"8.500000","INV primary current (A)":"1.300000","Voltage (N-phase) (V)":"238.000000","INV frequency (rps)":"12.000000","Fan 2 (step)":"68.000000","Expansion valve (pls)":"207.000000","BUH Step1":"OFF","BUH Step2":"OFF","Leaving water temp. before BUH (R1T)":"25.700000","Leaving water temp. after BUH (R2T)":"26.000000","Refrig. Temp. liquid side (R3T)":"25.700000","Inlet water temp.(R4T)":"23.800000","DHW tank temp. (R5T)":"45.800000","Ext. indoor ambient sensor (R6T)":"10.700000","Flow sensor (l/min)":"14.300000","Water pressure":"0.000000","Water pump signal (0:max-100:stop)":"49.000000","Pressure Sensor":"16.100000"}]
Ich will daraus einzelne Objekte machen, die ich weiter verwenden kann.
Die Experten @paul53 und @fasfoot haben die entscheidenden Hinweise gegeben.
Sehr wichtig war die Erkenntnis, dass das oben gezeigte JSON-Objekt keine Zahlen sondern Strings liefert.
Hier als Beispiel das funktionierende Script mit zwei Daten aus dem JSON-String. Es werden die Objekte "Vorlauf" und "Rücklauf" mit ihren jeweiligen Temperaturwerten erzeugt und im Verzeichnis "0_userdata.0" abgelegt:
const idJson = 'mqtt.0.espaltherma.ATTR';
const path = '0_userdata.0.';
on(idJson, function(dp){
let obj = JSON.parse(dp.state.val)[0];
let id = path + 'Vorlauf';
if(existsState(id)) setState(id, parseFloat(obj['Leaving water temp. before BUH (R1T)']), true);
else createState(id, parseFloat(obj['Leaving water temp. before BUH (R1T)']), {type: 'number', name: 'Vorlauf', role: 'value', unit: '°C'});
id = path + 'Rücklauf';
if(existsState(id)) setState(id, parseFloat(obj['Inlet water temp.(R4T)']), true);
else createState(id, parseFloat(obj['Inlet water temp.(R4T)']), {type: 'number', name: 'Rücklauf', role: 'value', unit: '°C'});
})