(Übersetzt aus dem Englischen: /en/nanoleaf )

Ich beschäftige mich derzeit intensiv mit Home Assistant Automatisierungen und - wie jeder weiß, der diesen Weg gegangen ist - dabei entstehen immer neue Ideen. Meine neueste Idee war es, die Hex-Panels von Nanoleaf zur Anzeige von Informationen zu nutzen. Zum Beispiel wenn die Waschmaschine fertig ist, ich einen Termin habe, der Smartphone-Akku zur Neige geht und so weiter.

NanoLeaf mit verschiedenen Farben an der Wand

Dieser Eintrag beschreibt, wie ich das geschafft habe.

Ich habe diese Informationen aus verschiedenen Quellen zusammengetragen. Die wichtigste war von sygys, der die Home Assistant Konfiguration gepostet hat: https://community.home-assistant.io/t/nanoleaf-per-tile-light-control-build-in-ha/442720 Allein mit der API-Dokumentation hätte ich das nicht geschafft.

Die Hardware

Ich habe hauptsächlich Nanoleaf Elements im Holzdesign verwendet. Diese können keine Farben anzeigen, sondern nur leuchten. Mir gefällt deren dezentes Erscheinungsbild. Ich möchte in meinem Wohnzimmer keine komplette RGB-Gaming-Erfahrung schaffen. Ich habe noch drei schwarze Hexagon-Kacheln hinzugefügt. Diese waren dafür gedacht, bei Bedarf den Status anzuzeigen. Übrigens: Die Nanoleaf-App bietet in diesem Setup keine Farbszenen an, da die Holzpanels die "Haupt"-Panels sind. Aber das spielt für dieses Szenario keine Rolle.

Integration in Home Assistant

Für die Hauptfunktionen habe ich die Standard-Integration für Home Assistant verwendet. Diese ermöglicht die Erkennung von Wischsteuerungen (ein weiterer Vorteil der Holzpanels, da man dort keine Fingerabdrücke sieht) und das Starten von fast allem, was die App erlaubt. Was NICHT das Ansprechen einzelner Panels einschließt.

Verwendung der API

Derzeit ist dies nur über eine REST-API möglich. Zunächst benötigst Du ein Tool, das POST-Befehle senden kann. Du kannst Curl verwenden, wenn Du gerne in der Shell arbeitest, oder UI-Tools wie Postman.

Einen Schlüssel erhalten

Der erste manuelle Schritt ist das Abrufen eines Schlüssels. Dies geschieht genau wie bei der Installation der Home Assistant Integration. Du musst die Panels nur koppeln, indem Du den Ein/Aus-Schalter einige Sekunden lang drückst, bis die LEDs zu blinken/bewegen beginnen. Keine Sorge, dies wird keine vorherigen Kopplungen entfernen. Rufe nun, während die Kopplung aktiv ist, folgende URL auf:

POST http://192.168.178.65:16021/api/v1/new

(ersetze die IP durch die Nanoleaf IP. Sollte in Deinem Router sichtbar sein)

Dies gibt einen einfachen Wert zurück, der Deinen geheimen Token enthält. Dieser Token bleibt auch gültig, wenn Du die Nanoleaf vom Strom nimmst. Stelle sicher, dass Du diesen Schlüssel irgendwo speicherst, Du wirst ihn brauchen.

Konfiguration abrufen

Jetzt ist es Zeit, Deinen Schlüssel zu testen und die Konfiguration von Deinen Nanoleaf Panels abzurufen. Du kannst dies sogar in Deinem Browser tun, oder weiterhin in Postman/Curl:

http://192.168.178.65:16021/api/v1/hierstehtdeingeheimerschluessel/

