Navigation

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

    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 mit Lovelace UI

    This topic has been deleted. Only users with topic management privileges can see it.
    • Armilar
      Armilar Most Active Forum Testing @danny_v1 last edited by Armilar

      @danny_v1

      Moment bist du mit der Emu unterwegs oder mit dem Original-Panel? Das sind zwei unterschiedliche Berry Treiber

      Der wäre für das Original-Panel
      https://github.com/joBr99/nspanel-lovelace-ui/blob/main/tasmota/autoexec.be

      Der nachfolgende für die Emulation:

      # 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)
      

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

        @armilar ne bin noch im emu

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

          @danny_v1

          Emu im Nextion-Editor?

          1 Reply Last reply Reply Quote 0
          • D
            danny_v1 last edited by

            @armilar richtig. Autoexec.be passt hab deine noch mal kopiert und komme wieder auf 3720

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

              @danny_v1

              Im Nextion-Editor unter Debug:
              Dort unten links von Keyboard Input auf User MCU Input umstellen, den COM-Port des ESP auswählen und die Baud-Rate auf 115200 stellen. Mit Start verbindet man sich nun zum ESP.

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

                @armilar ja hab ich es kommt auch event startup 44 an

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

                  @danny_v1

                  Läuft also?

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

                    @armilar Verbindung ja aber steht immernoch auf waiting for content. Hab das Skript ohne Beispiele aber sollte ja zumindest in den Screensaver mit dem Wetter gehen oder?

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

                      @danny_v1

                      ESP ist über USB verbunden und MQTT korrekt eingerichtet?

                      https://github.com/joBr99/nspanel-lovelace-ui/wiki/ioBroker---Basisinstallation#4-mqtt-tasmota-config

                      Punkt 4 und 6.

                      Liegt häufig daran, dass die MQTT-Verbindung zwischen CustomSend (häufig noch über Mosquitto) zum NSPanel nicht korrekt konfiguriert ist. Das Panel kommuniziert in beide Richtungen

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

                        @armilar ja kofig hab ich genauso gemacht, hab in der mqtt instanz den timeout mal hoch gesetzt. aber ansonsten so wie beschrieben, der adapter sagt auch verbunden mit NSPanel_DEV

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

                          @danny_v1

                          Dann zeige mal den CustomSend im MQTT und in der Script-Config

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

                            @armilar nsp.PNG

                            export const config: Config = {
                                panelRecvTopic: 'mqtt.1.SmartHome.NSPanel_DEV.tele.RESULT',       // anpassen
                                panelSendTopic: 'mqtt.1.SmartHome.NSPanel_DEV.cmnd.CustomSend',   // anpassen
                                firstScreensaverEntity: { ScreensaverEntity: 'accuweather.0.Hourly.h0.PrecipitationProbability', ScreensaverEntityIcon: 'weather-pouring', ScreensaverEntityText: 'Regen', ScreensaverEntityUnitText: '%', ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 100} },
                                secondScreensaverEntity: { ScreensaverEntity: 'accuweather.0.Current.WindSpeed', ScreensaverEntityIcon: 'weather-windy', ScreensaverEntityText: "Wind", ScreensaverEntityUnitText: 'km/h', ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 120} },
                                thirdScreensaverEntity: { ScreensaverEntity: 'accuweather.0.Current.UVIndex', ScreensaverEntityIcon: 'solar-power', ScreensaverEntityText: 'UV', ScreensaverEntityUnitText: '', ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 9} },
                                fourthScreensaverEntity: { ScreensaverEntity: 'accuweather.0.Current.RelativeHumidity', ScreensaverEntityIcon: 'water-percent', ScreensaverEntityText: 'Luft', ScreensaverEntityUnitText: '%', ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 100, 'val_best': 65} },
                                alternativeScreensaverLayout: false,
                                autoWeatherColorScreensaverLayout: true,
                                mrIcon1ScreensaverEntity: { ScreensaverEntity: null, ScreensaverEntityIcon: 'light-switch', ScreensaverEntityOnColor: On, ScreensaverEntityOffColor: Off  },
                                mrIcon2ScreensaverEntity: { ScreensaverEntity: null, ScreensaverEntityIcon: 'lightbulb', ScreensaverEntityOnColor: On, ScreensaverEntityOffColor: Off  },
                                timeoutScreensaver: 20,
                                dimmode: 20,
                                active: 100, //Standard-Brightness TFT
                                screenSaverDoubleClick: true,
                                locale: 'de-DE',                    // en-US, de-DE, nl-NL, da-DK, es-ES, fr-FR, it-IT, ru-RU, etc.
                                timeFormat: '%H:%M',                // currently not used
                                dateFormat: '%A, %d. %B %Y',        // currently not used
                                weatherEntity: 'alias.0.Wetter',    // Dieser Alias muss erstellt werden, damit die 4 kleineren Icons (Wetter oder DP) angezeigt werden können
                                defaultOffColor: Off,
                                defaultOnColor: On,
                            
                            Armilar 1 Reply Last reply Reply Quote 0
                            • Armilar
                              Armilar Most Active Forum Testing @danny_v1 last edited by

                              @danny_v1

                              Ist okay. Das Skript arbeitet auch. Der Transport vom CustomSend zum ESP funktioniert nicht. Jetzt zeig mal die Einstellungen vom MQTT im Tasmota und vom MQTT-Adapter

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

                                @armilar mqtt2.PNG mqtt1.PNG mqtt.PNG

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

                                  @danny_v1

                                  Kann keine Fehler finden. Port ist auch wirklich frei?

                                  D 1 Reply Last reply Reply Quote 0
                                  • A
                                    air101 last edited by

                                    Bekomme seit neustem folgende Fehlermeldung:

                                    javascript.0
                                    2022-11-11 23:25:15.014 error at processImmediate (node:internal/timers:471:21)
                                    javascript.0
                                    2022-11-11 23:25:15.013 error at Immediate._onImmediate (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/build/lib/adapter/adapter.js:5375:56)
                                    javascript.0
                                    2022-11-11 23:25:15.013 error at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:593:29)
                                    javascript.0
                                    2022-11-11 23:25:15.013 error at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1244:38)
                                    javascript.0
                                    2022-11-11 23:25:15.012 error at Object.<anonymous> (script.js.NsPanelTs_ts:2833:81)
                                    javascript.0
                                    2022-11-11 23:25:15.009 error Error in callback: TypeError: Cannot read properties of undefined (reading 'Temperature')

                                    Ist der Fehler in der Zeilennummer 2833 im NsPanel Skript zu finden?

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

                                      @armilar ja ging ja mit den Einstellungen einmal, da kam der berry update Bildschirm. Aber kann gern nochmal einen anderen Port testen.

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

                                        @danny_v1

                                        Geh es einfach noch mal durch. Der Berry Fehler kann ja nicht mehr kommen...

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

                                          @air101

                                          Suche nicht im Skript

                                          Tasmota-Console auf und:

                                          setOption146 1
                                          
                                          1 Reply Last reply Reply Quote 0
                                          • A
                                            air101 last edited by

                                            @armilar Danke Dir!

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            991
                                            Online

                                            31.6k
                                            Users

                                            79.4k
                                            Topics

                                            1.3m
                                            Posts

                                            lovelace ui nspanel sonoff
                                            260
                                            7128
                                            4284880
                                            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