Attribut mit anderen Wert aktualisieren

Begonnen von teufelchen, 28 Juni 2021, 14:44:45

Vorheriges Thema - Nächstes Thema

teufelchen

Hallo,

ich verwende eine Rollosteuerung (ASC), die Öffnungszeit wann der Rollo frühestens fahren soll steht im Attribut ASC_Time_Up_Early.

Die Öffnungszeiten für die Rollos variieren bei mir stark ob z. B. Schule und Kita ist oder nur Schule oder nur Kita oder z. B. Homeoffice ist.

Mein Lösungsansatz ist nun, zusätzliche Readings oder Attribute zu erstellen die diese Fahrzeiten enthalten.
Mit einen Dummy kann ich dann auswählen was gerade zutrifft.
defmod Test_ASC_Tage dummy
attr Test_ASC_Tage room ASC-Test
attr Test_ASC_Tage setList state: Normal Schule Kindergarten frei


Nun soll ein DoIf abhängig vom Dummystatus das Attribut im ASC aktualisieren.
Und das bekomme ich leider nicht hin.

Readings würde ich so aktualisiert bekommen:
defmod Test_ASC_DoIf_2 DOIF ([Test_ASC_Tage:state] eq "Schule") (set TestRollo_Kueche ASC [TestRollo_Kueche:Schule]) \
DOELSEIF ([Test_ASC_Tage:state] eq "Kindergarten") (set TestRollo_Kueche ASC [TestRollo_Kueche:Kindergarten]) \
DOELSEIF ([Test_ASC_Tage:state] eq "frei") (set TestRollo_Kueche ASC [TestRollo_Kueche:frei]) \
DOELSE (set TestRollo_Kueche ASC [TestRollo_Kueche:Normal])
attr Test_ASC_DoIf_2 room ASC-Test


An einer Änderung des Attributes scheitere ich jedoch.
Ich habe schon verschiedenes versucht und auch schon im Forum gesucht, leider ohne Erfolg:

z.B: attr TestRollo_Kueche ASC [TestRollo_Kueche:Schule]\
Dann steht im Attribut der Text:  [TestRollo_Kueche:Schule] anstelle des Wertes.

auch attr TestRollo_Kueche ASC { ReadingsVal("TestRollo_Kueche","Normal",0) }
führt nur dazu dass ebenfalls der Text { ReadingsVal("TestRollo_Kueche","Normal",0) im Attribut steht.

Was muss ich ändern damit es klappt?

Danke
Raspberry Pi 3
CUL433: V 1.26.05 a-culfw Build: 311 (2018-12-09_19-12-53) CUL433 (F-Band: 433MHz)
freq:433.920MHz bWidth:325KHz rAmpl:42dB sens:4dB
Debmatic mit RPI-RF-MOD

Otto123

#1
Hi,

ist über attribute blöd weil Du jedes mal die config änderst! Nimm besser Readings! (ich habe nicht komplett dein Umfeld verstanden)

Steht aber auch nirgends das sowas gehen könnte:  :D https://fhem.de/commandref_DE.html#attr

Was Du hier machen willst geht über Perl - als FHEM Kommando:
{my $val = ReadingsVal("TestRollo_Kueche","Normal",0) ;; fhem("attr TestRollo_Kueche ASC $val")}

ReadingsVal oder ReadingsNum ?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Beta-User

Ergänzend:
- Warum "fütterst" du ASC nicht mit ROOMMATE-Infos und steuerst dann über den "Zustand" der Bewohner? (indirekt dann: mit Readings, wie von Otto123 vorgeschlagen, also "while asleep => keep closed")

- die setList von dem dummy ist auch verbesserungsfähig. Entweder "state:option1,option2" oder ("state" ist der Standard, und den willst du vermutlich hier haben):
attr Test_ASC_Tage setList Normal:noArg Schule:noArg Kindergarten:noArg frei:noArg
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

teufelchen

@ Otto: Danke damit bekomme ich es aktualisiert und kann nun weiterbasteln

@ Beta-User: Der Rollo ist ein wenig der Wecker und mit ROOMMATE wüsste ich nicht so recht wie es funktioniert, da später der Dummy aus einen Google-Kalender die Werte bekommen soll.

Noch eine Frage, ließe sich dieses DoIf mit Wildcards noch vereinfachen?
([Test_ASC_Tage:state] eq "Schule") ({my $val = ReadingsVal("TestRollo_Kueche","Schule",0) ;; fhem("attr TestRollo_Kueche ASC $val")} {my $val = ReadingsVal("TestRollo_Terrasse_links","Schule",0) ;; fhem("attr TestRollo_Terrasse_links ASC $val")}) {my $val = ReadingsVal("TestRollo_Terrasse_rechts","Schule",0) ;; fhem("attr TestRollo_Terrasse_rechts ASC $val")})

