Hue: Behandlung von "scenes"

Begonnen von Thorsten Pferdekaemper, 23 Mai 2019, 22:01:19

Vorheriges Thema - Nächstes Thema

Thorsten Pferdekaemper

Hi,
um Hue-Devices besser von FUIP aus unterstützen zu können, hätte ich ein paar Wünsche. Ich denke, dass das auch die Benutzbarkeit für FHEMWEB-Benutzer verbessert.

Soweit ich das verstanden habe, muss man sich die IDs für die Szenen momentan mit "get <huebridge> scenes" holen. Diese kann man dann auch mit "set <huebridge> scene" verwenden. Allerdings zeigt FHEMWEB bei "set <huebridge> scene" nicht die Liste der verwendbaren IDs an. Es wäre besser, wenn das gehen würde. Außerdem wäre es schön, wenn man hier auch die Namen der Szenen angeben könnte (inklusive Drop-Down-Liste).

Dort steht dann auch dabei, welche Lampen mit der jeweiligen Szene gesteuert werden. Allerdings wendet man Szenen normalerweise auf Gruppen an. Man kann aber nicht sehen, zu welcher Gruppe eine Szene gehört. Am besten wäre es, wenn beim "set <group> scene" auch eine Drop-Down-Liste erscheint, die anzeigt, welche Szenen für die entsprechende Gruppe verwendet werden kann. Hier wäre es auch gut, wenn man direkt die Namen sehen würde und nicht (nur) die IDs.

Dann noch eine Frage zu den Bildern zu den Szenen, die man in der "offiziellen" App sieht: Gibt es eine Chance, die irgendwie zu den Szenen runterzuladen?

Gruß,
   Thorsten
FUIP

shrek71

Hallo Thorsten,

ich schaue mir mal die HUE-App genauer an ob es da eine Möglichkeit gibt. Das apk kann ich ja extrahieren, frage ist nur gibts da ein rechtliches Problem die Bilder zu nutzen?

Gruß,
Sascha

Thorsten Pferdekaemper

Zitat von: shrek71 am 27 Mai 2019, 11:37:03
ich schaue mir mal die HUE-App genauer an ob es da eine Möglichkeit gibt. Das apk kann ich ja extrahieren, frage ist nur gibts da ein rechtliches Problem die Bilder zu nutzen?
Tja, das ist eine ganz andere Frage...
Ich würde nicht die Bilder rausziehen und dann mit FHEM/FTUI/FUIP ausliefern wollen. Das könnte tatsächlich problematisch sein. Interessant wäre es meiner Meinung nach nur, wenn man die Bilder per API oder so "holen" könnte. Ich glaube aber, dass das nicht geht. Die Bilder liegen auf dem Handy (also in der App) und nicht auf der Bridge. Die Hue-API kann aber nur auf Sachen zugreifen, die auf der Bridge liegen.

Mir wäre sowieso der Rest meines Beitrags wichtiger, die Bilder wären nur noch der Zuckerguss oben drauf.
Gruß,
   Thorsten
FUIP

justme1968

hallo thorsten,

das problem ist das phillips immer noch kein push api hat und die szenen regelmässig zu holen ein nicht zu vernachlässigender overhead ist. es gibt Installationen da ist schon das reine pollen der lampen problematisch.

ich könnte mir vorstellen die szenen ein mal  beim starten und bei jedem manuellen get zu merken.dann wären die daten für das drop down zumindest halbwegs aktuell.

den aufruf auch über namen kann ich einbauen.


es gibt hue intern keine zuordnung von szenen zu gruppen. d.h. szenen gehören nicht zu gruppen.

das anlegen einer neuen szene erfolgt eigentlich auch bridge ebene unter angangabe einer liste von lampen. der weg über das gruppen device in fhem ist nur eine abkürzung von mir um nicht die liste der lampen angeben zu müssen.

beim abrufen einer szene wird zwar eine gruppe angegeben, das kann aber jede beliebige gruppe sein. auch die alle gruppe. die gesteuerten lampen sind dann die schnittmenge aus der szenen liste und der gruppen liste.

d.h. beim abrufen einer szene macht man das normalerweise über das bridge device.


ich bin mir nicht sicher ob es gut ist die szenen liste im gruppen device so weit einzuschränken das nur noch szenen mit gleicher lampen liste wie die der gruppe selber auftauchen. eine einschränkung auf nicht leere schnittmenge könnte aber sinnvoll sein.


ansonsten: die liste möglicher szenen wird sehr schnell sehr lang und ich glaube es ist nicht unbedingt sinnvoll im tablet ui wirklich alle anzuzeigen. wenn du hier etwas einbaust: wie wäre es im editier modus alle szenen zu sehen und eine untermenge auszuwählen die dann im normalen modus zur verfügung steht?


