Sonoff NSPanel + Tasmota Flash / Konfiguration

Vorbereitung:

Um das Sonoff NSPanel flashen zu können benötigt Ihr einen FTDI USB Adapter: ➥ https://amzn.to/3Bc3jd5 ➥ und ein ESP Flashing Tool ➥ https://github.com/Jason2866/ESP_Flasher/releases

Außerdem benötigt Ihr noch die aktuelle Tasmota Software (zum Zeitpunkt dieses Artikels 10.0.0.0, wir updaten diese dann via OTA auf die Developer Version 10.0.0.1) ➥ https://github.com/arendst/Tasmota/releases

Das Sonoff NSPanel bekommt Ihr aktuell nur über den Kickstarter Link ➥ https://www.kickstarter.com/projects/sonoffnspanel/sonoff-nspanel-smart-scene-wall-switch?ref=e8501z

Schaut auch mal bei Blakadder (https://github.com/blakadder/nspanel) vorbei der Hat dazu auch eine gute Doku geschrieben und ohne Ihm wäre das ganze hier nicht möglich. An dieser Stelle nochmal herzlichen Dank und super Arbeit!!!

Um das Panel zu flashen ladet Ihr euch die tasmota32.bin Datei herunter. Verbindet dann die Pins des Panels mit dem FTDI Adapter. Vorsicht das Ground Signals des FTDI Adapter wird hier aufgesplittet und geht dann bei Panel an den Pin GND & IO0. Danach öffnet Ihr den ESP Flasher, wählt den USB Port aus öffnet die tasmota32.bin Datei und klickt auf Flash.

Nachdem Das NSPanel geflashed wurde verbindet Ihr euch mit dem Smartphone oder dem PC mit dem verfügbaren Tasmota WiFi und gebt eure WLAN Zugangsdaten ein. Jetzt sollte das Panel online gehen und Ihr könnt euch mit dessen IP Adresse im Browser verbinden.

Tasmota Einstellungen:

Jetzt müssen wir Tasmota konfigurieren. Als erstes geht Ihr auf – Configuration – Configuration Module und wählt bei Module Type ESP32-DevKit (0) aus und klickt auf speichern.

Geht dann auf – Configuration – Configuration Other und füght oben bei Template diese Zeile ein:

{"NAME":"NSPanel","GPIO":[0,0,0,0,3872,0,0,0,0,0,32,0,0,0,0,225,0,480,224,1,0,0,0,33,0,0,0,0,0,0,0,0,0,0,4736,0],"FLAG":0,"BASE":1,"CMND":"ADCParam 2,64000,10000,3950 | Sleep 0 | BuzzerPWM 1"}

Jetzt könnt Ihr Beide Relais steuern und bekommt auch schon die Temperatur Werte des NSPanel´s angezeigt.

Natürlich könnt Ihr nun eure MQTT Zugangsdaten usw. eingeben.

Um jetzt versch. Widgets, WiFi Signalstärke, Temp & Wetterdaten zu bekommen benötigen wir noch einen Treiber bzw. ein Script.

Dazu geht Ihr auf – Consoles – Manage File system und legt die Datei entweder Manuell an oder Ihr fügt diese nspanel.be Datei hinzu. Um die Datei manuell anzulegen klickt Ihr auf – Create and edit new file gebt dann als Namen nspanel.be ein und fügt die Zeilen aus dieser Datei ein nspanel.be

Um das Ganze jetzt automatisch zu starten müssen wir noch eine weiter Datei anlegen. Klickt wieder auf – Create and edit new file und gebt autoexec.be als Namen ein und fügt diese Zeile ein:

load("nspanel")

Nachdem Ihr diese zwei Dateien hochgeladen habt könnt Ihr noch in die nspanel.be File reingehen und die Location oben welche jetzt mit NorthPole angegeben wird in euren Ort ändern und speichern. Ihr könnt die Location aber auch in der Console eingeben und zwar sucht Ihr euch erst euren Ort auf https://www.latlong.net/convert-address-to-lat-long.html und gebt dann in die Console ein: Longitude 424325 mit Enter bestätigen und Latitude 8789679034 mit Enter bestätigen. Was ich dann noch gesetzt habe war die richtige Uhrzeit. Diese geben wir wiederum in die Console ein mit: timezone 99 , wieder mit Enter bestätigen.

Danach könnt Ihr das Panel vom Strom nehmen. Nach einer kurzen Zeit könnt Ihr dieses dann wieder mit Strom verbinden und die Daten bzw. Widgets sollten sich nach und nach laden. Falls Ihr alles kontrollieren wollt könnt Ihr die Console öffnen und nach evtl. Fehlermeldungen suchen. Nun sollte das ganze dann so aussehen, die Dateien autoexec.bec und nspanel.bec werden automatisch erstellt.

MQTT Signale auslesen:

Sofern alles funktioniert können wir uns jetzt an die Einbindung in ein SmartHome System kümmern. Meine Wahl fällt hier auf openHAB 3 jedoch sollten diese Befehle auch in anderen Systemen wie z.B. HomeAssistant funktionieren.

Meine Vorgehensweiße bei MQTT Geräten bzw. Befehlen ist eigentlich immer die Selbe. Ich schaue mir die Befehle in der Tasmota Console an. Dann bekommen wir Zeilen bzw. Befehle wie diese:

MQT: tele/NSPanel/SENSOR = {"Time":"2021-10-29T17:00:45","ANALOG":{"Temperature1":20.7},"ESP32":{"Temperature":41.8},"TempUnit":"C"}

Nachdem Ihr jetzt den linken unteren Schalter (der das Relais 1 schaltet) gedrückt habt solltet Ihr diese Nachricht bekommen:

17:06:40.102 MQT: stat/NSPanel/RESULT = {"POWER1":"ON"}
17:06:40.113 MQT: stat/NSPanel/POWER1 = ON
17:06:40.184 NSP: Switch state updated with {"switches":[{"outlet":0,"switch":"on"},{"outlet":1,"switch":"off"}]}
17:06:40.188 NSP: Sent = {"switches":[{"outlet":0,"switch":"on"},{"outlet":1,"switch":"off"}]}
17:06:40.416 NSP: Received Raw = bytes('55AA870B007B226572726F72223A307D55010055AA870B007B226572726F7222...')

openHAB 3 Temperatur Sensor Integration:

Mit diesen Daten können wir im Grunde das Relais 1 bzw. den linken Switch und den Temperatur Sensor schon in openHAB 3 einbinden.

Um jetzt nicht ständig in die Console schauen zu müssen benutze ich gerne das Programm mqtt.fx.

Als erstes fügen wir den TemperaturSensor bzw. die Zimmertemperatur in das openHAB 3 System hinzu.

Dazu geht Ihr auf – Settings – Things – dann unten auf das Plus Symbol um ein Neues Thing zu erstellen. Hier wählt Ihr nun das MQTT Binding aus und klickt auf Generic MQTT Thing. Dann vergebt Ihr eine ID einen Namen und eine Location (in meinem Fall NSPanel) und wählt dann bei Bridge euren MQTT Broker aus. Jetzt müssen wir noch Channels hinzufügen dazu geht Ihr im Reiter oben auf Channels und klickt auf Add Channel. Dann vergebt Ihr wieder eine ID und ein Label ich nutze hier NSPanelTempSensor als ID und Namen. Als – Channel type wählt Ihr Text Value aus. Jetzt müsst Ihr unten bei – Configuration ein MQTT State Topic eingeben dieses haben wir ja oben in der Console bzw. mit mqtt.fx herausgefunden:

tele/NSPanel/SENSOR

Dann geht Ihr auf Create und der Channel für die Raumtemp. bzw. Geräte Temperatur ist angelegt. Jetzt wählt Ihr den Channel NSPanel Temp Sensor aus und klickt auf – Add Link to Item. Hier wählt Ihr nun Create a new Item und vergebt wieder einen Namen, ID usw. Als – Type wählt Ihr Number, als – Semantic Class Measurement, als – Semantic Property Temperature.

Dann müsst Ihr unten noch ein Profile auswählen, JSONPATH.

Da gebt Ihr dann folgendes in die JSONPath Expression Zeile ein:

$.ANALOG.Temperature1

Nun bekommt Ihr die Temperatur des Sensors ausgegeben aber im Moment nur als Zahlenwert und nicht in °C. Um das zu ändern geht Ihr in das Item rein und legt eine State Description an:

%.2f °C

So und nun wird die Temperatur sauber dargestellt.

openHAB 3 Relais 1 / Schalter 1 Integration:

Als nächstes Binden wir das Relais1 bzw. den linken Schalter ein. Das ist auch ganz einfach Ihr verwendet dazu wieder das zuvor angelegte Thing NSPanel und legt dann einen neuen Channel an. Dieses mal wählt Ihr bei – MQTT State Topic:

stat/NSPanel/POWER1

und bei dem Command Topic wie wir oben in der Console bzw. mqtt.fx rausbekommen haben diese Zeile ein:

cmnd/NSPanel/POWER1

Klickt auf Create und dann auf +Add Link to Item und legt hier einen einfachen Switch an.

openHAB 3 Touch Widgets Integration:

Das war der einfache Teil und jetzt wird es Interessant 😉 Wir wollen natürlich auch die Touch Widgets und das Thermostat Widget einbinden dazu benötigen wir ein bisschen mehr.

Ihr wählt wieder das NSPanel Thing aus und legt für das Index1 Widget einen Channel an hierzu wähle Ich die ID und den Namen z.b. NSPanelTouch1 und als Channel type – Text Value. Um das MQTT State Topic zu bekommen öffne ich wieder die Tasmota Console oder das mqtt.fx und betätige auf dem NSPanel das Touch Widget Index 1.

17:43:50.385 NSP: Received Raw = bytes('55AA865D007B226374797065223A2267726F7570222C226964223A2231222C22...')
17:43:50.416 MQT: tele/NSPanel/RESULT = {"NSPanel":{"ctype":"group","id":"1","params":{"switch":"off","switches":[{"switch":"off","outlet":0}]}}}

Diese Zeilen werden ausgegeben. Somit wissen wir das wir als MQTT State Topic diese Zeile benötigen:

tele/NSPanel/RESULT

Dann erstellt Ihr ein neues Item wählt hier als Type String aus und unten bei den Profile – JSONPATH. In die JSONPath Expression Zeile geben wir dann folgendes ein:

$.NSPanel[?(@.id =="1")].params.switches[0].switch

Zur Erklärung: wir gehen hier mit $.NSPanel ind die erste Klammer dann „bestätigen“ wir dass es sich um die „id“:“1″ handelt gehen dann in die erste Klammer im „Überordner“ params mit params.switches[0] rein und wollen darin den Befehl „on“ bzw. „off“ der „switch“ Ausgabe erhalten deswegen nochmal switch am Ende.

So jetzt solltet Ihr beim Betätigen des Widgets Index 1 eine Ausgabe in on oder off bekommen. Um jetzt diesen Touch Befehl mit einem openHAB item zu verknüpfen habe ich einfach zwei Regeln angelegt. Und eine Regel um das Item (in meinem Fall das BüroLicht) einzuschalten und eine um das Licht wieder auszuschalten.

Dazu wählt Ihr bei der Regel bei When – NSPanelTouch1 changed from off to on Then Send command ON to BüroLicht. Diese müsst Ihr natürlich auch noch umdrehen um das Licht wieder auszuschalten.

Nun sollte es euch möglich sein z.b. ein Licht mit dem Touch Befehl des Widgets Index 1 zu schalten.

Leider haben wir nun noch das Problem das die Befehle nicht an das NSPanel zurückgegeben werden, also wenn Ihr den Physischen Lichtschalter oder in openHAB betätigt weiß das NSPanel nichts davon. Um das zu lösen benötigen wir einen weiteren Channel bzw. Item. Diesen Channel habe ich NSPanelTouchSendState benannt und als Channel Type Text Value gewählt und bei MQTT Command Topic diese Zeile eingegeben:

cmnd/NSPanel/nspsend

Dann noch auf +Add Link to Item , dort legt ihr dann das gleichnamige Item an mit dem Standard Profile. Dieses Item ist dazu da Befehle an das NSPanel zu schicken um so den State des Widgets upzudaten.

Jetz benötigen wir dazu noch eine Regel bzw. ein Script. In meinem Fall habe ich die Regel NSPanel Send Office Light State benannt.

In dieser Regel habe ich dann bei When – When BüroLicht changed gesetzt und bei Then ein ECMAScript eingefügt:

state =  itemRegistry.getItem("BüroLicht").getState().toString().toLowerCase();
command = '{"relation":[{"id":"1","online":true,"params":{"switch":"' + state + '"}}]}';
events.sendCommand("NSPanel_NSPanelTouchSendState", command);

Wenn alles gut läuft sollte es euch jetzt möglich sein mittels NSPanel Touch Widget Index 1 das Licht ein und auszuschalten. Auch andersherum sollte es möglich sein das Licht in openHAB oder am physischen Schalter zu bedienen und auf dem Panel den richtigen Status gesetzt zu bekommen.

openHAB 3 Thermostat Control Integration:

Für das Thermostat Control lesen wir wieder die Befehle bzw. die Zeilen aus und wir bekommen:

20:15:29.742 NSP: Received Raw = bytes('55AA841D007B224154434D6F6465223A302C2241544345787065637430223A32...')
20:15:29.766 MQT: tele/NSPanel/RESULT = {"NSPanel":{"ATCMode":0,"ATCExpect0":22}}

Nun legen wir uns einen Channel wieder im Thing NSPanel an den wir NSPanelThermostat benennen, als Channel type wählen wir Text Value und bei dem MQTT State Topic tragen wir diese Zeile ein:

tele/NSPanel/RESULT

Dann +Add Link to Item und wählen hier den Namen NSPanelThermostatSetpoint , als String und Semantic Class Measurement und Semantic Property Temperature. Wenn Ihr dann das Thermostat Panel anschaltet und die Temperatur Werte verstellt solltet Ihr den eingestellten Wert mit diesen Item (NSPanelThermostatSetpoint) in openHAB bekommen.

Jetzt Verknüpfen wir noch unser eigentliches Thermostat von openHAB (in meinem Fall die Küchenheizung – HeizungKuche_SetPointTemperature) mit dem gerade angelegten Item (NSPanelThermostatSetpoint) welches die Daten von dem Panel bekommt. Dazu erstellt Ihr eine neue Rule.

Ich nenne diese Regel NSPanelThermostatSendState1 und wähle bei dem When – When NSPanelThermostatSetpoint changed und bei dem Then dieses ECMAScript:

events.sendCommand("HeizungKuche_SetPointTemperature",itemRegistry.getItem("NSPanelTest_NSPanelThermostatSetpoint").getState());

Jetz benötigt Ihr wieder einen Channel bzw. ein Item das die Signale von openHAB an das NSPanel sendet. Dazu legen wir uns wieder unter dem NSPanel Thing einen Channel an, den benenne ich NSPanelThermostatSendState und als TextValue mit dem MQTT Command Topic

cmnd/NSPanel/nspsend

Dann wieder auf +Add Link to Item und wähle hier String und den Namen NSPanelThermostatSendState.

Jetzt benötigt Ihr noch eine zweite Regel um eben die Daten aus openHAB 3 mit dem NSPanel abgleichen zu können. Dazu erstellt Ihr die Regel NSPanel Send Thermostat State 2. Bei When wählt Ihr When HeizungKuche_SetPointTemperature changed und bei Then legen wir wieder ein ECMAScript an:

state =  itemRegistry.getItem("HeizungKuche_SetPointTemperature").getState().toString().replace(' °C','');
command = '{"ATCExpect0":' + state + '}';
events.sendCommand("NSPanelTest_NSPanelThermostatSendState", command);

Nachdem Ihr beide Rules enabled habt sollten sich die Thermostate synchronisieren.

Da ich im Moment das Panel auf dem Desktop benutze habe ich hier ein 3D Druck Gehäuse entworfen. Leider fehlt mir im Moment die Zeit um es zu verfeinern aber mit deinem Dremel passt das Panel super rein 😉

https://www.thingiverse.com/thing:5078454

TO BE CONTINUED …

5 Gedanken zu “Sonoff NSPanel + Tasmota Flash / Konfiguration

  1. Klasse, vielen Dank für die ausführliche Anleitung.
    Ich würde das Panel gerne an IOBroker testen und bereiben. Einen Sonoff-Adapter gibt es da zumindest.

    Nur eine kurze Frage zu “ Verbindet dann die Pins des Panels mit dem FTDI Adapter“. Muss ich hier was anlöten? Oder gibts dafür irgendwelche Stecker?

    Besten Gruß
    Chris

    1. Danke Dir!
      Das geht ganz einfach mit den Pins der Jumper Kabel, die steckst du in die Löcher vom Panel und drückst sie während des Flashvorgangs bisschen runter um so den Kontakt zu halten.
      Lg

  2. mit dem gedruckten gehäuse sieht das teil aus wie ne nordkoreanische alexa 😀
    btw…wenn du noch was zu dem panel schreiben solltest würde ich mich freuen, wenn du mal auf die touch-widgets eingehst. vlt auch ein paar bilder dazu welche typen es alles gibt. ist so ein touch widget eigentlich auch als item und nicht als gruppe nutzbar? also quasi als toogle schalter ohne eigenes untermenü.

    1. der Artikel wird laufend noch erweitert aber zu den Widgets ist mehr oder weniger schon alles gesagt 😉 evtl. werd ich den Teil noch erweitern falls das unklar sein sollte. Das mit dem Item ist eigentlich auch schon beschrieben ich füge das Index1 Widget (ohne Gruppe) als item bzw. als toggle switch in openhab ein. Evtl. wird das verständlicher wenn du das Teil mal in den Händen hältst 😉

      1. hab gestern 2 geordert und hoffe, dass die im dezember wie versprochen eintrudeln.
        das video aus diesem beitrag hab ich vorhin nur am telefon geschaut. da war leider nicht soviel zu erkennen wie das alles mit dem touch funktioniert. ansonsten werd ich das hier mal im auge behalten ;). danke für deine antwort.
        offtopic…gui items/rules/things config bei openhab3 find ich immer noch echt gruselig. bin seit oh1 dabei und werde wohl auf textconfig bleiben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.