Hi,
ich versuche verwzeifelt ein mehrzeiliges attr setList in einem MQTT2_DEVICE zu erweitern.
Test zum nachvollziehen:
funktioniert wie erwartet:
define TestAttr MQTT2_DEVICE
attr TestAttr setList willi ist
attr -a TestAttr setList lustig
Jetzt eine reale setList
attr TestAttr setList clean_segment:{"multiple-strict,".valetudo_w($name,"segments")} { valetudo_c($NAME,$EVENT) }
Jeder meiner Versuche jetzt eine Zeile anzufügen schlägt fehl - wie ginge das richtig? Oder ist die Funktion an der Stelle "unvollkommen"? CommandAttr() verhält sich natürlich analog.
attr -a TestAttr setList \
willi ist
attr -a TestAttr setList \n willi
attr -a TestAttr setList "\n willi"
Habe mir einen Ersatz gebaut - der ausliest, bearbeitet und zurückschreibt.
# CommandAttr_multiline( 'MQTT2_xxx','setList',q( clean_segment:{"multiple-strict,".valetudo_w($name,"segments")} { valetudo_c($NAME,$EVENT) }) )
sub CommandAttr_multiline {
my $NAME = shift;
my $attr = shift;
my $item = shift;
if ($attr ne 'setList' and $attr ne 'readingList') {return 'use only for multiline attrib'}
my $val = AttrVal($NAME,$attr,'')."\n".$item;
CommandAttr(undef, "$NAME $attr $val");
}
Gruß Otto
Na ja, mehrzeilige Attribute sind in fhem.pl nicht so wirklich vorgesehen, vermutlich ist deswegen auch der entsprechende Code in MQTT2_DEVICE (#274ff) direkt vercoded. Wenn man sowas nach fhem.pl reinnehmen wollte, müßte man vermutlich neue/erweiterte Optionen-Schalter (zumindest für's erweitern) erfinden, denn wenn nur ein Wert drin steht, kann man nicht wissen, was der "Seperator" sein soll.
PS: Versuche mal sowas:
attr -a shellyplus1pm_Test room test
(mit und ohne Komma-separierter Vorbelegung...).
Zitat von: Beta-User am 21 Januar 2022, 13:15:18
PS: Versuche mal sowas:
attr -a shellyplus1pm_Test room test
(mit und ohne Komma-separierter Vorbelegung...).
Ja ich weiß :) je mehr man probiert wird verwirrender
Ok - halten wir fest: die Funktion an der Stelle "unvollkommen" ;) - ich wollte es eigentlich nur bestätigt haben, nicht das ich das Rad neu erfinde weil ich es nicht verstanden habe.
Ein Attribut (oder Befehl) kann nicht mit einem Leerzeichen oder Newline anfangen. Das Anhaengen mit "attr -a" ist (in diesem Fall leider) keine Ausnahme.
FHEM wandelt \n nicht zu Newline.
Achtung: MQTT2_DEVICE prueft auf halbwegs korrekte setList Eintraege, und "willi ist \n lustig" ist nicht korrekt :)
Ich kann einen Hack anbieten:
define TestAttr MQTT2_DEVICE
attr TestAttr setList clean_segment:{"multiple-strict,".valetudo_w($name,"segments")} { valetudo_c($NAME,$EVENT) }
attr -a TestAttr setList ;;{}\
clean_segment_2:{"multiple-strict,".valetudo_w($name,"segments")} { valetudo_c($NAME,$EVENT) }
Zitat von: rudolfkoenig am 21 Januar 2022, 13:40:17
Achtung: MQTT2_DEVICE prueft auf halbwegs korrekte setList Eintraege, und "willi ist \n lustig" ist nicht korrekt :)
Ich sage nicht, dass Du eine schärfere Prüfung einbauen sollst :)
Danke für den Hack und die Aufklärung.