FHEM > Codeschnipsel

Modul 31_Twinkly.pm - Control Twinkly Lights

(1/9) > >>

t1me2die:
Moin liebes Forum,

passend zur anbrechenden Winterzeit kam mal wieder die Twinkly Lichterkette aus dem Keller zum Vorschein.
Ich stellte mir also erneut die Frage, ob es mittlerweile ein Modul zur Steuerung der unzähligen Twinkly Produkte https://twinkly.com/de gibt.
Bisher habe ich die Steuerung immer über HTTPMOD vorgenommen, was nur sehr eingeschränkt funktionierte.

Bei meiner Recherche bin ich auf die (unofficial) RESTful API Beschreibung von https://xled-docs.readthedocs.io/en/latest/rest_api.html gestoßen.

Anhand der API habe ich nun ein erstes Modul mit dem Namen 31_Twinkly.pm entwickelt, welches ich aktuell mit folgenden Geräten betreibe:

* Strings GoldEdition (AWW auch genannt)
* Strings RGBW Edition
* Spritzer (RGB)
* Cluster (RGB)
* Festoon (RGB)
Das Modul steht zum Test in meinem git zu Verfügung / alternativ am Ende des Beitrages:
https://github.com/t1me2die/31_Twinkly.pm/blob/main/31_Twinkly.pm

Dokumentation im FHEMWiki:
https://wiki.fhem.de/wiki/Twinkly

Zu aller erst, dass Modul ist in der Entwicklungsphase und nicht alle Funktionen sind zu 100% getestet, daher gilt "Verwendung auf eigene Gefahr!".

Nachdem ihr das Modul in das FHEM Verzeichnis gepackt habt und einen:

--- Code: ---reload 31_Twinkly.pm
--- Ende Code ---
vorgenommen habt, könnt ihr mit dem

Define fortsetzen:

--- Code: ---define <name> Twinkly <IP-Adresse / Hostname>
--- Ende Code ---

Beispiel:

--- Code: ---define Weihnachtskaktus Twinkly 192.168.178.100
oder
define Weihnachtskaktus Twinkly Weihnachtskaktus.fritz.box

--- Ende Code ---

Stellt bitte sicher, dass euer Twinkly Device im Netzwerk erreichbar ist.
Anschließend gebt dem Modul bitte 1-2Minuten um die notwendigen Informationen auszulesen.

Zuerst wird ein TOKEN vom Twinkly Device angefordert, womit man sich authentifizieren muss (Expire after ~4h).
Es werden interne Geräteinformationen in den Readings abgelegt.
Es wird versucht das Model automatisch zu ermitteln.
Es wird versucht ein Icon und das passende webCmd für eine einfache Steuerung zu setzen.

Folgende GET Befehle stehen zur Auswahl:

* Gestalt - main device informations
* Mode    - get actual mode of device
* Movies  - get all uploaded / saved movies from the device
* Name    - get internal informations of the device
* Network - get network informations of the device
* Token   - check if the token is valid or need to updated
Folgende SET Befehle stehen zur Auswahl:

* brightness - set brightness to device
* effect_id  - set a standard effect to device
* hue        - set hue color to device
* mode       - set different mode to device
* movie      - switch between uploaded /saved movies - use "get Device Movies" first!
* on         - switch device on in the movie mode
* off        - switch device off
* saturation - set saturation to device
Folgendes ATTR kann optional gesetzt werden:

* model                - will be set automatically depends on the product_code
* interval              - define the refresh interval (min: 15sec -> default: each 60sec)
Eine erste "Device specific Help" habe ich angelegt - zum Großteil zuerst auf englisch.

Falls ihr eine Gruppierung von mehreren Geräten in der Twinkly App vorgenommen habt, so müsst ihr das Main-Steuerungsgerät herausfinden.
In meinem Fall habe ich zwei AWW (400 und 250er Strings) via Join verbunden. In meinem Fall war es das erste Gerät in der Gruppierungsliste (dies war auch das Gerät, welches ich zuerst ausgewählt hatte!).
Das zweite Gerät kann man via einzeln auch steuern, jedoch kommt die Gruppierung dann ein wenig durcheinander, weswegen ich vorschlagen würde, dass ihr nur das Main-Gerät definiert. Die Funktionen sind hier identisch wie bei einem einzelnen Gerät.

Für Feedback, Code-Verbesserung und weitere Vorschläge bin ich gerne offen :)
Ansonsten hoffe ich, dass es vielleicht dem Ein oder Anderen hilft die Weihnachtszeit etwas stressfreier zu gestalten  :)

@Energieverbrauch: Ich habe soeben den Verbrauch vom Spritzer und Cluster (400 RGB) gemessen und bin ein wenig überrascht.

* Spritzer -> 18-19Watt unabhängig von der eingestellten Helligkeit, d.h. es ist egal ob man auf 1% Helligkeit oder auf 100% Helligkeit das Gerät im Modus "movie" laufen lässt. Im Modus "color" (eine einzelne Farbe), sinkt der Verbrauch geringfügig.
* Cluster -> 37-38Watt, unabhängig der Helligkeit. Im Modus "color" liegt der Verbrauch bei 100% Helligkeit -> 33Watt, 50% Helligkeit -> 36Watt, 25% Helligkeit -> 37Watt, 1% Helligkeit -> 38Watt
Gruß
Mathias

@Edit:

--- Code: ---Changelog:
* v0.1.0 fixed ct colorpicker and published to fhem forum.
* v0.1.1 message in INTERNAL if no movie(s) found on device
* v0.1.2 warning messages if no movies found and cmd 'on' sent
* v0.1.3 ability to use ct colorpicker by RGBW devices (set <name> ct 2000-6500)
* v0.1.4 added error messages for set commands
* v0.1.5 1. call json2reading if $data is not "Invalid Token"
         2. If Token is resettet -> Invalid Token -> call stateRequest to get new Token
* v0.1.6 List of "getMovies" saved with {helper} in devices to save time by the loop

--- Ende Code ---

peterk_de:
Schön, dass das mal jemand in ein Modul gießt :-)

Wenn ich zwischen den zeilen lese, heißt das, die haben die Firmware/API endlich mal so geupdated, dass man jetzt mehr als eine selbstdesignte Animation auf die Kette hochladen und dann per API dazwischen wechseln kann? Das ging mit meinen Ketten in den letzten Jahren nicht und wäre ja großartig!

t1me2die:
Mit der neusten Firmware (2.8.11) und den GEN II Sticks (welche seit einigen Jahren) ausgeliefert werden, kann man bis zu 15 eigene Effekte via Twinkly App bauen / basteln / malen / downloaden und auf dem Stick speichern / hochladen.
Diese werden dann als Effekte gespeichert.
Diese Effekte alias "Movies" kann man mit dem Modul via "get <name> Movies" vom Stick laden / auslesen.
In den Readings werden dann alle Movies gespeichert.
Jedes Movies besitzt eine ID, diese ID wird benötigt, um das jeweilige Movie anzusteuern / schalten.
Leerzeichen in den Movie-Namen werden raus gelöscht um die Movies darzustellen und via "set <name> movie <Movie-Namen>" absetzen zu können (siehe Screenshot)

Gruß
Mathias

peterk_de:
Großartig. Das ist DIE Funktion, die mir seit erscheinen der Ketten fehlte - jetzt kann ich je nach Lichtstimmung einen anderen Effekt nehmen :-)

Dann hole ich direkt mal die Ketten aus dem Keller und teste dein Modul. Das jährliche Entheddern war eigentlich erst für nächstes WE geplant, aber das muss unbedingt nen Probelauf bekommen ;)

t1me2die:
Welche Ketten hast du denn im Bestand?
Achte darauf, dass du das Modul und die Twinkly App nicht gleichzeitig einsetzt!
Disable am besten das Modul / Device, wenn du eine Kette via Twinkly App steuerst!
Hintergrund ist, auch die Twinkly App fragt bei dem Device einen TOKEN an.
Da zwei Anfragen (einmal FHEM und einmal Twinkly App) bei der Kette eintreffen wird jedes Mal ein neuer Token generiert, deswegen kommt es zu Steuerungsproblemen!
Das Modul prüft / aktualisiert automatisch den Token, ggf. könnte man das prüfen / aktualisieren auch via "get <name> Token" erneut anstoßen, läuft aber im Interval alle 60Sekunden.
Dementsprechend sollte sich auch alle 60 Sekunden der Status / Readings im FHEM aktualisieren.
Ein pollen wir beim HUE Modul ist mit meinem aktuellen Wissen nicht möglich.

Gruß
Mathias

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln