Wie funktioniert attr -a <devspec> <attrname> [<value>] mehrzeilig?

Begonnen von Otto123, 21 Januar 2022, 11:47:24

Vorheriges Thema - Nächstes Thema

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Beta-User

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...).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Otto123

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.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

rudolfkoenig

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) }

Otto123

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.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz