FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: traxanos am 27 Juli 2015, 20:48:28

Titel: DOIF Zugriff auf Attribute
Beitrag von: traxanos am 27 Juli 2015, 20:48:28
Gibt es eine Möglichkeit im DOIF statt auf Internal und Reading auf ein Attribute zuzugreifen? Möchte gerne 3-4 userAttr's als Konfiguration in einer "Bedingung" definieren und auslagern.
Titel: Antw:DOIF Zugriff auf Attribute
Beitrag von: Loredo am 27 Juli 2015, 20:57:35
Ich habe mir für diesen Fall User-Readings direkt im DOIF Device erzeugt und greife so auf die Values zu.
Titel: Antw:DOIF Zugriff auf Attribute
Beitrag von: Damian am 27 Juli 2015, 20:58:27
Zitat von: traxanos am 27 Juli 2015, 20:48:28
Gibt es eine Möglichkeit im DOIF statt auf Internal und Reading auf ein Attribute zuzugreifen? Möchte gerne 3-4 userAttr's als Konfiguration in einer "Bedingung" definieren und auslagern.

z. B. mit

AttrVal("Devicename","Attributname","")

dient nur der Abfrage ohne Triggerung.

Gruß

Damian
Titel: Antw:DOIF Zugriff auf Attribute
Beitrag von: traxanos am 27 Juli 2015, 21:03:01
So stelle ich mir das vor?

([Waschmaschine.Status:power] < AttrVal("Waschmaschine.Status", "configPowerDone", 3))

Geht das so?
Titel: Antw:DOIF Zugriff auf Attribute
Beitrag von: traxanos am 27 Juli 2015, 21:03:42
Zitat von: Loredo am 27 Juli 2015, 20:57:35
Ich habe mir für diesen Fall User-Readings direkt im DOIF Device erzeugt und greife so auf die Values zu.

Ja das war auch meine erste Idee. Aber ich finde das später für andere leichter wenn man das direkt bearbeiten kann (ohne setreading)
Titel: Antw:DOIF Zugriff auf Attribute
Beitrag von: Loredo am 27 Juli 2015, 21:08:21
Ich meinte das Attribut userReading zu nutzen. Dort die Values einfach als {return "value"} hinterlegen. Funktioniert bei mir
Titel: Antw:DOIF Zugriff auf Attribute
Beitrag von: traxanos am 27 Juli 2015, 21:16:39
Die Variante von Damian geht wunderbar. Die Frage ist, kann ich beim Wait vielleicht auch noch auf ein AttrVal eines anderen Objekts zugreifen?
Titel: Antw:DOIF Zugriff auf Attribute
Beitrag von: Damian am 27 Juli 2015, 21:29:06
Zitat von: traxanos am 27 Juli 2015, 21:16:39
Die Variante von Damian geht wunderbar. Die Frage ist, kann ich beim Wait vielleicht auch noch auf ein AttrVal eines anderen Objekts zugreifen?

ja, in der neuen Version des Moduls http://forum.fhem.de/index.php/topic,39070.0.html

z. B.

attr di_modul wait AttrVal("Devicename","Attributname","")

Gruß

Damian
Titel: Antw:DOIF Zugriff auf Attribute
Beitrag von: traxanos am 27 Juli 2015, 21:37:00
ah ist also noch nicht vorm crash im svn gewesen. ok ich teste. danke
Titel: Antw:DOIF Zugriff auf Attribute
Beitrag von: traxanos am 27 Juli 2015, 21:43:14
Klappt leider nicht so:

wait AttrVal("Waschmaschine.Status", "configWaitOff", 0):0:0:AttrVal("Waschmaschine.Status", "configWaitDone", 0)

Getestet mit:

md5 Downloads/98_DOIF.pm
MD5 (Downloads/98_DOIF.pm) = 4c1dfc1ce52219d1d434a490d9309e42
Titel: Antw:DOIF Zugriff auf Attribute
Beitrag von: Damian am 27 Juli 2015, 21:53:11
Zitat von: traxanos am 27 Juli 2015, 21:43:14
Klappt leider nicht so:

wait AttrVal("Waschmaschine.Status", "configWaitOff", 0):0:0:AttrVal("Waschmaschine.Status", "configWaitDone", 0)

Getestet mit:

md5 Downloads/98_DOIF.pm
MD5 (Downloads/98_DOIF.pm) = 4c1dfc1ce52219d1d434a490d9309e42


ok, es liegt an den Kommas - werde noch etwas nachprogrammieren müssen. Also erst demnächst.

Als kurzfirstige Lösung kannst du AttrVal.. in eigene Routine packen und diese ohne Parameter in wait angeben.

Gruß

Damian
Titel: Antw:DOIF Zugriff auf Attribute
Beitrag von: traxanos am 27 Juli 2015, 22:07:51
Ich arbeite erstmal ohne und warte. Solange muss der Rest auch warten. Dann kann ich auch noch etwas vertesten.
Titel: Antw:DOIF Zugriff auf Attribute
Beitrag von: traxanos am 10 August 2015, 21:08:01
@Damian

Gibt es hierzu schon Neuigkeiten? Ich habe das Problem übrigens nicht nur im wait sondern auch im DEF.

  setreading Trockner.Status totalCost {([Trockner.Status:totalEnergy]/1000*AttrVal("global", "energyCost", 0))},
Titel: Antw:DOIF Zugriff auf Attribute
Beitrag von: Damian am 10 August 2015, 21:43:10
Zitat von: traxanos am 10 August 2015, 21:08:01
@Damian

Gibt es hierzu schon Neuigkeiten? Ich habe das Problem übrigens nicht nur im wait sondern auch im DEF.

  setreading Trockner.Status totalCost {([Trockner.Status:totalEnergy]/1000*AttrVal("global", "energyCost", 0))},

Kann es erst später umsetzen.

Dein Ausdruck geht schon, du musst wegen der Kommas setreading zusätzlich klammern, also

... (setreading Trockner.Status totalCost {([Trockner.Status:totalEnergy]/1000*AttrVal("global", "energyCost", 0))}),...

Wahrscheinlich werde ich Zugriff auf Attribute mit einem Sonderzeichen versehen z. B.

[global:§energyCost]

Das kaufmännische und-Zeichen & habe ich bereits für Internels eingebaut.

Gruß

Damian
Titel: Antw:DOIF Zugriff auf Attribute
Beitrag von: traxanos am 10 August 2015, 22:40:26
Die Idee mit dem § hört sich gut an. Ich frage jetzt mal nicht wann es kommt, nervt mich selber immer wenn ich gefragt werden :D
Titel: Antw:DOIF Zugriff auf Attribute
Beitrag von: Damian am 10 August 2015, 22:46:23
Zitat von: traxanos am 10 August 2015, 22:40:26
Die Idee mit dem § hört sich gut an. Ich frage jetzt mal nicht wann es kommt, nervt mich selber immer wenn ich gefragt werden :D

ja, die Ferienzeit ist erst mal um, und da muss ich mit anderen Sachen mein Geld verdienen ;)

Das Modul ist nur ein Hobby-Projekt.

Gruß

Damian
Titel: Antw:DOIF Zugriff auf Attribute
Beitrag von: igami am 11 August 2015, 17:30:15
Zitat von: Damian am 10 August 2015, 21:43:10
Wahrscheinlich werde ich Zugriff auf Attribute mit einem Sonderzeichen versehen z. B.

[global:§energyCost]

Das kaufmännische und-Zeichen & habe ich bereits für Internels eingebaut.
Hallo Damian, dann war es ja damals eine blöde Idee von mir, dass ? für Abfragen ohne trigger vorzuschlagen, sonst hätte man es wie bei ReadingsGroup machen können, was im Nachhinein bestimmt zu weniger Verwirrung führt.
Aber könnte man nicht auch einfach Texte nehmen? Attr Internal und Readings wie bei AttrVal, InternalVal und ReadingsVal? Das Readings würde dabei ja sowieso schon wegfallen. Sonst muss man in einem Jahr immer erst die Commandref bemühen um zu gucken, welches Sonderzeichen in welchem Modul was bewirkt. Ich vermute auch deswegen sind mal % und @ aus dem notify Modul durch $EVENT und $NAME ersetzt worden.

Grüße
igami
Titel: Antw:DOIF Zugriff auf Attribute
Beitrag von: traxanos am 11 August 2015, 17:43:05
Ich finde das gar nicht so schlecht. Ich verwende ebenfalls viel ? für triggerlose Abfragen. Die Sonderzeichen finde ich ebenfalls nicht so schlimm, da man so relative schnell auf viele Daten zugreifen kann, ohne komplexe Funktionen aufrufen zu müssen. Was wenn überhaupt schade ist, dass es keine Perl Syntax gibt um für komplexere Sachen selber was zu bauen.
Titel: Antw:DOIF Zugriff auf Attribute
Beitrag von: Damian am 11 August 2015, 19:46:37
Zitat von: igami am 11 August 2015, 17:30:15
Hallo Damian, dann war es ja damals eine blöde Idee von mir, dass ? für Abfragen ohne trigger vorzuschlagen, sonst hätte man es wie bei ReadingsGroup machen können, was im Nachhinein bestimmt zu weniger Verwirrung führt.
Aber könnte man nicht auch einfach Texte nehmen? Attr Internal und Readings wie bei AttrVal, InternalVal und ReadingsVal? Das Readings würde dabei ja sowieso schon wegfallen. Sonst muss man in einem Jahr immer erst die Commandref bemühen um zu gucken, welches Sonderzeichen in welchem Modul was bewirkt. Ich vermute auch deswegen sind mal % und @ aus dem notify Modul durch $EVENT und $NAME ersetzt worden.

Grüße
igami

Alles hat seine Vor- und Nachteile. Fragezeichen finde ich OK für reine Abfragen. Ich habe auch das Fragezeichen für regexp genommen, was im Nachhinein etwas unglücklich war, weil es verwirrend ist, auch wenn es an einer anderen Stelle steht. DOIF ist ein Preprozessor für den Perlinterpreter und alles was in Perl erlaubt ist, versuche ich zu meiden, damit es keine Kollisionen gibt und alle Optionen von Perl weiterhin möglich sind. Damit verbieten sich alle Bezeichnernamen, die insb. für irgendeine Funktion stehen können. Auch $ steht für Variablen und das möchte ich bewusst vermeiden, um mich an dieser Stelle von der Perl-Welt abzugrenzen. Ich habe mich für eckige Klammern entschieden, weil sie in Perl, wenn überhaupt, dann in Verbindung mit Arrays vorkommen und die dürften in DOIF selten vorkommen. Meine Welt ist also auf [...] beschränkt. Andererseits muss es ein Zeichen sein, welches normalerweise in FHEM-Namen nicht vorkommt, damit man es an eine bestimmte Funktion binden kann.

Vorschläge für ein Attribut können hier gerne abgegeben werden. Vielleicht gibt es ein Sonderzeichen, welches intuitiver ist als ein §.

Gruß

Damian
Titel: Antw:DOIF Zugriff auf Attribute
Beitrag von: igami am 11 August 2015, 20:45:35
Zitat von: Damian am 11 August 2015, 19:46:37
Vorschläge für ein Attribut können hier gerne abgegeben werden. Vielleicht gibt es ein Sonderzeichen, welches intuitiver ist als ein §.

Ein @ wie @ttribut, kommt auch nur bei Arrays vor.
Viele Sonderzeichen bleiben ja nicht mehr.

Für regexp würde sich auch ~ anbieten, kannst ja einfach beides einbauen, und das ? aus der commandref nehmen.

Grüße
igami
Titel: Antw:DOIF Zugriff auf Attribute
Beitrag von: Damian am 11 August 2015, 21:15:40
Zitat von: igami am 11 August 2015, 20:45:35
Ein @ wie @ttribut, kommt auch nur bei Arrays vor.
Viele Sonderzeichen bleiben ja nicht mehr.

Für regexp würde sich auch ~ anbieten, kannst ja einfach beides einbauen, und das ? aus der commandref nehmen.

Grüße
igami

Die Idee mit @ ist auch nicht schlecht.

Bei regexp muss man inzwischen kompatibel bleiben, dafür wird das Modul zu oft benutzt, als dass man etwas ändern könnte.

Aber ich hatte sowieso vor irgendwann, so etwas einzubauen:

  ["regexp für Device":"regexp für Event"]

Gruß

Damian
Titel: Antw:DOIF Zugriff auf Attribute
Beitrag von: igami am 11 August 2015, 21:43:07
Zitat von: Damian am 11 August 2015, 21:15:40
Bei regexp muss man inzwischen kompatibel bleiben, dafür wird das Modul zu oft benutzt, als dass man etwas ändern könnte.
Die Idee war auch es zusätzlich einzubauen und nur die Commandref abzuändern, dass ? an der Stelle soll weiterhin funktionieren.
Titel: Antw:DOIF Zugriff auf Attribute
Beitrag von: Damian am 11 August 2015, 22:05:34
Zitat von: igami am 11 August 2015, 21:43:07
Die Idee war auch es zusätzlich einzubauen und nur die Commandref abzuändern, dass ? an der Stelle soll weiterhin funktionieren.

ja, aber da ich die Anführungszeichen für beliebige Devices einbauen wollte, wären sie auch für Events gut, zumal man regexp in Perl auch in Anführungszeichen angibt.

Gruß

Damian