setreading einen leeren String übergeben

Begonnen von FHEMAN, 29 März 2015, 03:36:34

Vorheriges Thema - Nächstes Thema

FHEMAN

Hallo,

ich möchte für ein Dummy Device ein eigenes Reading mittels setreading leeren (nicht löschen). Wenn ich aber einen leeren String übergebe, bekomme ich folgende Fehlermeldung
setreading AllDoorsAndWindows opendoors  : Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.

Übersehe ich etwas?

// Nachtrag: Hier einmal der konkrete Code
    my $OpenWindows = (ReadingsVal("TFK.Bad","state","unknown") eq "open") ? "TFK.Bad " : "" . (ReadingsVal("TFK.Kueche","state","unknown") eq "open") ? "TFK.Kueche" : "" . (ReadingsVal("TFK.SZ.L","state","unknown") eq "open") ? "TFK.SZ.L " : "" . (ReadingsVal("TFK.WZ.L","state","unknown") eq "open") ? "TFK.WZ.L " : "";
    fhem("setreading AllDoorsAndWindows openwindows ".$OpenWindows);
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

justme1968

es gibt auf der fhem ebene (kommandozeile und fhem aufruf) keine leeren strings sondern nur einen einzigen langen string der an leerzeichen in die einzelnen parameter aufgeteilt wird.

du kannst dir entweder einengenderen inhalt überlegen der ein leeres reading bedeutet wie z.b. -.

statt dessen ReadingsSingleUpdate zu verwenden ist keine alternative weil es diverse stellen gibt an an denen readings als ein einziger string der auf diese art gesplittet wird behandelt werden (events, auslesen des state files, ...) und jedes mal das gleiche problem auftritt.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

FHEMAN

Aber wie bekommt userreading das hin? Der gleiche Code in userreading setzt das Reading bei Leerstring auf "".
Ich würde den Code gerne schlank halten.
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

justme1968

userReadings verwendet das oben angesprochene ReadingsSingleUpdate bzw. eine variante davon und du hast damit genau die oben angesprochenen potentiellen probleme.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

FHEMAN

OK, danke Dir für die Aufklärung.
Da ich woanders mit AttrVal("AllDoorsAndWindows", "openwindows", "") auf Leerstring checke, habe ich es nun mit deletereading für mich erst einmal gelöst (hoffentlich). Das Setzen auf bspw. Null macht imo sonst wieder Hilfsfunktionen notwendig (bei string concat und anschließendem bool check). Vielleicht muss ich mich auch einfach daran gewöhnen, mehr zu coden und das ganze in die myutils auszulagern..

my $OpenWindows = (ReadingsVal("TFK.Bad","state","unknown") eq "open") ? "TFK.Bad " : "" . (ReadingsVal("TFK.Kueche","state","unknown") eq "open") ? "TFK.Kueche" : "" . (ReadingsVal("TFK.SZ.L","state","unknown") eq "open") ? "TFK.SZ.L " : "" . (ReadingsVal("TFK.WZ.L","state","unknown") eq "open") ? "TFK.WZ.L " : "";
$OpenWindows ? fhem("setreading AllDoorsAndWindows openwindows ".$OpenWindows) : fhem("deletereading AllDoorsAndWindows openwindows");
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

Obi-Wan

Hallo,

dieser Thread ist zwar schon was älter. Wer aber wie ich bei der Suche zu einem ähnlichen Thema darauf stößt freut sich ggf. über die folgende Lösung:

{CommandSetReading(undef,'<device> <reading> ')}

Siehe auch den zugehörigen Thread: https://forum.fhem.de/index.php/topic,107541.0.html

Obi-Wan