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.
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
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_Discovery
Dann 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?
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"
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.
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)
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.
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.
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").
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.
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?
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.
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 ;) .