Ich möchte im Ausführungsteil eines DOIF nicht den Devicenamen des auslösenden Devices mitgeben sondern dessen Alias. Ein Reading klappt wunderbar, aber mein Attribut alias leider nicht.
Wenn ich einfach in der Commandline von FHEMWEB set pushmsg msg 'Wohnungsstatus - Luftfeuchte' '[TempFeuchtSensorFlur:alias] meldet Normalisierung der Luftfeuchte auf [TempFeuchtSensorFlur:humidity]% !' 'nexus5-marko' 0 '' eingebe kommt alles korrekt an. Also ja alias gibt es ;D
Internals:
CFGFN
DEF ((["^TempFeuchtSensorBadezimmer$:^humidity"]
or ["^TempFeuchtSensorFlur$:^humidity"]
or ["^TempFeuchtSensorKinZim:^humidity"]
or ["^TempFeuchtSensorSchlafzimmer$:^humidity"]
or ["^WandThermostatWohnzimmer_Weather$:^humidity"])
and [?$DEVICE:humidity] > 64
and [?$SELF:H_$DEVICE] ne 'high' )
(set pushmsg msg 'Wohnungsstatus - Luftfeuchte' '[$DEVICE:alias] meldet eine zu hohe Luftfeuchtigkeit von [$DEVICE:humidity]% !' 'nexus5-marko' 1 '',
setreading $SELF H_$DEVICE high)
DOELSEIF ((["^TempFeuchtSensorBadezimmer$:^humidity"]
or ["^TempFeuchtSensorFlur$:^humidity"]
or ["^TempFeuchtSensorKinZim:^humidity"]
or ["^TempFeuchtSensorSchlafzimmer$:^humidity"]
or ["^WandThermostatWohnzimmer_Weather$:^humidity"])
and [?$DEVICE:humidity] < 56
and [?$SELF:H_$DEVICE] ne 'low')
(set pushmsg msg 'Wohnungsstatus - Luftfeuchte' '[$DEVICE:alias] meldet Normalisierung der Luftfeuchte auf [$DEVICE:humidity]% !' 'nexus5-marko' 0 '',
setreading $SELF H_$DEVICE low)
NAME doifInnenraumLuftfeuchteAlarm
NR 432
NTFY_ORDER 50-doifInnenraumLuftfeuchteAlarm
STATE disabled
TYPE DOIF
Readings:
2017-06-29 09:47:28 cmd 0
2017-06-29 09:47:31 last_cmd initialized
2017-06-29 09:47:31 mode disabled
2017-06-29 09:47:31 state disabled
Condition:
0 (EventDoIf('^TempFeuchtSensorBadezimmer$',$hash,'^humidity',0) or EventDoIf('^TempFeuchtSensorFlur$',$hash,'^humidity',0) or EventDoIf('^TempFeuchtSensorKinZim',$hash,'^humidity',0) or EventDoIf('^TempFeuchtSensorSchlafzimmer$',$hash,'^humidity',0) or EventDoIf('^WandThermostatWohnzimmer_Weather$',$hash,'^humidity',0)) and ReadingValDoIf($hash,'$DEVICE','humidity') > 64 and ReadingValDoIf($hash,'doifInnenraumLuftfeuchteAlarm','H_$DEVICE') ne 'high'
1 (EventDoIf('^TempFeuchtSensorBadezimmer$',$hash,'^humidity',0) or EventDoIf('^TempFeuchtSensorFlur$',$hash,'^humidity',0) or EventDoIf('^TempFeuchtSensorKinZim',$hash,'^humidity',0) or EventDoIf('^TempFeuchtSensorSchlafzimmer$',$hash,'^humidity',0) or EventDoIf('^WandThermostatWohnzimmer_Weather$',$hash,'^humidity',0)) and ReadingValDoIf($hash,'$DEVICE','humidity') < 56 and ReadingValDoIf($hash,'doifInnenraumLuftfeuchteAlarm','H_$DEVICE') ne 'low'
Devices:
Do:
0:
0 set pushmsg msg 'Wohnungsstatus - Luftfeuchte' '[$DEVICE:alias] meldet eine zu hohe Luftfeuchtigkeit von [$DEVICE:humidity]% !' 'nexus5-marko' 1 '', setreading doifInnenraumLuftfeuchteAlarm H_$DEVICE high
1:
0 set pushmsg msg 'Wohnungsstatus - Luftfeuchte' '[$DEVICE:alias] meldet Normalisierung der Luftfeuchte auf [$DEVICE:humidity]% !' 'nexus5-marko' 0 '', setreading doifInnenraumLuftfeuchteAlarm H_$DEVICE low
2:
Helper:
globalinit 1
last_timer 0
sleeptimer -1
Itimer:
Regexp:
0:
0 ^TempFeuchtSensorBadezimmer$:^humidity
1 ^TempFeuchtSensorFlur$:^humidity
2 ^TempFeuchtSensorKinZim:^humidity
3 ^TempFeuchtSensorSchlafzimmer$:^humidity
4 ^WandThermostatWohnzimmer_Weather$:^humidity
1:
0 ^TempFeuchtSensorBadezimmer$:^humidity
1 ^TempFeuchtSensorFlur$:^humidity
2 ^TempFeuchtSensorKinZim:^humidity
3 ^TempFeuchtSensorSchlafzimmer$:^humidity
4 ^WandThermostatWohnzimmer_Weather$:^humidity
All:
0 ^TempFeuchtSensorBadezimmer$:^humidity
1 ^TempFeuchtSensorFlur$:^humidity
2 ^TempFeuchtSensorKinZim:^humidity
3 ^TempFeuchtSensorSchlafzimmer$:^humidity
4 ^WandThermostatWohnzimmer_Weather$:^humidity
State:
State:
Attributes:
do always
Internals:
CFGFN
DEF 30E0F9
HMLAN1_MSGCNT 7569
HMLAN1_RAWMSG E30E0F9,0000,30FC6EB5,FF,FFDD,04867030E0F900000000E444
HMLAN1_RSSI -35
HMLAN1_TIME 2017-06-29 09:49:14
IODev HMLAN1
LASTInputDev HMLAN1
MSGCNT 7569
NAME TempFeuchtSensorFlur
NOTIFYDEV global
NR 62
NTFY_ORDER 50-TempFeuchtSensorFlur
STATE T: 22.8 H: 68
TYPE CUL_HM
lastMsg No:04 - t:70 s:30E0F9 d:000000 00E444
protLastRcv 2017-06-29 09:49:14
rssi_at_HMLAN1 lst:-35 max:-34 cnt:7569 avg:-35.4 min:-41
Helper:
Dblog:
Dewpoint:
Logdbhistory:
TIME 1498722554.23411
VALUE 16.6
Humidity:
Logdbhistory:
TIME 1498722554.23411
VALUE 68
Temperature:
Logdbhistory:
TIME 1498722554.23411
VALUE 22.8
Readings:
2017-06-16 01:33:00 Activity alive
2016-06-21 05:40:03 D-firmware 1.3
2016-06-21 05:40:03 D-serialNr LEQ1083308
2016-06-21 05:40:03 PairedTo 0x2AEE70
2016-06-21 05:40:03 R-pairCentral 0x2AEE70
2016-06-21 05:40:03 RegL_00. 01:00 02:01 0A:2A 0B:EE 0C:70 0F:00 18:00 00:00
2017-06-29 09:49:14 battery ok
2017-06-29 09:49:14 dewpoint 16.6
2017-06-29 09:49:14 humidity 68
2017-06-29 08:59:55 statDewpointTendency 1h: -0.1 2h: +0.1 3h: +0.2 6h: -0.2
2017-06-29 08:59:55 statHumidityTendency 1h: +0 2h: +1 3h: +2 6h: +2
2017-06-29 08:59:55 statTemperatureTendency 1h: -0.1 2h: -0.1 3h: -0.2 6h: -0.7
2017-06-29 09:49:14 state T: 22.8 H: 68
2017-06-29 09:49:14 temperature 22.8
Helper:
HM_CMDNR 4
_98_statistics STATISTIKEN
mId 00BC
rxType 132
supp_Pair_Rep 0
Expert:
def 1
det 0
raw 1
tpl 0
Io:
newChn +30E0F9,00,01,00
nextSend 1498722554.25121
rxt 0
vccu VCCU1
p:
30E0F9
00
01
00
prefIO:
HMLAN1
Mrssi:
mNo 04
Io:
HMLAN1 -33
Prt:
bErr 0
sProc 0
Q:
qReqConf
qReqStat
Role:
chn 1
dev 1
Rssi:
At_hmlan1:
avg -35.4086405073327
cnt 7569
lst -35
max -34
min -41
Shadowreg:
Tmpl:
Attributes:
IODev HMLAN1
IOgrp VCCU1:HMLAN1
actCycle 000:10
actStatus alive
alias Klimasensor Flur
autoReadReg 4_reqStatus
event-on-change-reading battery,statDewpointTendency,statHumidityTendency,statTemperatureTendency
event-on-update-reading temperature,humidity,dewpoint
expert 2_full
firmware 1.3
model HM-WDS40-TH-I-2
peerIDs 00000000,
serialNr LEQ1083308
subType THSensor
alias ist ein Attribut, kein Reading. Und Attribute werden meines Wissens nach von DOIF bislang nicht aufgelöst. Geht dann nur über
AttrVal("Devicename","Attributname","")
zum alias bei DOIF hab ich das gefunden:
https://fhem.de/commandref_DE.html#DOIF_aggregation
Zitat<format> d<number> zum Runden des Wertes mit Nachkommastellen, a für Aliasnamen bei Devicelisten, ....
oder darunter
ZitatAttrVal($name,"disable","")
ansonsten musst du leider auf die DOIF-Profis warten :-[
//edit:
Brockmann war schneller.... ich hatte das browser fenster zu lange offen ;)
Ok dann werde ich erstmal AttrVal verwenden. Das wäre definitiv ein neues Feature für DOIF. Notif, at, watchdog und Co können das ja auch schon.
Für alle die mal vor dem selben Problem stehen sollten hier nun mein vorläufiges Ergebnis
((["^TempFeuchtSensorBadezimmer$:^humidity"]
or ["^TempFeuchtSensorFlur$:^humidity"]
or ["^TempFeuchtSensorKinZim:^humidity"]
or ["^TempFeuchtSensorSchlafzimmer$:^humidity"]
or ["^WandThermostatWohnzimmer_Weather$:^humidity"])
and [?$DEVICE:humidity] > 64
and [?$SELF:H_$DEVICE] ne 'high' )
({fhem ("set pushmsg msg 'Wohnungsstatus - Luftfeuchte' '" . AttrVal("$DEVICE",'alias',"$DEVICE") . " meldet eine zu hohe Luftfeuchtigkeit von " . ReadingsVal("$DEVICE",'humidity',-1) . "% !' 'nexus5-marko' 1 ''")})
(setreading $SELF H_$DEVICE high)
DOELSEIF ((["^TempFeuchtSensorBadezimmer$:^humidity"]
or ["^TempFeuchtSensorFlur$:^humidity"]
or ["^TempFeuchtSensorKinZim:^humidity"]
or ["^TempFeuchtSensorSchlafzimmer$:^humidity"]
or ["^WandThermostatWohnzimmer_Weather$:^humidity"])
and [?$DEVICE:humidity] < 56
and [?$SELF:H_$DEVICE] ne 'low')
({fhem ("set pushmsg msg 'Wohnungsstatus - Luftfeuchte' '" . AttrVal("$DEVICE",'alias',"$DEVICE") . " meldet Normalisierung der Luftfeuchte auf " . ReadingsVal("$DEVICE",'humidity',-1) . "% !' 'nexus5-marko' 1 ''")})
(setreading $SELF H_$DEVICE low)
Im Prinzip entspricht die Problemstellung dem DOIF-Beispiel zu Batterie-Warnung in der Commandref:
Batteriewarnung per E-Mail verschicken
define di_battery DOIF ([":battery: low"] and [?$SELF:B_$DEVICE] ne "low")
({DebianMail('yourname@gmail.com', 'FHEM - battery warning from device: $DEVICE')}, setreading $SELF B_$DEVICE low)
DOELSEIF ([":battery: ok"] and [?$SELF:B_$DEVICE] ne "ok")
(setreading $SELF B_$DEVICE ok)
attr di_battery do always
Ja das wurde ja im anderen Thread (https://forum.fhem.de/index.php/topic,73709.0.html) schon angesprochen und darauf basierend kam auch der/die Code/Umsetzung zu Stande.
Bleibt aber noch die Frage nach dem Alias und wieso es nicht so schön einfach geht wie beim Reading oder beim Internal.
[DEVICE:alias]
Zitat von: CoolTux am 29 Juni 2017, 11:23:55
Ja das wurde ja im anderen Thread (https://forum.fhem.de/index.php/topic,73709.0.html) schon angesprochen und darauf basierend kam auch der/die Code/Umsetzung zu Stande.
Bleibt aber noch die Frage nach dem Alias und wieso es nicht so schön einfach geht wie beim Reading oder beim Internal.
[DEVICE:alias]
Weil einfach noch nicht umgesetzt. Änderungen bei Attributen wirken auch nicht direkt triggernd, daher kann man gleich AttrVal("Devicename","Attributname","") angeben.
Ich möchte auch anmerken, dass ich mich wünsche Alias anstelle von $DEVICE nehmen zu können. So, dass ich zB im Ausführungsteil folgendes schreiben kann
Zitat(setreading Test Device $ALIAS)
Natürlich kann man dem Umweg über Perl gehen, aber denke das Einbinden der Variable $ALIAS wäre angenehmer :)
Zitat von: Amenophis86 am 09 September 2017, 15:20:15
Ich möchte auch anmerken, dass ich mich wünsche Alias anstelle von $DEVICE nehmen zu können. So, dass ich zB im Ausführungsteil folgendes schreiben kannNatürlich kann man dem Umweg über Perl gehen, aber denke das Einbinden der Variable $ALIAS wäre angenehmer :)
Den Einzeiler kriegen wir noch im Programmiercode unter ;)
Teilst du mir mit, wenn du es eingebaut hast? Dann kann ich meinen Perlcode aus dem DOIF ausbauen :)
Zitat von: Amenophis86 am 24 September 2017, 12:44:30
Teilst du mir mit, wenn du es eingebaut hast? Dann kann ich meinen Perlcode aus dem DOIF ausbauen :)
ja. Ich bin z. Zt. mit einem größeren Umbau im DOIF wegen WEB-UI beschäftigt, daher bleiben diese (kleinen) TODO-Dinge etwas liegen. Sie sollte spätesten mit dem neuen DOIF eingepflegt sein.
Kein Problem :)
Hallo zusammen,
da ich gerade ebenfalls vor der Herausforderung stehe, in einem DOIF den Alias eines Gerätes im Ausführungsteil verwenden zu können, in meinem Fall ein curl via qx, wollte ich fragen, ob es inzwischen ein Update hierzu gibt. Oder vielleicht kann mir jemand einen Tip geben, wie ich das realisieren kann?
z. Zt. nur so
DOIF (...) (set bla {(AttrVal("Devicename","alias",""))})
OK, danke für die Rückmeldung! Funktioniert soweit.
Wenn ich das Thema hier nochmal wiederbeleben darf: Ich hole mir aktuell da wo benötigt auch den Alias über AttrVal. Jetzt nutze ich sehr häufig in DOIF den @-Modifier, um mir Listen von Devices ausgeben zu lassen. Gibt es eine schlanke Lösung, um so etwas für den Alias zu realisieren? Ich würde meiner Frau gerne die sprechenden Namen präsentieren und keine kryptischen FHEM-Device-Namen :D
Zitat von: Flachzange am 24 April 2022, 17:52:40
Wenn ich das Thema hier nochmal wiederbeleben darf: Ich hole mir aktuell da wo benötigt auch den Alias über AttrVal. Jetzt nutze ich sehr häufig in DOIF den @-Modifier, um mir Listen von Devices ausgeben zu lassen. Gibt es eine schlanke Lösung, um so etwas für den Alias zu realisieren? Ich würde meiner Frau gerne die sprechenden Namen präsentieren und keine kryptischen FHEM-Device-Namen :D
ja du brauchst nur den Buchstaben a zu nehmen: https://fhem.de/commandref_DE.html#DOIF_aggregation
ZitatListe der Devices, die mit "window" beginnen, es werden Aliasnamen ausgegeben, falls definiert:
[@:a"^window"]
:o ::) Oh man...habe es dann wohl nicht of genug gelesen. Danke!