[GELÖST]setreading verschachteln

Begonnen von meddie, 10 April 2018, 23:43:28

Vorheriges Thema - Nächstes Thema

meddie

Hallo zusammen,

ich habe heute meinen ersten Fensterdrehgriffkontakt in Betrieb genommen, nun möchte ich mir zu einem über Chromecast ansagen lassen welche Fenster offen sind und am TabletUI die Anzahl offener Fenster anzeigen lassen. Dazu habe ich von CoolTux eine sub für die 99_myUtils.pm verwendet, diese funktioniert auch soweit, wenn ich diese sub ausführe liefert die alle Fenster die offen sind.
Nun habe ich einen Dummy duFensterOffen und ein DOIF angelegt, wenn sich der Status aller Fensterdrehgriffkontakte auf open, closed, tilted ändert soll einfeich ein setreading ausgeführt werden und die offenen Fenster in den Dummy schreiben.

Ich habe das DOIF wie folgt angelegt:

  DEF        ([".*:(open|tilted|closed)$"]) (setreading duFensterOffen offene_Fenster [{statusFensterOffen()}])


Nun habe ich das Problem, wenn ich den Griff drehe wird im Dummy als Reading nicht das offene Fenster sonder der Aufruf der Sub eingetragen sprich dort steht dann das hier drin
Internals:
   CFGFN     
   NAME       duFensterOffen
   NR         4992
   STATE      ???
   TYPE       dummy
   READINGS:
     2018-04-10 23:24:13   offene_Fenster  [{statusFensterOffen()}]
Attributes:


Könnt Ihr mit bitte helfen wo mein Fehler liegt, warum wird nicht das sub aufgerufen sonder einfach nur mein Befehl da eingetragen?
Vielen Dank
gruß Eddie

CoolTux

Hallo Eddie,

Ist jetzt nur geraten, muss nachher  mal Commandref zu DOIF schauen, aber nimm mal die eckigen Klammern vor dem Subaufruf weg.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

meddie

Hi CoolTux,

danke für Deine Sub übrigens :-)

ich habe schon alle möglichen Varianten verwendet, mit und ohne sämtliche Klammern, es wird trotzdem jedesmal nur der Aufruf als Reading eingetragen aber nicht die sub ausgeführt.

Danke
VG Eddie

CoolTux


([".*:(open|tilted|closed)$"]) ({ fhem('setreading duFensterOffen offene_Fenster ' . statusFensterOffen() })


Probiere bitte einmal so.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

#4
Schau mal, das habe ich gerade noch in der Commandref gefunden

Zitat
Anwendungsbeispiel: Die Endzeit soll abhängig von der Beginnzeit mit Hilfe einer eigenen Perl-Funktion, hier: OffTime(), bestimmt werden. begin und end sind Dummys, wie oben definiert:

define di_time DOIF ([[begin]-[end]]) (set lamp on, set end {(OffTime("[begin]"))}) DOELSE (set lamp off)
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

meddie

Dannke CoolTux,

ich werde es am Mittag probieren wenn ich zu Hause bin
Danke
VG Eddie

meddie

#6
Hey CoolTux,

also es funktioniert beinahe :-D. Nein im Ernst die Sub Routine wird nun aufgerufen und wenn ein Fenster offen wird das Reading des Dummies auch mit dem offenen Fenster befüllt. Allerdings wenn alle Fenster geschlossen sind, liefert die Sub ja nichts zurück und damit vermute ich hat das DOIF ein Problem beim setzen des Readings
Hier sehe ich folgenden Fehler:
{ fhem('setreading duFensterOffen offene_Fenster ' . statusFensterOffen() )}: Usage: setreading <name> <reading> <value> where <name> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.

Der Fehler kommt nur wenn der FDK auf geschlossen gedreht wird.

Ich bin wieder ratlos.
Danke
Gruß Eddie

EDIT:
Ich glaube ich blicket ein kleines Bißchen durch, die Subroutine triggert nur Threestatesensoren an die !=closed sind. Das heißt wenn alle Fenster zu sind, liefert die Sub kein Wert zurück. Daher der Fehler. Jetzt muss ich nur noch etwas machen damit das nicht passiert. Und da fehlt mir die Idee

meddie

ich habs!!!

([".*:(open|tilted|closed)$"]) ({if (statusFensterOffen() ne "") {fhem('setreading duFensterOffen offene_Fenster ' . statusFensterOffen() )} else {fhem('setreading duFensterOffen offene_Fenster keines')}})

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net