Skip to content
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Hardware
  4. SONOFF NSPanel mit Lovelace UI

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.9k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.1k

SONOFF NSPanel mit Lovelace UI

Geplant Angeheftet Gesperrt Verschoben Hardware
lovelace uinspanelsonoff
7.8k Beiträge 272 Kommentatoren 6.7m Aufrufe 254 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • Andreas_ZA Andreas_Z

    Grundsätzlich scheint etwas über MQTT anzukommen, das Schalten von POWER1 manuell über das Objekt SmartHome/NSPanel_1/cmnd/POWER funktioniert.
    Wenn ich CustomSend time~12:00 in der Konsole absende, wird aber nichts auf dem Display angezeigt.
    autexec.be:

    # Sonoff NSPanel Tasmota Lovelace UI Berry Driver | code by joBr99
    # based on;
    # Sonoff NSPanel Tasmota (Nextion with Flashing) driver | code by peepshow-21
    # based on;
    # Sonoff NSPanel Tasmota driver v0.47 | code by blakadder and s-hadinger
    
    # Example Flash
    # FlashNextion http://ip-address-of-your-homeassistant:8123/local/nspanel.tft
    # FlashNextion http://nspanel.pky.eu/lui.tft
    
    class Nextion : Driver
    
        static header = bytes('55BB')
    
        static flash_block_size = 4096
    
        var flash_mode
    	var flash_start_millis
        var flash_size
        var flash_written
        var flash_buff
        var flash_offset
        var awaiting_offset
        var tcp
        var ser
        var last_per
    	var url
    
        def split_55(b)
          var ret = []
          var s = size(b)   
          var i = s-2   # start from last-1
          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
    
        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
    
    	# encode using custom protocol 55 BB [payload length] [payload length] [payload] [crc] [crc]
        def encode(payload)
          var b = bytes()
          b += self.header
          b.add(size(payload), 2)   # add size as 2 bytes, little endian
          b += bytes().fromstring(payload)
          var msg_crc = self.crc16(b)
          b.add(msg_crc, 2)       # crc 2 bytes, little endian
          return b
        end
    
        def encodenx(payload)
            var b = bytes().fromstring(payload)
            b += bytes('FFFFFF')
            return b
        end
    
        def sendnx(payload)
            import string
            var payload_bin = self.encodenx(payload)
            self.ser.write(payload_bin)
            log(string.format("NXP: Nextion command sent = %s",str(payload_bin)), 3)       
        end
    
        def send(payload)
            var payload_bin = self.encode(payload)
            if self.flash_mode==1
                log("NXP: skipped command becuase still flashing", 3)
            else 
                self.ser.write(payload_bin)
                log("NXP: payload sent = " + str(payload_bin), 3)
            end
        end
    
        def write_to_nextion(b)
            self.ser.write(b)
        end
    
        def screeninit()
            log("NXP: Screen Initialized")
    		self.sendnx("recmod=1")		
        end
    
        def write_block()
            
            import string
            log("FLH: Read block",3)
            while size(self.flash_buff)<self.flash_block_size && self.tcp.connected()
                if self.tcp.available()>0
                    self.flash_buff += self.tcp.readbytes()
                else
                    tasmota.delay(50)
                    log("FLH: Wait for available...",3)
                end
            end
            log("FLH: Buff size "+str(size(self.flash_buff)),3)
            var to_write
            if size(self.flash_buff)>self.flash_block_size
                to_write = self.flash_buff[0..self.flash_block_size-1]
                self.flash_buff = self.flash_buff[self.flash_block_size..]
            else
                to_write = self.flash_buff
                self.flash_buff = bytes()
            end
            log("FLH: Writing "+str(size(to_write)),3)
            var per = (self.flash_written*100)/self.flash_size
            if (self.last_per!=per) 
                self.last_per = per
                tasmota.publish_result(string.format("{\"Flashing\":{\"complete\": %d, \"time_elapsed\": %d}}",per , (tasmota.millis()-self.flash_start_millis)/1000), "RESULT") 
            end
            if size(to_write)>0
                self.flash_written += size(to_write)
                self.ser.write(to_write)
            end
            log("FLH: Total "+str(self.flash_written),3)
            if (self.flash_written==self.flash_size)
                log("FLH: Flashing complete - Time elapsed: %d", (tasmota.millis()-self.flash_start_millis)/1000)
                self.flash_mode = 0
    			self.ser = nil
    			tasmota.gc()
    			self.ser = serial(17, 16, 115200, serial.SERIAL_8N1)
            end
    
        end
    
        def every_100ms()
            import string
            if self.ser.available() > 0
                var msg = self.ser.read()
                if size(msg) > 0
                    log(string.format("NXP: Received Raw = %s",str(msg)), 3)
                    if (self.flash_mode==1)
                        var strv = msg[0..-4].asstring()
                        if string.find(strv,"comok 2")>=0
                            log("FLH: Send (High Speed) flash start")
    						self.flash_start_millis = tasmota.millis()
                            #self.sendnx(string.format("whmi-wris %d,115200,res0",self.flash_size))
                            self.sendnx(string.format("whmi-wris %d,921600,res0",self.flash_size))
    						self.ser = serial(17, 16, 921600, serial.SERIAL_8N1)
                        elif size(msg)==1 && msg[0]==0x08
                            log("FLH: Waiting offset...",3)
                            self.awaiting_offset = 1
                        elif size(msg)==4 && self.awaiting_offset==1
                            self.awaiting_offset = 0
                            self.flash_offset = msg.get(0,4)
                            log("FLH: Flash offset marker "+str(self.flash_offset),3)
    						if self.flash_offset != 0
    							self.open_url_at(self.url, self.flash_offset)
    							self.flash_written = self.flash_offset
    						end
                            self.write_block()
                        elif size(msg)==1 && msg[0]==0x05
                            self.write_block()
                        else
                            log("FLH: Something has gone wrong flashing display firmware ["+str(msg)+"]",2)
                        end
                    else
                        var msg_list = self.split_55(msg)
                        for i:0..size(msg_list)-1
                            msg = msg_list[i]
                            if size(msg) > 0
                                if msg == bytes('000000FFFFFF88FFFFFF')
                                    self.screeninit()
                                elif size(msg)>=2 && msg[0]==0x55 && msg[1]==0xBB
                                    var jm = string.format("{\"CustomRecv\":\"%s\"}",msg[4..-3].asstring())
                                    tasmota.publish_result(jm, "RESULT")        
                                elif msg[0]==0x07 && size(msg)==1 # BELL/Buzzer
                                    tasmota.cmd("buzzer 1,1")
                                else
                                    var jm = string.format("{\"nextion\":\"%s\"}",str(msg[0..-4]))
                                    tasmota.publish_result(jm, "RESULT")        
                                end
                            end       
                        end
                    end
                end
            end
        end      
    
        def begin_nextion_flash()
            self.flash_written = 0
            self.awaiting_offset = 0
            self.flash_offset = 0
            self.sendnx('DRAKJHSUYDGBNCJHGJKSHBDN')
            self.sendnx('recmod=0')
            self.sendnx('recmod=0')
            self.flash_mode = 1
            self.sendnx("connect")        
        end
        
        def open_url_at(url, pos)
    		self.url = url
            import string
            var host
            var port
            var s1 = string.split(url,7)[1]
            var i = string.find(s1,":")
            var sa
            if i<0
                port = 80
                i = string.find(s1,"/")
                sa = string.split(s1,i)
                host = sa[0]
            else
                sa = string.split(s1,i)
                host = sa[0]
                s1 = string.split(sa[1],1)[1]
                i = string.find(s1,"/")
                sa = string.split(s1,i)
                port = int(sa[0])
            end
            var get = sa[1]
            log(string.format("FLH: host: %s, port: %s, get: %s",host,port,get))
            self.tcp = tcpclient()
            self.tcp.connect(host,port)
            log("FLH: Connected:"+str(self.tcp.connected()),3)
            var get_req = "GET "+get+" HTTP/1.0\r\n"
    		get_req += string.format("Range: bytes=%d-\r\n", pos)
    		get_req += string.format("HOST: %s:%s\r\n\r\n",host,port)
            self.tcp.write(get_req)
            var a = self.tcp.available()
            i = 1
            while a==0 && i<5
              tasmota.delay(100*i)
              tasmota.yield() 
              i += 1
              log("FLH: Retry "+str(i),3)
              a = self.tcp.available()
            end
            if a==0
                log("FLH: Nothing available to read!",3)
                return
            end
            var b = self.tcp.readbytes()
            i = 0
            var end_headers = false;
            var headers
            while i<size(b) && headers==nil
                if b[i..(i+3)]==bytes().fromstring("\r\n\r\n") 
                    headers = b[0..(i+3)].asstring()
                    self.flash_buff = b[(i+4)..]
                else
                    i += 1
                end
            end
            #print(headers)
    		# check http respose for code 200/206
            if string.find(headers,"200 OK")>0 || string.find(headers,"206 Partial Content")>0
                log("FLH: HTTP Respose is 200 OK or 206 Partial Content",3)
    		else
                log("FLH: HTTP Respose is not 200 OK or 206 Partial Content",3)
    			print(headers)
    			return -1
            end
    		# only set flash size if pos is zero
    		if pos == 0
    			# check http respose for content-length
    			var tag = "Content-Length: "
    			i = string.find(headers,tag)
    			if (i>0) 
    				var i2 = string.find(headers,"\r\n",i)
    				var s = headers[i+size(tag)..i2-1]
    				self.flash_size=int(s)
    			end
    			log("FLH: Flash file size: "+str(self.flash_size),3)
    		end
    
        end
    
        def flash_nextion(url)
            self.flash_size = 0
            var res = self.open_url_at(url, 0)
    		if res != -1
    			self.begin_nextion_flash()
    		end
        end
    
        def init()
            log("NXP: Initializing Driver")
            self.ser = serial(17, 16, 115200, serial.SERIAL_8N1)
            self.flash_mode = 0
        end
    
    end
    
    var nextion = Nextion()
    
    tasmota.add_driver(nextion)
    
    def get_current_version(cmd, idx, payload, payload_json)
    	import string
    	var version_of_this_script = 4
    	var jm = string.format("{\"nlui_driver_version\":\"%s\"}", version_of_this_script)
    	tasmota.publish_result(jm, "RESULT")
    end
    
    tasmota.add_cmd('GetDriverVersion', get_current_version)
    
    def update_berry_driver(cmd, idx, payload, payload_json)
    	def task()
    		import string
    		var cl = webclient()
    		cl.begin(payload)
    		var r = cl.GET()
    		if r == 200
    			print("Sucessfully downloaded nspanel-lovelace-ui berry driver")
    		else
    			print("Error while downloading nspanel-lovelace-ui berry driver")
    		end
    		r = cl.write_file("autoexec.be")
    		if r < 0
    			print("Error while writeing nspanel-lovelace-ui berry driver")
    		else
    			print("Sucessfully written nspanel-lovelace-ui berry driver")
    			var s = load('autoexec.be')
    			if s == true
    				var jm = string.format("{\"nlui_driver_update\":\"%s\"}", "succeeded")
    				tasmota.publish_result(jm, "RESULT")
    			else 
    				var jm = string.format("{\"nlui_driver_update\":\"%s\"}", "failed")
    				tasmota.publish_result(jm, "RESULT")
    			end
    			
    		end
    	end
    	tasmota.set_timer(0,task)
    	tasmota.resp_cmnd_done()
    end
    
    tasmota.add_cmd('UpdateDriverVersion', update_berry_driver)
    
    def flash_nextion(cmd, idx, payload, payload_json)
        def task()
            nextion.flash_nextion(payload)
        end
        tasmota.set_timer(0,task)
        tasmota.resp_cmnd_done()
    end
    
    def send_cmd(cmd, idx, payload, payload_json)
        nextion.sendnx(payload)
        tasmota.resp_cmnd_done()
    end
    
    def send_cmd2(cmd, idx, payload, payload_json)
        nextion.send(payload)
        tasmota.resp_cmnd_done()
    end
    
    tasmota.add_cmd('Nextion', send_cmd)
    tasmota.add_cmd('CustomSend', send_cmd2)
    tasmota.add_cmd('FlashNextion', flash_nextion)
    

    MQTT-Settings:
    cda2f93c-4ac6-4ac6-931b-621dfa4b9060-grafik.png

    Sonstige Einstellungen/Vorlage

    {"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}
    

    f7092fcf-15c4-47e7-bbbb-80637be9c156-grafik.png

    ArmilarA Offline
    ArmilarA Offline
    Armilar
    Most Active Forum Testing
    schrieb am zuletzt editiert von
    #48

    @andreas_z sagte in SONOFF NSPanel mit Lovelace UI:

    Grundsätzlich scheint etwas über MQTT anzukommen, das Schalten von POWER1 manuell über das Objekt SmartHome/NSPanel_1/cmnd/POWER funktioniert.
    Wenn ich CustomSend time~12:00 in der Konsole absende, wird aber nichts auf dem Display angezeigt.
    autexec.be:

    # Sonoff NSPanel Tasmota Lovelace UI Berry Driver | code by joBr99
    # based on;
    # Sonoff NSPanel Tasmota (Nextion with Flashing) driver | code by peepshow-21
    # based on;
    # Sonoff NSPanel Tasmota driver v0.47 | code by blakadder and s-hadinger
    
    # Example Flash
    # FlashNextion http://ip-address-of-your-homeassistant:8123/local/nspanel.tft
    # FlashNextion http://nspanel.pky.eu/lui.tft
    
    class Nextion : Driver
    
        static header = bytes('55BB')
    
        static flash_block_size = 4096
    
        var flash_mode
    	var flash_start_millis
        var flash_size
        var flash_written
        var flash_buff
        var flash_offset
        var awaiting_offset
        var tcp
        var ser
        var last_per
    	var url
    
        def split_55(b)
          var ret = []
          var s = size(b)   
          var i = s-2   # start from last-1
          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
    
        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
    
    	# encode using custom protocol 55 BB [payload length] [payload length] [payload] [crc] [crc]
        def encode(payload)
          var b = bytes()
          b += self.header
          b.add(size(payload), 2)   # add size as 2 bytes, little endian
          b += bytes().fromstring(payload)
          var msg_crc = self.crc16(b)
          b.add(msg_crc, 2)       # crc 2 bytes, little endian
          return b
        end
    
        def encodenx(payload)
            var b = bytes().fromstring(payload)
            b += bytes('FFFFFF')
            return b
        end
    
        def sendnx(payload)
            import string
            var payload_bin = self.encodenx(payload)
            self.ser.write(payload_bin)
            log(string.format("NXP: Nextion command sent = %s",str(payload_bin)), 3)       
        end
    
        def send(payload)
            var payload_bin = self.encode(payload)
            if self.flash_mode==1
                log("NXP: skipped command becuase still flashing", 3)
            else 
                self.ser.write(payload_bin)
                log("NXP: payload sent = " + str(payload_bin), 3)
            end
        end
    
        def write_to_nextion(b)
            self.ser.write(b)
        end
    
        def screeninit()
            log("NXP: Screen Initialized")
    		self.sendnx("recmod=1")		
        end
    
        def write_block()
            
            import string
            log("FLH: Read block",3)
            while size(self.flash_buff)<self.flash_block_size && self.tcp.connected()
                if self.tcp.available()>0
                    self.flash_buff += self.tcp.readbytes()
                else
                    tasmota.delay(50)
                    log("FLH: Wait for available...",3)
                end
            end
            log("FLH: Buff size "+str(size(self.flash_buff)),3)
            var to_write
            if size(self.flash_buff)>self.flash_block_size
                to_write = self.flash_buff[0..self.flash_block_size-1]
                self.flash_buff = self.flash_buff[self.flash_block_size..]
            else
                to_write = self.flash_buff
                self.flash_buff = bytes()
            end
            log("FLH: Writing "+str(size(to_write)),3)
            var per = (self.flash_written*100)/self.flash_size
            if (self.last_per!=per) 
                self.last_per = per
                tasmota.publish_result(string.format("{\"Flashing\":{\"complete\": %d, \"time_elapsed\": %d}}",per , (tasmota.millis()-self.flash_start_millis)/1000), "RESULT") 
            end
            if size(to_write)>0
                self.flash_written += size(to_write)
                self.ser.write(to_write)
            end
            log("FLH: Total "+str(self.flash_written),3)
            if (self.flash_written==self.flash_size)
                log("FLH: Flashing complete - Time elapsed: %d", (tasmota.millis()-self.flash_start_millis)/1000)
                self.flash_mode = 0
    			self.ser = nil
    			tasmota.gc()
    			self.ser = serial(17, 16, 115200, serial.SERIAL_8N1)
            end
    
        end
    
        def every_100ms()
            import string
            if self.ser.available() > 0
                var msg = self.ser.read()
                if size(msg) > 0
                    log(string.format("NXP: Received Raw = %s",str(msg)), 3)
                    if (self.flash_mode==1)
                        var strv = msg[0..-4].asstring()
                        if string.find(strv,"comok 2")>=0
                            log("FLH: Send (High Speed) flash start")
    						self.flash_start_millis = tasmota.millis()
                            #self.sendnx(string.format("whmi-wris %d,115200,res0",self.flash_size))
                            self.sendnx(string.format("whmi-wris %d,921600,res0",self.flash_size))
    						self.ser = serial(17, 16, 921600, serial.SERIAL_8N1)
                        elif size(msg)==1 && msg[0]==0x08
                            log("FLH: Waiting offset...",3)
                            self.awaiting_offset = 1
                        elif size(msg)==4 && self.awaiting_offset==1
                            self.awaiting_offset = 0
                            self.flash_offset = msg.get(0,4)
                            log("FLH: Flash offset marker "+str(self.flash_offset),3)
    						if self.flash_offset != 0
    							self.open_url_at(self.url, self.flash_offset)
    							self.flash_written = self.flash_offset
    						end
                            self.write_block()
                        elif size(msg)==1 && msg[0]==0x05
                            self.write_block()
                        else
                            log("FLH: Something has gone wrong flashing display firmware ["+str(msg)+"]",2)
                        end
                    else
                        var msg_list = self.split_55(msg)
                        for i:0..size(msg_list)-1
                            msg = msg_list[i]
                            if size(msg) > 0
                                if msg == bytes('000000FFFFFF88FFFFFF')
                                    self.screeninit()
                                elif size(msg)>=2 && msg[0]==0x55 && msg[1]==0xBB
                                    var jm = string.format("{\"CustomRecv\":\"%s\"}",msg[4..-3].asstring())
                                    tasmota.publish_result(jm, "RESULT")        
                                elif msg[0]==0x07 && size(msg)==1 # BELL/Buzzer
                                    tasmota.cmd("buzzer 1,1")
                                else
                                    var jm = string.format("{\"nextion\":\"%s\"}",str(msg[0..-4]))
                                    tasmota.publish_result(jm, "RESULT")        
                                end
                            end       
                        end
                    end
                end
            end
        end      
    
        def begin_nextion_flash()
            self.flash_written = 0
            self.awaiting_offset = 0
            self.flash_offset = 0
            self.sendnx('DRAKJHSUYDGBNCJHGJKSHBDN')
            self.sendnx('recmod=0')
            self.sendnx('recmod=0')
            self.flash_mode = 1
            self.sendnx("connect")        
        end
        
        def open_url_at(url, pos)
    		self.url = url
            import string
            var host
            var port
            var s1 = string.split(url,7)[1]
            var i = string.find(s1,":")
            var sa
            if i<0
                port = 80
                i = string.find(s1,"/")
                sa = string.split(s1,i)
                host = sa[0]
            else
                sa = string.split(s1,i)
                host = sa[0]
                s1 = string.split(sa[1],1)[1]
                i = string.find(s1,"/")
                sa = string.split(s1,i)
                port = int(sa[0])
            end
            var get = sa[1]
            log(string.format("FLH: host: %s, port: %s, get: %s",host,port,get))
            self.tcp = tcpclient()
            self.tcp.connect(host,port)
            log("FLH: Connected:"+str(self.tcp.connected()),3)
            var get_req = "GET "+get+" HTTP/1.0\r\n"
    		get_req += string.format("Range: bytes=%d-\r\n", pos)
    		get_req += string.format("HOST: %s:%s\r\n\r\n",host,port)
            self.tcp.write(get_req)
            var a = self.tcp.available()
            i = 1
            while a==0 && i<5
              tasmota.delay(100*i)
              tasmota.yield() 
              i += 1
              log("FLH: Retry "+str(i),3)
              a = self.tcp.available()
            end
            if a==0
                log("FLH: Nothing available to read!",3)
                return
            end
            var b = self.tcp.readbytes()
            i = 0
            var end_headers = false;
            var headers
            while i<size(b) && headers==nil
                if b[i..(i+3)]==bytes().fromstring("\r\n\r\n") 
                    headers = b[0..(i+3)].asstring()
                    self.flash_buff = b[(i+4)..]
                else
                    i += 1
                end
            end
            #print(headers)
    		# check http respose for code 200/206
            if string.find(headers,"200 OK")>0 || string.find(headers,"206 Partial Content")>0
                log("FLH: HTTP Respose is 200 OK or 206 Partial Content",3)
    		else
                log("FLH: HTTP Respose is not 200 OK or 206 Partial Content",3)
    			print(headers)
    			return -1
            end
    		# only set flash size if pos is zero
    		if pos == 0
    			# check http respose for content-length
    			var tag = "Content-Length: "
    			i = string.find(headers,tag)
    			if (i>0) 
    				var i2 = string.find(headers,"\r\n",i)
    				var s = headers[i+size(tag)..i2-1]
    				self.flash_size=int(s)
    			end
    			log("FLH: Flash file size: "+str(self.flash_size),3)
    		end
    
        end
    
        def flash_nextion(url)
            self.flash_size = 0
            var res = self.open_url_at(url, 0)
    		if res != -1
    			self.begin_nextion_flash()
    		end
        end
    
        def init()
            log("NXP: Initializing Driver")
            self.ser = serial(17, 16, 115200, serial.SERIAL_8N1)
            self.flash_mode = 0
        end
    
    end
    
    var nextion = Nextion()
    
    tasmota.add_driver(nextion)
    
    def get_current_version(cmd, idx, payload, payload_json)
    	import string
    	var version_of_this_script = 4
    	var jm = string.format("{\"nlui_driver_version\":\"%s\"}", version_of_this_script)
    	tasmota.publish_result(jm, "RESULT")
    end
    
    tasmota.add_cmd('GetDriverVersion', get_current_version)
    
    def update_berry_driver(cmd, idx, payload, payload_json)
    	def task()
    		import string
    		var cl = webclient()
    		cl.begin(payload)
    		var r = cl.GET()
    		if r == 200
    			print("Sucessfully downloaded nspanel-lovelace-ui berry driver")
    		else
    			print("Error while downloading nspanel-lovelace-ui berry driver")
    		end
    		r = cl.write_file("autoexec.be")
    		if r < 0
    			print("Error while writeing nspanel-lovelace-ui berry driver")
    		else
    			print("Sucessfully written nspanel-lovelace-ui berry driver")
    			var s = load('autoexec.be')
    			if s == true
    				var jm = string.format("{\"nlui_driver_update\":\"%s\"}", "succeeded")
    				tasmota.publish_result(jm, "RESULT")
    			else 
    				var jm = string.format("{\"nlui_driver_update\":\"%s\"}", "failed")
    				tasmota.publish_result(jm, "RESULT")
    			end
    			
    		end
    	end
    	tasmota.set_timer(0,task)
    	tasmota.resp_cmnd_done()
    end
    
    tasmota.add_cmd('UpdateDriverVersion', update_berry_driver)
    
    def flash_nextion(cmd, idx, payload, payload_json)
        def task()
            nextion.flash_nextion(payload)
        end
        tasmota.set_timer(0,task)
        tasmota.resp_cmnd_done()
    end
    
    def send_cmd(cmd, idx, payload, payload_json)
        nextion.sendnx(payload)
        tasmota.resp_cmnd_done()
    end
    
    def send_cmd2(cmd, idx, payload, payload_json)
        nextion.send(payload)
        tasmota.resp_cmnd_done()
    end
    
    tasmota.add_cmd('Nextion', send_cmd)
    tasmota.add_cmd('CustomSend', send_cmd2)
    tasmota.add_cmd('FlashNextion', flash_nextion)
    

    MQTT-Settings:
    cda2f93c-4ac6-4ac6-931b-621dfa4b9060-grafik.png

    Sonstige Einstellungen/Vorlage

    {"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}
    

    f7092fcf-15c4-47e7-bbbb-80637be9c156-grafik.png

    Das mqtt.1. muss in beide Richtungen kommunizieren. RESULT funktioniert. Teste es doch bitte so wie beschrieben. Deinen Mosquitto kannst du anschließend immer noch bemühen.

    Installationsanleitung, Tipps, Alias-Definitionen, FAQ für das Sonoff NSPanel mit lovelace UI unter ioBroker
    https://github.com/joBr99/nspanel-lovelace-ui/wiki

    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

    Andreas_ZA 1 Antwort Letzte Antwort
    0
    • ArmilarA Armilar

      @andreas_z sagte in SONOFF NSPanel mit Lovelace UI:

      Grundsätzlich scheint etwas über MQTT anzukommen, das Schalten von POWER1 manuell über das Objekt SmartHome/NSPanel_1/cmnd/POWER funktioniert.
      Wenn ich CustomSend time~12:00 in der Konsole absende, wird aber nichts auf dem Display angezeigt.
      autexec.be:

      # Sonoff NSPanel Tasmota Lovelace UI Berry Driver | code by joBr99
      # based on;
      # Sonoff NSPanel Tasmota (Nextion with Flashing) driver | code by peepshow-21
      # based on;
      # Sonoff NSPanel Tasmota driver v0.47 | code by blakadder and s-hadinger
      
      # Example Flash
      # FlashNextion http://ip-address-of-your-homeassistant:8123/local/nspanel.tft
      # FlashNextion http://nspanel.pky.eu/lui.tft
      
      class Nextion : Driver
      
          static header = bytes('55BB')
      
          static flash_block_size = 4096
      
          var flash_mode
      	var flash_start_millis
          var flash_size
          var flash_written
          var flash_buff
          var flash_offset
          var awaiting_offset
          var tcp
          var ser
          var last_per
      	var url
      
          def split_55(b)
            var ret = []
            var s = size(b)   
            var i = s-2   # start from last-1
            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
      
          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
      
      	# encode using custom protocol 55 BB [payload length] [payload length] [payload] [crc] [crc]
          def encode(payload)
            var b = bytes()
            b += self.header
            b.add(size(payload), 2)   # add size as 2 bytes, little endian
            b += bytes().fromstring(payload)
            var msg_crc = self.crc16(b)
            b.add(msg_crc, 2)       # crc 2 bytes, little endian
            return b
          end
      
          def encodenx(payload)
              var b = bytes().fromstring(payload)
              b += bytes('FFFFFF')
              return b
          end
      
          def sendnx(payload)
              import string
              var payload_bin = self.encodenx(payload)
              self.ser.write(payload_bin)
              log(string.format("NXP: Nextion command sent = %s",str(payload_bin)), 3)       
          end
      
          def send(payload)
              var payload_bin = self.encode(payload)
              if self.flash_mode==1
                  log("NXP: skipped command becuase still flashing", 3)
              else 
                  self.ser.write(payload_bin)
                  log("NXP: payload sent = " + str(payload_bin), 3)
              end
          end
      
          def write_to_nextion(b)
              self.ser.write(b)
          end
      
          def screeninit()
              log("NXP: Screen Initialized")
      		self.sendnx("recmod=1")		
          end
      
          def write_block()
              
              import string
              log("FLH: Read block",3)
              while size(self.flash_buff)<self.flash_block_size && self.tcp.connected()
                  if self.tcp.available()>0
                      self.flash_buff += self.tcp.readbytes()
                  else
                      tasmota.delay(50)
                      log("FLH: Wait for available...",3)
                  end
              end
              log("FLH: Buff size "+str(size(self.flash_buff)),3)
              var to_write
              if size(self.flash_buff)>self.flash_block_size
                  to_write = self.flash_buff[0..self.flash_block_size-1]
                  self.flash_buff = self.flash_buff[self.flash_block_size..]
              else
                  to_write = self.flash_buff
                  self.flash_buff = bytes()
              end
              log("FLH: Writing "+str(size(to_write)),3)
              var per = (self.flash_written*100)/self.flash_size
              if (self.last_per!=per) 
                  self.last_per = per
                  tasmota.publish_result(string.format("{\"Flashing\":{\"complete\": %d, \"time_elapsed\": %d}}",per , (tasmota.millis()-self.flash_start_millis)/1000), "RESULT") 
              end
              if size(to_write)>0
                  self.flash_written += size(to_write)
                  self.ser.write(to_write)
              end
              log("FLH: Total "+str(self.flash_written),3)
              if (self.flash_written==self.flash_size)
                  log("FLH: Flashing complete - Time elapsed: %d", (tasmota.millis()-self.flash_start_millis)/1000)
                  self.flash_mode = 0
      			self.ser = nil
      			tasmota.gc()
      			self.ser = serial(17, 16, 115200, serial.SERIAL_8N1)
              end
      
          end
      
          def every_100ms()
              import string
              if self.ser.available() > 0
                  var msg = self.ser.read()
                  if size(msg) > 0
                      log(string.format("NXP: Received Raw = %s",str(msg)), 3)
                      if (self.flash_mode==1)
                          var strv = msg[0..-4].asstring()
                          if string.find(strv,"comok 2")>=0
                              log("FLH: Send (High Speed) flash start")
      						self.flash_start_millis = tasmota.millis()
                              #self.sendnx(string.format("whmi-wris %d,115200,res0",self.flash_size))
                              self.sendnx(string.format("whmi-wris %d,921600,res0",self.flash_size))
      						self.ser = serial(17, 16, 921600, serial.SERIAL_8N1)
                          elif size(msg)==1 && msg[0]==0x08
                              log("FLH: Waiting offset...",3)
                              self.awaiting_offset = 1
                          elif size(msg)==4 && self.awaiting_offset==1
                              self.awaiting_offset = 0
                              self.flash_offset = msg.get(0,4)
                              log("FLH: Flash offset marker "+str(self.flash_offset),3)
      						if self.flash_offset != 0
      							self.open_url_at(self.url, self.flash_offset)
      							self.flash_written = self.flash_offset
      						end
                              self.write_block()
                          elif size(msg)==1 && msg[0]==0x05
                              self.write_block()
                          else
                              log("FLH: Something has gone wrong flashing display firmware ["+str(msg)+"]",2)
                          end
                      else
                          var msg_list = self.split_55(msg)
                          for i:0..size(msg_list)-1
                              msg = msg_list[i]
                              if size(msg) > 0
                                  if msg == bytes('000000FFFFFF88FFFFFF')
                                      self.screeninit()
                                  elif size(msg)>=2 && msg[0]==0x55 && msg[1]==0xBB
                                      var jm = string.format("{\"CustomRecv\":\"%s\"}",msg[4..-3].asstring())
                                      tasmota.publish_result(jm, "RESULT")        
                                  elif msg[0]==0x07 && size(msg)==1 # BELL/Buzzer
                                      tasmota.cmd("buzzer 1,1")
                                  else
                                      var jm = string.format("{\"nextion\":\"%s\"}",str(msg[0..-4]))
                                      tasmota.publish_result(jm, "RESULT")        
                                  end
                              end       
                          end
                      end
                  end
              end
          end      
      
          def begin_nextion_flash()
              self.flash_written = 0
              self.awaiting_offset = 0
              self.flash_offset = 0
              self.sendnx('DRAKJHSUYDGBNCJHGJKSHBDN')
              self.sendnx('recmod=0')
              self.sendnx('recmod=0')
              self.flash_mode = 1
              self.sendnx("connect")        
          end
          
          def open_url_at(url, pos)
      		self.url = url
              import string
              var host
              var port
              var s1 = string.split(url,7)[1]
              var i = string.find(s1,":")
              var sa
              if i<0
                  port = 80
                  i = string.find(s1,"/")
                  sa = string.split(s1,i)
                  host = sa[0]
              else
                  sa = string.split(s1,i)
                  host = sa[0]
                  s1 = string.split(sa[1],1)[1]
                  i = string.find(s1,"/")
                  sa = string.split(s1,i)
                  port = int(sa[0])
              end
              var get = sa[1]
              log(string.format("FLH: host: %s, port: %s, get: %s",host,port,get))
              self.tcp = tcpclient()
              self.tcp.connect(host,port)
              log("FLH: Connected:"+str(self.tcp.connected()),3)
              var get_req = "GET "+get+" HTTP/1.0\r\n"
      		get_req += string.format("Range: bytes=%d-\r\n", pos)
      		get_req += string.format("HOST: %s:%s\r\n\r\n",host,port)
              self.tcp.write(get_req)
              var a = self.tcp.available()
              i = 1
              while a==0 && i<5
                tasmota.delay(100*i)
                tasmota.yield() 
                i += 1
                log("FLH: Retry "+str(i),3)
                a = self.tcp.available()
              end
              if a==0
                  log("FLH: Nothing available to read!",3)
                  return
              end
              var b = self.tcp.readbytes()
              i = 0
              var end_headers = false;
              var headers
              while i<size(b) && headers==nil
                  if b[i..(i+3)]==bytes().fromstring("\r\n\r\n") 
                      headers = b[0..(i+3)].asstring()
                      self.flash_buff = b[(i+4)..]
                  else
                      i += 1
                  end
              end
              #print(headers)
      		# check http respose for code 200/206
              if string.find(headers,"200 OK")>0 || string.find(headers,"206 Partial Content")>0
                  log("FLH: HTTP Respose is 200 OK or 206 Partial Content",3)
      		else
                  log("FLH: HTTP Respose is not 200 OK or 206 Partial Content",3)
      			print(headers)
      			return -1
              end
      		# only set flash size if pos is zero
      		if pos == 0
      			# check http respose for content-length
      			var tag = "Content-Length: "
      			i = string.find(headers,tag)
      			if (i>0) 
      				var i2 = string.find(headers,"\r\n",i)
      				var s = headers[i+size(tag)..i2-1]
      				self.flash_size=int(s)
      			end
      			log("FLH: Flash file size: "+str(self.flash_size),3)
      		end
      
          end
      
          def flash_nextion(url)
              self.flash_size = 0
              var res = self.open_url_at(url, 0)
      		if res != -1
      			self.begin_nextion_flash()
      		end
          end
      
          def init()
              log("NXP: Initializing Driver")
              self.ser = serial(17, 16, 115200, serial.SERIAL_8N1)
              self.flash_mode = 0
          end
      
      end
      
      var nextion = Nextion()
      
      tasmota.add_driver(nextion)
      
      def get_current_version(cmd, idx, payload, payload_json)
      	import string
      	var version_of_this_script = 4
      	var jm = string.format("{\"nlui_driver_version\":\"%s\"}", version_of_this_script)
      	tasmota.publish_result(jm, "RESULT")
      end
      
      tasmota.add_cmd('GetDriverVersion', get_current_version)
      
      def update_berry_driver(cmd, idx, payload, payload_json)
      	def task()
      		import string
      		var cl = webclient()
      		cl.begin(payload)
      		var r = cl.GET()
      		if r == 200
      			print("Sucessfully downloaded nspanel-lovelace-ui berry driver")
      		else
      			print("Error while downloading nspanel-lovelace-ui berry driver")
      		end
      		r = cl.write_file("autoexec.be")
      		if r < 0
      			print("Error while writeing nspanel-lovelace-ui berry driver")
      		else
      			print("Sucessfully written nspanel-lovelace-ui berry driver")
      			var s = load('autoexec.be')
      			if s == true
      				var jm = string.format("{\"nlui_driver_update\":\"%s\"}", "succeeded")
      				tasmota.publish_result(jm, "RESULT")
      			else 
      				var jm = string.format("{\"nlui_driver_update\":\"%s\"}", "failed")
      				tasmota.publish_result(jm, "RESULT")
      			end
      			
      		end
      	end
      	tasmota.set_timer(0,task)
      	tasmota.resp_cmnd_done()
      end
      
      tasmota.add_cmd('UpdateDriverVersion', update_berry_driver)
      
      def flash_nextion(cmd, idx, payload, payload_json)
          def task()
              nextion.flash_nextion(payload)
          end
          tasmota.set_timer(0,task)
          tasmota.resp_cmnd_done()
      end
      
      def send_cmd(cmd, idx, payload, payload_json)
          nextion.sendnx(payload)
          tasmota.resp_cmnd_done()
      end
      
      def send_cmd2(cmd, idx, payload, payload_json)
          nextion.send(payload)
          tasmota.resp_cmnd_done()
      end
      
      tasmota.add_cmd('Nextion', send_cmd)
      tasmota.add_cmd('CustomSend', send_cmd2)
      tasmota.add_cmd('FlashNextion', flash_nextion)
      

      MQTT-Settings:
      cda2f93c-4ac6-4ac6-931b-621dfa4b9060-grafik.png

      Sonstige Einstellungen/Vorlage

      {"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}
      

      f7092fcf-15c4-47e7-bbbb-80637be9c156-grafik.png

      Das mqtt.1. muss in beide Richtungen kommunizieren. RESULT funktioniert. Teste es doch bitte so wie beschrieben. Deinen Mosquitto kannst du anschließend immer noch bemühen.

      Andreas_ZA Offline
      Andreas_ZA Offline
      Andreas_Z
      schrieb am zuletzt editiert von
      #49

      @armilar
      Habe ich, MQTT.2 ist als Server (mit anderem Port) konfiguriert und identischem Resultat, es wird nichts auf dem Display angezeigt:

      mqtt.2	2022-09-23 19:32:17.692	info	Client [NSPanel_1] publishOnSubscribe send all known states
      mqtt.2	2022-09-23 19:32:17.691	info	Client [NSPanel_1] publishOnSubscribe send all known states
      mqtt.2	2022-09-23 19:32:17.689	info	Client [NSPanel_1] publishOnSubscribe send all known states
      mqtt.2	2022-09-23 19:32:17.492	info	Client [NSPanel_1] subscribes on "cmnd/NSPanel_1_fb/#" with regex /^mqtt\.2\.cmnd\.NSPanel_1_fb(\..*)?/
      mqtt.2	2022-09-23 19:32:17.492	info	Client [NSPanel_1] subscribes on "cmnd/NSPanel_1_fb/#" with regex /^cmnd\.NSPanel_1_fb(\..*)?/
      mqtt.2	2022-09-23 19:32:17.491	info	Client [NSPanel_1] subscribes on "SmartHome/tasmotas/cmnd/#" with regex /^mqtt\.2\.SmartHome\.tasmotas\.cmnd(\..*)?/
      mqtt.2	2022-09-23 19:32:17.490	info	Client [NSPanel_1] subscribes on "SmartHome/tasmotas/cmnd/#" with regex /^SmartHome\.tasmotas\.cmnd(\..*)?/
      mqtt.2	2022-09-23 19:32:17.489	info	Client [NSPanel_1] subscribes on "SmartHome/NSPanel_1/cmnd/#" with regex /^mqtt\.2\.SmartHome\.NSPanel_1\.cmnd(\..*)?/
      mqtt.2	2022-09-23 19:32:17.489	info	Client [NSPanel_1] subscribes on "SmartHome/NSPanel_1/cmnd/#" with regex /^SmartHome\.NSPanel_1\.cmnd(\..*)?/
      mqtt.2	2022-09-23 19:32:17.454	info	Client [NSPanel_1] connected with secret 1663954337450_1441
      mqtt.2	2022-09-23 19:32:07.977	info	Client [NSPanel_1] connection closed: closed
      javascript.0	2022-09-23 19:30:27.658	info	script.js.common.NSPanel_1: registered 12 subscriptions, 6 schedules, 0 messages, 0 logs and 0 file subscriptions
      javascript.0	2022-09-23 19:30:27.636	info	script.js.common.NSPanel_1: TypeScript compilation successful
      javascript.0	2022-09-23 19:30:25.964	info	script.js.common.NSPanel_1: compiling TypeScript source...
      javascript.0	2022-09-23 19:30:25.924	debug	File /home/Javascript/common/NSPanel_1.ts change
      javascript.0	2022-09-23 19:30:25.924	info	Stop script script.js.common.NSPanel_1
      javascript.0	2022-09-23 19:30:25.917	debug	Update /home/Javascript/common/NSPanel_1.ts on disk
      

      Werte im Script habe ich auf MQTT.2 geändert gehabt.

      ArmilarA 1 Antwort Letzte Antwort
      0
      • Andreas_ZA Andreas_Z

        @armilar
        Habe ich, MQTT.2 ist als Server (mit anderem Port) konfiguriert und identischem Resultat, es wird nichts auf dem Display angezeigt:

        mqtt.2	2022-09-23 19:32:17.692	info	Client [NSPanel_1] publishOnSubscribe send all known states
        mqtt.2	2022-09-23 19:32:17.691	info	Client [NSPanel_1] publishOnSubscribe send all known states
        mqtt.2	2022-09-23 19:32:17.689	info	Client [NSPanel_1] publishOnSubscribe send all known states
        mqtt.2	2022-09-23 19:32:17.492	info	Client [NSPanel_1] subscribes on "cmnd/NSPanel_1_fb/#" with regex /^mqtt\.2\.cmnd\.NSPanel_1_fb(\..*)?/
        mqtt.2	2022-09-23 19:32:17.492	info	Client [NSPanel_1] subscribes on "cmnd/NSPanel_1_fb/#" with regex /^cmnd\.NSPanel_1_fb(\..*)?/
        mqtt.2	2022-09-23 19:32:17.491	info	Client [NSPanel_1] subscribes on "SmartHome/tasmotas/cmnd/#" with regex /^mqtt\.2\.SmartHome\.tasmotas\.cmnd(\..*)?/
        mqtt.2	2022-09-23 19:32:17.490	info	Client [NSPanel_1] subscribes on "SmartHome/tasmotas/cmnd/#" with regex /^SmartHome\.tasmotas\.cmnd(\..*)?/
        mqtt.2	2022-09-23 19:32:17.489	info	Client [NSPanel_1] subscribes on "SmartHome/NSPanel_1/cmnd/#" with regex /^mqtt\.2\.SmartHome\.NSPanel_1\.cmnd(\..*)?/
        mqtt.2	2022-09-23 19:32:17.489	info	Client [NSPanel_1] subscribes on "SmartHome/NSPanel_1/cmnd/#" with regex /^SmartHome\.NSPanel_1\.cmnd(\..*)?/
        mqtt.2	2022-09-23 19:32:17.454	info	Client [NSPanel_1] connected with secret 1663954337450_1441
        mqtt.2	2022-09-23 19:32:07.977	info	Client [NSPanel_1] connection closed: closed
        javascript.0	2022-09-23 19:30:27.658	info	script.js.common.NSPanel_1: registered 12 subscriptions, 6 schedules, 0 messages, 0 logs and 0 file subscriptions
        javascript.0	2022-09-23 19:30:27.636	info	script.js.common.NSPanel_1: TypeScript compilation successful
        javascript.0	2022-09-23 19:30:25.964	info	script.js.common.NSPanel_1: compiling TypeScript source...
        javascript.0	2022-09-23 19:30:25.924	debug	File /home/Javascript/common/NSPanel_1.ts change
        javascript.0	2022-09-23 19:30:25.924	info	Stop script script.js.common.NSPanel_1
        javascript.0	2022-09-23 19:30:25.917	debug	Update /home/Javascript/common/NSPanel_1.ts on disk
        

        Werte im Script habe ich auf MQTT.2 geändert gehabt.

        ArmilarA Offline
        ArmilarA Offline
        Armilar
        Most Active Forum Testing
        schrieb am zuletzt editiert von
        #50

        @andreas_z sagte in SONOFF NSPanel mit Lovelace UI:

        @armilar
        Habe ich, MQTT.2 ist als Server (mit anderem Port) konfiguriert und identischem Resultat, es wird nichts auf dem Display angezeigt:

        mqtt.2	2022-09-23 19:32:17.692	info	Client [NSPanel_1] publishOnSubscribe send all known states
        mqtt.2	2022-09-23 19:32:17.691	info	Client [NSPanel_1] publishOnSubscribe send all known states
        mqtt.2	2022-09-23 19:32:17.689	info	Client [NSPanel_1] publishOnSubscribe send all known states
        mqtt.2	2022-09-23 19:32:17.492	info	Client [NSPanel_1] subscribes on "cmnd/NSPanel_1_fb/#" with regex /^mqtt\.2\.cmnd\.NSPanel_1_fb(\..*)?/
        mqtt.2	2022-09-23 19:32:17.492	info	Client [NSPanel_1] subscribes on "cmnd/NSPanel_1_fb/#" with regex /^cmnd\.NSPanel_1_fb(\..*)?/
        mqtt.2	2022-09-23 19:32:17.491	info	Client [NSPanel_1] subscribes on "SmartHome/tasmotas/cmnd/#" with regex /^mqtt\.2\.SmartHome\.tasmotas\.cmnd(\..*)?/
        mqtt.2	2022-09-23 19:32:17.490	info	Client [NSPanel_1] subscribes on "SmartHome/tasmotas/cmnd/#" with regex /^SmartHome\.tasmotas\.cmnd(\..*)?/
        mqtt.2	2022-09-23 19:32:17.489	info	Client [NSPanel_1] subscribes on "SmartHome/NSPanel_1/cmnd/#" with regex /^mqtt\.2\.SmartHome\.NSPanel_1\.cmnd(\..*)?/
        mqtt.2	2022-09-23 19:32:17.489	info	Client [NSPanel_1] subscribes on "SmartHome/NSPanel_1/cmnd/#" with regex /^SmartHome\.NSPanel_1\.cmnd(\..*)?/
        mqtt.2	2022-09-23 19:32:17.454	info	Client [NSPanel_1] connected with secret 1663954337450_1441
        mqtt.2	2022-09-23 19:32:07.977	info	Client [NSPanel_1] connection closed: closed
        javascript.0	2022-09-23 19:30:27.658	info	script.js.common.NSPanel_1: registered 12 subscriptions, 6 schedules, 0 messages, 0 logs and 0 file subscriptions
        javascript.0	2022-09-23 19:30:27.636	info	script.js.common.NSPanel_1: TypeScript compilation successful
        javascript.0	2022-09-23 19:30:25.964	info	script.js.common.NSPanel_1: compiling TypeScript source...
        javascript.0	2022-09-23 19:30:25.924	debug	File /home/Javascript/common/NSPanel_1.ts change
        javascript.0	2022-09-23 19:30:25.924	info	Stop script script.js.common.NSPanel_1
        javascript.0	2022-09-23 19:30:25.917	debug	Update /home/Javascript/common/NSPanel_1.ts on disk
        

        Werte im Script habe ich auf MQTT.2 geändert gehabt.

        So und jetzt bitte mal die mqtt-Einstellungen aus dem mqtt.2. und aus Tasmota posten. Ich denke wir finden den Fehler noch

        Installationsanleitung, Tipps, Alias-Definitionen, FAQ für das Sonoff NSPanel mit lovelace UI unter ioBroker
        https://github.com/joBr99/nspanel-lovelace-ui/wiki

        Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

        Andreas_ZA 1 Antwort Letzte Antwort
        0
        • ArmilarA Armilar

          @andreas_z sagte in SONOFF NSPanel mit Lovelace UI:

          @armilar
          Habe ich, MQTT.2 ist als Server (mit anderem Port) konfiguriert und identischem Resultat, es wird nichts auf dem Display angezeigt:

          mqtt.2	2022-09-23 19:32:17.692	info	Client [NSPanel_1] publishOnSubscribe send all known states
          mqtt.2	2022-09-23 19:32:17.691	info	Client [NSPanel_1] publishOnSubscribe send all known states
          mqtt.2	2022-09-23 19:32:17.689	info	Client [NSPanel_1] publishOnSubscribe send all known states
          mqtt.2	2022-09-23 19:32:17.492	info	Client [NSPanel_1] subscribes on "cmnd/NSPanel_1_fb/#" with regex /^mqtt\.2\.cmnd\.NSPanel_1_fb(\..*)?/
          mqtt.2	2022-09-23 19:32:17.492	info	Client [NSPanel_1] subscribes on "cmnd/NSPanel_1_fb/#" with regex /^cmnd\.NSPanel_1_fb(\..*)?/
          mqtt.2	2022-09-23 19:32:17.491	info	Client [NSPanel_1] subscribes on "SmartHome/tasmotas/cmnd/#" with regex /^mqtt\.2\.SmartHome\.tasmotas\.cmnd(\..*)?/
          mqtt.2	2022-09-23 19:32:17.490	info	Client [NSPanel_1] subscribes on "SmartHome/tasmotas/cmnd/#" with regex /^SmartHome\.tasmotas\.cmnd(\..*)?/
          mqtt.2	2022-09-23 19:32:17.489	info	Client [NSPanel_1] subscribes on "SmartHome/NSPanel_1/cmnd/#" with regex /^mqtt\.2\.SmartHome\.NSPanel_1\.cmnd(\..*)?/
          mqtt.2	2022-09-23 19:32:17.489	info	Client [NSPanel_1] subscribes on "SmartHome/NSPanel_1/cmnd/#" with regex /^SmartHome\.NSPanel_1\.cmnd(\..*)?/
          mqtt.2	2022-09-23 19:32:17.454	info	Client [NSPanel_1] connected with secret 1663954337450_1441
          mqtt.2	2022-09-23 19:32:07.977	info	Client [NSPanel_1] connection closed: closed
          javascript.0	2022-09-23 19:30:27.658	info	script.js.common.NSPanel_1: registered 12 subscriptions, 6 schedules, 0 messages, 0 logs and 0 file subscriptions
          javascript.0	2022-09-23 19:30:27.636	info	script.js.common.NSPanel_1: TypeScript compilation successful
          javascript.0	2022-09-23 19:30:25.964	info	script.js.common.NSPanel_1: compiling TypeScript source...
          javascript.0	2022-09-23 19:30:25.924	debug	File /home/Javascript/common/NSPanel_1.ts change
          javascript.0	2022-09-23 19:30:25.924	info	Stop script script.js.common.NSPanel_1
          javascript.0	2022-09-23 19:30:25.917	debug	Update /home/Javascript/common/NSPanel_1.ts on disk
          

          Werte im Script habe ich auf MQTT.2 geändert gehabt.

          So und jetzt bitte mal die mqtt-Einstellungen aus dem mqtt.2. und aus Tasmota posten. Ich denke wir finden den Fehler noch

          Andreas_ZA Offline
          Andreas_ZA Offline
          Andreas_Z
          schrieb am zuletzt editiert von
          #51

          @armilar
          e1652012-6fd2-438d-abc2-f94ba4e0970a-grafik.png
          2ce24076-bdd3-4220-9366-35967ae6130a-grafik.png
          478e3ba9-2c46-4b93-a3fd-70d8e8ecfa30-grafik.png

          By the way, Respekt und dank für deine Geduld 👍

          ArmilarA 1 Antwort Letzte Antwort
          0
          • Andreas_ZA Andreas_Z

            @armilar
            e1652012-6fd2-438d-abc2-f94ba4e0970a-grafik.png
            2ce24076-bdd3-4220-9366-35967ae6130a-grafik.png
            478e3ba9-2c46-4b93-a3fd-70d8e8ecfa30-grafik.png

            By the way, Respekt und dank für deine Geduld 👍

            ArmilarA Offline
            ArmilarA Offline
            Armilar
            Most Active Forum Testing
            schrieb am zuletzt editiert von Armilar
            #52

            @andreas_z sagte in SONOFF NSPanel mit Lovelace UI:

            @armilar
            e1652012-6fd2-438d-abc2-f94ba4e0970a-grafik.png
            2ce24076-bdd3-4220-9366-35967ae6130a-grafik.png
            478e3ba9-2c46-4b93-a3fd-70d8e8ecfa30-grafik.png

            By the way, Respekt und dank für deine Geduld 👍

            Denke ich habe was ... Bitte nach und nach..

            Haken "unbedingt" raus... und raus lassen
            7a55f046-e18d-44c5-9bcc-475e50ee9de9-image.png

            Haken rein...
            492d66f8-8230-41d1-b9fc-3f8b45d39268-image.png

            Setze mal höher
            83b9a637-c580-4d5d-bbe9-7b589d19d940-image.png

            Wärst so ziemlich der erste bei dem es nicht funktioniert. Können wir irgendwie nicht auf uns sitzen lassen... 😉

            und zum Schluss noch die beiden Zeilen aktualisieren, falls noch nicht geschehen...

                panelRecvTopic: 'mqtt.2.SmartHome.NSPanel_1.tele.RESULT',       // anpassen
                panelSendTopic: 'mqtt.2.SmartHome.NSPanel_1.cmnd.CustomSend',   // anpassen
            

            Installationsanleitung, Tipps, Alias-Definitionen, FAQ für das Sonoff NSPanel mit lovelace UI unter ioBroker
            https://github.com/joBr99/nspanel-lovelace-ui/wiki

            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

            Andreas_ZA 1 Antwort Letzte Antwort
            0
            • ArmilarA Armilar

              @andreas_z sagte in SONOFF NSPanel mit Lovelace UI:

              @armilar
              e1652012-6fd2-438d-abc2-f94ba4e0970a-grafik.png
              2ce24076-bdd3-4220-9366-35967ae6130a-grafik.png
              478e3ba9-2c46-4b93-a3fd-70d8e8ecfa30-grafik.png

              By the way, Respekt und dank für deine Geduld 👍

              Denke ich habe was ... Bitte nach und nach..

              Haken "unbedingt" raus... und raus lassen
              7a55f046-e18d-44c5-9bcc-475e50ee9de9-image.png

              Haken rein...
              492d66f8-8230-41d1-b9fc-3f8b45d39268-image.png

              Setze mal höher
              83b9a637-c580-4d5d-bbe9-7b589d19d940-image.png

              Wärst so ziemlich der erste bei dem es nicht funktioniert. Können wir irgendwie nicht auf uns sitzen lassen... 😉

              und zum Schluss noch die beiden Zeilen aktualisieren, falls noch nicht geschehen...

                  panelRecvTopic: 'mqtt.2.SmartHome.NSPanel_1.tele.RESULT',       // anpassen
                  panelSendTopic: 'mqtt.2.SmartHome.NSPanel_1.cmnd.CustomSend',   // anpassen
              
              Andreas_ZA Offline
              Andreas_ZA Offline
              Andreas_Z
              schrieb am zuletzt editiert von
              #53

              @armilar Alles Umgesetzt, ohne Erfolg, was aber bisher immer passiert (Mit Mosqitto und über Iobroker Intern MQTT), wenn ich das Script neu gestartet oder geändert habe, das "This is taking longer ....." verschwindet für einen Moment und erscheint danach wieder, also scheint es ja doch eine Gewisse Kommunikation zu geben

              ArmilarA K 2 Antworten Letzte Antwort
              0
              • Andreas_ZA Andreas_Z

                @armilar Alles Umgesetzt, ohne Erfolg, was aber bisher immer passiert (Mit Mosqitto und über Iobroker Intern MQTT), wenn ich das Script neu gestartet oder geändert habe, das "This is taking longer ....." verschwindet für einen Moment und erscheint danach wieder, also scheint es ja doch eine Gewisse Kommunikation zu geben

                ArmilarA Offline
                ArmilarA Offline
                Armilar
                Most Active Forum Testing
                schrieb am zuletzt editiert von
                #54

                @andreas_z sagte in SONOFF NSPanel mit Lovelace UI:

                @armilar Alles Umgesetzt, ohne Erfolg, was aber bisher immer passiert (Mit Mosqitto und über Iobroker Intern MQTT), wenn ich das Script neu gestartet oder geändert habe, das "This is taking longer ....." verschwindet für einen Moment und erscheint danach wieder, also scheint es ja doch eine Gewisse Kommunikation zu geben

                Okay ich gebe auf. Kannst noch mal versuchen die IP im Broker auf den Server zusetzten und beide Kisten iobroker und Panel durchstarten. Mehr geht eigentlich nicht...

                Installationsanleitung, Tipps, Alias-Definitionen, FAQ für das Sonoff NSPanel mit lovelace UI unter ioBroker
                https://github.com/joBr99/nspanel-lovelace-ui/wiki

                Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                1 Antwort Letzte Antwort
                0
                • K Kuckuckmann

                  Hallo Community,

                  wir haben viel zeit und Getippsel investiert und unserer Wiki ein bissel Glanz und Struktur gegönnt.
                  Ja, wir wissen wir sind am Anfang und eine Wiki ist ja bekanntlich nie zu Ende, bzw. lebt von dem was wir alle noch hinzufügen werden.

                  --> ZUR WIKI <--

                  Neben dem alten klassischen Menü, welches man noch aufklappen kann, gibt es jetzt links ein neues hübsches Menü, welches Euch mit einem kurzen Blick&Klick in den richtigen Bereich führt.
                  Am unteren Ende einer Seite gibt es einen "nach oben Scroll Button".

                  Wir hoffen, die neue Struktur hilft Euch in der Zukunft euch noch besser zurecht zu finden.

                  Viel Spaß 🙂

                  Euer NSPanel LUI Team 🙂

                  ArmilarA Offline
                  ArmilarA Offline
                  Armilar
                  Most Active Forum Testing
                  schrieb am zuletzt editiert von Armilar
                  #55

                  @kuckuckmann (nur für deine Tests)

                  Installationsanleitung, Tipps, Alias-Definitionen, FAQ für das Sonoff NSPanel mit lovelace UI unter ioBroker
                  https://github.com/joBr99/nspanel-lovelace-ui/wiki

                  Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                  1 Antwort Letzte Antwort
                  0
                  • Andreas_ZA Andreas_Z

                    @armilar Alles Umgesetzt, ohne Erfolg, was aber bisher immer passiert (Mit Mosqitto und über Iobroker Intern MQTT), wenn ich das Script neu gestartet oder geändert habe, das "This is taking longer ....." verschwindet für einen Moment und erscheint danach wieder, also scheint es ja doch eine Gewisse Kommunikation zu geben

                    K Offline
                    K Offline
                    Kuckuckmann
                    schrieb am zuletzt editiert von
                    #56

                    @andreas_z
                    Hi Andreas,

                    was ich bei dem ganzen vermisse, ist die Bestätigung, dass CustomSend funktioniert.
                    Da ich gerade selbst damit zu kämpfen hatte, stell bitte sicher, dass der entweder aus der Tasmota Konsole oder dem Mosquitto Explorer so wie in der Anleitung im Wiki auch passiert. Ich könnte mir vorstellen, dass dies die Lösung ist.

                    LG

                    NSPanel Dokumentation im GitHub Wiki:

                    https://github.com/joBr99/nspanel-lovelace-ui/wiki

                    Andreas_ZA 1 Antwort Letzte Antwort
                    0
                    • K Kuckuckmann

                      @andreas_z
                      Hi Andreas,

                      was ich bei dem ganzen vermisse, ist die Bestätigung, dass CustomSend funktioniert.
                      Da ich gerade selbst damit zu kämpfen hatte, stell bitte sicher, dass der entweder aus der Tasmota Konsole oder dem Mosquitto Explorer so wie in der Anleitung im Wiki auch passiert. Ich könnte mir vorstellen, dass dies die Lösung ist.

                      LG

                      Andreas_ZA Offline
                      Andreas_ZA Offline
                      Andreas_Z
                      schrieb am zuletzt editiert von
                      #57

                      @kuckuckmann

                      Er funktioniert leider nicht mal aus der Konsole raus
                      20:23:10.191 CMD: CustomSend time~12:00
                      20:23:10.216 MQT: SmartHome/tasmota_E7EFAC/stat/RESULT = {"CustomSend":"Done"}
                      20:23:13.604 MQT: SmartHome/tasmota_E7EFAC/tele/RESULT = {"CustomRecv":"event,startup,42,eu"}

                      Es wird nichts auf dem Display angezeigt. Zwischenzeitlich habe ich noch einmal bei 0 Angefangen und komplett neu geflasht und konfiguriert, leider mit dem selben Ergebnis.

                      K 1 Antwort Letzte Antwort
                      0
                      • Andreas_ZA Andreas_Z

                        @kuckuckmann

                        Er funktioniert leider nicht mal aus der Konsole raus
                        20:23:10.191 CMD: CustomSend time~12:00
                        20:23:10.216 MQT: SmartHome/tasmota_E7EFAC/stat/RESULT = {"CustomSend":"Done"}
                        20:23:13.604 MQT: SmartHome/tasmota_E7EFAC/tele/RESULT = {"CustomRecv":"event,startup,42,eu"}

                        Es wird nichts auf dem Display angezeigt. Zwischenzeitlich habe ich noch einmal bei 0 Angefangen und komplett neu geflasht und konfiguriert, leider mit dem selben Ergebnis.

                        K Offline
                        K Offline
                        Kuckuckmann
                        schrieb am zuletzt editiert von
                        #58

                        @andreas_z
                        Hast Du es via Mosquitto probiert?

                        NSPanel Dokumentation im GitHub Wiki:

                        https://github.com/joBr99/nspanel-lovelace-ui/wiki

                        Andreas_ZA 1 Antwort Letzte Antwort
                        0
                        • K Kuckuckmann

                          @andreas_z
                          Hast Du es via Mosquitto probiert?

                          Andreas_ZA Offline
                          Andreas_ZA Offline
                          Andreas_Z
                          schrieb am zuletzt editiert von
                          #59

                          @kuckuckmann
                          Aus der Konsole, über Iobroker, mit MQTT-Explorer, das blö.... Display hat keine Lust etwas anzuzeigen, außer "Waiting for content"

                          K 1 Antwort Letzte Antwort
                          0
                          • Andreas_ZA Andreas_Z

                            @kuckuckmann
                            Aus der Konsole, über Iobroker, mit MQTT-Explorer, das blö.... Display hat keine Lust etwas anzuzeigen, außer "Waiting for content"

                            K Offline
                            K Offline
                            Kuckuckmann
                            schrieb am zuletzt editiert von
                            #60

                            @andreas_z
                            CMD: CustomSend time~12:00 <--- hat das einen aktuellen Zeitstempel?

                            NSPanel Dokumentation im GitHub Wiki:

                            https://github.com/joBr99/nspanel-lovelace-ui/wiki

                            Andreas_ZA 1 Antwort Letzte Antwort
                            0
                            • S Skatbert

                              @jobr99 Eine 4. Seite eingebaut, Ergebnis ist gleich, man kann nur eine Seite blättern, egal welche Richtung. Weiter geht es nur mit Zwischenschritt über die Detailseite eines Schalters.

                              Erinnert mich irgendwie an unseren 1. LKW damals, konnte man auch nur mit ordentlich Zwischengas schalten...😀 😀

                              K Offline
                              K Offline
                              Kuckuckmann
                              schrieb am zuletzt editiert von
                              #61

                              @skatbert
                              Gibt es bei Dir schon was neues?
                              Ich habe noch eine Idee: Kannst Du mal die Seiten leer machen, so das keine PageItems drauf sind und dann mal das Blättern testen?

                              NSPanel Dokumentation im GitHub Wiki:

                              https://github.com/joBr99/nspanel-lovelace-ui/wiki

                              S 2 Antworten Letzte Antwort
                              0
                              • K Kuckuckmann

                                @andreas_z
                                CMD: CustomSend time~12:00 <--- hat das einen aktuellen Zeitstempel?

                                Andreas_ZA Offline
                                Andreas_ZA Offline
                                Andreas_Z
                                schrieb am zuletzt editiert von
                                #62

                                @kuckuckmann @Armilar
                                OK warum auch immer, aus irgend einem nicht Erklärbaren Grund funktioniert auf einmal das Display und zeigt alles an, letzte Aktion war das erneute kopieren des Skripts aus Notepad++

                                Vielen vielen Dank für eure Geduld

                                ArmilarA K 2 Antworten Letzte Antwort
                                0
                                • Andreas_ZA Andreas_Z

                                  @kuckuckmann @Armilar
                                  OK warum auch immer, aus irgend einem nicht Erklärbaren Grund funktioniert auf einmal das Display und zeigt alles an, letzte Aktion war das erneute kopieren des Skripts aus Notepad++

                                  Vielen vielen Dank für eure Geduld

                                  ArmilarA Offline
                                  ArmilarA Offline
                                  Armilar
                                  Most Active Forum Testing
                                  schrieb am zuletzt editiert von Armilar
                                  #63

                                  @andreas_z sagte in SONOFF NSPanel mit Lovelace UI:

                                  @kuckuckmann @Armilar
                                  OK warum auch immer, aus irgend einem nicht Erklärbaren Grund funktioniert auf einmal das Display und zeigt alles an, letzte Aktion war das erneute kopieren des Skripts aus Notepad++

                                  Vielen vielen Dank für eure Geduld

                                  😊 👍 🤙

                                  okay - ab jetzt ist es nur noch Fleißarbeit

                                  Installationsanleitung, Tipps, Alias-Definitionen, FAQ für das Sonoff NSPanel mit lovelace UI unter ioBroker
                                  https://github.com/joBr99/nspanel-lovelace-ui/wiki

                                  Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                  1 Antwort Letzte Antwort
                                  0
                                  • Andreas_ZA Andreas_Z

                                    @kuckuckmann @Armilar
                                    OK warum auch immer, aus irgend einem nicht Erklärbaren Grund funktioniert auf einmal das Display und zeigt alles an, letzte Aktion war das erneute kopieren des Skripts aus Notepad++

                                    Vielen vielen Dank für eure Geduld

                                    K Offline
                                    K Offline
                                    Kuckuckmann
                                    schrieb am zuletzt editiert von
                                    #64

                                    @andreas_z
                                    KONFETTI

                                    Super gut, viel Spass damit 🙂

                                    NSPanel Dokumentation im GitHub Wiki:

                                    https://github.com/joBr99/nspanel-lovelace-ui/wiki

                                    1 Antwort Letzte Antwort
                                    0
                                    • K Kuckuckmann

                                      @skatbert
                                      Gibt es bei Dir schon was neues?
                                      Ich habe noch eine Idee: Kannst Du mal die Seiten leer machen, so das keine PageItems drauf sind und dann mal das Blättern testen?

                                      S Offline
                                      S Offline
                                      Skatbert
                                      schrieb am zuletzt editiert von
                                      #65

                                      @kuckuckmann ja kann ich nochmal probieren. Bin ab morgen erstmal für eine Woche im Urlaub. Teste es dann und melde mich.

                                      1 Antwort Letzte Antwort
                                      0
                                      • K Kuckuckmann

                                        @skatbert
                                        Gibt es bei Dir schon was neues?
                                        Ich habe noch eine Idee: Kannst Du mal die Seiten leer machen, so das keine PageItems drauf sind und dann mal das Blättern testen?

                                        S Offline
                                        S Offline
                                        Skatbert
                                        schrieb am zuletzt editiert von Skatbert
                                        #66

                                        @kuckuckmann Ich habe das ohne Items noch schnell mal probiert, nix neues, das Blätterverhalten ist gleich, maximal 1 Seite und dann einen Zwischenschritt über die Detailseite oder Screensaver.

                                        K 1 Antwort Letzte Antwort
                                        0
                                        • S Skatbert

                                          @kuckuckmann Ich habe das ohne Items noch schnell mal probiert, nix neues, das Blätterverhalten ist gleich, maximal 1 Seite und dann einen Zwischenschritt über die Detailseite oder Screensaver.

                                          K Offline
                                          K Offline
                                          Kuckuckmann
                                          schrieb am zuletzt editiert von
                                          #67

                                          @skatbert
                                          Mit welchem Editor bearbeitest Du dein Skript?

                                          NSPanel Dokumentation im GitHub Wiki:

                                          https://github.com/joBr99/nspanel-lovelace-ui/wiki

                                          S ArmilarA 2 Antworten Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          366

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe