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
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
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
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?
ich habe eine version mit einigen der vorgeschlagenen änderungen eingecheckt: https://forum.fhem.de/index.php/topic,100925.0.html (https://forum.fhem.de/index.php/topic,100925.0.html)
Hallo,
klasse ich schaue mir das mal an.
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
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.
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
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
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.
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
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
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
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
hallo thorsten,
ich schaue mir alle drei punkte an sobald ich dazu komme. kann aber etwas dauern.
gruss
andre
Hallo zusammen,
habe nach Ewigkeiten mal wieder geupdatet und bin über das Feature (Scenes werden den Gruppen zugeordnet) sehr Happy - danke Justme!! Es funktioniert wunderbar.
Ich hätte noch einen Verbesserungswunsch: Aktuell müssen bei nicht eindeutigen Szenennamen verständlicherweise die IDs angegeben werden. Ließe sich das irgendwie hinbiegen, dass das in einem Huegroup-Device nicht erforderlich ist, wenn nur eine Szene mit demselben Namen dieser Gruppe zugeordnet ist?
Hintergund: Ich habe in allen Räumen die gleichen Gruppennamen (wegen Siri, WAF und Co.) - in jeder Gruppe gibt es also genau eine Szene "Nachtlicht", "Hell" usw., aber auf der Bridge davon jeweils natürlich mehrere. Daher muss ich auch im Huegroup-Device immer mit den IDs hantieren, was die Automatisierung per FHEM ziemlich umständlich macht. Dabei müsste es doch theoretisch machbar sein, dass set flur.huegroup scene Nachtlicht (ohne ID) in diesem Fall reicht, da dem Modul eigentlich genau bekannt ist, dass ich die Nachtlicht-Szene im Flur meine - sie steht ja korrekt in der Auswahlliste des Gruppen-Devices, und die Nachtlichtszenen der anderen Räume nicht.
LG!
Ich habe mir meinen Wunsch mal selbst erfüllt:
set meineHuegroupWohnzimmer scene Nachtlicht klappt nun ohne Angabe einer Szenen-ID, wenn es auf der Bridge zwar mehrere Nachtlicht-Szenen gibt, aber nur eine davon zur Gruppe meineHuegroupWohnzimmer "gehört".
Auch die Auswahlboxen für die Szenen in den Huegroups sind dadurch bei mir nun um einiges hübscher, weil nun die meisten Szenen nur mit Namen da stehen (aber da ginge noch was --> man müsste das noch mit einem Regex Filtern können, damit der ganze "Müll", den einige Apps auf der Bridge hinterlassen, rausfliegt).
Der Perl-Code ist sicher nicht schön, aber läuft bei mir soweit prima. Ich würde mich über Tests davon freuen --- und wenn das vielleicht (nach unbedingt erforderlichem gründlichem Check ::) vielleicht sogar mit in die offizielle Version aufgenommen werden könnte :-)
Datei siehe nächstes Posting von mir ...
Ok wenn es einmal läuft ...
Hier nun eine nochmals erweiterte Version, es können jetzt in der Set-Auswahlbox der Huegroup Szenen über einen regulären Ausdruck ausgeblendet werden:
attr meineHuegroup sceneBlacklist (Switch|Animation)
--> Schon sind z.B. alle von der App iConnectHue automatisch generierten Szenen ausgeblendet, die auch iConnectHue selbst versteckt. Mit set ... aufgerufen werden können sie aber weiterhin.
So langsam werden die Huegroups für mich sinnvoll benutzbar ;-)
Möchte mich auch mal eben einklinken... Bei mir geht es um die HueEssentials - App.
Ich habe mir vorhin die Vollversion der App gekauft, sie bietet mir die Option eines "Disco - Modus" an, heißt, die Lampen reagieren über die eingebauten Mikros auf die Musik, was für mein "Herrenzimmer" einen tollen Effekt bietet. Nun würde ich dies gerne in FHEM einbauen, um es dann "schnell" und ohne die App auf dem Handy zu bemühen, einschalten zu können. Allerdings läuft diese Funktion offensichtlich nicht unter "Szene", sondern geht scheinbar einen anderen Weg. Nun möchte ich wissen, ob das jemand von Euch in Benutzung hat und wie Ihr das gelöst habt. Über Antworten würde ich mich freuen!
Schöne Grüße
UPDATE: es scheint die Möglichkeit zu geben, das Ganze über adb zu steuern (https://www.hueessentials.com/automation/intents) wobei ich noch nicht genau weiss, ob ich diese Befehle einfach im Linux-Terminal eingeben muss oder wie das funktioniert... aber sehe ich das richtig, dass wenn ich es im Terminal ausführen könnte, dass ich es dann auch in FHEM einbinden kann?