FHEM Forum

FHEM => Sonstiges => Thema gestartet von: Otto123 am 21 Januar 2022, 11:47:24

Titel: Wie funktioniert attr -a <devspec> <attrname> [<value>] mehrzeilig?
Beitrag von: Otto123 am 21 Januar 2022, 11:47:24
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
Titel: Antw:Wie funktioniert attr -a <devspec> <attrname> [<value>] mehrzeilig?
Beitrag von: Beta-User am 21 Januar 2022, 13:15:18
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...).
Titel: Antw:Wie funktioniert attr -a <devspec> <attrname> [<value>] mehrzeilig?
Beitrag von: Otto123 am 21 Januar 2022, 13:34:43
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.
Titel: Antw:Wie funktioniert attr -a <devspec> <attrname> [<value>] mehrzeilig?
Beitrag von: rudolfkoenig am 21 Januar 2022, 13:40:17
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) }
Titel: Antw:Wie funktioniert attr -a <devspec> <attrname> [<value>] mehrzeilig?
Beitrag von: Otto123 am 21 Januar 2022, 22:57:08
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.