FHEM Forum

FHEM => Sonstiges => Thema gestartet von: FHEMAN am 19 Juli 2016, 16:44:10

Titel: DEVSPEC: set Rollo.* VALUE=r:SavedPosition
Beitrag von: FHEMAN am 19 Juli 2016, 16:44:10
Hallo zusammen,

in meiner Installation habe ich 16 HM Rolladentaster verbaut. Diese steuere ich ganz wunderbar in einem Rutsch mittels set und :Filter. Codelastige und (bei mir) fehleranfällige Notifies oder Funktionen in der myUtils kann ich dadurch vermeiden.

Hier und an diversen anderen Stellen lande ich jedoch immer wieder in einer Sackgasse, weil ich gerne einen Attributwert oder ein Reading des jeweiligen Devices verarbeiten möchte.

Was ich konkret erreichen möchte, versuche ich einmal pseudomäßig zu beschreiben:

set MultipleDevices VALUE=r:MyReadingsValue

Das betrifft auch beispielsweise Batch Änderungen eines Attributs, welches jedoch verschieden pro Device gefüllt ist. Auch hier wäre etwas in der folgenden Form toll:

attr Rollo.* userattr VALUE=a:myUserAttribute+" MyAnotherNewUserAttribute"

Da ich gelernt habe, dass es in fhem meistens doch auch verschiedenste No-Code Lösungen gibt, möchte ich euch fragen, wir ihr so etwas umsetzt?

Vielen Dank im Voraus!
Ronny
Titel: Antw:DEVSPEC: set Rollo.* VALUE=r:SavedPosition
Beitrag von: justme1968 am 19 Juli 2016, 18:23:00
im set kannst du mit [<device>:<reading>] auf ein reading eines beliebigen devices zugreifen. also etwa so:set Rollo.* [myDevice:myReading]

im set kannst du auch mit {(...)} beliebigen perl code auf der fhem ebene verwenden. du kannst also z.b so ein set bauen das auf ein attribut eines anderen device zugreift:set Rollo.* {(AttrVal('device','attribut','default'))}

beides geht aber nur im set. nicht im attr kommando. hier musst du doch auf perl ebene gehen:{my $attr = Attrval(...);; fhem( "attr Rollo.* xyz $attr" )}

gruss
  andre
Titel: Antw:DEVSPEC: set Rollo.* VALUE=r:SavedPosition
Beitrag von: FHEMAN am 19 Juli 2016, 23:30:07
Hallo Andre,

danke für Deine Ausführungen. Damit werde ich mal ein wenig rumspielen!
Auf das jeweilige Device kann ich aber nicht per $NAME oder $name zugreifen, oder?

// EDIT
Zur Ergänzung - $NAME oder $name funktionieren leider nicht:
setreading test1 testreading testvalue
setreading test2 testreading testvalue
setreading test.* test2reading {(ReadingsVal('$NAME','testreading','default'))}