[GELÖST] [$DEVICE:alias] wird nicht aufgelöst

Begonnen von CoolTux, 29 Juni 2017, 10:10:28

Vorheriges Thema - Nächstes Thema

CoolTux

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

Brockmann

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","")

nils_

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 ;)
viele Wege in FHEM es gibt!

CoolTux

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

CoolTux

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)
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

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

CoolTux

#6
Ja das wurde ja im anderen Thread 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]
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

Damian

Zitat von: CoolTux am 29 Juni 2017, 11:23:55
Ja das wurde ja im anderen Thread 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.

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

Amenophis86

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 :)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Damian

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 ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Amenophis86

Teilst du mir mit, wenn du es eingebaut hast? Dann kann ich meinen Perlcode aus dem DOIF ausbauen :)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Damian

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.

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

Amenophis86

Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

dennisk

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?

Damian

z. Zt. nur so

DOIF (...) (set bla {(AttrVal("Devicename","alias",""))})
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF