HUEGroup Readings state und pct

Begonnen von igami, 28 Dezember 2017, 09:36:46

Vorheriges Thema - Nächstes Thema

igami

Es haben sich schon mehrere Leute darüber geärgert, dass die HUEGroups keine Readings haben (Ich selbst gehöre auch dazu).
Deshalb habe ich mich nun hingesetzt und ein notify geschrieben, welches state und pct auf die HUEGroup überträgt, wenn eine Lampe ein Event pct sendet.
Das Reading pct wird dabei als durchschnitt aller Lampen ermittelt. Ist nur eine von 2 Lampen auf 100 % eingeschaltet hat die Gruppe einen Wert von 50 %.

Hier der Code als Raw definition

defmod HUE_LightGroup_Status notify .+:pct:..+ {\
  my $ID = InternalVal($NAME, "ID", "");;\
  \
  return unless($TYPE eq "HUEDevice" && looks_like_number($ID));;\
  \
  my ($group) = devspec2array("TYPE=HUEDevice:FILTER=type=LightGroup:FILTER=lights=(^|.+\\D)$ID(\\D.+|\$)");;\
  \
  return unless($group);;\
  \
  my $hash = $defs{$group};;\
  my $lights = InternalVal($group, "lights", "");;\
  my $count = int(split(",", $lights));;\
  $lights =~ s/,/|/g;;\
  my $pct;;\
  $pct += (split(/[\s]+/, $_))[3]\
    foreach (split("\n", fhem("list TYPE=HUEDevice:FILTER=ID=$lights pct", 1)));;\
  $pct /= $count;;\
  \
  readingsBeginUpdate($hash);;\
  readingsBulkUpdate($hash, "pct", $pct);;\
  readingsBulkUpdate($hash, "state", $pct == 0 ? "off" : "on");;\
  readingsEndUpdate($hash, 1);;\
  \
  return;;\
}
attr HUE_LightGroup_Status devStateIcon {ReadingsVal($name, "state", "inactive") eq "active" ? ".*:ios-on-blue:inactive" : ".*:ios-off:active"}
attr HUE_LightGroup_Status group HUE
attr HUE_LightGroup_Status icon light_light_dim_70
attr HUE_LightGroup_Status room helper
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Gasmast3r

Zitat von: igami am 28 Dezember 2017, 09:36:46
Es haben sich schon mehrere Leute darüber geärgert, dass die HUEGroups keine Readings haben (Ich selbst gehöre auch dazu).
Deshalb habe ich mich nun hingesetzt und ein notify geschrieben, welches state und pct auf die HUEGroup überträgt, wenn eine Lampe ein Event pct sendet.
Das Reading pct wird dabei als durchschnitt aller Lampen ermittelt. Ist nur eine von 2 Lampen auf 100 % eingeschaltet hat die Gruppe einen Wert von 50 %.

Hier der Code als Raw definition

defmod HUE_LightGroup_Status notify .+:pct:..+ {\
  my $ID = InternalVal($NAME, "ID", "");;\
  \
  return unless($TYPE eq "HUEDevice" && looks_like_number($ID));;\
  \
  my ($group) = devspec2array("TYPE=HUEDevice:FILTER=type=LightGroup:FILTER=lights=(^|.+\\D)$ID(\\D.+|\$)");;\
  \
  return unless($group);;\
  \
  my $hash = $defs{$group};;\
  my $lights = InternalVal($group, "lights", "");;\
  my $count = int(split(",", $lights));;\
  $lights =~ s/,/|/g;;\
  my $pct;;\
  $pct += (split(/[\s]+/, $_))[3]\
    foreach (split("\n", fhem("list TYPE=HUEDevice:FILTER=ID=$lights pct", 1)));;\
  $pct /= $count;;\
  \
  readingsBeginUpdate($hash);;\
  readingsBulkUpdate($hash, "pct", $pct);;\
  readingsBulkUpdate($hash, "state", $pct == 0 ? "off" : "on");;\
  readingsEndUpdate($hash, 1);;\
  \
  return;;\
}
attr HUE_LightGroup_Status devStateIcon {ReadingsVal($name, "state", "inactive") eq "active" ? ".*:ios-on-blue:inactive" : ".*:ios-off:active"}
attr HUE_LightGroup_Status group HUE
attr HUE_LightGroup_Status icon light_light_dim_70
attr HUE_LightGroup_Status room helper

Hy ich bin nicht gut im Code lesen wo trage ich überall meine zugehörigen hue nummern ein

Gesendet von meinem SM-G950F mit Tapatalk


justme1968

#2
hallo igami,

die idee ist gut.wenn es ein paar stimmen dafür gibt würde ich es etwas angepasst in die hue module übernehmen.

bedingung: es gibt nicht zu viele sonderwünsche in richtung minimum, durchschnitt, maximum, farbe, ... :)

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

igami

Zitat von: Gasmast3r am 28 Dezember 2017, 11:20:51
Hy ich bin nicht gut im Code lesen wo trage ich überall meine zugehörigen hue nummern ein
Ist nicht notwendig, dass notify prüft für alle HUEDevices ob diese in einer Gruppe sind. Falls ja werden die Readings in die Gruppe geschrieben.

Zitat von: justme1968 am 28 Dezember 2017, 11:48:36
hallo igami,

die idee ist gut.wenn es ein paar stimmen dafür gibt würde ich es etwas angepasst in die hui module übernehmen.

bedingung: es gibt nicht zu viele sonderwünsche in richtung minimum, durchschnitt, maximum, farbe, ... :)

gruss
  andre
Ich habe selbst nur white und eine white ambiance im Einsatz, da müssen sich andere zu äußern.
Bei mir ist es auch so, dass ich nur Gruppen im Einsatz habe, wenn ich mehrere Leuchtmittel in einer Lampe im Einsatz habe (z.B. das klassische drei-flammige Deckenrondell)

Ich würde mich freuen, wenn es direkt in das HUE Modul integriert wird. Dadurch sollte das System auch wieder entlastet werden, da ja mit meinem notify bei allen pct Events geprüft wird ob es sich um HUE handelt.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

justme1968

dann lass uns doch einfach mal sammeln was sinnvoll ist.

mein vorschlag wäre:
- pct aller lampen in der gruppe konfigurierbar als minimum, mittelwert oder maximum
- farbtemperatur genau so, konfigurierbar als minimum, mittelwert oder maximum der einzelnen lampen
- hue könnte man vermutlich halbwegs korrekt aus den beteiligten lampen mischen

das würde den fall einer lampe mit mehreren leuchtmitteln vermutlich schon komplett abdecken.

wie schaut es mit gruppen aus die z.b. für einen raum verwendet werden? passt das da auch?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

somansch

Wün
Zitat von: justme1968 am 28 Dezember 2017, 11:48:36
hallo igami,

die idee ist gut.wenn es ein paar stimmen dafür gibt würde ich es etwas angepasst in die hue module übernehmen.

bedingung: es gibt nicht zu viele sonderwünsche in richtung minimum, durchschnitt, maximum, farbe, ... :)

gruss
  andre

Würde mich auch über eine offizielle Anpassung freuen.

Danke und Gruß
Andreas

tpm88

+1 zur offiziellen Übernahme


Mobil gesendet, darum kurz...
Test FHEM Server on RPi, CUL_HM
Prod FHEM Server on Odroid HC1, HM-USB, JeeLink
Devices: diverse HM, IT1500, 1wire, LaCrosse, MQTT

Mave

Ins offizielle Modul damit....ich bin dafür.


igami

Zitat von: justme1968 am 28 Dezember 2017, 15:11:24
- pct aller lampen in der gruppe konfigurierbar als minimum, mittelwert oder maximum
- farbtemperatur genau so, konfigurierbar als minimum, mittelwert oder maximum der einzelnen lampen
Bei nicht gesetztem Attribut dann bitte den Mittelwert verwenden.

Zitat von: justme1968 am 28 Dezember 2017, 15:11:24
- hue könnte man vermutlich halbwegs korrekt aus den beteiligten lampen mischen
Ist das dann auch ein Mittelwert?

Zitat von: justme1968 am 28 Dezember 2017, 15:11:24
wie schaut es mit gruppen aus die z.b. für einen raum verwendet werden? passt das da auch?
Für Räume würde ich das nicht implementieren, wenn jemand das wünscht kann er sich das ja als Gruppe anlegen. Wenn du anderer Meinung bist einfach analog handhaben.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Mave

#9
Zitat von: igami am 28 Dezember 2017, 09:36:46
Es haben sich schon mehrere Leute darüber geärgert, dass die HUEGroups keine Readings haben (Ich selbst gehöre auch dazu).
Deshalb habe ich mich nun hingesetzt und ein notify geschrieben, welches state und pct auf die HUEGroup überträgt, wenn eine Lampe ein Event pct sendet.
Das Reading pct wird dabei als durchschnitt aller Lampen ermittelt. Ist nur eine von 2 Lampen auf 100 % eingeschaltet hat die Gruppe einen Wert von 50 %.

Hier der Code als Raw definition