es gibt in der szenen info der  bridge ein picture item. laut doku wird das aber nicht bei abfrage aller szenen gefüllt sondern nur bei abfrage einer einzelnen szene... und bei mir ist es nirgendwo überhaupt gesetzt. wie genau schauen die bilder denn aus?
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

justme1968

ich habe eine version mit einigen der vorgeschlagenen änderungen eingecheckt: https://forum.fhem.de/index.php/topic,100925.0.html

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

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

shrek71

Hallo,
klasse ich schaue mir das mal an.

Thorsten Pferdekaemper

Zitat von: justme1968 am 28 Mai 2019, 13:07:33
ich könnte mir vorstellen die szenen ein mal  beim starten und bei jedem manuellen get zu merken.dann wären die daten für das drop down zumindest halbwegs aktuell.
Das fände ich völlig ausreichend. Wer dauernd seine Szenen ändert kann sich ja was mit einem "at" bauen.

Zitat
es gibt hue intern keine zuordnung von szenen zu gruppen. d.h. szenen gehören nicht zu gruppen.
Das sieht bei mir etwas anders aus. Wenn ich in den Hue-Debugger gehe und mir die Szenen abhole, dann steht bei allen

"type": "GroupScene",
"group": "1",

...oder halt eine andere Nummer bei "group".
Ich habe auch den Eindruck, dass ich in der App für eine Gruppe nur zugeordnete Szenen auswählen kann.
In der API-Dokumentation steht zwar, dass es auch "type":"LightScene" gibt, aber ich wüsste jetzt weder wie ich so eine anlegen kann, noch kommt das bei mir vor.
In der API-Dok steht auch, dass das lights-Array bei GroupScene immer aus allen Lampen der Gruppe gebildet wird.
Zitat
The array is informational for GroupScene, it is generated automatically from the lights in the linked group.

Zitat
das anlegen einer neuen szene erfolgt eigentlich auch bridge ebene unter angangabe einer liste von lampen.
Das habe ich nicht gefunden. Bist Du Dir sicher, dass das wirklich noch geht? Ich glaube mal, in der App nicht wirklich.

Zitat
ich bin mir nicht sicher ob es gut ist die szenen liste im gruppen device so weit einzuschränken das nur noch szenen mit gleicher lampen liste wie die der gruppe selber auftauchen. eine einschränkung auf nicht leere schnittmenge könnte aber sinnvoll sein.
Ich denke mal, dass man zumindest keine Szenen anzeigen sollten, die "type":"GroupScene" haben und eine abweichende Gruppe. Bei "LightScene" gebe ich Dir Recht.

Zitat
ansonsten: die liste möglicher szenen wird sehr schnell sehr lang und ich glaube es ist nicht unbedingt sinnvoll im tablet ui wirklich alle anzuzeigen. wenn du hier etwas einbaust: wie wäre es im editier modus alle szenen zu sehen und eine untermenge auszuwählen die dann im normalen modus zur verfügung steht?
So ist das in FUIP ja auch. Man kann beim Zusammenklicken der Oberfläche (normalerweise) aus allen Möglichkeiten das auswählen, was der Benutzer nachher auch tatsächlich machen darf. Ich will aber auch für denjenigen, der die Oberfläche bastelt, eine Werthilfe zur Verfügung stellen.

Zitat
es gibt in der szenen info der  bridge ein picture item. laut doku wird das aber nicht bei abfrage aller szenen gefüllt sondern nur bei abfrage einer einzelnen szene... und bei mir ist es nirgendwo überhaupt gesetzt. wie genau schauen die bilder denn aus?
Das picture-Feld wird nie gefüllt, außer man setzt es vorher selbst (über eine eigene App oder so). Die Hue-App setzt das nie.
Ich hab grad mein Handy nicht da, aber in etwa so:
https://lh3.googleusercontent.com/TqSgkC6F-U7d4bvCX-FTx4Y-qiwGIYYPqfRI4iH5oXLe8tAMuVY_2Iyto9jLP3l6HyLM=w720-h310-rw
Ich würde sagen, wir vergessen das mit den Bildern erstmal. Ich glaube, das geht nicht vernünftig.

Gruß,
   Thorsten
FUIP

justme1968

du hast recht. zum teil. und leider ist die hue doku aktuell in sich nicht konsistent und vermutlich zum teil falsch. die beispiele widersprechen zum teil der api doku auf der gleichen seite.

seit der letzen oder verletzen firmware gibt es änderungen bei gruppen und szenen.