Es fangen in diesen Beispiel also alle Rollos mit TestRollo_ an und der Wert des Dummys (hier Schule) ist auch das Reading welches verwendest wird.
also mal ganz weit gesponnen so etwas:
([Test_ASC_Tage:state] eq "Schule") ({my $val = ReadingsVal("^TestRollo_","Schule",0) ;; fhem("attr ^TestRollo_ ASC $val")}

Raspberry Pi 3
CUL433: V 1.26.05 a-culfw Build: 311 (2018-12-09_19-12-53) CUL433 (F-Band: 433MHz)
freq:433.920MHz bWidth:325KHz rAmpl:42dB sens:4dB
Debmatic mit RPI-RF-MOD

Otto123

Wildcards gibt es in FHEM nicht. Du meinst eventuell regExp?
Du kannst in der Doku unter Devspec schauen wie das gehen kann.
An manchen Stellen kannst Du Devspec verwenden, an anderen nicht.
attr TestRollo_.* wäre was Du willst. Bei ReadingsVal() geht das aber nicht. Du kannst in Perl eine for Schleife dafür machen:
{my @arr=devspec2array('TestRollo_.*');;for (@arr) {my $val = ReadingsVal($_,"Schule","") ;; fhem("attr $_ ASC $val")} }

Und beantworte Dir selbst die Frage: ReadingsVal oder ReadingsNum ? Denn das ist unlogisch: ReadingsVal($_,"Schule",0) eher ReadingsNum($_,"Schule",0) oder ReadingsVal($_,"Schule","")
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

teufelchen

Zitat von: Otto123 am 28 Juni 2021, 21:38:55
Wildcards gibt es in FHEM nicht. Du meinst eventuell regExp?
Du kannst in der Doku unter Devspec schauen wie das gehen kann.
An manchen Stellen kannst Du Devspec verwenden, an anderen nicht.
attr TestRollo_.* wäre was Du willst. Bei ReadingsVal() geht das aber nicht. Du kannst in Perl eine for Schleife dafür machen:
{my @arr=devspec2array('TestRollo_.*');;for (@arr) {my $val = ReadingsVal($_,"Schule","") ;; fhem("attr $_ ASC $val")} }

Und beantworte Dir selbst die Frage: ReadingsVal oder ReadingsNum ? Denn das ist unlogisch: ReadingsVal($_,"Schule",0) eher ReadingsNum($_,"Schule",0) oder ReadingsVal($_,"Schule","")

Danke für die geduldige Hilfe.
Bei einer Uhrzeit (z. B 12:15) wäre dann ReadingsVal($_,"Schule","") zu nehmen?
Raspberry Pi 3
CUL433: V 1.26.05 a-culfw Build: 311 (2018-12-09_19-12-53) CUL433 (F-Band: 433MHz)
freq:433.920MHz bWidth:325KHz rAmpl:42dB sens:4dB
Debmatic mit RPI-RF-MOD

Otto123

Ja ReadingsVal liest einen String, also als Ersatzwert ein Leerstring. Oder in deinem Fall "00:00" ?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz