FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Tom_S am 03 Mai 2013, 13:56:23

Titel: auslesen von Werten eines Device
Beitrag von: Tom_S am 03 Mai 2013, 13:56:23
hallo,

wie kann ich bei einem Device zB. MAX Thermostat einen Wert aus der oberen Liste abfragen?


mit   $wert[1] = ReadingsVal("Thermostat_$rz","valveposition","----");
kann ich ja alle Werte der unteren Liste (Readings) auslesen zB. "valveposition"

mit   $wert[2] = Value("Thermostat_$rz");   
kann ich den Status (hier die eingestellte Temperatur) aus der oberen Liste auslesen.

Wie komme ich an die anderen Werte? Ich mochte gern "rferror" auslesen.
Man kann den Wert auch in der 10_MAX.pm zu den readings hinzufügen, aber es geht bestimmt auch anders

mfg

      
Titel: Aw: auslesen von Werten eines Device
Beitrag von: fritz am 03 Mai 2013, 15:53:04
Den FHEM-Weg habe ich in meinen vier Wochen Erfahrung auch noch nicht gefunden. Aber den Perl-Weg schon (weiß nur nicht, ob man dabei nicht "Nebeneffekte" verschenkt): my $error=$attr{"Thermostat_$rz"}{'rferror'};Aber vielleicht postet auch noch jemand die "richtige" Antwort.
Denn auf diese Weise kann man natürlich auch die Werte ändern - und das ist sicher nicht im Interesse des Programmdesigns (aber bevor ich die Programmierrichtlinien finden und lesen konnte, rauchte das Wiki ab :-( ).

HTH
<F>
Titel: Aw: auslesen von Werten eines Device
Beitrag von: Tom_S am 03 Mai 2013, 18:38:31
Danke, habe es gerade ausprobiert.
Damit funktioniert es erstmal.

mfg

Titel: Aw: auslesen von Werten eines Device
Beitrag von: Tom_S am 10 Mai 2013, 11:31:28
hallo,

irgendwie funktioniert es doch nicht. Habe mich beim rferror vieleicht geirrt, da ich den Zustand nicht so einfach testen kann.

mit my $wert = $attr{"Thermostat_$rz"}{'xxxx'}; kann ich alle Attribute auslesen (z.B. Room).
ein my $wert = $attr{"Thermostat_$rz"}{'ml_TIME'}; bringt kein Ergebniss.

hat noch jemand einen Tipp?

mfg
Titel: Aw: auslesen von Werten eines Device
Beitrag von: est am 16 Mai 2013, 10:19:34
Was hälst Du von

AttrVal(<devicename>,<attribute>,<defaultvalue>)
Return the attribute of the device
Titel: Aw: auslesen von Werten eines Device
Beitrag von: Tom_S am 16 Mai 2013, 20:03:53
hallo

denke das hatte ich auch schon. Habe es gerade noch mal probiert. Da steht dann der defaultValue drin.
Geht also leider auch nicht.

mfg
Titel: Aw: auslesen von Werten eines Device
Beitrag von: fritz am 25 Juni 2013, 12:02:56
Wenn Du nicht weiterkommst, einfach mal die Datenstruktur, in der Du den Wert vermutest, analysieren, z.B.
use Data::Dumper;
print Dumper($attr{"Thermostat_$rz"});

...und dann nachsehen, wo Dein Wert steht (und daraus schließen, wie man auf ihn zugreifen kann). Aber wie oben erwähnt: das ist der Zugriff auf die Rohwerte - und das kann sich natürlich von Version zu Version ändern. Am schlauesten ist dann, Du steckst es in eine eigene Funktion - hätte den Vorteil, dass diese gegebenenfalls weitere Aktionen durchführen könnte.

<F>
Titel: Aw: auslesen von Werten eines Device
Beitrag von: UliM am 25 Juni 2013, 13:34:42
Zitat von: Tom_S schrieb am Fr, 03 Mai 2013 13:56Wie komme ich an die anderen Werte? Ich mochte gern "rferror" auslesen.
my $wert = $defs{device}{rferror};

Ab morgen nach einem update wohl auch
my $wert = InternalVal("<device>","<internal-value>","defaultwert");

Gruß,
Uli

PS: Du solltest kein $-Zeichen in Deinen Devicenamen haben, da dies in Perl Variablen kennzeichnet.  Perl versuch bei sowas wie Thermostat_$rz die Variable $rz aufzulösen.
Titel: Aw: auslesen von Werten eines Device
Beitrag von: Tom_S am 03 Juli 2013, 19:28:54
hallo Uli,

habe heute mal ein Update gemacht und es funktioniert.

Vielen Dank und Gruß

Titel: Aw: auslesen von Werten eines Device
Beitrag von: Harald am 21 Juli 2013, 17:58:35
Hallo zusammen,

ich versuche gerade das hier:

attr Qube userReadings dutycycle (internalVal("ml","dutycycle",0))
define FileLog_Qube FileLog ./log/Qube-%m.log Qube:(connection|dutycycle).*

Dutycycle aus ml soll ins Qube-Log geschrieben werden um es von dort weiter zu verarbeiten.

Ich erhalte zwar keine Fehlermeldungen aber dutycycle wird nicht ins Log geschrieben, obwohl es in ml vorhanden ist.

Würde mich freuen, wenn mir jemand einen Tipp geben könnte. Vielen Dank im Voraus und schönen Sonntag noch

Harald
Titel: Aw: auslesen von Werten eines Device
Beitrag von: betateilchen am 21 Juli 2013, 18:41:41
attr Qube userReadings dutycycle (internalVal("ml","dutycycle",0))

spontan würde ich tippen, die äußeren Klammern sollten geschweifte Klammern sein.

attr Qube userReadings dutycycle {internalVal("ml","dutycycle",0)}
Titel: Aw: auslesen von Werten eines Device
Beitrag von: Harald am 21 Juli 2013, 19:45:42
Hallo betateilchen,

das war der entscheidende Hinweis. Vielen Dank dafür. Die richtige Anweisung lautet:

attr Qube userReadings dutycycle {InternalVal("ml","dutycycle",0)}
I und V müssen groß geschrieben sein, sonst wird ein Fehler bez. Subroutine nicht gefunden ausgegeben.

Nochmals Danke und viele Grüße. Jetzt kann ich weiter.


Harald
Titel: Antw:auslesen von Werten eines Device
Beitrag von: cs-online am 29 Juni 2016, 21:28:21
Hallo,

bevor ich ein neues Thema wie das hier starte, probiere ich es hier mal:

Ich habe einen IT-Schalter angelegt, im Attribut "comment" steht entweder eine 0 oder eine 1 (lasse ich dort hineinschreiben, damit ich im Notify abfragen kann, wenn eine 1 steht soll nichts gemacht werden, bei 0 wird eine zusätzliche Aktion ausgeführt).

Nun habe ich alle Tips von oben ausprobiert, bei keiner bekomme ich einen richtigen Wert ausgelesen. Hat sich da vielleicht in der Zwischenzeit wieder etwas verändert ? Wie kann ich das in einem Notify richtig auslesen ?

Grüße

Christian
Titel: Antw:auslesen von Werten eines Device
Beitrag von: marvin78 am 30 Juni 2016, 09:32:31
Das Problem hier wird sein, dass 0 in Perl als false interpretiert wird. Wenn du also mit

AttrVal(DEVICE,"comment",undef)

0 zurück bekommst, wird false angenommen.

Die einfachste Methode wäre, das comment nicht mit 0 und 1, sondern mit on und off oder wahr und falsch oder ähnlichem zu füllen.
Titel: Antw:auslesen von Werten eines Device
Beitrag von: cs-online am 30 Juni 2016, 20:33:37
Hallo Marvin,

das scheint zu klappen, die Steckdose sendet immer eine 1, wenn an der Dose selber geschaltet wurde damit das Notify dann nicht nochmal die Schaltsequenz sendet und anschließend setzt dann das Notify den Eintrag wieder auf "ausführen", damit dann beim nächsten Schalten über FHEM die Sequenz wieder gesendet wird  und schon klappt das :-)

Vielen Dank,

Grüße

Christian