die typen LightScene und GroupScene für die szenen sind neu. bei den einen wird tatsächlich eine gruppe angegeben, bei der anderen wie bisher eine liste von lampen. zusätliich gibt es auch wie bisher noch den alten szenen ohne typ.


fhem legt z.b. solche szenen an wenn man hue gruppen in einer fhem LightScene hat.

aus der api doku das Beispiel zum anlegen einer szene mit allen drei möglichkeiten:
Zitat{
    "name":"Cozy dinner",   
    "recycle":false,
    "group":"2",
    "type":"GroupScene"
}
Or
{
    "name":"Cozy dinner",   
    "recycle":false,
    "lights":["1","2"],
    "type":"LightScene"
}
Or
{
  "name": "awesomescene",
   "lights": ["1", "2"],
   "appdata": {
       "version": 2,
       "data": "Abc12_01_d00"
   },
   "lightstates": {
       "1": {
           "on": false,
           "bri": 100,
           "xy": [0.3, 0.2],
       },
       "2": {
           "on": false,
           "bri": 100,
            "xy": [0.3, 0.2],
            "effect": "colorloop",
       }
   }
}

zum abrufen steht in der api doku unter anderem das hier:
ZitatNote: Use group <id> 0 to recall a scene for all lights (which are part of the scene), or use another group <id> if you want to recall the scene for a specific group of lights. E.g. Using group 2 would recall the scene for all lights that are in group 2 AND are part of the specified scene.


unabhängig davon: alle szenen die mit älteren firmware/api versionen erzeugt wurden bleiben ja vorhanden und verhalten sich wie früher. d.h. es reicht nicht nur das neue api zu verwenden.


deinen link kann ich leider nicht aufmachen. aber wenn das feld sowieso leer ist würde ich das erst mal ignorieren. zumal wir in fhem ja kein szenen device haben wo man das bild als reading oder icon ablegen könnte.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

Thorsten Pferdekaemper

Zitat von: justme1968 am 28 Mai 2019, 22:42:07
seit der letzen oder verletzen firmware gibt es änderungen bei gruppen und szenen.

die typen LightScene und GroupScene für die szenen sind neu. bei den einen wird tatsächlich eine gruppe angegeben, bei der anderen wie bisher eine liste von lampen. zusätliich gibt es auch wie bisher noch den alten szenen ohne typ.
Wahrscheinlich fehlt mir da einfach die Historie. Ich habe bisher nur mit der Philips Hue App Szenen angelegt, und da habe ich nur den Weg über Gruppen (also Räume und Zonen) gefunden. Daher dachte ich, dass das immer so ist.
In der App kann man übrigens auch nur Szenen auswählen, die zur aktuell gewählten Gruppe gehören. Wenn man keine Gruppe gewählt hat, dann kann man auch keine Szene aktivieren.

Zitat
deinen link kann ich leider nicht aufmachen. aber wenn das feld sowieso leer ist würde ich das erst mal ignorieren. zumal wir in fhem ja kein szenen device haben wo man das bild als reading oder icon ablegen könnte.
Das sehe ich auch so.

Gruß,
   Thorsten
FUIP

Thorsten Pferdekaemper

Hi,
ich glaube, dass ich jetzt doch noch ein Problemchen gefunden habe. Bei eindeutigen Szenennamen, die Umlaute (oder zumindest ein "ü") enthalten, funktioniert es nicht. Ich habe z.B. eine Szene "GrünBüro", bei der ich kein "set scene" mit dem Namen machen kann. Ich konnte das bis zur sub HUEBridge_scene2id eingrenzen, es ist aber ein bisschen seltsam. In der Zeile...

    return $key if( lc($scene->{name}) =~ m/^$id$/ );

...ist
    $scene->{name} = "GrünBüro"
aber
    lc($scene->{name}) = "gr�nb�ro"
und
    $id = "grünbüro"

D.h. das "ü" wird anscheinend vom lc unterschiedlich behandelt. Ich weiß allerdings nicht warum...
Gruß,
   Thorsten
FUIP

justme1968

das problem ist das die art wie fhem umlaute kodiert. es wird zwar intern utf8 verwendet, aber die strings sind nicht als perl itf8 markiert sondern einfach nur byte folgen. deshalb 'weiss' perl nicht das es utf8 ist und weder regex noch andere zeichen routinen  außer normalem vergleich gehen richtig. das ist leider ûberall so. als workaround: ein . statt dem umlaut sollte wie oben beschrieben gehen.

ich schaue mal ob mir noch was besseres einfällt.

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

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

Thorsten Pferdekaemper

Sowas in der Art hatte ich auch im Verdacht, aber ich muss zugeben, dass ich mich da nicht wirklich auskenne. Ich hatte nur festgestellt, dass wenn ich im FHEM-Kommandofeld das hier eingebe:

{ lc("Üü") }

...dann kommt "Üü" dabei raus. Das "lc" weiß also nicht, wie man ein kleines "ü" aus einem großen macht, aber es produziert zumindest keine seltsamen Zeichen.
Mache ich aber das hier:

{ my $s = "Üü";; utf8::upgrade($s);; lc($s) }

...dann erhalte ich nicht druckbare Zeichen.

Ich habe dann noch ein bisschen mit "use utf8" und Ähnlichem herumexperimentiert, aber ohne Erfolg. Soooo schwierig sollte das doch aber gar nicht sein. (?)

Gruß,
   Thorsten
FUIP

Thorsten Pferdekaemper

Ich glaube, dass ich jetzt einen Ansatz gefunden habe. Du hattest gesagt, dass FHEM zwar UTF8 verwendet, aber dass das UTF8-Flag nicht gesetzt ist. Ich vermute mal, dass daher das hier funktioniert:


    foreach my $key ( keys %{$hash->{helper}{scenes}} ) {
      my $scene = $hash->{helper}{scenes}{$key};

      return $key if( lc($key) eq $id );
      #return $key if( $scene->{name} eq $id );
  utf8::downgrade($scene->{name});           # <<<<<<<<<<<<<<<<<<<
      return $key if( lc($scene->{name}) =~ m/^$id$/ );
    }
  }

  return '<unknown>';
}

Das "downgrade" entfernt das UTF8-Flag, soweit ich das verstehe. Dadurch macht das "lc" für die Namen dasselbe wie für $id und as ganze klappt wieder. ...also zumindest bei mir in einem schnellen Test.
Natürlich würde man das "downgrade" nicht an dieser Stelle machen, sondern da wo die Namen gefüllt werden, denke ich.
Gruß,
   Thorsten
FUIP

Thorsten Pferdekaemper

Hi,
ich habe jetzt leider noch etwas gefunden, was nicht so richtig funktioniert.
Wenn ich in einem HUEDevice, welches keine Gruppe ist (also eine einzelne Lampe) "set scene" mache, dann bietet mir FHEMWEB alle Szenen an, die etwas mit dieser Lampe zu tun haben. Allerdings erhält man beim Ausführen das hier:

Unknown argument scene, choose one of off on toggle statusRequest pct bri rgb color ct hue sat xy dimUp dimDown ctUp ctDown hueUp hueDown satUp satDown alert effect rename scene off-for-timer on-for-timer intervals blink on-till off-till-overnight off-till on-till-overnight attrTemplate

Soll das jetzt gehen oder nicht?
Gruß,
   Thorsten
FUIP

Thorsten Pferdekaemper

Hi,
...und das nächste Problemchen.
Ich hatte ja schon einmal gesagt, dass ich mit der Android-App nur Szenen mit type=GroupScene anlegen kann. Jetzt habe ich versucht, über FHEM eine Szene mit type=LightScene anzulegen. Also...

set og_huebridge savescene RotBuero 3

Das produziert diese Fehlermeldung:

invalid value, [3], for parameter, lights

Irgendwann habe ich dann herausgefunden, dass das HUE API die 3 mit Anführungsstrichen erwartet, also so:

{
    "name":"RotBuero",   
    "recycle":false,
    "lights":["3"],
    "type":"LightScene"
}

FHEM schickt aber in etwa das hier:

{
    "name":"RotBuero",   
    "recycle":false,
    "lights":[3],
    "type":"LightScene"
}

Jetzt dachte ich, dass man die "" folgendermaßen mit reinbasteln kann:

} elsif($cmd eq 'savescene') {
    my $result;
    if( $hash->{helper}{apiversion} && $hash->{helper}{apiversion} >= (1<<16) + (11<<8) ) {
      return "usage: savescene <name> <lights>" if( @args < 2 );

#PFE
my $lights = HUEBridge_string2array($args[@args-1]);
my $lightStr = '["'.join('","',@$lights).'"]';
      my $obj = { 'name' => join( ' ', @args[0..@args-2]),
                  'recycle' => JSON::true,
                  #'lights' => HUEBridge_string2array($args[@args-1]),
  'lights' => $lightStr
      };

      $result = HUEBridge_Call($hash, undef, "scenes", $obj, 'POST');

Das geht aber auch nicht. Ich glaube, dass das daran liegt, dass in HttpUtils (genauer: HttpUtils_Connect2) die Felder in $hash->{data} durch urlEncode gejagt werden, was das HUE API wahrscheinlich nicht versteht.

An der Stelle weiß ich jetzt auch nicht wirklich weiter. ...oder gibt es da eine einfachere Lösung?

Gruß,
   Thorsten
FUIP