Verständnisfrage devspec2array

Begonnen von Mundus, 07 Februar 2018, 21:09:05

Vorheriges Thema - Nächstes Thema

Mundus

Hi,

ich habe mich durch das Forum gelesen und würde gerne devspec2array nutzen. Die Überlegung ist, bei einer gewissen Statusänderung (z.B.: Licht) mittels Notify und der devspec2array in einem structure ein Reading einzufügen, dass die Anzahl der eingeschalteten Lichter enthält.

Konkret

define nt_Licht .*Licht.* {
my $AnzahlLichtAn = devspec2array("NAME=.*Licht.*:FILTER=state=on")}


$AnzahlLichtAn würde ich dann als Reading in das Structure schreiben. Meine Frage ist nun, wie kann ich den Status 0 Lampen (Licht) an von 1 Lampe (Licht) an unterscheiden. Das Array devspec2array wird, wie üblich bei 0 beginnend gefüllt => gibt also 0 zurück, was in "normaler" Zählart 1 entspricht. Wenn das Array nicht gefüllt wird, gibt es ebenfalls eine 0 zurück, was in "normaler" Zählart 0 entspricht. Ist auch so im Wiki beschrieben https://wiki.fhem.de/wiki/DevelopmentModuleAPI#devspec2array

Muss ich also, um 0 und 1 zu unterscheiden, ein Script nutzen? (z.B.: https://forum.fhem.de/index.php?topic=72547.0)

Gruß Mundus

KernSani

Ich kann das nicht ganz nicht ganz nachvollziehen.

bei mir gibt:
{my $test=devspec2array("unbekanntes device")} "unbekanntes device" zurück,  dagegen gibt:
{my $test=devspec2array("TYPE=logProxy")} den Wert "1" zurück.

also, wie in der Doku beschrieben: Nicht gefunden gibt den Übergabewert zurück, ansonsten kommt ein Array (bzw. die Anzahl der Elemente wg. scalar)

RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Phill

Du kannst folgende benutzen:
{my @a=devspec2array("xxx");; my $count=($defs{$a[0]} && $#a+1 || 0)}
Dann hast du in $count die Anzahl der gefundenen Devices. 0 wenn keins gefunden wurde.
Homebrew 1-Wire / HomeMatic Mix - Cubietruck mit FHEM als Server - Raspberry PI 3 als Informationsanzeige im MagicMirror Stil - Raspberry Pi 1 als Klingelanlage - VDR

Mein Modul: Talk2Fhem - Mein Tipp: https://forum.fhem.de/index.php/topic,82442.0.html

Phill

#3
Ich musste mir jetzt nochmal die Funktion im Code anschauen weil ich es auch nicht ganz verstanden habe muss ich sagen. Ich glaube der CODE oben ist nicht notwendig, denn wie KernSani schon gesagt hat, steht eigentlich die Anzahl der gefundenen schon in der Variable (scalar).
Das liegt daran weil ein Array im Scalaren Kontext die Anzahl der Elemente ausgibt. Also auch 0 wenn keine gefunden werden. Und nicht die Position des Elements im Array.
Eine Besonderheit gibt es aber noch. Wenn man ein Device direkt eingibt wird der Text ausgegeben wie wenn man ein unbekanntes Device eingegeben hätte. Das mit der Anzahl geht nur wenn du das Device nicht direkt ansprichst.

Gruß
Homebrew 1-Wire / HomeMatic Mix - Cubietruck mit FHEM als Server - Raspberry PI 3 als Informationsanzeige im MagicMirror Stil - Raspberry Pi 1 als Klingelanlage - VDR

Mein Modul: Talk2Fhem - Mein Tipp: https://forum.fhem.de/index.php/topic,82442.0.html

KernSani

Ich habe jetzt nochmal mit exakt deiner devspec getestet (meine Lichter heissen auch alle .*Licht ;-)) Und ich bekomme 0, wenn alles aus ist, 1 wenn eines an ist etc...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...