[Modul] Twinkly

Twinkly

Ermöglicht die Einrichtung und Kommunikation mit den Smart LED Lichterketten von Twinkly.

Genau rechtzeitig zum Start der Twinkly Gartenlichterkette :smiley:

1. Voraussetzungen

[ul]
[li]mindestens IPS Version 5.2[/li][/ul]

2. Enthaltene Module

[ul]
[li]Twinkly Discovery[/li][li]Twinkly Device[/li][/ul]

3. Installation

[ul]
[li]Über den Modul Store. (Beta oder Testing)[/li][/ul]

Konfiguration in IP-Symcon

[ul]
[li]Bitte den einzelnen Modulen entnehmen.[/li][/ul]

Viel Spaß und ich bin gespannt auf Euer Feedback
Heiko

Auch wenn das Feedback nicht besonders groß war - das nächste Weihnachten kommt bestimmt :wink:

Modul jetzt im Store als STABLE verfügbar!

Viel Spaß
Heiko

Diese Twinkly Lichterketten sind völlig unnütz und viel zu teuer für die paar ws2812 neopixel, Das braucht doch kein Mensch !

Also gleich mal bestellen und dann dein schönes Modul ausprobieren !

Kann man mit dem Modul auch Effekte auswählen ?

Aufgrund der überdurchschnittlichen Resonanz und Featurewünsche kann es derzeit nur die 4 Standard-Modi schalten. Also AN, AUS, DEMO und REALTIME. Bei AN/AUS klar- wird immer der letzte eingestellte Effekt geschalten. Demo geht durch alle Effekte durch (Schleife) und Realtime soll angeblich auf Musik reagieren und entsprechende Effekte darstellen (nie benutzt).

Viel Spaß
Heiko

PS: meine Family war auch erst negativ eingestellt bei dem Preis, aber dann war der Spieltrieb groß und das Ding war ständig in Betrieb :wink:

wieso „auch“ ? Hat mich sofort begeistert - bis auf den Preis, aber ich habe einfach 2 bestellt. :smiley:

Mit der App konnte ich alles einrichten, habe meine beiden Lichterketten dann als Sequenz verbunden. Soweit so gut, aber komischerweise erkannte das Discovery …

  • als das erste Twinkly eingeschaltet war, nur das erste Twinkly
  • als das zweite auch an war, nur noch das zweite Twinkly
  • und als ich das erste vom Strom getrennt habe plötzlich BEIDE … ääääh…

egal, danach hatte ich beide Instanzen, aber jetzt stellt sich die Frage: Kann ich auch die Twinklies als Sequenz ansprechen ?

Oh je, Fragen über Fragen :slight_smile:

Ich habe nur eine Lichterkette - was bedeutet „als Sequenz verbunden“??

Das mit dem Discovery ist sehr merkwürdig, aber ich schaue mir das im Code nochmal an.

Gruß Heiko

PS: Meine Lichterkette liegt im Schrank - gleich mal entstauben :wink:

Ja, du kannst in der App mehrere Lichterketten als Sequenz verbinden. Dann kann man ganz ganze quasi als eine große Lichterkette ansprechen.

Es geht mit deinem Modul, indem man eben für jede Instanz die SetModes auch synchron abfeuert. Ob es eigene API-Befehle für Sequenzen gibt, weiß ich nicht.

Meinst du, du könntest noch die Brightness einbauen ? Das scheint die api ja herzugeben, so wie es aussieht. Zum Dimmen ganz nett :slight_smile:

Hi TomW,

habe eine neue Beta eingereicht im Store - Helligkeit ist dabei :wink:

CHANGELOG

v2.0.20201016

[ul]
[li] NEU: Steuerung bzw. Einstellung der Helligkeit
[/li][li] NEU: Vereinfachte Modusschaltung als normaler Lichtschalter
[/li][li] NEU: Fehlerbehandlung wenn keine Verbindung zum Gerät hergestellt werden kann
[/li][li] FIX: Debugausgabe überarbeitet
[/li][li] FIX: API erweitert und überarbeitet
[/li][/ul]

Doku findet Du im Store/Github oder auf der Seite https://wilkware.de/ip-symcon-module/twinkly/

Schau mal ob Du zurechtkommst und ob Dir was fehlt oder nicht funzt!

Schönes Spielwochenende
Heiko

Cool - vielen Dank, ich spiele nächstes WE mal damit !

Hallo,

danke für das Modul-Update 20201016 - Weihnachten naht:)

Leider findet das Discovery-Modul meine Twinklys nicht.
Beim händischen anlegen der ‚Smart LED Lichterkette‘, kann ich auf die Twinklys zugreifen.

Twinkly_SetMode und SetBrightness funktionieren - alles gut.

Schön wäre noch, wenn man den Effekt auswählen könnte.

Gruß,
kpiep

Hi kpiep,

willkommen im Club der Twinkly Nutzer :wink:

Hmm,Tom hatte das Problem ja auch schon und ich hatte auch einen kleinen Fehler korriegiert. Könnt Ihr/Du mal bitte folgendes Script ausführen und schauen ob es Output liefert!


function Discover() {
    $ip = "255.255.255.255";
    $port = 5555;
    $str = "\x01discover";

    //echo "Messagge : < $buf > , $ip : $port <br>";
    $format = 
        'C4IP/' .    # Get the first 4 bytes
        'A2State/' .    # Get the next 2 byte
        'A*Name';       # Get the next  bytes

    $sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); 
    socket_set_option($sock, SOL_SOCKET, SO_BROADCAST, 1);
    socket_set_option($sock, SOL_SOCKET, SO_RCVTIMEO, array("sec"=>5, "usec"=>0));
    socket_sendto($sock, $str, strlen($str), 0, $ip, $port);

    while(true) {
        $ret = @socket_recvfrom($sock, $buf, 50, 0, $host, $ports);
        if($ret === false) break;
        echo '{';
        print_r($buf)
        echo '}' . PHP_EOL;
        $array = unpack($format, $buf);
        print_r($array);
        echo PHP_EOL;
        echo "Message : ". $array['Name'] . "," . $array['State'] . "," . $array['IP4']. "." .$array['IP3']. "." .$array['IP2']. "." .$array['IP1'];
        echo PHP_EOL;
    }
    socket_close($sock);
}

Top, leider gibt die API das nicht her - jedenfalls habe ich gerade nichts dazu gefunden!

Gruß Heiko

Das Script findet meine beiden Twinklys:


¨ÀOKTwinkly_193419}
Array
(
[IP1] => 149
[IP2] => 10
[IP3] => 168
[IP4] => 192
[State] => OK
[Name] => Twinkly_193419
)

Message : Twinkly_193419,OK,192.168.10.149

¨ÀOKTwinkly_18F95D}
Array
(
[IP1] => 192
[IP2] => 10
[IP3] => 168
[IP4] => 192
[State] => OK
[Name] => Twinkly_18F95D
)

Message : Twinkly_18F95D,OK,192.168.10.192

Die Änderung in Zeile 88 der module.php aus dem Twinkly_Discovery Modul-Verzeichnis von

        $ret = @socket_recvfrom($sock, $buf, 20, 0, $ip, $port);

auf

        $ret = @socket_recvfrom($sock, $buf, 50, 0, $ip, $port);

führt zum Erfolg.
Nun werden die Twinklys gefunden :smiley:

Ha, was es nicht alles gibt :banghead: in meinem Original-Script steht ja auch 50 drin - weiß nicht warum ich das geändert hatte :wink:

Stell die Tage ein Update bereit, DANKE!

Gruß Heiko

@pitti
Kennst du diese Seite?: https://github.com/scrool/xled
Es ist eine Python-Lib für Twinkly - hier geht wohl auch die Effektauswahl (Movie = Effekt)
Die Lib ist hier beschrieben.

Hier ist ein REST-API-Request für die Effektauswahl beschrieben.

Vielleicht hilft das :slight_smile:

Gruß,
kpiep

@kpiep

Die Sachen kenne ich, aber vielleicht interpretiere ich die API auch falsch. In der verlinkten Python Teil ist eine Funktion vorhanden …


def set_led_movie_config(self, frame_delay, frames_number, leds_number):
        """
        Performs firmware update from previously uploaded images
        :param int frame_delay: speed of movie
        :param int leds_number: total number of LEDs
        :param int frames_number: total number of frames
        :raises ApplicationError: on application error
        :rtype: :class:`~xled.response.ApplicationResponse`
        """
        json_payload = {
            "frame_delay": frame_delay,
            "frames_number": frames_number,
            "leds_number": leds_number,
        }
        url = urljoin(self.base_url, "led/movie/config")
        response = self.session.post(url, json=json_payload)
        return ApplicationResponse(response)

Wie man lesen kann, kann man die Konfiguration eines Effekts/Movies einstellen, aber das Aktivieren eines Effektes ist das für mich nicht???

Gruß Heiko

Ok,

hier werden MQTT-Aufrufe beschrieben.


Twinkly private messaging API reference
Overview

Since firmware version 2.0.22-mqtt device sends messages with its states to a broker with MQTT. By default broker is set to mqtt.twinkly.com.

Last topic levels are always client ID which are by default derived from MAC address of the device as uppercased hexadecimal digits.
Status from device

Device publishes these messages to a broker.

Topic xled/status/ followed by client ID
Messages

        online
            ip - IP address. Added in firmware 2.1.0.
            ssid - SSID to which device is connected. Added in firmware 2.1.0.
        offline

Example

Online (firmware 2.0.22-mqtt):

{"status": "online"}

Online (since firmware 2.1.0):

{"status": "online", "ip": "192.168.4.1", "ssid": "home"}

Offline:

{"status": "offline"}

Application status from device

Device publishes these messages to a broker.
Topic

xled/appstatus/ followed by client ID
Messages

        off
        movie
        collision
        rainbow
        twinkle
        snake

Example

Rainbow:

{"appstatus": "rainbow"}

Command messages to device

Device listens to these messages.
Topic

xled/command/ followed by client ID
Messages

changeeffect
    each message switches to next of default effects or movie. Same as pressing the button on the device.
setmovie
    sets to uploaded movie effect
setcollision
    sets default effect “collision”
setrainbow
    sets default effect “rainbow”
setsnake
    sets default effect “snake”
settwinkle
    sets default effect “twinkle”
setwaves
    sets default effect “waves”
switchoff
    switches off the device
switchon
    switches on the device

Example

Switch on:

{"command": "switchon"}


Es werden auch die Messages „ChangeEffect“ und der Aufruf der Standard-Effekte beschrieben (besser: erwähnt)

Ich weiss nicht, ob man das auf die REST-API anwenden kann oder es MQTT dazu braucht…

Nein, das geht nur im MQTT, leider habe ich das noch nicht zum laufen gebracht.

Den Broker konnte ich schon erfolgreich setzen, aber die Anmeldung (CONNECT) klappt nicht! Ist was für die Weihnachtszeit :slight_smile:

Bin auch kurz davor die Twinkly’s zu bestellen. Ich hab bisher keine „schönen“ WS2811/WS2812 Strings gefunden die da mithalten können. Leider lassen sich die Twinklys nicht so supereinfach wie die WS28xx steuern. Bisher hat es auch noch keiner geschafft das „Protokoll“ der LED’s zu knacken. Find es aber auch spannend dass hier 24v LEDS und nur zwei Leitungen verwendet werden.

Meine WS2811 Strips (sind tatsächlich lichterkettenähnliche Strips) kann ich aktuell gemütlich via Symcon steuern und auch Effekte anwählen. Ich hab ebenso die Möglichkeit sie dann noch via Art.Net und co zu steuern und auch diverse Python Scripte für Sound-to-light via dem Computer… Gäbe es nur eine Möglichkeit die Twinklys komplett zu knacken um sie an einem eigenen ESP8266/ESP32 zu verwenden.

Da könnte der Seitenschneider helfen. Allerdings verliert man dann wohl diese geniale Funktion des scannens, um die Position der einzelnen LEDs zu erfassen. Für meine anderen digitalen stripes, die fest verbaut sind, nutze ich wled…