Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Hardware
    4. Sonoff NSPanel

    NEWS

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

    Sonoff NSPanel

    This topic has been deleted. Only users with topic management privileges can see it.
    • a200
      a200 @joBr99 last edited by

      @jobr99

      Jetzt würde ich gerne einen Homematic-Schalter steuern:

      var Buero_Seite_1: PageEntities =
      {
          "type": "cardEntities",
          "heading": "Büro",
          "useColor": true,
          "items": [
              <PageItem>{ id: "alias.0.NSPanel.Buero_Drucker", icon: "switch", name: "Drucker", offColor: MSRed, onColor: MSGreen}
          ]
      };
      

      alias.0.NSPanel.Buero_Drucker = der DP des Schalters (false/true)

      aber die Büroseite bleibt leer. Habt ihr da einen Tipp?

      J Armilar 2 Replies Last reply Reply Quote 0
      • J
        joBr99 @Armilar last edited by

        @armilar said in Sonoff NSPanel:

        @jobr99 sagte in Sonoff NSPanel:

        @Armilar fyi, wenn du noch nen esp32 nodemcu development board rumliegen hast kannst du das auch am pc testen / screenshots machen

        Hab ich noch rumliegen. Was bauche ich dafür alles?

        1. ESP32 mit Tasmota Flashen
        2. MQTT und apps.yaml konfigurieren
        3. RX und TX auf None setzen (hab vergessen was da default ist, aber damit das berry skript die serial ports benutzen kann dürfen die nicht in tasmota konfiguriert sein)
          d4ffe3c8-0232-4e54-9146-5a2f95e10284-image.png
        4. folgenden Berry Treiber installieren, wichtigste Änderung zur Version im Repo sind die geänderten serial ports

        self.ser = serial(3, 1, 115200, serial.SERIAL_8N1)

        (ansonsten fehlt auch noch der kram fürs flashen der firmware etc. den man hier nicht braucht, aber das wäre vermutlich nicht besonders schlimm wenn's drin wär)

        # Nextion Serial Protocol driver by joBr99 + nextion upload protocol 1.2 (the fast one yay) implementation using http range and tcpclient
        # based on;
        # Sonoff NSPanel Tasmota driver v0.47 | code by blakadder and s-hadinger
        
        class Nextion : Driver
        
            var ser
        	var flash_size
        	var flash_mode
        	var flash_skip
        	var flash_current_byte
        	var tftd
        	var progress_percentage_last
        	static header = bytes('55BB')
        
            def init()
                log("NSP: Initializing Driver")
                self.ser = serial(3, 1, 115200, serial.SERIAL_8N1)
                self.flash_mode = 0
        		self.flash_skip = false
        		tasmota.add_driver(self)
            end
        	
            def crc16(data, poly)
              if !poly  poly = 0xA001 end
              # CRC-16 MODBUS HASHING ALGORITHM
              var crc = 0xFFFF
              for i:0..size(data)-1
                crc = crc ^ data[i]
                for j:0..7
                  if crc & 1
                    crc = (crc >> 1) ^ poly
                  else
                    crc = crc >> 1
                  end
                end
              end
              return crc
            end
        	
            def split_55(b)
              var ret = []
              var s = size(b)   
              var i = s-2   # start from last
              while i > 0
                if b[i] == 0x55 && b[i+1] == 0xBB           
                  ret.push(b[i..s-1]) # push last msg to list
                  b = b[(0..i-1)]   # write the rest back to b
                end
                i -= 1
              end
              ret.push(b)
              return ret
            end
        
        	# encode using custom protocol 55 BB [payload length] [payload] [crc] [crc]
            def encode(payload)
              var b = bytes()
              b += self.header
              b.add(size(payload), 2)   # add size as 1 byte
              b += bytes().fromstring(payload)
              var msg_crc = self.crc16(b)
              b.add(msg_crc, 2)       # crc 2 bytes, little endian
              return b
            end
        	
        	# send a nextion payload
        	def encodenx(payload)
        		var b = bytes().fromstring(payload)
        		b += bytes('FFFFFF')
        		return b
        	end
        	
        	def sendnx(payload)
        		var payload_bin = self.encodenx(payload)
        		self.ser.write(payload_bin)
        		 print("NSP: Sent =", payload_bin)
        		log("NSP: Nextion command sent = " + str(payload_bin), 3)
        	end
          
            def send(payload)
                var payload_bin = self.encode(payload)
                if self.flash_mode==1
                    log("NSP: skipped command becuase still flashing", 3)
                else 
                    self.ser.write(payload_bin)
                    log("NSP: payload sent = " + str(payload_bin), 3)
                end
            end
        		
        	def every_100ms()
                import string
                if self.ser.available() > 0
                    var msg = self.ser.read()
                    if size(msg) > 0
                        print("NSP: Received Raw =", msg)
                        if self.flash_mode==1
                            log("no flashing in this version")
                        else
        					# Recive messages using custom protocol 55 BB [payload length] [payload length] [payload] [crc] [crc]
        					if msg[0..1] == self.header
        						var lst = self.split_55(msg)
        						for i:0..size(lst)-1
        							msg = lst[i]
        							#var j = msg[2]+2
        							var j = size(msg) - 3
        							msg = msg[4..j]
        							if size(msg) > 2
        								var jm = string.format("{\"CustomRecv\":\"%s\"}",msg.asstring())
        								tasmota.publish_result(jm, "RESULT")
        							end
        						end
        					elif msg == bytes('000000FFFFFF88FFFFFF')
        						log("NSP: Screen Initialized")
        					else
                                var jm = string.format("{\"nextion\":\"%s\"}",str(msg[0..-4]))
        						tasmota.publish_result(jm, "RESULT")
        					end       			
                        end
                    end
                end
            end
        end
        
        var nextion = Nextion()
        
        def send_cmd(cmd, idx, payload, payload_json)
            nextion.sendnx(payload)
            tasmota.resp_cmnd_done()
        end
        
        tasmota.add_cmd('Nextion', send_cmd)
        
        def send_cmd2(cmd, idx, payload, payload_json)
            nextion.send(payload)
            tasmota.resp_cmnd_done()
        end
        
        tasmota.add_cmd('CustomSend', send_cmd2)
        
        1. HMI Datei aus dem repo runterladen und im nextion editor öffnen und auf debug klicken
          (tft datei aus dem repo geht auch, wenn man auf debug klickt ohne nen projekt offen zu haben)

        2. Unten auf User MCU Input umstellen, COM Port vom ESP32 auswählen und auf start drücken. (und dann nen paar sekunden warten bis die nächste startupEvent Nachricht kommt)

        ede7dea1-582e-4c37-9f58-407a5b6f718a-image.png

        1 Reply Last reply Reply Quote 0
        • J
          joBr99 @a200 last edited by

          @a200 zu ioBroker und dem TypeScript Backend kann ich dir nix sagen

          1 Reply Last reply Reply Quote 0
          • Armilar
            Armilar Most Active Forum Testing @a200 last edited by Armilar

            @a200

            Wie sieht dein Alias aus? Switch bekommst du am schnellsten mit Alias "Steckdose" oder "Licht" hin

            0854cf54-29ff-489d-b945-89e29b3a697d-image.png

            Manchmal Haken die Aliase. Dann einfach mal den Homatic Datenpunkt per Hand umschalten, dann zieht der Alias nach

            a200 1 Reply Last reply Reply Quote 0
            • a200
              a200 @Armilar last edited by a200

              @armilar

              Der Alias an sich funktioniert.

              323e91fb-bcb0-4c85-9683-913c15a451cf-grafik.png

              var Buero_Seite_1: PageEntities =
              {
                  "type": "cardEntities",
                  "heading": "Büro",
                  "useColor": true,
                  "items": [
                      <PageItem>{ id: "alias.0.NSPanel.Schalter.Keller_Drucker", icon: "switch", name: "Drucker", offColor: MSRed, onColor: MSGreen}
                  ]
              };
              

              Aber die Ansicht Büro bleibt leer. Zum Test habe ich die Ansicht umbenannt und den neuen Namen kann ich auf dem Panel sehen. Ansonsten aber alles leer.

              Ist das: https://github.com/joBr99/nspanel-lovelace-ui/blob/main/ioBroker/README.md hier die einzige Doku dazu?

              OK, Jetzt scheint es zu gehen

              Armilar 1 Reply Last reply Reply Quote 0
              • Armilar
                Armilar Most Active Forum Testing @a200 last edited by

                @a200 Ich weiß, die Datenpunkte kann man überall sehen, man denkt der Alias wäre intakt - aber existState kommt mit false zurück....

                a200 1 Reply Last reply Reply Quote 0
                • a200
                  a200 @Armilar last edited by a200

                  @armilar nur die Steuerung geht nicht. Muss ich im Alias noch die Ausgabe konvertieren? Also aus true -> 1 und aus false -> 0 machen, oder so was? Weil jetzt wird ein Schalter angezeigt, aber die Dose schaltet nicht.

                  event - buttonPress2 - alias.0.NSPanel.Schalter.Keller_Drucker - OnOff - 1 - PageId: 0
                  event - buttonPress2 - alias.0.NSPanel.Schalter.Keller_Drucker - OnOff - 0 - PageId: 0

                  Also die Steuerung für Schalter und Rollladen werden angezeigt. Die Rolle muss nur richtig gesetzt werden. Aber aber sie haben keine Auswirkung auf die Geräte.

                  Armilar 1 Reply Last reply Reply Quote 0
                  • Armilar
                    Armilar Most Active Forum Testing @a200 last edited by Armilar

                    @a200 sagte in Sonoff NSPanel:

                    @armilar nur die Steuerung geht nicht. Muss ich im Alias noch die Ausgabe konvertieren? Also aus true -> 1 und aus false -> 0 machen, oder so was? Weil jetzt wird ein Schalter angezeigt, aber die Dose schaltet nicht.

                    event - buttonPress2 - alias.0.NSPanel.Schalter.Keller_Drucker - OnOff - 1 - PageId: 0
                    event - buttonPress2 - alias.0.NSPanel.Schalter.Keller_Drucker - OnOff - 0 - PageId: 0

                    Also die Steuerung für Schalter und Rollladen werden angezeigt. Die Rolle muss nur richtig gesetzt werden. Aber aber sie haben keine Auswirkung auf die Geräte.

                    Bei mir funktioniert ein Schalter so, wie er funktionieren muss (false = aus und true = an) --> und das Gerät macht was es soll 😉
                    Oder ist es bei dir eher Toggle? Zustandsänderungen über n-Geräte (Schalter, noch ein Schalter, Alexa ... und jeder Zustand verändert den Schalter? Dann wäre ein Button (Alias Taste) besser geeignet

                    a200 1 Reply Last reply Reply Quote 0
                    • a200
                      a200 @Armilar last edited by

                      @armilar Meine Aliases haben keine .GET bzw. .SET Erweiterung. Deshalb habe ich den Code bisschen angepasst und die Zeilen 1188-1190 hinzugefügt. Damit funktioniert es bei mir auch. Ich muss mal schauen, wie ich das in den Griff bekomme. Ich glaube ich muss meine Aliases anders anlegen.

                      a43617d5-7bb4-428d-bf43-069bebc4cedf-grafik.png

                      Armilar 1 Reply Last reply Reply Quote 0
                      • Armilar
                        Armilar Most Active Forum Testing @a200 last edited by Armilar

                        @a200 sagte in Sonoff NSPanel:

                        @armilar Meine Aliases haben keine .GET bzw. .SET Erweiterung. Deshalb habe ich den Code bisschen angepasst und die Zeilen 1188-1190 hinzugefügt. Damit funktioniert es bei mir auch. Ich muss mal schauen, wie ich das in den Griff bekomme. Ich glaube ich muss meine Aliases anders anlegen.

                        a43617d5-7bb4-428d-bf43-069bebc4cedf-grafik.png

                        Muss auch nicht.

                        Switch case läuft ohne "break" durch...

                        Damit macht socket das gleiche wie light (auch ohne Code 😉 )

                        case "socket":
                        case "light":
                              setIfExists(id + ".SET", action);
                              break;
                        

                        Und welche Aliase wären das denn? Sind doch mittlerweile alle drin!

                        a200 1 Reply Last reply Reply Quote 0
                        • a200
                          a200 @Armilar last edited by a200

                          @armilar sagte in Sonoff NSPanel:

                          @a200 sagte in Sonoff NSPanel:

                          @armilar Meine Aliases haben keine .GET bzw. .SET Erweiterung. Deshalb habe ich den Code bisschen angepasst und die Zeilen 1188-1190 hinzugefügt. Damit funktioniert es bei mir auch. Ich muss mal schauen, wie ich das in den Griff bekomme. Ich glaube ich muss meine Aliases anders anlegen.

                          a43617d5-7bb4-428d-bf43-069bebc4cedf-grafik.png

                          Muss auch nicht.

                          Switch case läuft ohne "break" durch...

                          Damit macht socket das gleiche wie light (auch ohne Code 😉 )

                          case "socket":
                          case "light":
                                setIfExists(id + ".SET", action);
                                break;
                          

                          Ja aber ich will nicht id + ".SET" sondern einfach nur id haben. Denn meine Datenpunkte haben weder GET noch SET.

                          Ich schreibe dann z.B. nach "alias.0.NSPanel.Schalter.Keller_Drucker" = "hm-rpc.0.OEQ2403914.1.STATE" und der Wert soll direkt in STATE geschrieben werden.
                          Alternativ sollte man Abfragen ob es SET/GET gibt. So ähnlich wie in der Zeile: 1352...

                                     if (o.common.role == "light" || o.common.role == "socket") {
                                          if (existsState(id + ".GET")) {
                                              val = getState(id + ".GET").val;
                                              RegisterDetailEntityWatcher(id + ".GET", pageItem, type);
                                          }
                                          else if (existsState(id + ".SET")) {
                                              val = getState(id + ".SET").val;
                                              RegisterDetailEntityWatcher(id + ".SET", pageItem, type);
                                          }
                          

                          Aus meiner Sicht gehört da noch der dritter Fall else mit:

                                          else if (existsState(id)) {
                                              val = getState(id).val;
                                              RegisterDetailEntityWatcher(id, pageItem, type);
                                          }
                          

                          Das funktioniert bei mir.

                          Mich würde interessieren welches Geräte du steuerst und wie die DPe heißen. Ich vermute irgendwas mit .GET oder .SET am Ende.

                          Armilar 1 Reply Last reply Reply Quote 0
                          • Armilar
                            Armilar Most Active Forum Testing @a200 last edited by

                            @a200
                            Also du arbeitest in Wirklichkeit nicht mit einem Alias, denn der hat eigentlich immer ein .SET oder . ACTUAL, oder?

                            Du möchtest für dich lieber mit den Datenpunkten arbeiten. Das macht nur bei der Anzahl an Varianten von Adaptern wenig sinn, denn dadurch wird dein Code schnell innerhalb der nächsten Wochen auf unübersichtliche 5000 Zeilen ansteigen. Ich würde mich an deiner Stelle mit dem Geräte-Manager oder Alias-Manager anfreunden und mir für das Panel Aliase bauen.

                            a200 1 Reply Last reply Reply Quote 0
                            • a200
                              a200 @Armilar last edited by

                              @armilar sagte in Sonoff NSPanel:

                              @a200
                              Also du arbeitest in Wirklichkeit nicht mit einem Alias, denn der hat eigentlich immer ein .SET oder . ACTUAL, oder?

                              Du möchtest für dich lieber mit den Datenpunkten arbeiten. Das macht nur bei der Anzahl an Varianten von Adaptern wenig sinn, denn dadurch wird dein Code schnell innerhalb der nächsten Wochen auf unübersichtliche 5000 Zeilen ansteigen. Ich würde mich an deiner Stelle mit dem Geräte-Manager oder Alias-Manager anfreunden und mir für das Panel Aliase bauen.

                              Sagen wir mal so. Ich würde gerne korrekt mit den Aliases arbeiten, aber dass kann ich im Moment noch nicht. deshalb habe ich auch oben geschrieben "Ich glaube ich muss meine Aliases anders anlegen". Ich nutze den Alias Manager in IoB und das wahrscheinlich falsch bzw nicht ganz richtig.

                              So sieht im Moment mein Alias für die Homematic Steckdose:

                              {
                                "type": "state",
                                "common": {
                                  "name": "KG. Büro Drucker.STATE",
                                  "role": "socket",
                                  "type": "boolean",
                                  "read": true,
                                  "write": true,
                                  "alias": {
                                    "id": "hm-rpc.0.OEQ2403914.1.STATE"
                                  }
                                },
                                "_id": "alias.0.NSPanel.Schalter.Keller_Drucker",
                                "native": {},
                                "acl": {
                                  "object": 1636,
                                  "state": 1636,
                                  "owner": "system.user.admin",
                                  "ownerGroup": "system.group.administrator"
                                },
                                "from": "system.adapter.admin.0",
                                "user": "system.user.admin",
                                "ts": 1651854682051
                              }
                              

                              Was muss ich ändern um die zusätzlichen States zu erhalten.

                              Thomas Braun Armilar 2 Replies Last reply Reply Quote 0
                              • Thomas Braun
                                Thomas Braun Most Active @a200 last edited by

                                @a200 sagte in Sonoff NSPanel:

                                "name": "KG. Büro Drucker.STATE",

                                Keine Ahnung ob es wichtig ist, aber Leerzeichen und Umlaute sollte man tunlichst vermeiden.

                                a200 1 Reply Last reply Reply Quote 1
                                • a200
                                  a200 @Thomas Braun last edited by a200

                                  @thomas-braun Ja, du hast Recht. Das ist nur ein Test. Wobei der Name sollte keine Probleme machen. Habe selbst das Problem gehabt, dass ein zweiter Umlaut in Bindings Probleme macht. Der erster nicht. Danke dir für den Hinweis.

                                  1 Reply Last reply Reply Quote 2
                                  • Armilar
                                    Armilar Most Active Forum Testing @a200 last edited by Armilar

                                    @a200
                                    geht finde ich mit dem Geräte-Manager meistens schneller...

                                    b5fef6a8-2211-4c48-8a4d-a8ecd54920f4-image.png

                                    "+" drücken
                                    75f7e5bc-cb99-4bce-8471-66488751bf8f-image.png

                                    In diesem Fall Steckdose auswählen und Namen vergeben
                                    8eb2b4e7-d73b-4dcf-a4c8-96f1feb2d7d5-image.png

                                    Aktor auswählen (Habe keine Homatic Schalter, daher Alternative aus Sonoff)
                                    215678f6-967a-4bc8-9fc6-b84caf4687d2-image.png

                                    speichern, Alias fertig...

                                    ...mach das nicht so wissenschaftlich - ist nur ein Alias

                                    P.S. Device-Manager heißt das Ding

                                    1 Reply Last reply Reply Quote 1
                                    • J
                                      joBr99 last edited by

                                      https://github.com/joBr99/nspanel-lovelace-ui/commit/922baa41b41a0ba2c3ce2e4aded5810fba901e62

                                      Das aktuelle Release benötigt die Beschriftungen im command, hab die auch mal beim ioBroker Skript hinzugefügt (ungetestet)

                                      0 joBr99 committed to joBr99/nspanel-lovelace-ui
                                      Update detail Page update commands
                                      1 Reply Last reply Reply Quote 0
                                      • W
                                        wheinz44 last edited by

                                        Guten Morgen an alle,
                                        an und für sich habe ich mit Tasmota und IOBroker keine Probleme, aber dieses NSPanel schaft mich.
                                        Außer Uhrzeit und Datum, ein paar Seiten mit Überschrift (die Ich ändern kann) funktioniert bei meinem NSPanel nichts.Mittlerweile kenne ich fast alle 466 Posts auswndig, und habe alle Anleitungen durchgearbeitet.
                                        Ich vermute das es an meine Aliase scheitert. Wenn wer eine Idee hat, Screenshots kann ich bei fragen am Abend schicken. Danke im voraus, wheinz44

                                        D Armilar 2 Replies Last reply Reply Quote 0
                                        • D
                                          DocGame @wheinz44 last edited by

                                          @wheinz44 Willkommen im Club der schweigenden Masse...
                                          Ich habe vor 3 Monaten meine 2 NSPanels mit Tasmota geflasht und einige Tage versucht die ersten Anleitungen zu befolgen. Ich bin hierzu vermutlich zu b...
                                          Diesen Post verfolge ich zwar mit Interesse, habe mir aber vorgenommen erst wieder einzusteigen wenn es einen Adapter oder eine "Dummy"-Anleitung gibt. Bei den Ergebnissen, die ich hier sehe fällt mir das Warten ganz schön schwer, da diese genau meinen Vorstellungen entsprechen. Bei meinem Programmierkenntnisstand weiß ich aber im Vorfeld, dass es im Moment nur Frust und keine Ergebnisse gibt.
                                          Noch habe ich Hoffnung, dass eure grandiose "Forschungsarbeit" in absehbarer Zeit auch für Normaluser umsetzbar wird.

                                          M 1 Reply Last reply Reply Quote 1
                                          • M
                                            Muchul @DocGame last edited by Muchul

                                            @docgame sagte in Sonoff NSPanel:

                                            Noch habe ich Hoffnung, dass eure grandiose "Forschungsarbeit" in absehbarer Zeit auch für Normaluser umsetzbar wird.

                                            ++ Ich leider auch

                                            a200 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            1.0k
                                            Online

                                            31.6k
                                            Users

                                            79.4k
                                            Topics

                                            1.3m
                                            Posts

                                            78
                                            1548
                                            388701
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo