Nanoleaf Aurora DIY Anbindung

Begonnen von Stargrove1, 16 Oktober 2020, 19:08:16

Vorheriges Thema - Nächstes Thema

Stargrove1

Hallo zusammen, ich bin gerade dabei einen DIY clone des Aurora Nanoleaf nachzubauen, es basiert auf dem ESP8266 Fastled IOT server.

Link zur sw:
https://github.com/NimmLor/esp8266-fastled-iot-webserver

Ich habe gesehen das es ein Modul für das Original gibt, vermute aber das es nicht kompatibel ist. Gibt es hierfür ein passendes Modul oder etwas allgemeines das ich für die Anbindung an FHEM nutzen kann? Ziel wäre die Effekte und Farbe über das Talk2Fhem Modul zu steuern.

Laut Beschreibung ist eine Alexa und MQTT Anbindung enthalten.

Stargrove1

Update: die Firmware bietet eine MQTT Option, nach dem aktivieren sehe ich die Leds als einen MQTT2 Client device.

Bisher habe ich MQTT noch nicht verwendet, wie komme ich vom autocreate device zu den Kontrollen für die LEDs? Ich habe es mit attrTemplates versucht, aber habe weder etwas passendes gefunden, noch habe ich den Aufbau ausreichend verstanden, um mein eigenes zu erstellen, um zB Ein/Ausschalten zu können.

List ergibt folgendes:
Internals:
   CFGFN     
   CID        LEDs
   DEF        LEDs
   DEVICETOPIC MQTT2_LEDs
   FUUID      xyz
   IODev      MQTTBroker
   NAME       MQTT2_LEDs
   NR         498
   STATE      OFF
   TYPE       MQTT2_DEVICE
   READINGS:
     2020-10-19 17:59:35   _               homeassistant/light/nanoleafs
     2020-10-19 17:59:35   autoplay        48
     2020-10-19 17:59:35   brightness      125
     2020-10-19 17:59:35   cmd_t           ~/set
     2020-10-19 17:59:35   dev_ids        xyz
     2020-10-19 17:59:35   dev_mdl         0.4
     2020-10-19 17:59:35   dev_mf          Surrbradl08
     2020-10-19 17:59:35   dev_name        Nanoleafs
     2020-10-19 17:59:35   effect          Pride
     2020-10-19 17:59:35   effect_list_1   Pride
     2020-10-19 17:59:35   effect_list_10  Water
     2020-10-19 17:59:35   effect_list_11  Strobe
     2020-10-19 17:59:35   effect_list_12  Rainbow Strobe
     2020-10-19 17:59:35   effect_list_13  Smooth Rainbow Strobe
     2020-10-19 17:59:35   effect_list_14  Rainbow Roll
     2020-10-19 17:59:35   effect_list_15  Rainbow Beat
     2020-10-19 17:59:35   effect_list_16  Palette Fades
     2020-10-19 17:59:35   effect_list_17  Rainbow Chase
     2020-10-19 17:59:35   effect_list_18  Rainbow Fades
     2020-10-19 17:59:35   effect_list_19  Police Lights
     2020-10-19 17:59:35   effect_list_2   Color Waves
     2020-10-19 17:59:35   effect_list_20  Glitter
     2020-10-19 17:59:35   effect_list_21  Snow Flakes
     2020-10-19 17:59:35   effect_list_22  Lightning
     2020-10-19 17:59:35   effect_list_23  Rainbow Twinkles
     2020-10-19 17:59:35   effect_list_24  Snow Twinkles
     2020-10-19 17:59:35   effect_list_25  Cloud Twinkles
     2020-10-19 17:59:35   effect_list_26  Incandescent Twinkles
     2020-10-19 17:59:35   effect_list_27  Retro C9 Twinkles
     2020-10-19 17:59:35   effect_list_28  Red & White Twinkles
     2020-10-19 17:59:35   effect_list_29  Blue & White Twinkles
     2020-10-19 17:59:35   effect_list_3   Horizontal Rainbow
     2020-10-19 17:59:35   effect_list_30  Red, Green & White Twinkles
     2020-10-19 17:59:35   effect_list_31  Fairy Light Twinkles
     2020-10-19 17:59:35   effect_list_32  Snow 2 Twinkles
     2020-10-19 17:59:35   effect_list_33  Holly Twinkles
     2020-10-19 17:59:35   effect_list_34  Ice Twinkles
     2020-10-19 17:59:35   effect_list_35  Party Twinkles
     2020-10-19 17:59:35   effect_list_36  Forest Twinkles
     2020-10-19 17:59:35   effect_list_37  Lava Twinkles
     2020-10-19 17:59:35   effect_list_38  Fire Twinkles
     2020-10-19 17:59:35   effect_list_39  Cloud 2 Twinkles
     2020-10-19 17:59:35   effect_list_4   Solid Rainbow
     2020-10-19 17:59:35   effect_list_40  Ocean Twinkles
     2020-10-19 17:59:35   effect_list_41  Solid Volume Visualizer
     2020-10-19 17:59:35   effect_list_42  Static Rainbow Volume Visualizer
     2020-10-19 17:59:35   effect_list_43  Flowing Rainbow Volume Visualizer
     2020-10-19 17:59:35   effect_list_44  Tri-Color Volume Visualizer
     2020-10-19 17:59:35   effect_list_45  Wave Visualizer
     2020-10-19 17:59:35   effect_list_46  Center Visualizer
     2020-10-19 17:59:35   effect_list_47  Solid-Color Pair Bullet Visualizer
     2020-10-19 17:59:35   effect_list_48  Solid-Color Complementary Bullet Visualizer
     2020-10-19 17:59:35   effect_list_49  Blue/Purple Bullet Visualizer
     2020-10-19 17:59:35   effect_list_5   Confetti
     2020-10-19 17:59:35   effect_list_50  Beat-Bullet Visualization
     2020-10-19 17:59:35   effect_list_51  Bass Ring Visualizer
     2020-10-19 17:59:35   effect_list_52  Kick Ring Visualizer
     2020-10-19 17:59:35   effect_list_53  Rainbow Band Visualizer
     2020-10-19 17:59:35   effect_list_6   Sinelon
     2020-10-19 17:59:35   effect_list_7   Beat
     2020-10-19 17:59:35   effect_list_8   Juggle
     2020-10-19 17:59:35   effect_list_9   Fire
     2020-10-19 17:59:35   name            Nanoleafs
     2020-10-19 17:59:35   rgb             true
     2020-10-19 17:59:35   schema          json
     2020-10-19 17:59:35   speed           125
     2020-10-19 17:59:35   stat_t          ~
     2020-10-19 17:59:35   state           OFF
     2020-10-19 17:59:35   subscriptions   homeassistant/light/nanoleafs/set
     2020-10-19 17:59:35   uniq_id         xyz
Attributes:
   IODev      MQTTBroker
   readingList LEDs:homeassistant/light/nanoleafs/config:.* { json2nameValue($EVENT) }
LEDs:homeassistant/light/nanoleafs:.* { json2nameValue($EVENT) }
   room       MQTT2_DEVICE

Beta-User

Moin.

Kann gerne versuchen, da zu unterstützen, bräuchte aber irgendwoher die Info, in welchem Format denn die Nachrichten gesendet werden müssen. Eine Doku zu MQTT habe ich auf der Projektseite leider nicht gefunden. Also falls es sowas gibt: bitte einen Link liefern.

Sonst machen wir halt reverse engineering:

Kannst du mal den ersten readingList-Eintrag so ändern
   readingList homeassistant/light/nanoleafs/config:.* HASS_DiscoveryDann alle Readings löschen und das Teil  neu starten (Spannung weg oä.) und ein RAW-listing davon liefern. Es sollte dann ein neues Reading HASS_Discovery geben, in dem ein ziemlich langer JSON enthalten ist.

(An mich selbst): Die setList müsste dann an folgenden Topic senden:
homeassistant/light/nanoleafs/set
Weiter würde mich interessieren, ob es irgendwelche Konfigurationsmöglichkeiten für den MQTT-Teil gibt oder ob man irgendwas verändern kann. V.a. würde ich vermuten, dass "nanoleafs" ein konfigurierbarer Name ist.

Hoffe, das ist nicht zu kryptisch?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Stargrove1

Guten Morgen, vielen Dank für die Unterstützung, das reading habe ich nach der Vorgabe geändert, als Ergebnis wurde folgendes HASS_Discovery reading engetragen:

{"~":"homeassistant/light/nanoleafs","name":"Nanoleafs","dev":{"ids":"mac","mf":"Surrbradl08","mdl":"0.4","name":"Nanoleafs"},"stat_t":"~","cmd_t":"~/set","brightness":true,"rgb":true,"effect":true,"uniq_id":"mac","schema":"json","effect_list":["Pride","Color Waves","Horizontal Rainbow","Solid Rainbow","Confetti","Sinelon","Beat","Juggle","Fire","Water","Strobe","Rainbow Strobe","Smooth Rainbow Strobe","Rainbow Roll","Rainbow Beat","Palette Fades","Rainbow Chase","Rainbow Fades","Police Lights","Glitter","Snow Flakes","Lightning","Rainbow Twinkles","Snow Twinkles","Cloud Twinkles","Incandescent Twinkles","Retro C9 Twinkles","Red & White Twinkles","Blue & White Twinkles","Red, Green & White Twinkles","Fairy Light Twinkles","Snow 2 Twinkles","Holly Twinkles","Ice Twinkles","Party Twinkles","Forest Twinkles","Lava Twinkles","Fire Twinkles","Cloud 2 Twinkles","Ocean Twinkles","Solid Volume Visualizer","Static Rainbow Volume Visualizer","Flowing Rainbow Volume Visualizer","Tri-Color Volume Visualizer","Wave Visualizer","Center Visualizer","Solid-Color Pair Bullet Visualizer","Solid-Color Complementary Bullet Visualizer","Blue/Purple Bullet Visualizer","Beat-Bullet Visualization","Bass Ring Visualizer","Kick Ring Visualizer","Rainbow Band Visualizer",null]}

Der Inhalt wurde beim ersten anlegen als einzelreadings erzeugt. Ich dachte dies sei quasi das commandset/readings und muss diese nun zuordnen.

In der config des arduino codes, kann man Namen, server, etc. anpassen:

        #define MQTT_TOPIC "homeassistant/light/nanoleafs"              // MQTT Topic to Publish to for state and config (Home Assistant)
        #define MQTT_TOPIC_SET "/set"                                   // MQTT Topic to subscribe to for changes(Home Assistant)
        #define MQTT_DEVICE_NAME "Nanoleafs"





Beta-User

OK, sieht nach einem etwas dickeren Brett aus...

Versuch's mal mit folgendem (RAW-Code für das "grüne Plus"):
attr MQTT2_LEDs readingList homeassistant/light/nanoleafs/config:.* {}\
  homeassistant/light/nanoleafs:.* { json2nameValue($EVENT,,$JSONMAP) }\
  homeassistant/light/nanoleafs:.* JSON_raw
attr MQTT2_LEDs setList \
  off homeassistant/light/nanoleafs/set  { "state": "OFF" }\
  on homeassistant/light/nanoleafs/set  { "state": "ON" }\
  brightness:colorpicker,BRI,0,1,255 homeassistant/light/nanoleafs/set  { "brightness": $EVTPART1 }
attr MQTT2_LEDs setStateList on off toggle


Das ist teilweise ziemlich geraten, ich habe z.B. keine Ahnung, ob der Wertebereich für brightness passt und der JSON so korrekt zusammengesetzt wird; kann insbesondere sein, dass man Anführungszeichen braucht bzw. weglassen muss. Die erste Zeile ist nur dafür da, dass uns diese dusselige auto-discovery nicht mehr reinspuckt, eigentlich kann man das besser über eine ignoreRegexp am IO eliminieren (wir haben, was wir brauchen, auch, wenn mir noch unklar ist, wie es zu lesen ist...).

Wenn es nicht klappt: Bitte mal (alles mögliche: an/aus, brightness, rgb, effekte) über die Web-Oberfläche schalten und dann die zugehörigen JSON-Blobs mitschneiden (die stehen dann jeweils in JSON_raw, einfacher geht es ggf. über das Aktivieren von rawEvents am MQTT2_SERVER).
Falls die Syntax schon klarer wird, kannst du ja auch weiterbasteln, z.B. mit rgb; Effekte sind vermutlich schwierig, weil da die Payload Leerzeichen zu enthalten scheint. Braucht vermutlich etwas Perl-Code, aber eines nach dem anderen...

Meine Hypothese ist, dass man den empfangenen JSON bei den Schaltungen dann jeweils genau in der Form über den "set"-Topic schicken muss, falls du "Baumaterial" brauchst, findet sich einiges hier: https://svn.fhem.de/trac/browser/trunk/fhem/FHEM/lib/AttrTemplate/mqtt2.template.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Stargrove1

Hammer, ein/ausschalten geht, den Colorpicker sehe ich zwar noch nicht, aber das sieht schon mal nach einem soliden Anfang aus.

Vielen Dank, ich versuche mal ob ich jetzt alleine weiterkomme, wenn es je nicht klappt würde ich mich wieder melden.

Auf die erste Zeile kommt folgende Nachricht:
Nanoleaf: bad reading name {}\ homeassistant/light/nanoleafs:.* { json2nameValue($EVENT,,$JSONMAP) }\ homeassistant/light/nanoleafs:.* JSON_raw (contains not A-Za-z/\d_\.- or is too long)

Beta-User

