Das funktioniert einwandfrei:
userReadings pressure_nn:airpress {relDruck(ReadingsVal("BMP180","airpress",1000))}
Das funktioniert nicht (kein reading angelegt, keine Fehlermeldung, einfach nix):
userReadings pressure-nn:airpress {relDruck(ReadingsVal("BMP180","airpress",1000))}
Wieso ist das so?
(ich brauche das Reading mit Bindestrich im Namen, weil ich sonst ca. 120 Verwendungsstellen ändern muss, da das bisher genutzte Device das Reading pressure-nn von Haus aus an Board hatte. Per notify lässt sich das Reading mit Bindestrich problemlos anlegen.)
das liegt daran das die regex zum parsen des userReadings attributs nur \w+ für den reading namen verwendet (fhem.pl zeile 2138)
da sollte man alle sonst noch erlaubten zeichen einbauen.
Das Problem ist, dass beim Anlegen eines Readings keine Pruefung gibt, insofern sind theoretisch alle Zeichen erlaubt, was wiederum an diversen Stellen zur Problemen fuehrt.
Kannst du bitte testen, ob dein Problem mit Ersetzung der Zeile
my $regexi= '\s*(\w+)(:\S*)?\s+((\w+)\s+)?({.*?})\s*';
durch
my $regexi= '\s*([\w-]+)(:\S*)?\s+((\w+)\s+)?({.*?})\s*';
behoben ist?
Das reading wird mit Bindestrich angelegt und auch gefüllt, sieht soweit ganz gut aus.
Mir ist schon klar, dass man eigentlich eine Prüfung in irgendeiner Form braucht, aber der Bindestrich kommt nunmal in vielen Readings bzw. Device(typen) vor.
Vielleicht könnte man in der commandref einen Hinweis darauf einbauen, welche Zeichen für userReadings erlaubt sind - ich hatte gesten keinen Hinweis gefunden und im Logfile gab es auch keine Meldung, aus der man einen Grund ableiten hätte können, warum ein userReading nicht angelegt wird.
ok, jetzt habe ich den Patch auch im Produktivsystem getestet: Funktioniert.
Habs eingecheckt, und im userReadings Abschnitt die moeglichen Zeichen im Namen beschrieben.
danke schön :)