Der interessanteste Teil ist der layout/positionData-Teil in dieser Antwort:

      "layout": {
            "numPanels": 46,
            "sideLength": 0,
            "positionData": [
                {
                    "panelId": 8172,
                    "x": 301,
                    "y": 747,
                    "o": 360,
                    "shapeType": 15
                },
                {
                    "panelId": 36653,
                    "x": 276,
                    "y": 703,
                    "o": 300,
                    "shapeType": 15
                },
[..]

Ich war ehrlich gesagt etwas überrascht, denn ich habe KEINE 46 Panels. Bei weitem nicht. Die einfache Wahrheit ist: Die Holzpanels haben 6 LEDs. Jede von ihnen hat ihre eigene ID. Bei 7 Holzpanels macht das 42 IDs, zusätzlich 3 IDs für die drei schwarzen Panels und die Steuerungstasten sind ein weiteres Panel (mit ID 0)

Wenn Du nicht alle Panels ansprechen musst, sondern nur ein einzelnes, ist ein guter Tipp, einfach eines der Panels zu drehen, diesen Aufruf erneut zu machen und zu sehen, welches Panel eine neue Ausrichtung hat ("o" im JSON)

Nun musst Du Dir alle Panel-IDs aufschreiben. Zumindest die, die Du modifizieren möchtest. Da ich hauptsächlich die schwarzen Panels verwenden möchte, habe ich den folgenden Teil in zwei Teile aufgeteilt, aber Du kannst auch mit einem (oder noch mehr) arbeiten.

Rest in Home Assistant konfigurieren

Gehe zu Deiner geliebten Home Assistant Konfiguration (configuration.yaml) und füge die folgenden Einträge hinzu:

{% raw %}
rest_command:
  nanoleaf_wood:
    url: http://192.168.178.65:16021/api/v1/hierstehtdeingeheimerschluessel/effects
    method: PUT
    payload: >
      { "write" : {"command": "display", "animType": "static", "animData":
      {%- set all = [ 8172,36653,  32365,61100,6889,35368,57498,28763,33051,4570,9112,45913,61802,25003,37099,42,14434,43171,34741,29680,58161,4721,33456,45298,4960,8482,45539,16547,53346,9255,5361,58801,30064,33077,4596,57524,54769,50577,21840,42000,13521,1683] %}
      {%- set ns = namespace(panels=[panels | count | string]) %}
      {%- for panel in panels %}
      {%- set ns.panels = ns.panels + [ '{} 1 {} {} {} 0 20'.format(all[panel.number-1], panel.r, panel.g, panel.b) ] %}
      {%- endfor %}
      "{{ ns.panels | join(' ') }}",
      "loop": false, "palette": [], "colorType": "HSB"}
      }
    content_type: "application/json"
  nanoleaf_black:
    url: http://192.168.178.65:16021/api/v1/hierstehtdeingeheimerschluessel/effects
    method: PUT
    payload: >
      { "write" : {"command": "display", "animType": "static", "animData":
      {%- set all = [ 52732, 44680, 17782 ] %}      
      {%- set ns = namespace(panels=[panels | count | string]) %}
      {%- for panel in panels %}
      {%- set ns.panels = ns.panels + [ '{} 1 {} {} {} 0 20'.format(all[panel.number-1], panel.r, panel.g, panel.b) ] %}
      {%- endfor %}
      "{{ ns.panels | join(' ') }}",
      "loop": false, "palette": [], "colorType": "HSB"}
      }
    content_type: "application/json"
{% endraw %}

Ersetze die IP durch Deine Nanoleaf-IP und den Schlüssel durch Deinen Schlüssel (vor "/effects"). Es liegt an Dir, ob Du einen oder mehrere verschiedene Aufrufe möchtest. Die Zahlen im "set all"-Teil müssen durch die panelIds ersetzt werden, die Du vorher abgerufen hast.

Als nächstes musst Du natürlich Deine Konfiguration testen und dann Home Assistant neu starten.

Automatisierungs-Beispiele

Jetzt kannst Du dies in jeder Automatisierung verwenden. Die Nummer ist die Nummer im Array, beginnend bei 1(!) Beispiel für die einfachen:

alias: Nano_BlackTest
description: ""
trigger: []
condition: []
action:
  - service: rest_command.nanoleaf_black
    data:
      panels:
        - number: 1
          r: 255
          g: 0
          b: 0
        - number: 2
          r: 0
          g: 255
          b: 0
        - number: 3
          r: 0
          g: 0
          b: 255
mode: single

und ein Beispiel zum Beleuchten der drei Holzpanels (denk dran: Jedes Panel hat 6 LEDs):

alias: Nano_WoodTest
description: ""
trigger: []
condition: []
action:
  - service: rest_command.nanoleaf_wood
    data:
      panels:
        - number: 31
          r: 255
          g: 255
          b: 255
        - number: 32
          r: 255
          g: 255
          b: 255
        - number: 33
          r: 255
          g: 255
          b: 255
        - number: 34
          r: 255
          g: 255
          b: 255
        - number: 35
          r: 255
          g: 255
          b: 255
        - number: 36
          r: 255
          g: 255
          b: 255
        - number: 19
          r: 255
          g: 255
          b: 255
        - number: 20
          r: 255
          g: 255
          b: 255
        - number: 21
          r: 255
          g: 255
          b: 255
        - number: 22
          r: 255
          g: 255
          b: 255
        - number: 23
          r: 255
          g: 255
          b: 255
        - number: 24
          r: 255
          g: 255
          b: 255
        - number: 1
          r: 255
          g: 255
          b: 255
        - number: 2
          r: 255
          g: 255
          b: 255
        - number: 3
          r: 255
          g: 255
          b: 255
        - number: 4
          r: 255
          g: 255
          b: 255
        - number: 5```
          r: 255
          g: 255
          b: 255
        - number: 6
          r: 255
          g: 255
          b: 255
mode: single

Das war's. Viel Spaß mit Deinen Panels.