Hauptmenü

[gelöst] structure fragen

Begonnen von tomspatz, 21 Juli 2018, 13:39:15

Vorheriges Thema - Nächstes Thema

tomspatz

Ich probiere gerade Rollos in eine structure einzubinden, was auch grundsätzlich funktioniert. Problem habe ich mit dem Reading state.

defmod RolloGruppe1 structure RolloGruppe1 RolloBad RolloBuero RolloSZ
attr RolloGruppe1 async_delay 10
attr RolloGruppe1 clientstate_behavior relative
attr RolloGruppe1 room Steuerung-Rollos


Ich führe aus:
set RolloGruppe1 sunAutomatic on
Das kommt auch bei den Rollos an und der Befehl wird umgesetzt. Von den Rollos selbst kommt allerdings, zu sehen unter Probably associated with als Status eine Zahl die den öffnungs Grad angibt.
Das das dann 3 verschiedene sind geht der Status der structure auf undefined.
Da ich allerdings auf den Status der structure Triggern möchte kann ich damit nichts anfangen.
Gerne hätte ich das die structure dann den Status sunAutomatic on  annimmt.

Lässt sich das umsetzen?

LG
Tom

CoolTux

Dann musst du bei den Rollodevices ein mapping machen.

attr RolloBad RolloGruppe1_map state:^[1-9][0-9]{0,2}:on state:^0$: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

betateilchen

define n_RolloGruppe1 notify RolloGruppe1:sunAutomatic.on setreading st_RolloGruppe1 sunAutomatic on
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

CoolTux

Zitat von: betateilchen am 21 Juli 2018, 13:51:26
define n_RolloGruppe1 notify RolloGruppe1:sunAutomatic.on setreading st_RolloGruppe1 sunAutomatic on

Völlig unnötig Udo. Dafür gibt es doch das Attribut _mapping aus der structure
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

betateilchen

Gegen Deine Lösung sprechen aber einige Gründe.

- Das Mapping muss in jedem in der structure enthaltenen device gepflegt werden
- Das notify muss nur einmal angelegt werden
- Die gestellte Forderung

ZitatGerne hätte ich das die structure dann den Status sunAutomatic on  annimmt

wird mit Deinem Mapping auch nicht erfüllt. Mit meiner Lösung gibt es zumindest eine Chance, den Status aus einem zusätzlichen reading zu ermitteln.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

CoolTux

Zitat von: betateilchen am 21 Juli 2018, 15:46:35

- Die gestellte Forderung

wird mit Deinem Mapping auch nicht erfüllt. Mit meiner Lösung gibt es zumindest eine Chance, den Status aus einem zusätzlichen reading zu ermitteln.

Alleine durch das mapping nicht. Dazu muss man dann noch
clientstate_priority

setzen.
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

tomspatz

VIELEN DANK

das notify war für mich der Denkanstoß, da ich aber doch zwei Stati brauche habe ich es mit einem DOIF gelöst.
defmod RolloGruppe1Status DOIF (["RolloGruppe1:^sunAutomatic on$"]) (\
setreading RolloGruppe1 sunAutomatic on)\
DOELSEIF (["RolloGruppe1:^sunAutomatic off$"]) (\
setreading RolloGruppe1 sunAutomatic off)
attr RolloGruppe1Status do always
attr RolloGruppe1Status room Steuerung-Rollos


LG
Tom

betateilchen

Zitat von: tomspatz am 21 Juli 2018, 19:09:41
da ich aber doch zwei Stati brauche habe ich es mit einem DOIF gelöst.

das ist noch lange kein Grund für ein DOIF, das hätte man auch in einem (!) notify und ganz ohne Fallunterscheidung lösen können.

define n_RolloGruppe1 notify RolloGruppe1:sunAutomatic.* setreading st_RolloGruppe1 sunAutomatic $EVTPART1
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

tomspatz

@Betateilchen
Das ist ja mal geil.  :P notify und ich sind leider keine Freunde, daher das mit dem DOIF umgesetzt, aber dein "Einzeiler" ist top.
Hoffe das ich den verwenden darf ??  ;)

Wobei wenn DOIF $EVTPART könnte wäre ich dabei geblieben.

schönen Sonntag

betateilchen

DOIF und ich sind bekanntermaßen natürliche Feinde  8)

Das Schöne ist: notify gibt es schon sehr viel länger in FHEM und es gibt definitiv nichts, das man nicht auch ohne DOIF lösen könnte (und das man auch in drei Jahren noch syntaktisch versteht)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Damian

Zitat von: tomspatz am 22 Juli 2018, 17:53:50
@Betateilchen
Das ist ja mal geil.  :P notify und ich sind leider keine Freunde, daher das mit dem DOIF umgesetzt, aber dein "Einzeiler" ist top.
Hoffe das ich den verwenden darf ??  ;)

Wobei wenn DOIF $EVTPART könnte wäre ich dabei geblieben.

schönen Sonntag

Bei DOIF heißt es einfach $EVENT (steht übrigens in der Commandref ;) ). $event ist dagegen eine echte Perlvariable, die man beliebig im Ausführungsteil auswerten kann.


defmod RolloGruppe1Status DOIF (["RolloGruppe1:^sunAutomatic"]) (setreading RolloGruppe1 sunAutomatic $EVENT)


oder wie wäre es mit Perl (Perl-Modus):

defmod RolloGruppe1Status DOIF {fhem "setreading RolloGruppe1 [RolloGruppe1:sunAutomatic]"}

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

betateilchen

Zitat von: Damian am 22 Juli 2018, 21:50:01
Bei DOIF heißt es einfach $EVENT

Genau wegen solcher Dinge finde ich DOIF zum Erbrechen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Damian

Zitat von: betateilchen am 22 Juli 2018, 22:15:03
Genau wegen solcher Dinge finde ich DOIF zum Erbrechen.

DOIF orientiert sich nicht an Syntax anderer Module und das z. T. bewusst.
Die Syntax von notify hat kaum etwas mit DOIF-Syntax zu tun und umgekehrt.
Wer notify benutzt sollte in der Commandref unter notify nachschauen, wer DOIF benutzt, sollte unter DOIF nachschlagen - und da stehen die Sachen auch noch in drei Jahren, vorausgesetzt die Commandref oder fhem gibt es dann noch ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF