FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: scuba am 03 Dezember 2018, 11:04:23

Titel: [Gelöst] setstate mit Variablen
Beitrag von: scuba am 03 Dezember 2018, 11:04:23
Hallo Zusammen,

ich versuche gerade erfolgelos den "STATE" meiner Somfy Devices auf den "STATE" des zentralen Somfy Devices zu setzen.
z.b:
setstate Raffstore_Aussen_Links [Alle_Raffstores:state]

mit dem Ergebnis, dass der String "[Alle_Raffstores:state]" als STATE von Raffstore_Aussen_Links gesetzt wird und nicht der tatsächliche Wert.
Ich hab schon einige Syntax Varianten und Ansprechmöglichkeiten wie ReadingsVal usw. durch und steh jetzt ein bisschen an.

Auf den Readings funktioniert der ähnliche Code einwandfrei setreading Raffstore_Aussen_Links postion [Alle_Raffstores:position]

Hintergrund des Anwendungsfalls:

Jede meiner Somfy Raffstores hat ein eigenes Devices um sie individuell ansprechen zu können. Alle Raffstores sind in einem gemeinsamen Device zusammengefasst. Somit muss nur eine Fahrbefehl abgesetzt werden um alle Raffstores gemeinsam fahren zu lassen. Daher versuche ich mittels Notify die Werte des zentralen Devices an die Einzeldevices zu übergeben. Nicht nur um den Status in der Visu parat zu haben sondern auch speziell in Verbindung mit dem "ASC" Modul. Dieses verwendet in meinem Fall das Zentraldevice um die Raffstores morgens und Abends zu fahren und die Einzeldevices um die "Lockout" Funktion zu realisieren.

Ich wäre für eure Hilfe Dankbar

lg

Christian

Titel: Antw:[Gelöst] setstate mit Variablen
Beitrag von: scuba am 03 Dezember 2018, 12:25:08
OK ... habs jetzt doch hinbekommen...
Mit der Variante wird der STATE nun korrekt gesetzt:

{ my $master_position = Value("Alle_Raffstores");; fhem("setstate Raffstore_Aussen_Links $master_position") }

Warum die Handhabe zwischen "setreading" und "setstate" nicht konsistent ist kann ich mir allerdings nicht erklären...
Titel: Antw:[Gelöst] setstate mit Variablen
Beitrag von: Otto123 am 03 Dezember 2018, 13:09:00
Hi,

was Du machen willst, nennt sich set magic. Dazu steht die der Doku:
ZitatFrom featurelevel 5.7 on the set and setreading command replaces:
[device:name] with the reading, internal or attribute of the device, if both device and the reading, internal or attribute exists.
You can use the r:, i: or a: prefix to restrict the search to one type, analogue to the devspec filtering.
The suffix :d retrieves the first number
The suffix :i retrieves the integer part of the first number.
The suffix :r<n> retrieves the first number and rounds it to <n> decimal places. If <n> is missing, then rounds it to one decimal place.
The suffix :t returns the timestamp (works only for readings)
The suffix :sec returns the number of seconds since the reading was set.
Example:
set Lamp blink [blinkDummy:number] [r:blinkDummy:duration:d]
[device:name:d] same as above, but only the number is retrieved
[device:name:sec] same as above, but only the number is retrieved
{(perlExpression)} with the result of perlExpression. The $DEV variable is additionally available, designating the set device name.
These replacements are also known as "set magic".
Und es steht nichts von setstate.

Ich kann nix dafür, ich wollte es nur erklären.  ;)

Gruß Otto
Titel: Antw:[Gelöst] setstate mit Variablen
Beitrag von: scuba am 03 Dezember 2018, 13:29:00
Danke! War mir dessen nicht bewusst.
Das erklärts natürlich warums mit "setstate" nicht klappt.