Hallo zusammen,
gibt es eine Möglichkeit durch alle erkannten HUE Lichter zu iterieren um zu Prüfen ob irgendeines an ist? Die HUEBridge ist bei mir ganz normal eingebunden und alle devices werden angezeigt.
Liebe Grüße
list TYPE=HUEDevice:FILTER=onoff=1
Super, vielen lieben Dank. Sagen wir, ich möchte ein DoIf ausführen wenn irgendein HUE Licht aktiv ist, in meinem Fall:
define MonitorOnPresence DOIF ([JemandDa] eq "present" and [HIER_DIE_HUE_PRÜFUNG]) ({GetHttpFile("10.0.1.49:8000", "/on");return undef})
wie könnte ich das am einfachsten realisieren?
Ich persönlich würde dann eher alle Hue Devices in eine Struktur packen. Dann siehst auch gleich sobald eines an geschalten wurde.
Leider bin ich im Thema FHEM noch nicht wirklich so firm. Kann ich die HUE Devices alle zusammen in eine Struktur packen und neue Devices darin automatisch ebenfalls hinzufügen wenn welche dazukommen?
Zitat von: yep_DD am 26 Oktober 2018, 20:05:29
Leider bin ich im Thema FHEM noch nicht wirklich so firm.
Das ist nicht schlimm, dafür gibt es ja die Doku. Nimm Dir einfach die Zeit, das zu lesen ("help structure") dann erledigen sich Deine Fragen von ganz alleine.
Fair enough....
ich habe jetzt eine HUE Strucure angelegt und die devices damit: addstruct HUEState TYPE=HUEDevice:FILTER=onoff=1
hinzugefügt.
Jetzt müsste ich doch mit:
attr HUEState clientstate_behavior relative
attr HUEState clientstate_priority on off
[HUEState] eq "on"
oder eben off müsste ja jetzt mein gewünschtes Verhalten widerspiegeln? Bin ich auf dem richtigen Weg?
sieht doch gut aus. wenn du Dimmer ist kommt noch ne kleine Herausforderung, sonst passt das aber
Ja, das ist das Problem, es sind ca. 30 Lampen, 5 Dimmer Switches und alle in verschiedenen Räumen und Konfigurationen. Ich sehe noch nicht, wie es passt. In der Lösung jetzt kann ich alle Lampen aus- und wieder einschalten. Aber auslesen als single read "off" / "on", weiß ich nicht wie es geht. Ich müsste den Status jeder einzelnen Lampe "dimxx%" zu on setzen und alles andere wäre off?
Einfach nur WTF?!? :o
Ihr müsst dafür überhaupt nichts machen, dafür gibt es ein Reading!
ReadingsVal("HUEGroup0","any_on","?")
Hi Markus,
okay.... also wären alle Lampen ja über "Lightset 0" (HueGroup0) standardmäßig definiert? Gedimmte Lampen sind auch abgedeckt?
Grüße
Das ist die interne Gruppe der Bridge für alle Lampen.
Sobald nicht alles komplett aus ist, sollte da eine 1 stehen.
okay, ich habe jetzt folgendes versucht, könnte das klappen?
([JemandDa] eq "absent" or ([HUEGroup0:any_on eq "0"] and [?{sunset("HORIZON=+6.0")}-{sunrise("HORIZON=+6.0")}])) ({GetHttpFile("10.0.1.49:8000", "/off");;return undef})
edit: geschweifte klammern um sunset/sunrise
es geht mir da um den HUEGroup und sunset / sunrise Teil. Wenn also alle Lampen aus sind und es zwischen Sonnenauf- und untergang ist, soll das Command ausgeführt werden.
In der Hilfe zu HUEDevice steht u.a.
ZitatGroups are updated only on definition and statusRequest
Bei mir war der Timestamp für all_on bzw. any_on dann auch tatsächlich mehrere Monate alt.
Daher scheinen diese Readings im vorliegenden Fall zunächst eher ungeeignet ...
ZitatDaher scheinen diese Readings im vorliegenden Fall zunächst eher ungeeignet ...
Sehe ich auch so. Structure ist die bessere Wahl. Also:
defmod HUEState structure room TYPE=HUEDevice
attr HUEState clientstate_behavior relative
attr HUEState clientstate_priority on|On|ON off|Off|OFF
Ein HUEDevice als Beispiel für room_map. Das brauchst du um den state dim... der HUEs auf on|off zu mappen:
defmod wz_kugel_licht HUEDevice 9 IODev=moebHUEs
attr wz_kugel_licht userattr room_map structexclude
attr wz_kugel_licht room_map onoff:[1]{1}:on onoff:[0]{1}:off
Die structure geht auf on wenn mind. ein HUEDevice auf on ist. Und auf off wenn alle HUEs off sind.
Also dann für dein DOIF:
([JemandDa] eq "absent" or ([HUEState] eq "on"]...
VG Sebastian
Hallo zusammen,
vielen Dank für die hilfreichen Inputs. Die Struktur funktioniert erstmal so weit. Welche Teil mir noch etwas unklar ist, ist folgender:
defmod wz_kugel_licht HUEDevice 9 IODev=moebHUEs
attr wz_kugel_licht userattr room_map structexclude
attr wz_kugel_licht room_map onoff:[1]{1}:on onoff:[0]{1}:off
heißt das ich definiere das Model "wz_kugel_licht" als HUEDevice, und ändere den Zustand als entweder off oder on, das bedeutet aber, dass ich jede Lampe die dimmbar ist einzelnen so modifizieren muss?
Tausend Dank für die Hilfe,
Stephan
Nein.
Ich denke was da gemeint ist, ist das alle Deine Huelampen die in der Structure sind nun ein Attribut zur Verfügung haben das sich XXX_map nennt.
Internals:
CFGFN
CHANGED
DEF 7 IODev=HUELAN1
ID 7
INTERVAL
IODev HUELAN1
NAME LED_StreifenSchlafzimmerBett
NR 107
STATE off
TYPE HUEDevice
desired 0
manufacturername Philips
modelid LST001
name LightStrips 2
swversion 66010400
type Color light
uniqueid 00:17:88:01:00:ce:2e:33-0b
Helper:
DBLOG:
state:
logDbCurrent:
TIME 1540531588.48394
VALUE off
READINGS:
2018-10-20 07:45:31 alert none
2018-10-26 06:14:09 bri 34
2018-10-20 07:45:31 colormode xy
2018-10-20 07:45:31 effect none
2018-10-20 07:45:31 hue 54568
2018-10-26 07:26:28 onoff 0
2018-10-26 07:26:28 pct 0
2018-10-20 07:45:31 reachable 1
2018-10-26 06:14:09 rgb 361148
2018-10-20 07:45:31 sat 218
2018-10-26 07:26:28 state off
2018-10-20 07:45:31 xy 0.3814,0.1981
helper:
alert none
bri 34
colormode xy
ct -1
devtype
effect none
hue 54568
on 0
pct 0
reachable 1
rgb 361148
sat 218
update_timeout -1
xy 0.3814,0.1981
Attributes:
IODev HUELAN1
LichtSchlaf structureLichtSchlafzimmer
LichtSchlaf_map pct:^[1-9][0-9]{0,2}:on pct:^0$:off
LichtWohnung structureLichtWohnung
VerbraucherWohnung structureVerbraucherWohnung
alias LED Streifen
color-icons 2
devStateIcon {(HUEDevice_devStateIcon($name),"toggle")}
event-on-change-reading state,onoff,pct,hue,sat,rgb
group Licht Schlafzimmer
icon hue_filled_lightstrip
model LST001
room Schlafzimmer
subType colordimmer
userattr LichtSchlaf LichtSchlaf_map LichtWohnung LichtWohnung_map VerbraucherWohnung VerbraucherWohnung_map structexclude
webCmd hue:rgb:rgb ff0000:rgb 98FF23:rgb 0000ff
Hier mal ein list eines meiner Devices. Ich habe für alle Zimmer eine Lichtstruktur. Also eine pro Raum.
Wie Du siehst wird hier bei
LichtSchlaf_map pct:^[1-9][0-9]{0,2}:on pct:^0$:off
alles was pct > 0 ist auf on und 0 auf off für die structure gemappt. Damit kommt nur on oder off bei der structure an und nicht der Status unbekannt
Zitat von: OdfFhem am 27 Oktober 2018, 00:59:25
In der Hilfe zu HUEDevice steht u.a.
Bei mir war der Timestamp für all_on bzw. any_on dann auch tatsächlich mehrere Monate alt.
Daher scheinen diese Readings im vorliegenden Fall zunächst eher ungeeignet ...
Das ist seltsam, scheint aber aus irgendwelchen Gründen nur bei HUEGroup0 so zu sein.
Gestern hatte ich da ein aktuelles Reading, heute nicht.
Alle anderen Gruppen werden bei mir aber zuverlässig aktualisiert, auch wenn nicht über FHEM geschalten wird.
Wenn das bei euch auch funktioniert wären immer noch die
any_on Readings der Gruppen der einfachste Weg.
Also ich habe die Lampen mittels
defmod HUEState structure room TYPE=HUEDevice
hinzugefügt und das ist der Inhalt meiner Struktur:
ATTR room
CFGFN
CHANGEDCNT 78
DEF room
TYPE=HUEDevice
DEVSPECDEF 1
NAME HUEState
NR 28027
NTFY_ORDER 50-HUEState
STATE off
TYPE structure
als ich es gestern mit
addstruct HUEState TYPE=HUEDevice:FILTER=onoff=1
hinzugfügt habe, waren alle einzelnen Lampen in der Struktur. Ich glaube es fehlt nicht mehr viel, bis es funktioniert. Vielen Dank für eure Hilfe.
Ich glaube das ist falsch. Lasse mich da aber gerne eines besseren belehren.
Hast Du den den Status der einzelnen Devices in der Struktur abgebildet?
Okay, ich habe es jetzt folgendermaßen eingebunden:
defmod HUEState structure room TYPE=HUEDevice
attr HUEState clientstate_behavior relative
attr HUEState clientstate_priority on|On|ON off|Off|OFF
attr HUEState userattr room_map structexclude
attr HUEState room_map onoff:[1]{1}:on onoff:[0]{1}:off
wenn ich jetzt irgendeine Lampe anschalte, gedimmt, ist die struct on.... nur bin ich mir nicht sicher, ob es so richtig ist.
Das map doch nicht bei der Struktur sondern direkt bei den Devices welche in der Struktur sind.
alo bei jeder einzelnen Device oder wie soll ich das verstehen?
Bei jedem Device bei dem der state nicht on oder off sein kann
also tatsächlich wirklich einzeln?
Aber das ist ja die Frage von eher, wenn ich deine Methode anwende, habe ich jedes HUE Light einzeln im Struct und könnte das machen, was du sagst, bei der von @binford6000 nicht, und deswegen bin ich nun nicht sicher, mir ist klar, dass du mir hier sicher keine Lösung fix- und fertig präsentieren wirst, ohne dass ich mich selber informiere, aber wir haben hier gerade 3 Ansätze und nun hat jeder sein Fachgebiet und für mich ist FHEM sehr neu und ich versuche es noch zu verstehen.
Du solltest Dir in Ruhe unsere Beispiele anschauen, dann siehst du das sie gleich sind. Auch er hat das map im Hue Device gemacht und nicht im structure Device.
Alternativ lese wenigstens einmal die Commandref zur structure komplett durch und ganz genau zum Attribut _map
ja, mache ich sehr gern. aber noch mal zu ersten Frage, das heißt mit deiner und seiner Methode, muss ich jedes einzelne Device modifizieren?
edit: warum geht die structure dann aber in meiner form, korrekt auf "on", wenn ich ein licht nur dimme?
Ich gehe davon aus das dein Attribut map in der structure zu den einzelnen Devices durchgereicht wird. Das siehst du wenn du dir mal ein Device an schaust, da steht bestimmt auch das map.
Und du hörst nicht zu, ich sagte nicht jedes Device sondern nur die Devices wo state einen anderen Wert haben kann als on oder off.
Lass es einfach so wie es jetzt ist, es geht ja so. In einen halben Jahr machst du es dann nach Deinem Wissen/Erfahrung besser.
du hast absolut recht, jedes einzelne Device enthält mein mapping, aber ich würde gern verstehen warum.
Denn du hast ja gesagt, das mapping auf die Strukture wäre falsch, und deswegen auf jedes Device (welches einen anderen State als on / off haben kann). Und da ich ca. 30 Lampe und 5 Dimmerschalter habe, müsste ich es ja bei den 30 Lampen einzeln machen, korrekt?
Wie dem auch sei, ich möchte dich nicht weiter damit nerven, sollte es nicht funktionieren, melde ich mich noch mal und wenn es funktioniert, dann vielen Dank für eure Hilfe und Entschuldigung für mein Unwissen.
Structure vererbt viele Attribute weiter an seine Mitglieder. Das dies bei map auch so ist wusste ich nicht. Meistens ist das vererben auch gar nicht gewünscht. Das nervt sehr.
Und noch mal, du musst es nicht an alle 40 einstellen sondern nur da wo das Reading state auch einen anderen Wert haben kann wie on oder off. Also Lampen die dimmen zum Beispiel.
und noch mal vielen Dank für deine Antwort. Aber alle meine Lampen sind meist gedimmt in irgendeiner Form. Und damit bei all denen Lampen wäre das einzustellen, wenn ich dich richtig verstehe?
jepp korrekt. Aber Du kannst auch das Attribut im Strukture Device belassen und die Strukture vererbt es dann weiter. Passt also.
Grüße
Ich habe es wie folgt gelöst. Am Anfang muss natuerlich ein statusRequest kommen, da die Hue Gruppen nur nach einem Statusrequest aktualisiert werden. Danach (sleep 10;) kann man aber die Huegroup 0 'AllLights' abfragen, und erhält über any_on die Information, ob noch Lampen an sind.
In $devices in der sub 'checkLamps' stehen dann alle Lampen drin, die noch an sind. Die Liste ist Komma (,) separiert.
define test_n notify test {\
fhem ("set AllLights statusRequest;sleep 10;{if (ReadingsNum(\"AllLights\",\"any_on\",\"nA\")) {checkLamps()}}")}
sub checkLamps {
my $devices = "";
my @list = devspec2array("TYPE=HUEDevice:FILTER=onoff=1");
($devices)= join(',', @list);
Log 3, "devices:$devices";
fhem ("set pushmsg msg 'Folgende HUEDevice sind noch an' '$devices' '' 2 'siren' 30 3600");
# return "$devices";
}
Hallo inoma,
vielen Dank für deine Antwort. Ich glaube die Lösung mit der Struktur funktioniert bei mir jetzt auch ganz gut, leider bin ich noch neu um alle Hintergründe zu verstehen. Aber es funktioniert. Sollte es Probleme geben, versuche ich deine Variante.
LG,
Stephan