defmod HUE_LightGroup_Status notify .+:pct:..+ {\
  my $ID = InternalVal($NAME, "ID", "");;\
  \
  return unless($TYPE eq "HUEDevice" && looks_like_number($ID));;\
  \
  my ($group) = devspec2array("TYPE=HUEDevice:FILTER=type=LightGroup:FILTER=lights=(^|.+\\D)$ID(\\D.+|\$)");;\
  \
  return unless($group);;\
  \
  my $hash = $defs{$group};;\
  my $lights = InternalVal($group, "lights", "");;\
  my $count = int(split(",", $lights));;\
  $lights =~ s/,/|/g;;\
  my $pct;;\
  $pct += (split(/[\s]+/, $_))[3]\
    foreach (split("\n", fhem("list TYPE=HUEDevice:FILTER=ID=$lights pct", 1)));;\
  $pct /= $count;;\
  \
  readingsBeginUpdate($hash);;\
  readingsBulkUpdate($hash, "pct", $pct);;\
  readingsBulkUpdate($hash, "state", $pct == 0 ? "off" : "on");;\
  readingsEndUpdate($hash, 1);;\
  \
  return;;\
}
attr HUE_LightGroup_Status devStateIcon {ReadingsVal($name, "state", "inactive") eq "active" ? ".*:ios-on-blue:inactive" : ".*:ios-off:active"}
attr HUE_LightGroup_Status group HUE
attr HUE_LightGroup_Status icon light_light_dim_70
attr HUE_LightGroup_Status room helper



Hallo igami,

vielen Dank für Dein geniales Notify.

Dein notify funktioniert super bei meiner Gruppe "alle HUE Devices", das automatisch angelegt wurde.

Bei einer neu angelegten Gruppe mit 5 HUE Lampen wird der Status von pct aber leider nicht aktualisiert und ich weiß nicht mehr, wo ich noch suchen muß.

Über Unterstützung würde ich mich sehr freuen.

Vielen Dank.

Grüße Mave


PS: Den einzigen Unterschied zwischen den beiden Gruppen den ich erkennen kann, ist das Internal "name". Bei der Gruppe "alle HUE Devices" ist "name" "Group 0" und bei meiner neu angelegten Gruppe "wz_Wohnen".

igami

Bitte ein list von der Gruppe wo es nicht funktioniert
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Mave

Internals:
   CHANGED   
   DEF        group 16  IODev=HUE
   ID         G16
   INTERVAL   
   IODev      HUE
   NAME       HUEGroup16
   NR         245
   STATE      on
   TYPE       HUEDevice
   desired    1
   lights     4,5,6,7,9,12,13,14
   name       wz_Wohnen
   type       LightGroup
   READINGS:
     2018-01-02 18:16:51   all_on          1
     2018-01-02 18:03:09   any_on          1
     2018-01-02 17:29:05   pct             70
     2018-01-02 17:29:05   state           on
   helper:
     devtype    G
     update_timeout 1
Attributes:
   IODev      HUE
   alexaName  Licht
   alexaRoom  Wohnzimmer
   alias      wz_Wohnen
   color-icons 2
   delayedUpdate 1
   devStateIcon {(HUEDevice_devStateIcon($name),"toggle")}
   genericDeviceType light
   group      Licht
   icon       light_light
   room       Wohnzimmer
   webCmd     pct:on:off

Mave

Habe gerade festgestellt, dass auch die Gruppe Küchenlicht, wo die Deckenlampe aus zwei HUE Lampen besteht, nicht aktualisiert wird.

Immerhin wurden ja in meiner neuen Gruppe wz_Wohnen ja schonmal die Readings state und pct angelegt. Bei der Gruppe Küchenlicht gibt es die Readings noch nicht.

Internals:
   CHANGED   
   DEF        group 1  IODev=HUE
   ID         G1
   INTERVAL   
   IODev      HUE
   NAME       HUEGroup1
   NR         41
   STATE      0
   TYPE       HUEDevice
   class      Kitchen
   desired    0
   lights     1,3
   name       Kueche Decke
   type       Room
   READINGS:
     2018-01-02 18:13:05   all_on          0
     2018-01-02 18:35:35   any_on          0
   helper:
     devtype    G
     update_timeout 1
Attributes:
   IODev      HUE
   alexaName  Licht
   alexaRoom  Küche
   alias      Kueche Decke
   color-icons 2
   delayedUpdate 1
   devStateIcon 0:off 1:on
   genericDeviceType light
   group      Licht
   icon       hue_room_kitchen
   room       Kueche
   sortby     1
   stateFormat any_on
   webCmd     pct:on:off

igami

HUEGroup16 hat doch die readings.
Das andere ist vom internal type (Achtung,klein geschrieben) ein room, darauf guckt das notify nicht
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Mave

Okay, verstanden. Also Zimmer (rooms) werden nicht beachtet, nur selbst in FHEM angelegte Gruppen vom Typ LightGroup.

Aber warum wird pct in der Gruppe HUEGroup16 nicht aktualisiert?
Ich hab keine Ahnung, warum das auf 70 steht. Es steht immer auf 70 und wird nicht aktualisiert.  :-[