Das war Code für das mehrzeilige Kommandofeld (RAW).
Wenn du die Attribute direkt editierst, muss der Zeilenumbruch ("\") raus.

Aber erst mal cool, dass es schon mal mit on/off funktioniert.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Stargrove1

Verstehe, bei der SetList hab ich die \ instinktiv entfernt, aber nicht beim Ersten, dass das der Zeilenumbruch für mehrzeilige Eingaben ist war mir nicht bewusst, danke.

Beta-User

OK, habe mich schon gewundert, warum es einmal so und das andere Mal so ist. Vielleicht noch zum Thema RAW als Lesestoff: https://wiki.fhem.de/wiki/Import_von_Code_Snippets.

Was in der attrTemplate-File zu finden ist, ist auch ähnlich zu dem, was man via "Raw definition"-Link angezeigt bekommt, es arbeitet aber eben mit Variablen (die sind in aller Regel nur in Großbuchstaben geschrieben).


Wenn die readingList jetzt auch wieder funktioniert, würde mich noch interessieren, ob der "state"-Zyklus sauber geschlossen wird, wenn du an- bzw. ausschaltest (off => set_on => ON (bzw. optimalerweise: "on").
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Stargrove1

Wenn ich mit on/off das Nanoleaf schalte, ändert sich auch das state reading zu ON/OFF. Funktioniert ebenfalls über Google Assistant per Sprachbefehl (das war der Hauptgrund warum ich es ins Smarthome integrieren wollte), auch die Helligkeit kann ich darüber steuern.

Beta-User

OK, dann scheint der Kreis also an der Stelle sauber geschlossen zu sein.

Aus deiner Antwort ist allerdings abzuleiten, dass meine Frage eventuell nur in Teilen angekommen ist; ich würde empfehlen, mal den Event-Monitor aufzumachen und den zu beobachten, wenn du das Teil von FHEM aus schaltest, vielleicht wird das (und die "Event-Denkweise" von FHEM) dann noch etwas klarer.

Ansonsten: Wie geht es voran mit rgb? Hilfe erforderlich?

Und falls das schon soweit läuft: Glaubst du, du kannst ein attrTemplate aus dem ganzen machen?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Stargrove1

Wenn ich ein/ausschalte, sehe ich im Eventmonitor den Set Befehl gefolgt von den Readings bei dem auch der state ON/OFF zurückgeben wird.

Das mit RBG ist vermutlich etwas ungünstig implementiert, wenn man die Farbe setzen möchte, muss man ebenfalls den Effekt "Solid Color" wählen. Ich glaube auch der erwartete Aufbau unterscheidet sich von dem was Fhem liefert, es werden keine sechs hex digits sondern ein R,G,B erwartet.

Für ein Template reicht es vermutlich nicht, aber da ich scheinbar der einige bin der es bisher hier betreiben möchte, wäre wohl auch keine Nachfrage dafür vorhanden.

Beta-User

Zitat von: Stargrove1 am 21 Oktober 2020, 16:23:01
Das mit RBG ist vermutlich etwas ungünstig implementiert, wenn man die Farbe setzen möchte, muss man ebenfalls den Effekt "Solid Color" wählen. Ich glaube auch der erwartete Aufbau unterscheidet sich von dem was Fhem liefert, es werden keine sechs hex digits sondern ein R,G,B erwartet.
Das sollte kein Hexenwerk sein, sowas in der Art wird auch bei "shellybulb" gemacht. Man muß dann eben den publish-String mit Perl zusammenbasteln...

ZitatFür ein Template reicht es vermutlich nicht, aber da ich scheinbar der einige bin der es bisher hier betreiben möchte, wäre wohl auch keine Nachfrage dafür vorhanden.
Die Argumentation kommt immer mal wieder. Wenn es eine interessante Controller-firmware ist oder eine neue Art, ein Problem in MQTT2_DEVICE zu lösen, macht es ggf. Sinn, das aufzunehmen, selbst wenn dann nur (erst mal...) wenige das effektiv nutzen. Wäre nicht das erste Mal, dass über das vorhandensein in attrTemplate Leute erst auf entsprechende Projekte aufmerksam werden oder dann auch noch Verbesserungen ausgetauscht werden oder ich später Teile aus einem attrTemplate dann wieder in einem anderen Projekt recycle ;) .
Der Mehraufwand gegenüber einer "sowieso" funktionierenden Konfiguration ist minimal... Aber wenn das mit der (weitestgehend) funktionierenden Konfiguration gar nicht dein Ziel ist, ist es für mich auch ok. Ggf. findet sich dann später jemand, der den Faden aufgreift ;) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files