[gelöst] Einzelner Wert einer Readinglist abfragen

Begonnen von Christophe, 01 Oktober 2018, 12:12:13

Vorheriges Thema - Nächstes Thema

Christophe

Hallo Zusammen,

Vermutlich ist mein Problem ziemlich trivial.

Wie frage ich einem Notify Wert einer Readingliste ab?

Für die Readings ist das kein Problem (readingsVal), aber für den Wert in der readingList funktioniert das nicht. Ich habe ziemlich lange Gesucht, aber keine Lösung gefunden.

define myDevice dummy
attr myDevice readingList mySetting
attr myDevice setList mySetting:selectnumbers,-25,1,10,1,lin
attr myDevice webCmd uGSelect



myNotify {my myVar = ReadingsVal("myDevice", "mySetting", "");
fhem ( "set myDevice2 mySetting" );


ergibt im logfile:
2018.10.01 12:09:09 3: myNotify return value: no set value specified

Danke für die Unterstützung.

Christophe


FHEM auf Raspberry, Raspian Jessy, SSC von Busware, TSCUL 0.29

digiart

Auf die Schnelle würde ich sagen:
Du definierst eine Variable "myVar", verwendest aber beim set-Befehl "mySetting" als Variable.
Anfragen ausserhalb der Threads (PN, Mail o.ä.) werden ignoriert!

Beta-User

Zitat von: Christophe am 01 Oktober 2018, 12:12:13

myNotify {my myVar = ReadingsVal("myDevice", "mySetting", "");
fhem ( "set myDevice2 mySetting" );

Und auch der Code sieht seltsam aus.

Nach myNotify fehlt die Regexp für den Trigger. Sollte wohl eher so aussehen:
myNotify myDevice:mySetting:.* set myDevice2 $EVTPART1

Nutze für sowas am besten zum Start den Event-Monitor; dazu gibt es auch einen Wiki-Artikel. Kann sein, dass du andere Event-Teile brauchst und irgendwo noch ein Punkt fehlt.

Aber selbst wenn der Ausführungsteil Perl sein soll: für eigene Variablen gehört ein "$" davor und alles, was auf der Perl-Ebene ablaufen soll, muß in diesen Teil umschließende Perl-Klammern rein "{<code>}".
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Christophe

Getriggert wird es alle 5 Minuten von einem at-Device.

Sorry, Selbstverständlich sieht der Code so aus:

myNotify {my $myVar = ReadingsVal("myDevice", "mySetting", "");
fhem ( "set myDevice2 $myVar" );}


Im Eventmonitor wird gar nichts angezeigt.

Frage ich das state ab, dann funktioniert es:

myNotify {my $myVar = ReadingsVal("myDevice", "state", "");
fhem ( "set myDevice2 $myVar" );}


Im Eventmonitor wird das Angezeigt

2018-10-01 13:20:33 dummy myDevice2 <state>
2018-10-01 13:20:33 at DispValues execNow


FHEM auf Raspberry, Raspian Jessy, SSC von Busware, TSCUL 0.29

Beta-User

Das mit der setList sollte eigentlich auch dafür sorgen, dass es ein Reading mit dem entsprechenden Namen gibt und das dann auch gesetzt wird, wenn es irgendwie gefüllt wird. Allerdings hätte ich dann auch ein passendes webCmd erwartet, das fehlt hier.

Zitat von: Christophe am 01 Oktober 2018, 13:29:07
Getriggert wird es alle 5 Minuten von einem at-Device.
Sorry, aber diese Aussage verstehe ich nicht.

In meiner Gedankenwelt hast du entweder ein "at", das dann direkt das Reading ausliest und dann auch selbst an das "Zweitdevice" weitergibt

ODER (alternativ, nicht kummulativ)

ein notify, das auf Änderungen an deinem "Einstell"-Dummy reagiert. Dann müßte man korrekt auf die Events reagieren, die das wirft.

Ein notify sieht immer so aus:
define <name> notify <Suchmuster> <command> Suchmuster finde ich in dem nicht, was du mit myNotify bezeichnest. Bitte mal hier lesen, vielleicht wird es dann klarer: https://wiki.fhem.de/wiki/Notify

Ein notify über ein at zu triggern macht m.E. nur Sinn, wenn es auch "natürliche" Ursachen gibt, die das notify triggern und man zusätzlich eben zeitgesteuert immer wieder was auslösen will. Das ist aber eher die Ausnahme (ich habe sowas gar nicht, wenn dann macht das at die gewünschte Aktion direkt).

Grundsätzlich: Dir ist klar, dass FHEM weniger zustandsbasiert "denkt", sondern vor allem so eingerichtet ist, dass es einem ermöglicht, auf Zustandsänderungen (aka Events) zu reagieren?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Christophe

Stimmt schon, es ist kein echtes Notify. Ich missbrauche es um Funktionen die später im 99-myUtils.pm eingebaut werden zu testen.

Das Ziel ist eine Funktion, die Temperaturen in bestimmten Zeitintervallen abfragt, mit einem Schwellwert vergleicht und gegebenenfalls eine Meldung absetzt.

Ich bin sowohl in FHEM sowie Perl ein blutiger Anfänger und schlage mich im Moment vor allem mit dem Syntax herum.

Mein eigentliches Problem habe ich mit Eurer Hilfe und Anregungen gelöst. Es war ein Leerschlag in "mySetting" (" mySetting").

Vielen Dank an Euch

Christophe
FHEM auf Raspberry, Raspian Jessy, SSC von Busware, TSCUL 0.29

Beta-User

Zitat von: Christophe am 01 Oktober 2018, 17:25:07
Stimmt schon, es ist kein echtes Notify. Ich missbrauche es um Funktionen die später im 99-myUtils.pm eingebaut werden zu testen.
Was du gepostet hast, ist auch kein "unechtes notify", sondern kann so eigentlich nicht funktionieren.

ZitatDas Ziel ist eine Funktion, die Temperaturen in bestimmten Zeitintervallen abfragt, mit einem Schwellwert vergleicht und gegebenenfalls eine Meldung absetzt.
Bin immer noch nicht so ganz überzeugt, ob da eine zeitbasierte Vorgehensweise angesagt ist, denn entweder die Temperatur ändert sich und der Sensor wirft das auch nach einer bestimmten Zeit aus: Dann gibt es ein Event (ggf. kannst du mit Hilfe von event-on-change und einer Hysterese die Zahl begrenzen) und darüber löst du die Abfrage aus, es braucht nicht zusätzlich eine periodische Prüfung.
Oder du brauchst den Timer um aktuelle Werte zu erhalten; aber auch da wäre dann die Frage, ob es nicht mehr Sinn macht, dann wieder auf die gelieferten Werte zu reagieren.

Evtl. solltest du dir mal THRESHOLD (und ggf. PID20) ansehen.

Ansonsten wirst du schon wissen, was du tust...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors