Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
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.0k

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

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

SONOFF NSPanel mit Lovelace UI

Scheduled Pinned Locked Moved Hardware
lovelace uinspanelsonoff
7.7k Posts 271 Posters 6.7m Views 253 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • K Kerschte_de

    @tt-tom
    Hallo Tom. Vielen Dank, dass Du Dich der Sache so schnell annimmst. Ich bin gerade auch nochmal das Video von Matthias durchgegangen, ob ich irgendwas entdecke ... habe einige Datenpunkte auch nochmal exakt nach seinem Video angelegt und dann im Script hinterlegt. Leider weiter ohne Erfolg.

    14.12.2024, 18:20:28.125	[info ]: javascript.0 (363) Compiling TypeScript source script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT
    14.12.2024, 18:20:28.391	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: source code did not change, using cached compilation result...
    14.12.2024, 18:20:28.456	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: --- start of NsPanelTs: 0_userdata.0.NSPanel.1. ---
    14.12.2024, 18:20:28.459	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: setObjects enabled - create Alias Channels possible
    14.12.2024, 18:20:28.460	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: weather alias for accuweather.0. already exists
    14.12.2024, 18:20:28.464	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: registered 41 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
    14.12.2024, 18:20:28.502	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Desired TFT Firmware: 53 / v4.4.0
    14.12.2024, 18:20:28.502	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Installed TFT Firmware: 53 / v4.4.0
    14.12.2024, 18:20:28.720	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Debug mode activated
    14.12.2024, 18:20:28.788	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Tasmota Buzzer disabled
    14.12.2024, 18:20:28.800	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: NaN W
    14.12.2024, 18:20:28.801	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: get_current_tasmota_ip_address: 192.168.188.240
    14.12.2024, 18:20:28.809	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Requesting tasmota firmware version
    14.12.2024, 18:20:28.810	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Requesting current berry driver version
    14.12.2024, 18:20:28.811	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: get_current_tasmota_ip_address: 192.168.188.240
    14.12.2024, 18:20:28.811	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Requesting online berry driver version
    14.12.2024, 18:20:28.811	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Requesting online TFT version
    14.12.2024, 18:20:28.813	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Requesting online firmware version
    14.12.2024, 18:20:28.828	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: import adbase as ad
    
    from luibackend.config import LuiBackendConfig
    from luibackend.controller import LuiController
    from luibackend.mqtt import LuiMqttListener, LuiMqttSender
    from luibackend.updater import Updater
    
    import apis
    import json
    from typing import Literal
    
    class NsPanelLovelaceUIManager(ad.ADBase):
    
        def initialize(self):
            self.adapi = self.get_ad_api()
            self.adapi.log('Starting')
            apis.ad_api = self.adapi
            apis.ha_api   = self.get_plugin_api("HASS")
            apis.mqtt_api = self.get_plugin_api("MQTT")
    
            cfg = self._cfg = LuiBackendConfig(apis.ha_api, self.args["config"])
    
            use_api = cfg.get("use_api") == True
    
            topic_send = cfg.get("panelSendTopic")
            topic_recv = cfg.get("panelRecvTopic")
            api_panel_name = cfg.get("panelName")
            api_device_id = cfg.get("panelDeviceId")
            quiet = cfg.get("quiet")
    
            mqttsender = self._mqttsender = LuiMqttSender(apis.ha_api, use_api, topic_send, api_panel_name, quiet)
    
            self._controller = LuiController(cfg, mqttsender.send_mqtt_msg)
            
            desired_tasmota_driver_version   = 8
            desired_display_firmware_version = 53
            version     = "v4.3.3"
            
            model       = cfg.get("model")
            if model == "us-l":
                desired_display_firmware_url = cfg._config.get("displayURL-US-L", f"http://nspanel.pky.eu/lovelace-ui/github/nspanel-us-l-{version}.tft")
            elif model == "us-p":
                desired_display_firmware_url = cfg._config.get("displayURL-US-P", f"http://nspanel.pky.eu/lovelace-ui/github/nspanel-us-p-{version}.tft")
            else:
                desired_display_firmware_url = cfg._config.get("displayURL-EU",   f"http://nspanel.pky.eu/lovelace-ui/github/nspanel-{version}.tft")
            desired_tasmota_driver_url       = cfg._config.get("berryURL",         "https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/tasmota/autoexec.be")
    
            mode = cfg.get("updateMode")
            updater = Updater(self.adapi.log, mqttsender, topic_send, mode, desired_display_firmware_version, model, desired_display_firmware_url, desired_tasmota_driver_version, desired_tasmota_driver_url)
            
            # Request Tasmota Driver Version
            updater.request_berry_driver_version()
    
            LuiMqttListener(use_api, topic_recv, api_panel_name, api_device_id, self._controller, updater)
    
            self.adapi.log(f'Started ({version})')
            
        #
        # helpers
        #
        
        def show_card(self, card_key: str) -> None:
            """Used to show card on panel"""
            
            msg = json.dumps({"CustomRecv":f"event,buttonPress2,navigate.{card_key},button"})
            topic = self._cfg.get("panelRecvTopic")
            self._mqttsender.send_mqtt_msg(msg, topic)
            
        def navigate(self, direction: Literal['up', 'prev', 'next']) -> None:
            """Used to navigate different directions on the panel"""
            
            msg = json.dumps({"CustomRecv":f"event,buttonPress2,nav{direction.title()},button"})
            topic = self._cfg.get("panelRecvTopic")
            self._mqttsender.send_mqtt_msg(msg, topic)
            
        @property
        def current_card(self) -> str:
            """Used to get the panel's current card"""
            
            return self._controller.current_card.key
    
    14.12.2024, 18:20:28.832	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: # Sonoff NSPanel Tasmota Lovelace UI Berry Driver (Extended Flashing to faster speeds; improved Error Handling)| 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 flash_proto_version
        var flash_proto_baud
        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(4096)
                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.deinit()
                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
                            tasmota.delay(50)
                            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))
                            if self.flash_proto_version == 0
                                self.sendnx(string.format("whmi-wri %d,%d,res0",self.flash_size,self.flash_proto_baud))
                            else
                                self.sendnx(string.format("whmi-wris %d,%d,res0",self.flash_size,self.flash_proto_baud))
                            end
                            if self.flash_proto_baud != 115200
                                tasmota.delay(50)
                                self.ser.deinit()
                                self.ser = serial(17, 16, self.flash_proto_baud, serial.SERIAL_8N1)
                            end
                        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
            self.flash_proto_version = 1
            self.flash_proto_baud = 921600
        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 = 9
        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 path
            import string
    		if string.find(payload, ".tapp") > 0
    		    print("tapp in URL; will do .tapp update and migration if necessary")
    			
    			if path.exists("autoexec.be")
    			    print("autoexec.be found; will check for migration")
    				var autoexecfile = open('autoexec.be')
    				var line = autoexecfile.readline()
    				autoexecfile.close()
    				if string.find(line, "NSPanel Tasmota Lovelace UI Berry Driver") > 0
    			        print("found lovelace berry driver, going to delete autoexec.be and .bec")
    					path.remove("autoexec.be")
    					path.remove("autoexec.bec")
    				end
    			end
    			
    			var r = tasmota.urlfetch(payload, "nsp-lovelace-driver.tapp")
                if r < 0
                    print("Update failed")
                else
                    tasmota.cmd("Restart 1")
                end
    			
    		elif string.find(payload, ".be") > 0
    		    print("be in URL; will do .be update")
    			if path.exists("nsp-lovelace-driver.tapp")
    			    print("Error: there is the tapp version of the berry driver installed; cannot do .be update.")
    			else
                    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")
                        tasmota.cmd("Restart 1")
                    end
    			end
    		else
    			print("invalid url filetype")
    		end
    		
    		
    		
            if path.exists("nsp-lovelace-driver.tapp")
                var r = string.find(payload, ".tapp")
                if r < 0
                    print("URL doesn't contain .tapp skipping update")
                else
    
                end
            else
                var r = string.find(payload, ".be")
                if r < 0
                    print("URL doesn't contain .be skipping update")
                else
            
                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_proto_version = 1
        nextion.flash_proto_baud = 921600
            nextion.flash_nextion(payload)
        end
        tasmota.set_timer(0,task)
        tasmota.resp_cmnd_done()
    end
    
    def flash_nextion_adv(cmd, idx, payload, payload_json)
        def task()        
            if idx==0
                nextion.flash_proto_version = 1
                nextion.flash_proto_baud = 921600
            elif idx==1
                nextion.flash_proto_version = 0
                nextion.flash_proto_baud = 921600
            elif idx==2
                nextion.flash_proto_version = 1
                nextion.flash_proto_baud = 115200
            elif idx==3
                nextion.flash_proto_version = 0
                nextion.flash_proto_baud = 115200
            elif idx==4
                nextion.flash_proto_version = 1
                nextion.flash_proto_baud = 256000
            elif idx==5
                nextion.flash_proto_version = 0
                nextion.flash_proto_baud = 256000
            elif idx==6
                nextion.ser.deinit()
                nextion.ser = serial(17, 16, 9600, serial.SERIAL_8N1)
                nextion.flash_proto_version = 0
                nextion.flash_proto_baud = 921600
            else
                nextion.flash_proto_version = 0
                nextion.flash_proto_baud = 115200
            end
            
            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)
    tasmota.add_cmd('FlashNextionAdv', flash_nextion_adv)
    
    14.12.2024, 18:20:28.835	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: online display firmware version => 53
    14.12.2024, 18:20:28.852	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: {"nlui_driver_version":"9"}
    14.12.2024, 18:20:28.855	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: current tasmota firmware version => 14.3.0
    14.12.2024, 18:20:28.855	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: online berry driver version => 9
    14.12.2024, 18:20:28.882	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: current berry driver version => 9
    14.12.2024, 18:20:28.926	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: hidden Cards disabled
    
    
    K Offline
    K Offline
    Kerschte_de
    wrote on last edited by
    #6646

    @kerschte_de

    14.12.2024, 18:20:29.007	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: {"url":"https://api.github.com/repos/joBr99/nspanel-lovelace-ui/releases/149090497","assets_url":"https://api.github.com/repos/joBr99/nspanel-lovelace-ui/releases/149090497/assets","upload_url":"https://uploads.github.com/repos/joBr99/nspanel-lovelace-ui/releases/149090497/assets{?name,label}","html_url":"https://github.com/joBr99/nspanel-lovelace-ui/releases/tag/v4.4.0","id":149090497,"author":{"login":"joBr99","id":29555657,"node_id":"MDQ6VXNlcjI5NTU1NjU3","avatar_url":"https://avatars.githubusercontent.com/u/29555657?v=4","gravatar_id":"","url":"https://api.github.com/users/joBr99","html_url":"https://github.com/joBr99","followers_url":"https://api.github.com/users/joBr99/followers","following_url":"https://api.github.com/users/joBr99/following{/other_user}","gists_url":"https://api.github.com/users/joBr99/gists{/gist_id}","starred_url":"https://api.github.com/users/joBr99/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/joBr99/subscriptions","organizations_url":"https://api.github.com/users/joBr99/orgs","repos_url":"https://api.github.com/users/joBr99/repos","events_url":"https://api.github.com/users/joBr99/events{/privacy}","received_events_url":"https://api.github.com/users/joBr99/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOGo1zRM4I4vDB","tag_name":"v4.4.0","target_commitish":"main","name":"v4.4.0 - Update for HA 2024.04","draft":false,"prerelease":false,"created_at":"2024-03-30T11:18:31Z","published_at":"2024-03-30T12:26:37Z","assets":[],"tarball_url":"https://api.github.com/repos/joBr99/nspanel-lovelace-ui/tarball/v4.4.0","zipball_url":"https://api.github.com/repos/joBr99/nspanel-lovelace-ui/zipball/v4.4.0","body":"## Besides the Update of the App in HACS you need to do the following things:\r\n\r\n🔄 **Restart the AppDaemon Container**\r\n\r\n**Add the following workaround to your Home Assistant configuration.yaml**\r\n\r\nhttps://docs.nspanel.pky.eu/stable/prepare_ha/#workaround-for-homeassistant-202404\r\n\r\n🔄 **Restart Home Assistant**\r\n\r\n## New Features:\r\n\r\n- **Implemented changes to work with upcoming Homeassistant Version 2024.04 @joBr99**\r\n","mentions_count":1}
    14.12.2024, 18:20:29.052	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: online TFT firmware version => 4.4.0
    14.12.2024, 18:20:29.083	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: {"url":"https://api.github.com/repos/arendst/Tasmota/releases/190153880","assets_url":"https://api.github.com/repos/arendst/Tasmota/releases/190153880/assets","upload_url":"https://uploads.github.com/repos/arendst/Tasmota/releases/190153880/assets{?name,label}","html_url":"https://github.com/arendst/Tasmota/releases/tag/v14.4.0","id":190153880,"author":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOBMkSUM4LVYSY","tag_name":"v14.4.0","target_commitish":"master","name":"Tasmota v14.4.0 Rudolph","draft":false,"prerelease":false,"created_at":"2024-12-11T09:17:21Z","published_at":"2024-12-11T09:35:47Z","assets":[{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594561","id":212594561,"node_id":"RA_kwDOBMkSUM4Mq--B","name":"map_all.zip","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/zip","state":"uploaded","size":50218975,"download_count":20,"created_at":"2024-12-11T09:35:49Z","updated_at":"2024-12-11T09:35:50Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/map_all.zip"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594403","id":212594403,"node_id":"RA_kwDOBMkSUM4Mq-7j","name":"tasmota-4M.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":739968,"download_count":41,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-4M.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594404","id":212594404,"node_id":"RA_kwDOBMkSUM4Mq-7k","name":"tasmota-4M.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":518013,"download_count":42,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-4M.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594417","id":212594417,"node_id":"RA_kwDOBMkSUM4Mq-7x","name":"tasmota-AD.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":669280,"download_count":33,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-AD.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594409","id":212594409,"node_id":"RA_kwDOBMkSUM4Mq-7p","name":"tasmota-AD.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":469581,"download_count":33,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-AD.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594407","id":212594407,"node_id":"RA_kwDOBMkSUM4Mq-7n","name":"tasmota-AF.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":668704,"download_count":32,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-AF.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594405","id":212594405,"node_id":"RA_kwDOBMkSUM4Mq-7l","name":"tasmota-AF.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":469296,"download_count":33,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-AF.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594412","id":212594412,"node_id":"RA_kwDOBMkSUM4Mq-7s","name":"tasmota-BG.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":674672,"download_count":32,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-BG.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594421","id":212594421,"node_id":"RA_kwDOBMkSUM4Mq-71","name":"tasmota-BG.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":470721,"download_count":32,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-BG.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594406","id":212594406,"node_id":"RA_kwDOBMkSUM4Mq-7m","name":"tasmota-BR.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":669520,"download_count":32,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-BR.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594411","id":212594411,"node_id":"RA_kwDOBMkSUM4Mq-7r","name":"tasmota-BR.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":469616,"download_count":32,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-BR.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594410","id":212594410,"node_id":"RA_kwDOBMkSUM4Mq-7q","name":"tasmota-CN.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":668096,"download_count":37,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-CN.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594415","id":212594415,"node_id":"RA_kwDOBMkSUM4Mq-7v","name":"tasmota-CN.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":469483,"download_count":34,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-CN.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594425","id":212594425,"node_id":"RA_kwDOBMkSUM4Mq-75","name":"tasmota-CZ.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":669248,"download_count":33,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-CZ.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594414","id":212594414,"node_id":"RA_kwDOBMkSUM4Mq-7u","name":"tasmota-CZ.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":469625,"download_count":35,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-CZ.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594419","id":212594419,"node_id":"RA_kwDOBMkSUM4Mq-7z","name":"tasmota-DE.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":668576,"download_count":84,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-DE.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594418","id":212594418,"node_id":"RA_kwDOBMkSUM4Mq-7y","name":"tasmota-DE.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":469239,"download_count":66,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-DE.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594408","id":212594408,"node_id":"RA_kwDOBMkSUM4Mq-7o","name":"tasmota-display.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":626128,"download_count":36,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-display.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594413","id":212594413,"node_id":"RA_kwDOBMkSUM4Mq-7t","name":"tasmota-display.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":430756,"download_count":40,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-display.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594427","id":212594427,"node_id":"RA_kwDOBMkSUM4Mq-77","name":"tasmota-ES.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":669424,"download_count":34,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-ES.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594416","id":212594416,"node_id":"RA_kwDOBMkSUM4Mq-7w","name":"tasmota-ES.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":469393,"download_count":34,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-ES.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594454","id":212594454,"node_id":"RA_kwDOBMkSUM4Mq-8W","name":"tasmota-FR.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":669648,"download_count":33,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-FR.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594422","id":212594422,"node_id":"RA_kwDOBMkSUM4Mq-72","name":"tasmota-FR.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":469519,"download_count":33,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-FR.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594436","id":212594436,"node_id":"RA_kwDOBMkSUM4Mq-8E","name":"tasmota-FY.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":668944,"download_count":32,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-FY.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594434","id":212594434,"node_id":"RA_kwDOBMkSUM4Mq-8C","name":"tasmota-FY.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":469568,"download_count":33,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-FY.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594420","id":212594420,"node_id":"RA_kwDOBMkSUM4Mq-70","name":"tasmota-GR.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":672832,"download_count":33,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-GR.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594423","id":212594423,"node_id":"RA_kwDOBMkSUM4Mq-73","name":"tasmota-GR.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":470557,"download_count":33,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-GR.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594437","id":212594437,"node_id":"RA_kwDOBMkSUM4Mq-8F","name":"tasmota-HE.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":670192,"download_count":32,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-HE.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594431","id":212594431,"node_id":"RA_kwDOBMkSUM4Mq-7_","name":"tasmota-HE.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":469550,"download_count":32,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-HE.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594438","id":212594438,"node_id":"RA_kwDOBMkSUM4Mq-8G","name":"tasmota-HU.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":669552,"download_count":33,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-HU.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594426","id":212594426,"node_id":"RA_kwDOBMkSUM4Mq-76","name":"tasmota-HU.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":469699,"download_count":32,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-HU.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594430","id":212594430,"node_id":"RA_kwDOBMkSUM4Mq-7-","name":"tasmota-ir.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":681296,"download_count":36,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-ir.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594443","id":212594443,"node_id":"RA_kwDOBMkSUM4Mq-8L","name":"tasmota-ir.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":458199,"download_count":40,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-ir.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594428","id":212594428,"node_id":"RA_kwDOBMkSUM4Mq-78","name":"tasmota-IT.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":669680,"download_count":34,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-IT.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594432","id":212594432,"node_id":"RA_kwDOBMkSUM4Mq-8A","name":"tasmota-IT.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":469256,"download_count":34,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-IT.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594439","id":212594439,"node_id":"RA_kwDOBMkSUM4Mq-8H","name":"tasmota-knx.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":664736,"download_count":33,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-knx.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594424","id":212594424,"node_id":"RA_kwDOBMkSUM4Mq-74","name":"tasmota-knx.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":462131,"download_count":36,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-knx.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594442","id":212594442,"node_id":"RA_kwDOBMkSUM4Mq-8K","name":"tasmota-KO.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":669168,"download_count":32,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-KO.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594457","id":212594457,"node_id":"RA_kwDOBMkSUM4Mq-8Z","name":"tasmota-KO.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":469713,"download_count":33,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-KO.bin.gz"},
    
    1 Reply Last reply
    0
    • K Kerschte_de

      @tt-tom
      Hallo Tom. Vielen Dank, dass Du Dich der Sache so schnell annimmst. Ich bin gerade auch nochmal das Video von Matthias durchgegangen, ob ich irgendwas entdecke ... habe einige Datenpunkte auch nochmal exakt nach seinem Video angelegt und dann im Script hinterlegt. Leider weiter ohne Erfolg.

      14.12.2024, 18:20:28.125	[info ]: javascript.0 (363) Compiling TypeScript source script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT
      14.12.2024, 18:20:28.391	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: source code did not change, using cached compilation result...
      14.12.2024, 18:20:28.456	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: --- start of NsPanelTs: 0_userdata.0.NSPanel.1. ---
      14.12.2024, 18:20:28.459	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: setObjects enabled - create Alias Channels possible
      14.12.2024, 18:20:28.460	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: weather alias for accuweather.0. already exists
      14.12.2024, 18:20:28.464	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: registered 41 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
      14.12.2024, 18:20:28.502	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Desired TFT Firmware: 53 / v4.4.0
      14.12.2024, 18:20:28.502	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Installed TFT Firmware: 53 / v4.4.0
      14.12.2024, 18:20:28.720	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Debug mode activated
      14.12.2024, 18:20:28.788	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Tasmota Buzzer disabled
      14.12.2024, 18:20:28.800	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: NaN W
      14.12.2024, 18:20:28.801	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: get_current_tasmota_ip_address: 192.168.188.240
      14.12.2024, 18:20:28.809	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Requesting tasmota firmware version
      14.12.2024, 18:20:28.810	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Requesting current berry driver version
      14.12.2024, 18:20:28.811	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: get_current_tasmota_ip_address: 192.168.188.240
      14.12.2024, 18:20:28.811	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Requesting online berry driver version
      14.12.2024, 18:20:28.811	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Requesting online TFT version
      14.12.2024, 18:20:28.813	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Requesting online firmware version
      14.12.2024, 18:20:28.828	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: import adbase as ad
      
      from luibackend.config import LuiBackendConfig
      from luibackend.controller import LuiController
      from luibackend.mqtt import LuiMqttListener, LuiMqttSender
      from luibackend.updater import Updater
      
      import apis
      import json
      from typing import Literal
      
      class NsPanelLovelaceUIManager(ad.ADBase):
      
          def initialize(self):
              self.adapi = self.get_ad_api()
              self.adapi.log('Starting')
              apis.ad_api = self.adapi
              apis.ha_api   = self.get_plugin_api("HASS")
              apis.mqtt_api = self.get_plugin_api("MQTT")
      
              cfg = self._cfg = LuiBackendConfig(apis.ha_api, self.args["config"])
      
              use_api = cfg.get("use_api") == True
      
              topic_send = cfg.get("panelSendTopic")
              topic_recv = cfg.get("panelRecvTopic")
              api_panel_name = cfg.get("panelName")
              api_device_id = cfg.get("panelDeviceId")
              quiet = cfg.get("quiet")
      
              mqttsender = self._mqttsender = LuiMqttSender(apis.ha_api, use_api, topic_send, api_panel_name, quiet)
      
              self._controller = LuiController(cfg, mqttsender.send_mqtt_msg)
              
              desired_tasmota_driver_version   = 8
              desired_display_firmware_version = 53
              version     = "v4.3.3"
              
              model       = cfg.get("model")
              if model == "us-l":
                  desired_display_firmware_url = cfg._config.get("displayURL-US-L", f"http://nspanel.pky.eu/lovelace-ui/github/nspanel-us-l-{version}.tft")
              elif model == "us-p":
                  desired_display_firmware_url = cfg._config.get("displayURL-US-P", f"http://nspanel.pky.eu/lovelace-ui/github/nspanel-us-p-{version}.tft")
              else:
                  desired_display_firmware_url = cfg._config.get("displayURL-EU",   f"http://nspanel.pky.eu/lovelace-ui/github/nspanel-{version}.tft")
              desired_tasmota_driver_url       = cfg._config.get("berryURL",         "https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/tasmota/autoexec.be")
      
              mode = cfg.get("updateMode")
              updater = Updater(self.adapi.log, mqttsender, topic_send, mode, desired_display_firmware_version, model, desired_display_firmware_url, desired_tasmota_driver_version, desired_tasmota_driver_url)
              
              # Request Tasmota Driver Version
              updater.request_berry_driver_version()
      
              LuiMqttListener(use_api, topic_recv, api_panel_name, api_device_id, self._controller, updater)
      
              self.adapi.log(f'Started ({version})')
              
          #
          # helpers
          #
          
          def show_card(self, card_key: str) -> None:
              """Used to show card on panel"""
              
              msg = json.dumps({"CustomRecv":f"event,buttonPress2,navigate.{card_key},button"})
              topic = self._cfg.get("panelRecvTopic")
              self._mqttsender.send_mqtt_msg(msg, topic)
              
          def navigate(self, direction: Literal['up', 'prev', 'next']) -> None:
              """Used to navigate different directions on the panel"""
              
              msg = json.dumps({"CustomRecv":f"event,buttonPress2,nav{direction.title()},button"})
              topic = self._cfg.get("panelRecvTopic")
              self._mqttsender.send_mqtt_msg(msg, topic)
              
          @property
          def current_card(self) -> str:
              """Used to get the panel's current card"""
              
              return self._controller.current_card.key
      
      14.12.2024, 18:20:28.832	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: # Sonoff NSPanel Tasmota Lovelace UI Berry Driver (Extended Flashing to faster speeds; improved Error Handling)| 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 flash_proto_version
          var flash_proto_baud
          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(4096)
                  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.deinit()
                  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
                              tasmota.delay(50)
                              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))
                              if self.flash_proto_version == 0
                                  self.sendnx(string.format("whmi-wri %d,%d,res0",self.flash_size,self.flash_proto_baud))
                              else
                                  self.sendnx(string.format("whmi-wris %d,%d,res0",self.flash_size,self.flash_proto_baud))
                              end
                              if self.flash_proto_baud != 115200
                                  tasmota.delay(50)
                                  self.ser.deinit()
                                  self.ser = serial(17, 16, self.flash_proto_baud, serial.SERIAL_8N1)
                              end
                          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
              self.flash_proto_version = 1
              self.flash_proto_baud = 921600
          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 = 9
          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 path
              import string
      		if string.find(payload, ".tapp") > 0
      		    print("tapp in URL; will do .tapp update and migration if necessary")
      			
      			if path.exists("autoexec.be")
      			    print("autoexec.be found; will check for migration")
      				var autoexecfile = open('autoexec.be')
      				var line = autoexecfile.readline()
      				autoexecfile.close()
      				if string.find(line, "NSPanel Tasmota Lovelace UI Berry Driver") > 0
      			        print("found lovelace berry driver, going to delete autoexec.be and .bec")
      					path.remove("autoexec.be")
      					path.remove("autoexec.bec")
      				end
      			end
      			
      			var r = tasmota.urlfetch(payload, "nsp-lovelace-driver.tapp")
                  if r < 0
                      print("Update failed")
                  else
                      tasmota.cmd("Restart 1")
                  end
      			
      		elif string.find(payload, ".be") > 0
      		    print("be in URL; will do .be update")
      			if path.exists("nsp-lovelace-driver.tapp")
      			    print("Error: there is the tapp version of the berry driver installed; cannot do .be update.")
      			else
                      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")
                          tasmota.cmd("Restart 1")
                      end
      			end
      		else
      			print("invalid url filetype")
      		end
      		
      		
      		
              if path.exists("nsp-lovelace-driver.tapp")
                  var r = string.find(payload, ".tapp")
                  if r < 0
                      print("URL doesn't contain .tapp skipping update")
                  else
      
                  end
              else
                  var r = string.find(payload, ".be")
                  if r < 0
                      print("URL doesn't contain .be skipping update")
                  else
              
                  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_proto_version = 1
          nextion.flash_proto_baud = 921600
              nextion.flash_nextion(payload)
          end
          tasmota.set_timer(0,task)
          tasmota.resp_cmnd_done()
      end
      
      def flash_nextion_adv(cmd, idx, payload, payload_json)
          def task()        
              if idx==0
                  nextion.flash_proto_version = 1
                  nextion.flash_proto_baud = 921600
              elif idx==1
                  nextion.flash_proto_version = 0
                  nextion.flash_proto_baud = 921600
              elif idx==2
                  nextion.flash_proto_version = 1
                  nextion.flash_proto_baud = 115200
              elif idx==3
                  nextion.flash_proto_version = 0
                  nextion.flash_proto_baud = 115200
              elif idx==4
                  nextion.flash_proto_version = 1
                  nextion.flash_proto_baud = 256000
              elif idx==5
                  nextion.flash_proto_version = 0
                  nextion.flash_proto_baud = 256000
              elif idx==6
                  nextion.ser.deinit()
                  nextion.ser = serial(17, 16, 9600, serial.SERIAL_8N1)
                  nextion.flash_proto_version = 0
                  nextion.flash_proto_baud = 921600
              else
                  nextion.flash_proto_version = 0
                  nextion.flash_proto_baud = 115200
              end
              
              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)
      tasmota.add_cmd('FlashNextionAdv', flash_nextion_adv)
      
      14.12.2024, 18:20:28.835	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: online display firmware version => 53
      14.12.2024, 18:20:28.852	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: {"nlui_driver_version":"9"}
      14.12.2024, 18:20:28.855	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: current tasmota firmware version => 14.3.0
      14.12.2024, 18:20:28.855	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: online berry driver version => 9
      14.12.2024, 18:20:28.882	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: current berry driver version => 9
      14.12.2024, 18:20:28.926	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: hidden Cards disabled
      
      
      K Offline
      K Offline
      Kerschte_de
      wrote on last edited by
      #6647

      @kerschte_de

      {"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594433","id":212594433,"node_id":"RA_kwDOBMkSUM4Mq-8B","name":"tasmota-lite.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":520208,"download_count":62,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-lite.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594444","id":212594444,"node_id":"RA_kwDOBMkSUM4Mq-8M","name":"tasmota-lite.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":364868,"download_count":59,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-lite.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594429","id":212594429,"node_id":"RA_kwDOBMkSUM4Mq-79","name":"tasmota-minimal.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":374432,"download_count":108,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-minimal.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594435","id":212594435,"node_id":"RA_kwDOBMkSUM4Mq-8D","name":"tasmota-minimal.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":264238,"download_count":113,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-minimal.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594456","id":212594456,"node_id":"RA_kwDOBMkSUM4Mq-8Y","name":"tasmota-NL.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":669024,"download_count":34,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-NL.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594441","id":212594441,"node_id":"RA_kwDOBMkSUM4Mq-8J","name":"tasmota-NL.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":469232,"download_count":32,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-NL.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594448","id":212594448,"node_id":"RA_kwDOBMkSUM4Mq-8Q","name":"tasmota-PL.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":669680,"download_count":36,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-PL.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594440","id":212594440,"node_id":"RA_kwDOBMkSUM4Mq-8I","name":"tasmota-PL.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":469819,"download_count":34,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-PL.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594445","id":212594445,"node_id":"RA_kwDOBMkSUM4Mq-8N","name":"tasmota-PT.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":669744,"download_count":33,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-PT.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594463","id":212594463,"node_id":"RA_kwDOBMkSUM4Mq-8f","name":"tasmota-PT.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":469557,"download_count":32,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-PT.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594447","id":212594447,"node_id":"RA_kwDOBMkSUM4Mq-8P","name":"tasmota-RO.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":669024,"download_count":32,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-RO.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594458","id":212594458,"node_id":"RA_kwDOBMkSUM4Mq-8a","name":"tasmota-RO.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":469329,"download_count":32,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-RO.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594449","id":212594449,"node_id":"RA_kwDOBMkSUM4Mq-8R","name":"tasmota-RU.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":673744,"download_count":35,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-RU.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594462","id":212594462,"node_id":"RA_kwDOBMkSUM4Mq-8e","name":"tasmota-RU.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":470822,"download_count":33,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-RU.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594469","id":212594469,"node_id":"RA_kwDOBMkSUM4Mq-8l","name":"tasmota-SE.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":669104,"download_count":32,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-SE.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594451","id":212594451,"node_id":"RA_kwDOBMkSUM4Mq-8T","name":"tasmota-SE.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":469458,"download_count":32,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-SE.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594455","id":212594455,"node_id":"RA_kwDOBMkSUM4Mq-8X","name":"tasmota-sensors.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":736896,"download_count":48,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-sensors.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594446","id":212594446,"node_id":"RA_kwDOBMkSUM4Mq-8O","name":"tasmota-sensors.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":510956,"download_count":53,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-sensors.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594472","id":212594472,"node_id":"RA_kwDOBMkSUM4Mq-8o","name":"tasmota-SK.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":669328,"download_count":32,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-SK.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594467","id":212594467,"node_id":"RA_kwDOBMkSUM4Mq-8j","name":"tasmota-SK.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":469668,"download_count":32,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-SK.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594452","id":212594452,"node_id":"RA_kwDOBMkSUM4Mq-8U","name":"tasmota-TR.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":669248,"download_count":33,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-TR.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594466","id":212594466,"node_id":"RA_kwDOBMkSUM4Mq-8i","name":"tasmota-TR.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":469588,"download_count":32,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-TR.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594453","id":212594453,"node_id":"RA_kwDOBMkSUM4Mq-8V","name":"tasmota-TW.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":668704,"download_count":32,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-TW.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594450","id":212594450,"node_id":"RA_kwDOBMkSUM4Mq-8S","name":"tasmota-TW.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":469967,"download_count":32,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-TW.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594461","id":212594461,"node_id":"RA_kwDOBMkSUM4Mq-8d","name":"tasmota-UK.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":673856,"download_count":38,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-UK.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594459","id":212594459,"node_id":"RA_kwDOBMkSUM4Mq-8b","name":"tasmota-UK.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":470776,"download_count":34,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-UK.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594474","id":212594474,"node_id":"RA_kwDOBMkSUM4Mq-8q","name":"tasmota-VN.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":670496,"download_count":33,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-VN.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594464","id":212594464,"node_id":"RA_kwDOBMkSUM4Mq-8g","name":"tasmota-VN.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":469736,"download_count":33,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-VN.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594468","id":212594468,"node_id":"RA_kwDOBMkSUM4Mq-8k","name":"tasmota-zbbridge.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":765456,"download_count":37,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-zbbridge.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594475","id":212594475,"node_id":"RA_kwDOBMkSUM4Mq-8r","name":"tasmota-zbbridge.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":527313,"download_count":40,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-zbbridge.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594460","id":212594460,"node_id":"RA_kwDOBMkSUM4Mq-8c","name":"tasmota-zigbee.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":857760,"download_count":33,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-zigbee.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594465","id":212594465,"node_id":"RA_kwDOBMkSUM4Mq-8h","name":"tasmota-zigbee.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":590540,"download_count":36,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota-zigbee.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594482","id":212594482,"node_id":"RA_kwDOBMkSUM4Mq-8y","name":"tasmota.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":668064,"download_count":84,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594479","id":212594479,"node_id":"RA_kwDOBMkSUM4Mq-8v","name":"tasmota.bin.gz","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/gzip","state":"uploaded","size":468540,"download_count":83,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota.bin.gz"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594473","id":212594473,"node_id":"RA_kwDOBMkSUM4Mq-8p","name":"tasmota32-AD.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":2066048,"download_count":33,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota32-AD.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594471","id":212594471,"node_id":"RA_kwDOBMkSUM4Mq-8n","name":"tasmota32-AD.factory.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":2983552,"download_count":34,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota32-AD.factory.bin"},{"url":"https://api.github.com/repos/arendst/Tasmota/releases/assets/212594478","id":212594478,"node_id":"RA_kwDOBMkSUM4Mq-8u","name":"tasmota32-AF.bin","label":"","uploader":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","user_view_type":"public","site_admin":false},"content_type":"application/octet-stream","state":"uploaded","size":2065568,"download_count":33,"created_at":"2024-12-11T09:35:48Z","updated_at":"2024-12-11T09:35:49Z","browser_download_url":"https://github.com/arendst/Tasmota/releases/download/v14.4.0/tasmota32-AF.bin"},
      
      1 Reply Last reply
      0
      • K Kerschte_de

        @tt-tom
        Hallo Tom. Vielen Dank, dass Du Dich der Sache so schnell annimmst. Ich bin gerade auch nochmal das Video von Matthias durchgegangen, ob ich irgendwas entdecke ... habe einige Datenpunkte auch nochmal exakt nach seinem Video angelegt und dann im Script hinterlegt. Leider weiter ohne Erfolg.

        14.12.2024, 18:20:28.125	[info ]: javascript.0 (363) Compiling TypeScript source script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT
        14.12.2024, 18:20:28.391	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: source code did not change, using cached compilation result...
        14.12.2024, 18:20:28.456	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: --- start of NsPanelTs: 0_userdata.0.NSPanel.1. ---
        14.12.2024, 18:20:28.459	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: setObjects enabled - create Alias Channels possible
        14.12.2024, 18:20:28.460	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: weather alias for accuweather.0. already exists
        14.12.2024, 18:20:28.464	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: registered 41 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
        14.12.2024, 18:20:28.502	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Desired TFT Firmware: 53 / v4.4.0
        14.12.2024, 18:20:28.502	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Installed TFT Firmware: 53 / v4.4.0
        14.12.2024, 18:20:28.720	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Debug mode activated
        14.12.2024, 18:20:28.788	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Tasmota Buzzer disabled
        14.12.2024, 18:20:28.800	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: NaN W
        14.12.2024, 18:20:28.801	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: get_current_tasmota_ip_address: 192.168.188.240
        14.12.2024, 18:20:28.809	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Requesting tasmota firmware version
        14.12.2024, 18:20:28.810	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Requesting current berry driver version
        14.12.2024, 18:20:28.811	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: get_current_tasmota_ip_address: 192.168.188.240
        14.12.2024, 18:20:28.811	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Requesting online berry driver version
        14.12.2024, 18:20:28.811	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Requesting online TFT version
        14.12.2024, 18:20:28.813	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Requesting online firmware version
        14.12.2024, 18:20:28.828	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: import adbase as ad
        
        from luibackend.config import LuiBackendConfig
        from luibackend.controller import LuiController
        from luibackend.mqtt import LuiMqttListener, LuiMqttSender
        from luibackend.updater import Updater
        
        import apis
        import json
        from typing import Literal
        
        class NsPanelLovelaceUIManager(ad.ADBase):
        
            def initialize(self):
                self.adapi = self.get_ad_api()
                self.adapi.log('Starting')
                apis.ad_api = self.adapi
                apis.ha_api   = self.get_plugin_api("HASS")
                apis.mqtt_api = self.get_plugin_api("MQTT")
        
                cfg = self._cfg = LuiBackendConfig(apis.ha_api, self.args["config"])
        
                use_api = cfg.get("use_api") == True
        
                topic_send = cfg.get("panelSendTopic")
                topic_recv = cfg.get("panelRecvTopic")
                api_panel_name = cfg.get("panelName")
                api_device_id = cfg.get("panelDeviceId")
                quiet = cfg.get("quiet")
        
                mqttsender = self._mqttsender = LuiMqttSender(apis.ha_api, use_api, topic_send, api_panel_name, quiet)
        
                self._controller = LuiController(cfg, mqttsender.send_mqtt_msg)
                
                desired_tasmota_driver_version   = 8
                desired_display_firmware_version = 53
                version     = "v4.3.3"
                
                model       = cfg.get("model")
                if model == "us-l":
                    desired_display_firmware_url = cfg._config.get("displayURL-US-L", f"http://nspanel.pky.eu/lovelace-ui/github/nspanel-us-l-{version}.tft")
                elif model == "us-p":
                    desired_display_firmware_url = cfg._config.get("displayURL-US-P", f"http://nspanel.pky.eu/lovelace-ui/github/nspanel-us-p-{version}.tft")
                else:
                    desired_display_firmware_url = cfg._config.get("displayURL-EU",   f"http://nspanel.pky.eu/lovelace-ui/github/nspanel-{version}.tft")
                desired_tasmota_driver_url       = cfg._config.get("berryURL",         "https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/tasmota/autoexec.be")
        
                mode = cfg.get("updateMode")
                updater = Updater(self.adapi.log, mqttsender, topic_send, mode, desired_display_firmware_version, model, desired_display_firmware_url, desired_tasmota_driver_version, desired_tasmota_driver_url)
                
                # Request Tasmota Driver Version
                updater.request_berry_driver_version()
        
                LuiMqttListener(use_api, topic_recv, api_panel_name, api_device_id, self._controller, updater)
        
                self.adapi.log(f'Started ({version})')
                
            #
            # helpers
            #
            
            def show_card(self, card_key: str) -> None:
                """Used to show card on panel"""
                
                msg = json.dumps({"CustomRecv":f"event,buttonPress2,navigate.{card_key},button"})
                topic = self._cfg.get("panelRecvTopic")
                self._mqttsender.send_mqtt_msg(msg, topic)
                
            def navigate(self, direction: Literal['up', 'prev', 'next']) -> None:
                """Used to navigate different directions on the panel"""
                
                msg = json.dumps({"CustomRecv":f"event,buttonPress2,nav{direction.title()},button"})
                topic = self._cfg.get("panelRecvTopic")
                self._mqttsender.send_mqtt_msg(msg, topic)
                
            @property
            def current_card(self) -> str:
                """Used to get the panel's current card"""
                
                return self._controller.current_card.key
        
        14.12.2024, 18:20:28.832	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: # Sonoff NSPanel Tasmota Lovelace UI Berry Driver (Extended Flashing to faster speeds; improved Error Handling)| 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 flash_proto_version
            var flash_proto_baud
            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(4096)
                    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.deinit()
                    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
                                tasmota.delay(50)
                                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))
                                if self.flash_proto_version == 0
                                    self.sendnx(string.format("whmi-wri %d,%d,res0",self.flash_size,self.flash_proto_baud))
                                else
                                    self.sendnx(string.format("whmi-wris %d,%d,res0",self.flash_size,self.flash_proto_baud))
                                end
                                if self.flash_proto_baud != 115200
                                    tasmota.delay(50)
                                    self.ser.deinit()
                                    self.ser = serial(17, 16, self.flash_proto_baud, serial.SERIAL_8N1)
                                end
                            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
                self.flash_proto_version = 1
                self.flash_proto_baud = 921600
            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 = 9
            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 path
                import string
        		if string.find(payload, ".tapp") > 0
        		    print("tapp in URL; will do .tapp update and migration if necessary")
        			
        			if path.exists("autoexec.be")
        			    print("autoexec.be found; will check for migration")
        				var autoexecfile = open('autoexec.be')
        				var line = autoexecfile.readline()
        				autoexecfile.close()
        				if string.find(line, "NSPanel Tasmota Lovelace UI Berry Driver") > 0
        			        print("found lovelace berry driver, going to delete autoexec.be and .bec")
        					path.remove("autoexec.be")
        					path.remove("autoexec.bec")
        				end
        			end
        			
        			var r = tasmota.urlfetch(payload, "nsp-lovelace-driver.tapp")
                    if r < 0
                        print("Update failed")
                    else
                        tasmota.cmd("Restart 1")
                    end
        			
        		elif string.find(payload, ".be") > 0
        		    print("be in URL; will do .be update")
        			if path.exists("nsp-lovelace-driver.tapp")
        			    print("Error: there is the tapp version of the berry driver installed; cannot do .be update.")
        			else
                        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")
                            tasmota.cmd("Restart 1")
                        end
        			end
        		else
        			print("invalid url filetype")
        		end
        		
        		
        		
                if path.exists("nsp-lovelace-driver.tapp")
                    var r = string.find(payload, ".tapp")
                    if r < 0
                        print("URL doesn't contain .tapp skipping update")
                    else
        
                    end
                else
                    var r = string.find(payload, ".be")
                    if r < 0
                        print("URL doesn't contain .be skipping update")
                    else
                
                    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_proto_version = 1
            nextion.flash_proto_baud = 921600
                nextion.flash_nextion(payload)
            end
            tasmota.set_timer(0,task)
            tasmota.resp_cmnd_done()
        end
        
        def flash_nextion_adv(cmd, idx, payload, payload_json)
            def task()        
                if idx==0
                    nextion.flash_proto_version = 1
                    nextion.flash_proto_baud = 921600
                elif idx==1
                    nextion.flash_proto_version = 0
                    nextion.flash_proto_baud = 921600
                elif idx==2
                    nextion.flash_proto_version = 1
                    nextion.flash_proto_baud = 115200
                elif idx==3
                    nextion.flash_proto_version = 0
                    nextion.flash_proto_baud = 115200
                elif idx==4
                    nextion.flash_proto_version = 1
                    nextion.flash_proto_baud = 256000
                elif idx==5
                    nextion.flash_proto_version = 0
                    nextion.flash_proto_baud = 256000
                elif idx==6
                    nextion.ser.deinit()
                    nextion.ser = serial(17, 16, 9600, serial.SERIAL_8N1)
                    nextion.flash_proto_version = 0
                    nextion.flash_proto_baud = 921600
                else
                    nextion.flash_proto_version = 0
                    nextion.flash_proto_baud = 115200
                end
                
                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)
        tasmota.add_cmd('FlashNextionAdv', flash_nextion_adv)
        
        14.12.2024, 18:20:28.835	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: online display firmware version => 53
        14.12.2024, 18:20:28.852	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: {"nlui_driver_version":"9"}
        14.12.2024, 18:20:28.855	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: current tasmota firmware version => 14.3.0
        14.12.2024, 18:20:28.855	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: online berry driver version => 9
        14.12.2024, 18:20:28.882	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: current berry driver version => 9
        14.12.2024, 18:20:28.926	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: hidden Cards disabled
        
        
        K Offline
        K Offline
        Kerschte_de
        wrote on last edited by
        #6648

        @kerschte_de

        da ist was durcheinandergekommen, da ich die maximale Zeichenzahl übersteige. Ich versuche es nochmal ab Zeile 572

        javascript.0	18:20:28.125	info	Compiling TypeScript source script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT
        javascript.0	18:20:28.391	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: source code did not change, using cached compilation result...
        javascript.0	18:20:28.456	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: --- start of NsPanelTs: 0_userdata.0.NSPanel.1. ---
        javascript.0	18:20:28.459	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: setObjects enabled - create Alias Channels possible
        javascript.0	18:20:28.460	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: weather alias for accuweather.0. already exists
        javascript.0	18:20:28.464	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: registered 41 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
        javascript.0	18:20:28.502	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Desired TFT Firmware: 53 / v4.4.0
        javascript.0	18:20:28.502	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Installed TFT Firmware: 53 / v4.4.0
        javascript.0	18:20:28.720	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Debug mode activated
        javascript.0	18:20:28.788	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Tasmota Buzzer disabled
        javascript.0	18:20:28.800	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: NaN W
        javascript.0	18:20:28.801	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: get_current_tasmota_ip_address: 192.168.188.240
        javascript.0	18:20:28.809	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Requesting tasmota firmware version
        javascript.0	18:20:28.810	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Requesting current berry driver version
        javascript.0	18:20:28.811	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: get_current_tasmota_ip_address: 192.168.188.240
        javascript.0	18:20:28.811	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Requesting online berry driver version
        javascript.0	18:20:28.811	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Requesting online TFT version
        javascript.0	18:20:28.813	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Requesting online firmware version
        javascript.0	18:20:28.828	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: import adbase as ad from luibackend.config import LuiBackendConfig from luibackend.controller import LuiController from luibackend.mqtt import LuiMqttListener, LuiMqttSender from luibackend.updater import Updater import apis import json from typing import Literal class NsPanelLovelaceUIManager(ad.ADBase): def initialize(self): self.adapi = self.get_ad_api() self.adapi.log('Starting') apis.ad_api = self.adapi apis.ha_api = self.get_plugin_api("HASS") apis.mqtt_api = self.get_plugin_api("MQTT") cfg = self._cfg = LuiBackendConfig(apis.ha_api, self.args["config"]) use_api = cfg.get("use_api") == True topic_send = cfg.get("panelSendTopic") topic_recv = cfg.get("panelRecvTopic") api_panel_name = cfg.get("panelName") api_device_id = cfg.get("panelDeviceId") quiet = cfg.get("quiet") mqttsender = self._mqttsender = LuiMqttSender(apis.ha_api, use_api, topic_send, api_panel_name, quiet) self._controller = LuiController(cfg, mqttsender.send_mqtt_msg) desired_tasmota_driver_version = 8 desired_display_firmware_version = 53 version = "v4.3.3" model = cfg.get("model") if model == "us-l": desired_display_firmware_url = cfg._config.get("displayURL-US-L", f"http://nspanel.pky.eu/lovelace-ui/github/nspanel-us-l-{version}.tft") elif model == "us-p": desired_display_firmware_url = cfg._config.get("displayURL-US-P", f"http://nspanel.pky.eu/lovelace-ui/github/nspanel-us-p-{version}.tft") else: desired_display_firmware_url = cfg._config.get("displayURL-EU", f"http://nspanel.pky.eu/lovelace-ui/github/nspanel-{version}.tft") desired_tasmota_driver_url = cfg._config.get("berryURL", "https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/tasmota/autoexec.be") mode = cfg.get("updateMode") updater = Updater(self.adapi.log, mqttsender, topic_send, mode, desired_display_firmware_version, model, desired_display_firmware_url, desired_tasmota_driver_version, desired_tasmota_driver_url) # Request Tasmota Driver Version updater.request_berry_driver_version() LuiMqttListener(use_api, topic_recv, api_panel_name, api_device_id, self._controller, updater) self.adapi.log(f'Started ({version})') # # helpers # def show_card(self, card_key: str) -> None: """Used to show card on panel""" msg = json.dumps({"CustomRecv":f"event,buttonPress2,navigate.{card_key},button"}) topic = self._cfg.get("panelRecvTopic") self._mqttsender.send_mqtt_msg(msg, topic) def navigate(self, direction: Literal['up', 'prev', 'next']) -> None: """Used to navigate different directions on the panel""" msg = json.dumps({"CustomRecv":f"event,buttonPress2,nav{direction.title()},button"}) topic = self._cfg.get("panelRecvTopic") self._mqttsender.send_mqtt_msg(msg, topic) @property def current_card(self) -> str: """Used to get the panel's current card""" return self._controller.current_card.key
        javascript.0	18:20:28.832	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: # Sonoff NSPanel Tasmota Lovelace UI Berry Driver (Extended Flashing to faster speeds; improved Error Handling)| 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 flash_proto_version var flash_proto_baud 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(4096) 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.deinit() 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 tasmota.delay(50) 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)) if self.flash_proto_version == 0 self.sendnx(string.format("whmi-wri %d,%d,res0",self.flash_size,self.flash_proto_baud)) else self.sendnx(string.format("whmi-wris %d,%d,res0",self.flash_size,self.flash_proto_baud)) end if self.flash_proto_baud != 115200 tasmota.delay(50) self.ser.deinit() self.ser = serial(17, 16, self.flash_proto_baud, serial.SERIAL_8N1) end 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 self.flash_proto_version = 1 self.flash_proto_baud = 921600 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 = 9 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 path import string if string.find(payload, ".tapp") > 0 print("tapp in URL; will do .tapp update and migration if necessary") if path.exists("autoexec.be") print("autoexec.be found; will check for migration") var autoexecfile = open('autoexec.be') var line = autoexecfile.readline() autoexecfile.close() if string.find(line, "NSPanel Tasmota Lovelace UI Berry Driver") > 0 print("found lovelace berry driver, going to delete autoexec.be and .bec") path.remove("autoexec.be") path.remove("autoexec.bec") end end var r = tasmota.urlfetch(payload, "nsp-lovelace-driver.tapp") if r < 0 print("Update failed") else tasmota.cmd("Restart 1") end elif string.find(payload, ".be") > 0 print("be in URL; will do .be update") if path.exists("nsp-lovelace-driver.tapp") print("Error: there is the tapp version of the berry driver installed; cannot do .be update.") else 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") tasmota.cmd("Restart 1") end end else print("invalid url filetype") end if path.exists("nsp-lovelace-driver.tapp") var r = string.find(payload, ".tapp") if r < 0 print("URL doesn't contain .tapp skipping update") else end else var r = string.find(payload, ".be") if r < 0 print("URL doesn't contain .be skipping update") else 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_proto_version = 1 nextion.flash_proto_baud = 921600 nextion.flash_nextion(payload) end tasmota.set_timer(0,task) tasmota.resp_cmnd_done() end def flash_nextion_adv(cmd, idx, payload, payload_json) def task() if idx==0 nextion.flash_proto_version = 1 nextion.flash_proto_baud = 921600 elif idx==1 nextion.flash_proto_version = 0 nextion.flash_proto_baud = 921600 elif idx==2 nextion.flash_proto_version = 1 nextion.flash_proto_baud = 115200 elif idx==3 nextion.flash_proto_version = 0 nextion.flash_proto_baud = 115200 elif idx==4 nextion.flash_proto_version = 1 nextion.flash_proto_baud = 256000 elif idx==5 nextion.flash_proto_version = 0 nextion.flash_proto_baud = 256000 elif idx==6 nextion.ser.deinit() nextion.ser = serial(17, 16, 9600, serial.SERIAL_8N1) nextion.flash_proto_version = 0 nextion.flash_proto_baud = 921600 else nextion.flash_proto_version = 0 nextion.flash_proto_baud = 115200 end 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) tasmota.add_cmd('FlashNextionAdv', flash_nextion_adv)
        javascript.0	18:20:28.835	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: online display firmware version => 53
        javascript.0	18:20:28.852	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: {"nlui_driver_version":"9"}
        javascript.0	18:20:28.855	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: current tasmota firmware version => 14.3.0
        javascript.0	18:20:28.855	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: online berry driver version => 9
        javascript.0	18:20:28.882	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: current berry driver version => 9
        javascript.0	18:20:28.926	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: hidden Cards disabled
        javascript.0	18:20:29.007	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: {"url":"https://api.github.com/repos/joBr99/nspanel-lovelace-ui/releases/149090497","assets_url":"https://api.github.com/repos/joBr99/nspanel-lovelace-ui/releases/149090497/assets","upload_url":"https://uploads.github.com/repos/joBr99/nspanel-lovelace-ui/releases/149090497/assets{?name,label}","html_url":"https://github.com/joBr99/nspanel-lovelace-ui/releases/tag/v4.4.0","id":149090497,"author":{"login":"joBr99","id":29555657,"node_id":"MDQ6VXNlcjI5NTU1NjU3","avatar_url":"https://avatars.githubusercontent.com/u/29555657?v=4","gravatar_id":"","url":"https://api.github.com/users/joBr99","html_url":"https://github.com/joBr99","followers_url":"https://api.github.com/users/joBr99/followers","following_url":"https://api.github.com/users/joBr99/following{/other_user}","gists_url":"https://api.github.com/users/joBr99/gists{/gist_id}","starred_url":"https://api.github.com/users/joBr99/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/joBr99/subscriptions","organizations_url":"https://api.github.com/users/joBr99/orgs","repos_url":"https://api.github.com/users/joBr99/repos","events_url":"https://api.github.com/users/joBr99/events{/privacy}","received_events_url":"https://api.github.com/users/joBr99/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOGo1zRM4I4vDB","tag_name":"v4.4.0","target_commitish":"main","name":"v4.4.0 - Update for HA 2024.04","draft":false,"prerelease":false,"created_at":"2024-03-30T11:18:31Z","published_at":"2024-03-30T12:26:37Z","assets":[],"tarball_url":"https://api.github.com/repos/joBr99/nspanel-lovelace-ui/tarball/v4.4.0","zipball_url":"https://api.github.com/repos/joBr99/nspanel-lovelace-ui/zipball/v4.4.0","body":"## Besides the Update of the App in HACS you need to do the following things:\r\n\r\n🔄 **Restart the AppDaemon Container**\r\n\r\n**Add the following workaround to your Home Assistant configuration.yaml**\r\n\r\nhttps://docs.nspanel.pky.eu/stable/prepare_ha/#workaround-for-homeassistant-202404\r\n\r\n🔄 **Restart Home Assistant**\r\n\r\n## New Features:\r\n\r\n- **Implemented changes to work with upcoming Homeassistant Version 2024.04 @joBr99**\r\n","mentions_count":1}
        
        T 1 Reply Last reply
        0
        • K Kerschte_de

          @tt-tom
          Hallo Tom. Vielen Dank, dass Du Dich der Sache so schnell annimmst. Ich bin gerade auch nochmal das Video von Matthias durchgegangen, ob ich irgendwas entdecke ... habe einige Datenpunkte auch nochmal exakt nach seinem Video angelegt und dann im Script hinterlegt. Leider weiter ohne Erfolg.

          14.12.2024, 18:20:28.125	[info ]: javascript.0 (363) Compiling TypeScript source script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT
          14.12.2024, 18:20:28.391	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: source code did not change, using cached compilation result...
          14.12.2024, 18:20:28.456	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: --- start of NsPanelTs: 0_userdata.0.NSPanel.1. ---
          14.12.2024, 18:20:28.459	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: setObjects enabled - create Alias Channels possible
          14.12.2024, 18:20:28.460	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: weather alias for accuweather.0. already exists
          14.12.2024, 18:20:28.464	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: registered 41 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
          14.12.2024, 18:20:28.502	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Desired TFT Firmware: 53 / v4.4.0
          14.12.2024, 18:20:28.502	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Installed TFT Firmware: 53 / v4.4.0
          14.12.2024, 18:20:28.720	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Debug mode activated
          14.12.2024, 18:20:28.788	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Tasmota Buzzer disabled
          14.12.2024, 18:20:28.800	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: NaN W
          14.12.2024, 18:20:28.801	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: get_current_tasmota_ip_address: 192.168.188.240
          14.12.2024, 18:20:28.809	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Requesting tasmota firmware version
          14.12.2024, 18:20:28.810	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Requesting current berry driver version
          14.12.2024, 18:20:28.811	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: get_current_tasmota_ip_address: 192.168.188.240
          14.12.2024, 18:20:28.811	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Requesting online berry driver version
          14.12.2024, 18:20:28.811	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Requesting online TFT version
          14.12.2024, 18:20:28.813	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Requesting online firmware version
          14.12.2024, 18:20:28.828	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: import adbase as ad
          
          from luibackend.config import LuiBackendConfig
          from luibackend.controller import LuiController
          from luibackend.mqtt import LuiMqttListener, LuiMqttSender
          from luibackend.updater import Updater
          
          import apis
          import json
          from typing import Literal
          
          class NsPanelLovelaceUIManager(ad.ADBase):
          
              def initialize(self):
                  self.adapi = self.get_ad_api()
                  self.adapi.log('Starting')
                  apis.ad_api = self.adapi
                  apis.ha_api   = self.get_plugin_api("HASS")
                  apis.mqtt_api = self.get_plugin_api("MQTT")
          
                  cfg = self._cfg = LuiBackendConfig(apis.ha_api, self.args["config"])
          
                  use_api = cfg.get("use_api") == True
          
                  topic_send = cfg.get("panelSendTopic")
                  topic_recv = cfg.get("panelRecvTopic")
                  api_panel_name = cfg.get("panelName")
                  api_device_id = cfg.get("panelDeviceId")
                  quiet = cfg.get("quiet")
          
                  mqttsender = self._mqttsender = LuiMqttSender(apis.ha_api, use_api, topic_send, api_panel_name, quiet)
          
                  self._controller = LuiController(cfg, mqttsender.send_mqtt_msg)
                  
                  desired_tasmota_driver_version   = 8
                  desired_display_firmware_version = 53
                  version     = "v4.3.3"
                  
                  model       = cfg.get("model")
                  if model == "us-l":
                      desired_display_firmware_url = cfg._config.get("displayURL-US-L", f"http://nspanel.pky.eu/lovelace-ui/github/nspanel-us-l-{version}.tft")
                  elif model == "us-p":
                      desired_display_firmware_url = cfg._config.get("displayURL-US-P", f"http://nspanel.pky.eu/lovelace-ui/github/nspanel-us-p-{version}.tft")
                  else:
                      desired_display_firmware_url = cfg._config.get("displayURL-EU",   f"http://nspanel.pky.eu/lovelace-ui/github/nspanel-{version}.tft")
                  desired_tasmota_driver_url       = cfg._config.get("berryURL",         "https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/tasmota/autoexec.be")
          
                  mode = cfg.get("updateMode")
                  updater = Updater(self.adapi.log, mqttsender, topic_send, mode, desired_display_firmware_version, model, desired_display_firmware_url, desired_tasmota_driver_version, desired_tasmota_driver_url)
                  
                  # Request Tasmota Driver Version
                  updater.request_berry_driver_version()
          
                  LuiMqttListener(use_api, topic_recv, api_panel_name, api_device_id, self._controller, updater)
          
                  self.adapi.log(f'Started ({version})')
                  
              #
              # helpers
              #
              
              def show_card(self, card_key: str) -> None:
                  """Used to show card on panel"""
                  
                  msg = json.dumps({"CustomRecv":f"event,buttonPress2,navigate.{card_key},button"})
                  topic = self._cfg.get("panelRecvTopic")
                  self._mqttsender.send_mqtt_msg(msg, topic)
                  
              def navigate(self, direction: Literal['up', 'prev', 'next']) -> None:
                  """Used to navigate different directions on the panel"""
                  
                  msg = json.dumps({"CustomRecv":f"event,buttonPress2,nav{direction.title()},button"})
                  topic = self._cfg.get("panelRecvTopic")
                  self._mqttsender.send_mqtt_msg(msg, topic)
                  
              @property
              def current_card(self) -> str:
                  """Used to get the panel's current card"""
                  
                  return self._controller.current_card.key
          
          14.12.2024, 18:20:28.832	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: # Sonoff NSPanel Tasmota Lovelace UI Berry Driver (Extended Flashing to faster speeds; improved Error Handling)| 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 flash_proto_version
              var flash_proto_baud
              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(4096)
                      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.deinit()
                      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
                                  tasmota.delay(50)
                                  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))
                                  if self.flash_proto_version == 0
                                      self.sendnx(string.format("whmi-wri %d,%d,res0",self.flash_size,self.flash_proto_baud))
                                  else
                                      self.sendnx(string.format("whmi-wris %d,%d,res0",self.flash_size,self.flash_proto_baud))
                                  end
                                  if self.flash_proto_baud != 115200
                                      tasmota.delay(50)
                                      self.ser.deinit()
                                      self.ser = serial(17, 16, self.flash_proto_baud, serial.SERIAL_8N1)
                                  end
                              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
                  self.flash_proto_version = 1
                  self.flash_proto_baud = 921600
              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 = 9
              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 path
                  import string
          		if string.find(payload, ".tapp") > 0
          		    print("tapp in URL; will do .tapp update and migration if necessary")
          			
          			if path.exists("autoexec.be")
          			    print("autoexec.be found; will check for migration")
          				var autoexecfile = open('autoexec.be')
          				var line = autoexecfile.readline()
          				autoexecfile.close()
          				if string.find(line, "NSPanel Tasmota Lovelace UI Berry Driver") > 0
          			        print("found lovelace berry driver, going to delete autoexec.be and .bec")
          					path.remove("autoexec.be")
          					path.remove("autoexec.bec")
          				end
          			end
          			
          			var r = tasmota.urlfetch(payload, "nsp-lovelace-driver.tapp")
                      if r < 0
                          print("Update failed")
                      else
                          tasmota.cmd("Restart 1")
                      end
          			
          		elif string.find(payload, ".be") > 0
          		    print("be in URL; will do .be update")
          			if path.exists("nsp-lovelace-driver.tapp")
          			    print("Error: there is the tapp version of the berry driver installed; cannot do .be update.")
          			else
                          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")
                              tasmota.cmd("Restart 1")
                          end
          			end
          		else
          			print("invalid url filetype")
          		end
          		
          		
          		
                  if path.exists("nsp-lovelace-driver.tapp")
                      var r = string.find(payload, ".tapp")
                      if r < 0
                          print("URL doesn't contain .tapp skipping update")
                      else
          
                      end
                  else
                      var r = string.find(payload, ".be")
                      if r < 0
                          print("URL doesn't contain .be skipping update")
                      else
                  
                      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_proto_version = 1
              nextion.flash_proto_baud = 921600
                  nextion.flash_nextion(payload)
              end
              tasmota.set_timer(0,task)
              tasmota.resp_cmnd_done()
          end
          
          def flash_nextion_adv(cmd, idx, payload, payload_json)
              def task()        
                  if idx==0
                      nextion.flash_proto_version = 1
                      nextion.flash_proto_baud = 921600
                  elif idx==1
                      nextion.flash_proto_version = 0
                      nextion.flash_proto_baud = 921600
                  elif idx==2
                      nextion.flash_proto_version = 1
                      nextion.flash_proto_baud = 115200
                  elif idx==3
                      nextion.flash_proto_version = 0
                      nextion.flash_proto_baud = 115200
                  elif idx==4
                      nextion.flash_proto_version = 1
                      nextion.flash_proto_baud = 256000
                  elif idx==5
                      nextion.flash_proto_version = 0
                      nextion.flash_proto_baud = 256000
                  elif idx==6
                      nextion.ser.deinit()
                      nextion.ser = serial(17, 16, 9600, serial.SERIAL_8N1)
                      nextion.flash_proto_version = 0
                      nextion.flash_proto_baud = 921600
                  else
                      nextion.flash_proto_version = 0
                      nextion.flash_proto_baud = 115200
                  end
                  
                  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)
          tasmota.add_cmd('FlashNextionAdv', flash_nextion_adv)
          
          14.12.2024, 18:20:28.835	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: online display firmware version => 53
          14.12.2024, 18:20:28.852	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: {"nlui_driver_version":"9"}
          14.12.2024, 18:20:28.855	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: current tasmota firmware version => 14.3.0
          14.12.2024, 18:20:28.855	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: online berry driver version => 9
          14.12.2024, 18:20:28.882	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: current berry driver version => 9
          14.12.2024, 18:20:28.926	[info ]: javascript.0 (363) script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: hidden Cards disabled
          
          
          T Offline
          T Offline
          TT-Tom
          wrote on last edited by
          #6649

          @kerschte_de

          aus dem Script diese Zeilen zeigen und ein Screenshot vom MQTT baum des Panel

          // DE: Anpassen an die Verzeichnisse der MQTT-Adapter-Instanz
          // EN: Adapt to the MQTT adapter instance directories
          const NSPanelReceiveTopic: string = 'mqtt.0.SmartHome.NSPanel_1.tele.RESULT';
          const NSPanelSendTopic: string = 'mqtt.0.SmartHome.NSPanel_1.cmnd.CustomSend';
          

          Gruß Tom
          https://github.com/tt-tom17
          Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

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

          NSPanel Adapter Wiki
          https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

          K 1 Reply Last reply
          0
          • K Kerschte_de

            @kerschte_de

            da ist was durcheinandergekommen, da ich die maximale Zeichenzahl übersteige. Ich versuche es nochmal ab Zeile 572

            javascript.0	18:20:28.125	info	Compiling TypeScript source script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT
            javascript.0	18:20:28.391	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: source code did not change, using cached compilation result...
            javascript.0	18:20:28.456	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: --- start of NsPanelTs: 0_userdata.0.NSPanel.1. ---
            javascript.0	18:20:28.459	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: setObjects enabled - create Alias Channels possible
            javascript.0	18:20:28.460	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: weather alias for accuweather.0. already exists
            javascript.0	18:20:28.464	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: registered 41 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
            javascript.0	18:20:28.502	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Desired TFT Firmware: 53 / v4.4.0
            javascript.0	18:20:28.502	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Installed TFT Firmware: 53 / v4.4.0
            javascript.0	18:20:28.720	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Debug mode activated
            javascript.0	18:20:28.788	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Tasmota Buzzer disabled
            javascript.0	18:20:28.800	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: NaN W
            javascript.0	18:20:28.801	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: get_current_tasmota_ip_address: 192.168.188.240
            javascript.0	18:20:28.809	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Requesting tasmota firmware version
            javascript.0	18:20:28.810	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Requesting current berry driver version
            javascript.0	18:20:28.811	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: get_current_tasmota_ip_address: 192.168.188.240
            javascript.0	18:20:28.811	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Requesting online berry driver version
            javascript.0	18:20:28.811	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Requesting online TFT version
            javascript.0	18:20:28.813	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: Requesting online firmware version
            javascript.0	18:20:28.828	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: import adbase as ad from luibackend.config import LuiBackendConfig from luibackend.controller import LuiController from luibackend.mqtt import LuiMqttListener, LuiMqttSender from luibackend.updater import Updater import apis import json from typing import Literal class NsPanelLovelaceUIManager(ad.ADBase): def initialize(self): self.adapi = self.get_ad_api() self.adapi.log('Starting') apis.ad_api = self.adapi apis.ha_api = self.get_plugin_api("HASS") apis.mqtt_api = self.get_plugin_api("MQTT") cfg = self._cfg = LuiBackendConfig(apis.ha_api, self.args["config"]) use_api = cfg.get("use_api") == True topic_send = cfg.get("panelSendTopic") topic_recv = cfg.get("panelRecvTopic") api_panel_name = cfg.get("panelName") api_device_id = cfg.get("panelDeviceId") quiet = cfg.get("quiet") mqttsender = self._mqttsender = LuiMqttSender(apis.ha_api, use_api, topic_send, api_panel_name, quiet) self._controller = LuiController(cfg, mqttsender.send_mqtt_msg) desired_tasmota_driver_version = 8 desired_display_firmware_version = 53 version = "v4.3.3" model = cfg.get("model") if model == "us-l": desired_display_firmware_url = cfg._config.get("displayURL-US-L", f"http://nspanel.pky.eu/lovelace-ui/github/nspanel-us-l-{version}.tft") elif model == "us-p": desired_display_firmware_url = cfg._config.get("displayURL-US-P", f"http://nspanel.pky.eu/lovelace-ui/github/nspanel-us-p-{version}.tft") else: desired_display_firmware_url = cfg._config.get("displayURL-EU", f"http://nspanel.pky.eu/lovelace-ui/github/nspanel-{version}.tft") desired_tasmota_driver_url = cfg._config.get("berryURL", "https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/tasmota/autoexec.be") mode = cfg.get("updateMode") updater = Updater(self.adapi.log, mqttsender, topic_send, mode, desired_display_firmware_version, model, desired_display_firmware_url, desired_tasmota_driver_version, desired_tasmota_driver_url) # Request Tasmota Driver Version updater.request_berry_driver_version() LuiMqttListener(use_api, topic_recv, api_panel_name, api_device_id, self._controller, updater) self.adapi.log(f'Started ({version})') # # helpers # def show_card(self, card_key: str) -> None: """Used to show card on panel""" msg = json.dumps({"CustomRecv":f"event,buttonPress2,navigate.{card_key},button"}) topic = self._cfg.get("panelRecvTopic") self._mqttsender.send_mqtt_msg(msg, topic) def navigate(self, direction: Literal['up', 'prev', 'next']) -> None: """Used to navigate different directions on the panel""" msg = json.dumps({"CustomRecv":f"event,buttonPress2,nav{direction.title()},button"}) topic = self._cfg.get("panelRecvTopic") self._mqttsender.send_mqtt_msg(msg, topic) @property def current_card(self) -> str: """Used to get the panel's current card""" return self._controller.current_card.key
            javascript.0	18:20:28.832	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: # Sonoff NSPanel Tasmota Lovelace UI Berry Driver (Extended Flashing to faster speeds; improved Error Handling)| 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 flash_proto_version var flash_proto_baud 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(4096) 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.deinit() 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 tasmota.delay(50) 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)) if self.flash_proto_version == 0 self.sendnx(string.format("whmi-wri %d,%d,res0",self.flash_size,self.flash_proto_baud)) else self.sendnx(string.format("whmi-wris %d,%d,res0",self.flash_size,self.flash_proto_baud)) end if self.flash_proto_baud != 115200 tasmota.delay(50) self.ser.deinit() self.ser = serial(17, 16, self.flash_proto_baud, serial.SERIAL_8N1) end 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 self.flash_proto_version = 1 self.flash_proto_baud = 921600 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 = 9 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 path import string if string.find(payload, ".tapp") > 0 print("tapp in URL; will do .tapp update and migration if necessary") if path.exists("autoexec.be") print("autoexec.be found; will check for migration") var autoexecfile = open('autoexec.be') var line = autoexecfile.readline() autoexecfile.close() if string.find(line, "NSPanel Tasmota Lovelace UI Berry Driver") > 0 print("found lovelace berry driver, going to delete autoexec.be and .bec") path.remove("autoexec.be") path.remove("autoexec.bec") end end var r = tasmota.urlfetch(payload, "nsp-lovelace-driver.tapp") if r < 0 print("Update failed") else tasmota.cmd("Restart 1") end elif string.find(payload, ".be") > 0 print("be in URL; will do .be update") if path.exists("nsp-lovelace-driver.tapp") print("Error: there is the tapp version of the berry driver installed; cannot do .be update.") else 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") tasmota.cmd("Restart 1") end end else print("invalid url filetype") end if path.exists("nsp-lovelace-driver.tapp") var r = string.find(payload, ".tapp") if r < 0 print("URL doesn't contain .tapp skipping update") else end else var r = string.find(payload, ".be") if r < 0 print("URL doesn't contain .be skipping update") else 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_proto_version = 1 nextion.flash_proto_baud = 921600 nextion.flash_nextion(payload) end tasmota.set_timer(0,task) tasmota.resp_cmnd_done() end def flash_nextion_adv(cmd, idx, payload, payload_json) def task() if idx==0 nextion.flash_proto_version = 1 nextion.flash_proto_baud = 921600 elif idx==1 nextion.flash_proto_version = 0 nextion.flash_proto_baud = 921600 elif idx==2 nextion.flash_proto_version = 1 nextion.flash_proto_baud = 115200 elif idx==3 nextion.flash_proto_version = 0 nextion.flash_proto_baud = 115200 elif idx==4 nextion.flash_proto_version = 1 nextion.flash_proto_baud = 256000 elif idx==5 nextion.flash_proto_version = 0 nextion.flash_proto_baud = 256000 elif idx==6 nextion.ser.deinit() nextion.ser = serial(17, 16, 9600, serial.SERIAL_8N1) nextion.flash_proto_version = 0 nextion.flash_proto_baud = 921600 else nextion.flash_proto_version = 0 nextion.flash_proto_baud = 115200 end 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) tasmota.add_cmd('FlashNextionAdv', flash_nextion_adv)
            javascript.0	18:20:28.835	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: online display firmware version => 53
            javascript.0	18:20:28.852	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: {"nlui_driver_version":"9"}
            javascript.0	18:20:28.855	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: current tasmota firmware version => 14.3.0
            javascript.0	18:20:28.855	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: online berry driver version => 9
            javascript.0	18:20:28.882	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: current berry driver version => 9
            javascript.0	18:20:28.926	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: hidden Cards disabled
            javascript.0	18:20:29.007	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_KeT: {"url":"https://api.github.com/repos/joBr99/nspanel-lovelace-ui/releases/149090497","assets_url":"https://api.github.com/repos/joBr99/nspanel-lovelace-ui/releases/149090497/assets","upload_url":"https://uploads.github.com/repos/joBr99/nspanel-lovelace-ui/releases/149090497/assets{?name,label}","html_url":"https://github.com/joBr99/nspanel-lovelace-ui/releases/tag/v4.4.0","id":149090497,"author":{"login":"joBr99","id":29555657,"node_id":"MDQ6VXNlcjI5NTU1NjU3","avatar_url":"https://avatars.githubusercontent.com/u/29555657?v=4","gravatar_id":"","url":"https://api.github.com/users/joBr99","html_url":"https://github.com/joBr99","followers_url":"https://api.github.com/users/joBr99/followers","following_url":"https://api.github.com/users/joBr99/following{/other_user}","gists_url":"https://api.github.com/users/joBr99/gists{/gist_id}","starred_url":"https://api.github.com/users/joBr99/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/joBr99/subscriptions","organizations_url":"https://api.github.com/users/joBr99/orgs","repos_url":"https://api.github.com/users/joBr99/repos","events_url":"https://api.github.com/users/joBr99/events{/privacy}","received_events_url":"https://api.github.com/users/joBr99/received_events","type":"User","user_view_type":"public","site_admin":false},"node_id":"RE_kwDOGo1zRM4I4vDB","tag_name":"v4.4.0","target_commitish":"main","name":"v4.4.0 - Update for HA 2024.04","draft":false,"prerelease":false,"created_at":"2024-03-30T11:18:31Z","published_at":"2024-03-30T12:26:37Z","assets":[],"tarball_url":"https://api.github.com/repos/joBr99/nspanel-lovelace-ui/tarball/v4.4.0","zipball_url":"https://api.github.com/repos/joBr99/nspanel-lovelace-ui/zipball/v4.4.0","body":"## Besides the Update of the App in HACS you need to do the following things:\r\n\r\n🔄 **Restart the AppDaemon Container**\r\n\r\n**Add the following workaround to your Home Assistant configuration.yaml**\r\n\r\nhttps://docs.nspanel.pky.eu/stable/prepare_ha/#workaround-for-homeassistant-202404\r\n\r\n🔄 **Restart Home Assistant**\r\n\r\n## New Features:\r\n\r\n- **Implemented changes to work with upcoming Homeassistant Version 2024.04 @joBr99**\r\n","mentions_count":1}
            
            T Offline
            T Offline
            TT-Tom
            wrote on last edited by
            #6650

            @kerschte_de

            kannst zurück setzen

            Gruß Tom
            https://github.com/tt-tom17
            Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

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

            NSPanel Adapter Wiki
            https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

            1 Reply Last reply
            0
            • T TT-Tom

              @kerschte_de

              aus dem Script diese Zeilen zeigen und ein Screenshot vom MQTT baum des Panel

              // DE: Anpassen an die Verzeichnisse der MQTT-Adapter-Instanz
              // EN: Adapt to the MQTT adapter instance directories
              const NSPanelReceiveTopic: string = 'mqtt.0.SmartHome.NSPanel_1.tele.RESULT';
              const NSPanelSendTopic: string = 'mqtt.0.SmartHome.NSPanel_1.cmnd.CustomSend';
              
              K Offline
              K Offline
              Kerschte_de
              wrote on last edited by
              #6651

              @tt-tom
              ... ja, mache ich:

              /***** 1. Tasmota-Config *****/
              
                  // DE: Anpassen an die Verzeichnisse der MQTT-Adapter-Instanz
                  // EN: Adapt to the MQTT adapter instance directories
                  const NSPanelReceiveTopic: string = 'mqtt.0.RagowSmartHome.NSPanel_85C180.tele.RESULT';
                  const NSPanelSendTopic: string = 'mqtt.0.RagowSmartHome.NSPanel_85C180.cmnd.CustomSend';
              
                  // DE: nur ändern, falls der User im Tasmota vor dem Kompilieren umbenannt wurde (Standard Tasmota: admin)
                  // EN: only change if the user was renamed in Tasmota before compiling (default Tasmota: admin)
                  const tasmota_web_admin_user: string = 'admin';
                  
                  // DE: setzten, falls "Web Admin Password" in Tasmota vergeben
                  // EN set if "Web Admin Password" is assigned in Tasmota
                  const tasmota_web_admin_password: string = '';
              
                  // DE: Setzen der bevorzugten Tasmota32-Version (für Updates)
                  // EN: Set preferred Tasmota32 version (for updates)
                  const tasmotaOtaVersion: string = 'tasmota32-DE.bin';
                      // DE: Es können ebenfalls andere Versionen verwendet werden wie zum Beispiel:
                      // EN: Other versions can also be used, such as:
                      // 'tasmota32-nspanel.bin' or 'tasmota32.bin' or 'tasmota32-DE.bin' or etc.
              

              27c27a5a-c80a-4316-8db4-3e4f0dfc4f57-image.png

              T 1 Reply Last reply
              0
              • K Kerschte_de

                @tt-tom
                ... ja, mache ich:

                /***** 1. Tasmota-Config *****/
                
                    // DE: Anpassen an die Verzeichnisse der MQTT-Adapter-Instanz
                    // EN: Adapt to the MQTT adapter instance directories
                    const NSPanelReceiveTopic: string = 'mqtt.0.RagowSmartHome.NSPanel_85C180.tele.RESULT';
                    const NSPanelSendTopic: string = 'mqtt.0.RagowSmartHome.NSPanel_85C180.cmnd.CustomSend';
                
                    // DE: nur ändern, falls der User im Tasmota vor dem Kompilieren umbenannt wurde (Standard Tasmota: admin)
                    // EN: only change if the user was renamed in Tasmota before compiling (default Tasmota: admin)
                    const tasmota_web_admin_user: string = 'admin';
                    
                    // DE: setzten, falls "Web Admin Password" in Tasmota vergeben
                    // EN set if "Web Admin Password" is assigned in Tasmota
                    const tasmota_web_admin_password: string = '';
                
                    // DE: Setzen der bevorzugten Tasmota32-Version (für Updates)
                    // EN: Set preferred Tasmota32 version (for updates)
                    const tasmotaOtaVersion: string = 'tasmota32-DE.bin';
                        // DE: Es können ebenfalls andere Versionen verwendet werden wie zum Beispiel:
                        // EN: Other versions can also be used, such as:
                        // 'tasmota32-nspanel.bin' or 'tasmota32.bin' or 'tasmota32-DE.bin' or etc.
                

                27c27a5a-c80a-4316-8db4-3e4f0dfc4f57-image.png

                T Offline
                T Offline
                TT-Tom
                wrote on last edited by
                #6652

                @kerschte_de
                der tele fehlt, der ist entscheidend

                Gruß Tom
                https://github.com/tt-tom17
                Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

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

                NSPanel Adapter Wiki
                https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

                K 1 Reply Last reply
                0
                • T TT-Tom

                  @kerschte_de
                  der tele fehlt, der ist entscheidend

                  K Offline
                  K Offline
                  Kerschte_de
                  wrote on last edited by
                  #6653

                  @tt-tom ... oh, sorry.

                  b4a83219-57aa-46de-ac5d-afe1df3d83b0-image.png

                  T 1 Reply Last reply
                  0
                  • K Kerschte_de

                    @tt-tom ... oh, sorry.

                    b4a83219-57aa-46de-ac5d-afe1df3d83b0-image.png

                    T Offline
                    T Offline
                    TT-Tom
                    wrote on last edited by
                    #6654

                    @kerschte_de

                    okay hier stimmt alles, jetzt bitte die Config einer Seite wo keine Werte kommen und den passenden Objektbaum vom ioBroker

                    Gruß Tom
                    https://github.com/tt-tom17
                    Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

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

                    NSPanel Adapter Wiki
                    https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

                    K 2 Replies Last reply
                    0
                    • T TT-Tom

                      @kerschte_de

                      okay hier stimmt alles, jetzt bitte die Config einer Seite wo keine Werte kommen und den passenden Objektbaum vom ioBroker

                      K Offline
                      K Offline
                      Kerschte_de
                      wrote on last edited by
                      #6655

                      @tt-tom ja, gern.

                      Die Hauptseite ("HOME") dient der Navigation auf Unterseiten. Aktuell habe ich nur noch die im Erdgeschoss aktiv. Dort sind testweise 2 Temperatur-Sensoren verlinkt ... es kommt jedoch nichts an Werten an. Die Seiten selbst funktionieren alle ... so auch wie der Screensaver und das komplette Service-Menu:

                      //-- Anfang für eigene Seiten -- z.T. selbstdefinierte Aliase erforderlich ----------------
                      //-- Start for your own pages -- some self-defined aliases required ----------------
                      
                          //-- https://github.com/joBr99/nspanel-lovelace-ui/wiki/NSPanel-Page-%E2%80%90-Typen_How-2_Beispiele
                      
                      //-- ##### ##### ##### KERSTEN #### ##### #####
                      //Level 0
                      
                      let Navigation1: PageType =
                      {
                          'type': 'cardGrid',
                          'heading': 'HOME',
                          'useColor': true,
                          'items': [
                              /*PageItem*/{ navigate: true, id: 'SensorenEG', icon: 'home-floor-0',offColor: Menu, onColor: Menu, name: 'Sensoren EG'},
                              //*PageItem*/{ navigate: true, id: 'SensorenOG', icon: 'home-floor-1',offColor: Menu, onColor: Menu, name: 'Sensoren OG'},
                              //*PageItem*/{ navigate: true, id: 'SensorenKeller', icon: 'home-floor-negative-1',offColor: Menu, onColor: Menu, name: 'Sensoren Keller'},
                              /*PageItem*/{ navigate: true, id: 'NSPanel_Service', icon: 'hammer-screwdriver',offColor: Menu, onColor: Menu, name: 'ServiceMenu'},
                              //{ id: 'alias.0.NSPanel_1.TestFenster', offColor: MSRed, onColor: MSGreen, name: 'Büro Fenster'},
                              //{ id: 'alias.0.NSPanel_1.Luftreiniger', icon: 'power', offColor: MSRed, onColor: MSGreen},
                              //{ id: 'alias.0.NSPanel_1.TestBlind', icon: 'projector-screen', onColor: White, name: 'Beamer', secondRow: 'auch Text'},
                              //{ id: 'alias.0.NSPanel_1.Kippfenster', useValue: true }
                          ]
                      };
                      
                      
                           //Level 1
                           let SensorenEG: PageType =
                           {
                               'type': 'cardGrid',
                               'heading': 'Zigbee-Geräte EG',
                               'useColor': true,
                               'subPage': true,
                               'parent': Navigation1,
                               'items': [
                                   { id: 'alias.0.NSPanel.1.1_Haus.EG.TempWZ.ACTUAL', name: 'WZ Temp.°C', offColor: MSRed, onColor: MSGreen, useValue: true, fontSize: 3, colorScale: {'val_min': 15, 'val_max': 35, 'val_best': 21} },
                                   {},
                                   { id: 'alias.0.NSPanel.1.1_Haus.EG.TempWZ.SECOND', name: 'WZ Luft %', offColor: MSYellow, onColor: MSYellow , useValue: true, fontSize: 3, colorScale: {'val_min': 30, 'val_max': 100, 'val_best': 60} },
                                   { id: 'alias.0.NSPanel.1.1_Haus.EG.TempKueche.ACTUAL', name: 'Küche Temp.°C', offColor: MSRed, onColor: MSGreen, useValue: true, fontSize: 3, colorScale: {'val_min': 15, 'val_max': 35, 'val_best': 21} },
                                   {},
                                   { id: 'alias.0.NSPanel.1.1_Haus.EG.TempKueche.SECOND', name: 'Küche Luft %', offColor: MSYellow, onColor: MSYellow , useValue: true, fontSize: 3, colorScale: {'val_min': 30, 'val_max': 100, 'val_best': 60} },
                               ]
                           };
                      
                      
                      //-- ENDE für eigene Seiten -- z.T. selbstdefinierte Aliase erforderlich -------------------------
                      
                      

                      Hier noch die Einbindung der Seiten selbst:

                      /***********************************************************************
                       **                                                                   **
                       **                           Configuration                           **
                       **                                                                   **
                       ***********************************************************************/
                      
                      export const config: Config = {
                          // Seiteneinteilung / Page division
                          // Hauptseiten / Mainpages
                          pages: [
                              Navigation1,
                              //NSPanel_Service, //Auto-Alias Service Page
                              //Unlock_Service            //Auto-Alias Service Page (Service Pages used with cardUnlock)
                          ],
                          // Unterseiten / Subpages
                          subPages: [
                              SensorenEG, // --> KeT hinzugefügt
                              NSPanel_Service, //Auto-Alias Service Page --> KeT von der Hauptseite auf die Sub-Seite verschoben (über Auskommentierung)
                              NSPanel_Service_SubPage, //Auto-Alias Service Page (only used with cardUnlock)
                              NSPanel_Infos, //Auto-Alias Service Page
                              NSPanel_Wifi_Info_1, //Auto-Alias Service Page
                              NSPanel_Wifi_Info_2, //Auto-Alias Service Page
                              NSPanel_Sensoren, //Auto-Alias Service Page
                              NSPanel_Hardware, //Auto-Alias Service Page
                              NSPanel_IoBroker, //Auot-Alias Service Page
                              NSPanel_Einstellungen, //Auto-Alias Service Page
                              NSPanel_Screensaver, //Auto-Alias Service Page
                              NSPanel_ScreensaverDimmode, //Auto-Alias Service Page
                              NSPanel_ScreensaverBrightness, //Auto-Alias Service Page
                              NSPanel_ScreensaverLayout, //Auto-Alias Service Page
                              NSPanel_ScreensaverWeather, //Auto-Alias Service Page
                              NSPanel_ScreensaverDateformat, //Auto-Alias Service Page
                              NSPanel_ScreensaverIndicators, //Auto-Alias Service Page
                              NSPanel_Relays, //Auto-Alias Service Page
                              NSPanel_Script, //Auto-Alias Service Page
                              NSPanel_Firmware, //Auto-Alias Service Page
                              NSPanel_FirmwareTasmota, //Auto-Alias Service Page
                              NSPanel_FirmwareBerry, //Auto-Alias Service Page
                              NSPanel_FirmwareNextion, //Auto-Alias Service Page
                          ],
                      
                      

                      und hier der Sreenshot der beiden Temperatur-Sensoren:
                      e1a77316-92dd-492a-9da3-f256db1f7263-image.png

                      T 1 Reply Last reply
                      0
                      • T TT-Tom

                        @kerschte_de

                        okay hier stimmt alles, jetzt bitte die Config einer Seite wo keine Werte kommen und den passenden Objektbaum vom ioBroker

                        K Offline
                        K Offline
                        Kerschte_de
                        wrote on last edited by
                        #6656

                        @tt-tom
                        Das Konstrukt hatte in der alten Umgebung funktioniert. Testweise hatte ich es auf etliche Sensoren in den unterschiedlichen Etagen mal aufgebaut. Aktuell funktionieren die Seiten weiterhin, nur die Inhalte der Sensoren werden nicht transferiert.

                        1 Reply Last reply
                        0
                        • K Kerschte_de

                          @tt-tom ja, gern.

                          Die Hauptseite ("HOME") dient der Navigation auf Unterseiten. Aktuell habe ich nur noch die im Erdgeschoss aktiv. Dort sind testweise 2 Temperatur-Sensoren verlinkt ... es kommt jedoch nichts an Werten an. Die Seiten selbst funktionieren alle ... so auch wie der Screensaver und das komplette Service-Menu:

                          //-- Anfang für eigene Seiten -- z.T. selbstdefinierte Aliase erforderlich ----------------
                          //-- Start for your own pages -- some self-defined aliases required ----------------
                          
                              //-- https://github.com/joBr99/nspanel-lovelace-ui/wiki/NSPanel-Page-%E2%80%90-Typen_How-2_Beispiele
                          
                          //-- ##### ##### ##### KERSTEN #### ##### #####
                          //Level 0
                          
                          let Navigation1: PageType =
                          {
                              'type': 'cardGrid',
                              'heading': 'HOME',
                              'useColor': true,
                              'items': [
                                  /*PageItem*/{ navigate: true, id: 'SensorenEG', icon: 'home-floor-0',offColor: Menu, onColor: Menu, name: 'Sensoren EG'},
                                  //*PageItem*/{ navigate: true, id: 'SensorenOG', icon: 'home-floor-1',offColor: Menu, onColor: Menu, name: 'Sensoren OG'},
                                  //*PageItem*/{ navigate: true, id: 'SensorenKeller', icon: 'home-floor-negative-1',offColor: Menu, onColor: Menu, name: 'Sensoren Keller'},
                                  /*PageItem*/{ navigate: true, id: 'NSPanel_Service', icon: 'hammer-screwdriver',offColor: Menu, onColor: Menu, name: 'ServiceMenu'},
                                  //{ id: 'alias.0.NSPanel_1.TestFenster', offColor: MSRed, onColor: MSGreen, name: 'Büro Fenster'},
                                  //{ id: 'alias.0.NSPanel_1.Luftreiniger', icon: 'power', offColor: MSRed, onColor: MSGreen},
                                  //{ id: 'alias.0.NSPanel_1.TestBlind', icon: 'projector-screen', onColor: White, name: 'Beamer', secondRow: 'auch Text'},
                                  //{ id: 'alias.0.NSPanel_1.Kippfenster', useValue: true }
                              ]
                          };
                          
                          
                               //Level 1
                               let SensorenEG: PageType =
                               {
                                   'type': 'cardGrid',
                                   'heading': 'Zigbee-Geräte EG',
                                   'useColor': true,
                                   'subPage': true,
                                   'parent': Navigation1,
                                   'items': [
                                       { id: 'alias.0.NSPanel.1.1_Haus.EG.TempWZ.ACTUAL', name: 'WZ Temp.°C', offColor: MSRed, onColor: MSGreen, useValue: true, fontSize: 3, colorScale: {'val_min': 15, 'val_max': 35, 'val_best': 21} },
                                       {},
                                       { id: 'alias.0.NSPanel.1.1_Haus.EG.TempWZ.SECOND', name: 'WZ Luft %', offColor: MSYellow, onColor: MSYellow , useValue: true, fontSize: 3, colorScale: {'val_min': 30, 'val_max': 100, 'val_best': 60} },
                                       { id: 'alias.0.NSPanel.1.1_Haus.EG.TempKueche.ACTUAL', name: 'Küche Temp.°C', offColor: MSRed, onColor: MSGreen, useValue: true, fontSize: 3, colorScale: {'val_min': 15, 'val_max': 35, 'val_best': 21} },
                                       {},
                                       { id: 'alias.0.NSPanel.1.1_Haus.EG.TempKueche.SECOND', name: 'Küche Luft %', offColor: MSYellow, onColor: MSYellow , useValue: true, fontSize: 3, colorScale: {'val_min': 30, 'val_max': 100, 'val_best': 60} },
                                   ]
                               };
                          
                          
                          //-- ENDE für eigene Seiten -- z.T. selbstdefinierte Aliase erforderlich -------------------------
                          
                          

                          Hier noch die Einbindung der Seiten selbst:

                          /***********************************************************************
                           **                                                                   **
                           **                           Configuration                           **
                           **                                                                   **
                           ***********************************************************************/
                          
                          export const config: Config = {
                              // Seiteneinteilung / Page division
                              // Hauptseiten / Mainpages
                              pages: [
                                  Navigation1,
                                  //NSPanel_Service, //Auto-Alias Service Page
                                  //Unlock_Service            //Auto-Alias Service Page (Service Pages used with cardUnlock)
                              ],
                              // Unterseiten / Subpages
                              subPages: [
                                  SensorenEG, // --> KeT hinzugefügt
                                  NSPanel_Service, //Auto-Alias Service Page --> KeT von der Hauptseite auf die Sub-Seite verschoben (über Auskommentierung)
                                  NSPanel_Service_SubPage, //Auto-Alias Service Page (only used with cardUnlock)
                                  NSPanel_Infos, //Auto-Alias Service Page
                                  NSPanel_Wifi_Info_1, //Auto-Alias Service Page
                                  NSPanel_Wifi_Info_2, //Auto-Alias Service Page
                                  NSPanel_Sensoren, //Auto-Alias Service Page
                                  NSPanel_Hardware, //Auto-Alias Service Page
                                  NSPanel_IoBroker, //Auot-Alias Service Page
                                  NSPanel_Einstellungen, //Auto-Alias Service Page
                                  NSPanel_Screensaver, //Auto-Alias Service Page
                                  NSPanel_ScreensaverDimmode, //Auto-Alias Service Page
                                  NSPanel_ScreensaverBrightness, //Auto-Alias Service Page
                                  NSPanel_ScreensaverLayout, //Auto-Alias Service Page
                                  NSPanel_ScreensaverWeather, //Auto-Alias Service Page
                                  NSPanel_ScreensaverDateformat, //Auto-Alias Service Page
                                  NSPanel_ScreensaverIndicators, //Auto-Alias Service Page
                                  NSPanel_Relays, //Auto-Alias Service Page
                                  NSPanel_Script, //Auto-Alias Service Page
                                  NSPanel_Firmware, //Auto-Alias Service Page
                                  NSPanel_FirmwareTasmota, //Auto-Alias Service Page
                                  NSPanel_FirmwareBerry, //Auto-Alias Service Page
                                  NSPanel_FirmwareNextion, //Auto-Alias Service Page
                              ],
                          
                          

                          und hier der Sreenshot der beiden Temperatur-Sensoren:
                          e1a77316-92dd-492a-9da3-f256db1f7263-image.png

                          T Offline
                          T Offline
                          TT-Tom
                          wrote on last edited by
                          #6657

                          @kerschte_de

                          du hast zwei Fehler in deinem Setup.

                          let SensorenEG: PageType =
                               {
                                   'type': 'cardGrid',
                                   'heading': 'Zigbee-Geräte EG',
                                   'useColor': true,
                                   'subPage': true,
                                   'parent': Navigation1,
                                   'items': [
                                       { id: 'alias.0.NSPanel.1.1_Haus.EG.TempWZ.ACTUAL', name: 'WZ Temp.°C', offColor: MSRed, onColor: MSGreen, useValue: true, fontSize: 3, colorScale: {'val_min': 15, 'val_max': 35, 'val_best': 21} },
                                       {},
                                       { id: 'alias.0.NSPanel.1.1_Haus.EG.TempWZ.SECOND', name: 'WZ Luft %', offColor: MSYellow, onColor: MSYellow , useValue: true, fontSize: 3, colorScale: {'val_min': 30, 'val_max': 100, 'val_best': 60} },
                                       { id: 'alias.0.NSPanel.1.1_Haus.EG.TempKueche.ACTUAL', name: 'Küche Temp.°C', offColor: MSRed, onColor: MSGreen, useValue: true, fontSize: 3, colorScale: {'val_min': 15, 'val_max': 35, 'val_best': 21} },
                                       {},
                                       { id: 'alias.0.NSPanel.1.1_Haus.EG.TempKueche.SECOND', name: 'Küche Luft %', offColor: MSYellow, onColor: MSYellow , useValue: true, fontSize: 3, colorScale: {'val_min': 30, 'val_max': 100, 'val_best': 60} },
                                   ]
                               };
                          

                          in einer Page Config, werden keine Datenpunkte angegeben, sonder immer nur die Cannel.

                          { id: 'alias.0.NSPanel.1.1_Haus.EG.TempWZ', name: 'WZ Temp.°C', offColor: MSRed, onColor: MSGreen, useValue: true, fontSize: 3, colorScale: {'val_min': 15, 'val_max': 35, 'val_best': 21} },
                          

                          dein Channel hat für diese Kombi (ACTUAL, SECOND) den falschen Typ. Diese Datenpunkte werden nur beim Thermostat ausgewertet, was auch eine andere Page zur Folge hat. Beim Type Temperature wird nur der ACTUAL ausgewertet vom Script.
                          Bedeutet du musst für jeden Sensor einen eigenen Alias erstellen.

                          Im Screensaver sieht die Sache anders aus dort wird direkt auf den Datenpunkt verwiesen. Beispiel hier

                          // leftScreensaverEntity 1 (only Advanced Screensaver)
                                      {
                                          ScreensaverEntity: NSPanel_Path + 'Sensor.ANALOG.Temperature',
                                          ScreensaverEntityFactor: 1,
                                          ScreensaverEntityDecimalPlaces: 1,
                                          ScreensaverEntityIconOn: 'thermometer',
                                          ScreensaverEntityIconOff: null,
                                          ScreensaverEntityText: 'Temperatur',
                                          ScreensaverEntityUnitText: '°C',
                                          ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 35, 'val_best': 22}
                                      },
                          

                          Gruß Tom
                          https://github.com/tt-tom17
                          Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

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

                          NSPanel Adapter Wiki
                          https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

                          K 1 Reply Last reply
                          0
                          • T TT-Tom

                            @kerschte_de

                            du hast zwei Fehler in deinem Setup.

                            let SensorenEG: PageType =
                                 {
                                     'type': 'cardGrid',
                                     'heading': 'Zigbee-Geräte EG',
                                     'useColor': true,
                                     'subPage': true,
                                     'parent': Navigation1,
                                     'items': [
                                         { id: 'alias.0.NSPanel.1.1_Haus.EG.TempWZ.ACTUAL', name: 'WZ Temp.°C', offColor: MSRed, onColor: MSGreen, useValue: true, fontSize: 3, colorScale: {'val_min': 15, 'val_max': 35, 'val_best': 21} },
                                         {},
                                         { id: 'alias.0.NSPanel.1.1_Haus.EG.TempWZ.SECOND', name: 'WZ Luft %', offColor: MSYellow, onColor: MSYellow , useValue: true, fontSize: 3, colorScale: {'val_min': 30, 'val_max': 100, 'val_best': 60} },
                                         { id: 'alias.0.NSPanel.1.1_Haus.EG.TempKueche.ACTUAL', name: 'Küche Temp.°C', offColor: MSRed, onColor: MSGreen, useValue: true, fontSize: 3, colorScale: {'val_min': 15, 'val_max': 35, 'val_best': 21} },
                                         {},
                                         { id: 'alias.0.NSPanel.1.1_Haus.EG.TempKueche.SECOND', name: 'Küche Luft %', offColor: MSYellow, onColor: MSYellow , useValue: true, fontSize: 3, colorScale: {'val_min': 30, 'val_max': 100, 'val_best': 60} },
                                     ]
                                 };
                            

                            in einer Page Config, werden keine Datenpunkte angegeben, sonder immer nur die Cannel.

                            { id: 'alias.0.NSPanel.1.1_Haus.EG.TempWZ', name: 'WZ Temp.°C', offColor: MSRed, onColor: MSGreen, useValue: true, fontSize: 3, colorScale: {'val_min': 15, 'val_max': 35, 'val_best': 21} },
                            

                            dein Channel hat für diese Kombi (ACTUAL, SECOND) den falschen Typ. Diese Datenpunkte werden nur beim Thermostat ausgewertet, was auch eine andere Page zur Folge hat. Beim Type Temperature wird nur der ACTUAL ausgewertet vom Script.
                            Bedeutet du musst für jeden Sensor einen eigenen Alias erstellen.

                            Im Screensaver sieht die Sache anders aus dort wird direkt auf den Datenpunkt verwiesen. Beispiel hier

                            // leftScreensaverEntity 1 (only Advanced Screensaver)
                                        {
                                            ScreensaverEntity: NSPanel_Path + 'Sensor.ANALOG.Temperature',
                                            ScreensaverEntityFactor: 1,
                                            ScreensaverEntityDecimalPlaces: 1,
                                            ScreensaverEntityIconOn: 'thermometer',
                                            ScreensaverEntityIconOff: null,
                                            ScreensaverEntityText: 'Temperatur',
                                            ScreensaverEntityUnitText: '°C',
                                            ScreensaverEntityIconColor: {'val_min': 0, 'val_max': 35, 'val_best': 22}
                                        },
                            
                            K Offline
                            K Offline
                            Kerschte_de
                            wrote on last edited by
                            #6658

                            @tt-tom Großartig, dass Du auf fehlerhafte Punkte gestoßen bist. Ich habe gerade jedoch Mühe, Deinen Punkt richtig zu verstehen. Ich habe mitgenommen, dass ich die Aliase neu anlegen muss. Dabei darf ich jedoch nicht auf den Typ "Temperatur" gehen?
                            bcff6753-4f78-43b0-82ad-a083c6e1435c-image.png

                            T 1 Reply Last reply
                            0
                            • K Kerschte_de

                              @tt-tom Großartig, dass Du auf fehlerhafte Punkte gestoßen bist. Ich habe gerade jedoch Mühe, Deinen Punkt richtig zu verstehen. Ich habe mitgenommen, dass ich die Aliase neu anlegen muss. Dabei darf ich jedoch nicht auf den Typ "Temperatur" gehen?
                              bcff6753-4f78-43b0-82ad-a083c6e1435c-image.png

                              T Offline
                              T Offline
                              TT-Tom
                              wrote on last edited by TT-Tom
                              #6659

                              @kerschte_de
                              Doch Temperatur ist richtig.
                              Aber nur ACTUAL ausfüllen. Für für Luftfeuchtigkeit gibt es einen anderen Typ/Cannel.

                              Gruß Tom
                              https://github.com/tt-tom17
                              Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

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

                              NSPanel Adapter Wiki
                              https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

                              K 2 Replies Last reply
                              0
                              • T TT-Tom

                                @kerschte_de
                                Doch Temperatur ist richtig.
                                Aber nur ACTUAL ausfüllen. Für für Luftfeuchtigkeit gibt es einen anderen Typ/Cannel.

                                K Offline
                                K Offline
                                Kerschte_de
                                wrote on last edited by
                                #6660

                                @tt-tom ... das würde jedoch bedeuten, dass die Temp angezeigt, die Luftfeuchte jedoch nicht. Es wird allerdings gar keiner der 4 Werte angezeigt ... nur die Feldbezeichnungen und Einheiten.
                                Ich habe die Luftfeuchtigkeit als "SECOND" im Alias-Gerät herausgelöscht, so dass ausschließlich der ACTUAL existiert. Zudem im Script die Verlinkung herausgenommen bzw. auskommentiert.

                                
                                     //Level 1
                                     let SensorenEG: PageType =
                                     {
                                         'type': 'cardGrid',
                                         'heading': 'Zigbee-Geräte EG',
                                         'useColor': true,
                                         'subPage': true,
                                         'parent': Navigation1,
                                         'items': [
                                             { id: 'alias.0.NSPanel.1.1_Haus.EG.TempWZ.ACTUAL', name: 'WZ Temp.°C', offColor: MSRed, onColor: MSGreen, useValue: true, fontSize: 3, colorScale: {'val_min': 15, 'val_max': 35, 'val_best': 21} },
                                             {},
                                             {},//{ id: '', name: 'WZ Luft %', offColor: MSYellow, onColor: MSYellow , useValue: true, fontSize: 3, colorScale: {'val_min': 30, 'val_max': 100, 'val_best': 60} },
                                             { id: 'alias.0.NSPanel.1.1_Haus.EG.TempKueche.ACTUAL', name: 'Küche Temp.°C', offColor: MSRed, onColor: MSGreen, useValue: true, fontSize: 3, colorScale: {'val_min': 15, 'val_max': 35, 'val_best': 21} },
                                             {},
                                             {},//{ id: '', name: 'Küche Luft %', offColor: MSYellow, onColor: MSYellow , useValue: true, fontSize: 3, colorScale: {'val_min': 30, 'val_max': 100, 'val_best': 60} },
                                         ]
                                     };
                                
                                

                                671d39b4-bed6-4064-9a0a-70fbf0b1f91b-image.png

                                Die Seite besteht jetzt nur noch aus den beiden Temperaturen, die jedoch weiterhin mit "0" angezeigt werden.

                                Läuft die Kommunikation zw. ioB und NSP der Werte anders als die der Seiten? Oder wird das alles ausschließlich über die beiden Punkte "CustomSend" und "RESULT"?

                                1 Reply Last reply
                                0
                                • T TT-Tom

                                  @kerschte_de
                                  Doch Temperatur ist richtig.
                                  Aber nur ACTUAL ausfüllen. Für für Luftfeuchtigkeit gibt es einen anderen Typ/Cannel.

                                  K Offline
                                  K Offline
                                  Kerschte_de
                                  wrote on last edited by Kerschte_de
                                  #6661

                                  @tt-tom Die Luftfeuchtigkeit habe ich jetzt für die beiden Testräume als einzelnen Channel "Feuchtigkeit" angelegt und eingebunden. Die Felder werden wieder angezeigt, der Wert darin "0".

                                  //-- Anfang für eigene Seiten -- z.T. selbstdefinierte Aliase erforderlich ----------------
                                  //-- Start for your own pages -- some self-defined aliases required ----------------
                                  
                                      //-- https://github.com/joBr99/nspanel-lovelace-ui/wiki/NSPanel-Page-%E2%80%90-Typen_How-2_Beispiele
                                  
                                  //-- ##### ##### ##### KERSTEN #### ##### #####
                                  //Level 0
                                  
                                  let Navigation1: PageType =
                                  {
                                      'type': 'cardGrid',
                                      'heading': 'HOME',
                                      'useColor': true,
                                      'items': [
                                          /*PageItem*/{ navigate: true, id: 'SensorenEG', icon: 'home-floor-0',offColor: Menu, onColor: Menu, name: 'Sensoren EG'},
                                          //*PageItem*/{ navigate: true, id: 'SensorenOG', icon: 'home-floor-1',offColor: Menu, onColor: Menu, name: 'Sensoren OG'},
                                          //*PageItem*/{ navigate: true, id: 'SensorenKeller', icon: 'home-floor-negative-1',offColor: Menu, onColor: Menu, name: 'Sensoren Keller'},
                                          /*PageItem*/{ navigate: true, id: 'NSPanel_Service', icon: 'hammer-screwdriver',offColor: Menu, onColor: Menu, name: 'ServiceMenu'},
                                          //{ id: 'alias.0.NSPanel_1.TestFenster', offColor: MSRed, onColor: MSGreen, name: 'Büro Fenster'},
                                          //{ id: 'alias.0.NSPanel_1.Luftreiniger', icon: 'power', offColor: MSRed, onColor: MSGreen},
                                          //{ id: 'alias.0.NSPanel_1.TestBlind', icon: 'projector-screen', onColor: White, name: 'Beamer', secondRow: 'auch Text'},
                                          //{ id: 'alias.0.NSPanel_1.Kippfenster', useValue: true }
                                      ]
                                  };
                                  
                                  
                                       //Level 1
                                       let SensorenEG: PageType =
                                       {
                                           'type': 'cardGrid',
                                           'heading': 'Zigbee-Geräte EG',
                                           'useColor': true,
                                           'subPage': true,
                                           'parent': Navigation1,
                                           'items': [
                                               { id: 'alias.0.NSPanel.1.1_Haus.EG.TempWZ.ACTUAL', name: 'WZ Temp.°C', offColor: MSRed, onColor: MSGreen, useValue: true, fontSize: 3, colorScale: {'val_min': 15, 'val_max': 35, 'val_best': 21} },
                                               {},
                                               { id: 'alias.0.NSPanel.1.1_Haus.EG.LuftfeuchteWZ.ACTUAL', name: 'WZ Luft %', offColor: MSYellow, onColor: MSYellow , useValue: true, fontSize: 3, colorScale: {'val_min': 30, 'val_max': 100, 'val_best': 60} },
                                               { id: 'alias.0.NSPanel.1.1_Haus.EG.TempKueche.ACTUAL', name: 'Küche Temp.°C', offColor: MSRed, onColor: MSGreen, useValue: true, fontSize: 3, colorScale: {'val_min': 15, 'val_max': 35, 'val_best': 21} },
                                               {},
                                               { id: 'alias.0.NSPanel.1.1_Haus.EG.LuftfeuchteKueche.ACTUAL', name: 'Küche Luft %', offColor: MSYellow, onColor: MSYellow , useValue: true, fontSize: 3, colorScale: {'val_min': 30, 'val_max': 100, 'val_best': 60} },
                                           ]
                                       };
                                  
                                  
                                  //-- ENDE für eigene Seiten -- z.T. selbstdefinierte Aliase erforderlich -------------------------
                                  //-- END for your own pages -- some self-defined aliases required ------------------------
                                  
                                  

                                  b82cf168-1a52-4fb2-b17f-0e150abf1515-image.png

                                  69507981-2c3e-4357-887c-48f227874b16-image.png

                                  998cb31e-53bb-4669-ade4-657dbfc8ab62-WIN_20241214_20_16_43_Pro.jpg

                                  Macht es Sinn, nochmal bestimmte Punkte der Installation zu wiederholen?

                                  T 1 Reply Last reply
                                  0
                                  • K Kerschte_de

                                    @tt-tom Die Luftfeuchtigkeit habe ich jetzt für die beiden Testräume als einzelnen Channel "Feuchtigkeit" angelegt und eingebunden. Die Felder werden wieder angezeigt, der Wert darin "0".

                                    //-- Anfang für eigene Seiten -- z.T. selbstdefinierte Aliase erforderlich ----------------
                                    //-- Start for your own pages -- some self-defined aliases required ----------------
                                    
                                        //-- https://github.com/joBr99/nspanel-lovelace-ui/wiki/NSPanel-Page-%E2%80%90-Typen_How-2_Beispiele
                                    
                                    //-- ##### ##### ##### KERSTEN #### ##### #####
                                    //Level 0
                                    
                                    let Navigation1: PageType =
                                    {
                                        'type': 'cardGrid',
                                        'heading': 'HOME',
                                        'useColor': true,
                                        'items': [
                                            /*PageItem*/{ navigate: true, id: 'SensorenEG', icon: 'home-floor-0',offColor: Menu, onColor: Menu, name: 'Sensoren EG'},
                                            //*PageItem*/{ navigate: true, id: 'SensorenOG', icon: 'home-floor-1',offColor: Menu, onColor: Menu, name: 'Sensoren OG'},
                                            //*PageItem*/{ navigate: true, id: 'SensorenKeller', icon: 'home-floor-negative-1',offColor: Menu, onColor: Menu, name: 'Sensoren Keller'},
                                            /*PageItem*/{ navigate: true, id: 'NSPanel_Service', icon: 'hammer-screwdriver',offColor: Menu, onColor: Menu, name: 'ServiceMenu'},
                                            //{ id: 'alias.0.NSPanel_1.TestFenster', offColor: MSRed, onColor: MSGreen, name: 'Büro Fenster'},
                                            //{ id: 'alias.0.NSPanel_1.Luftreiniger', icon: 'power', offColor: MSRed, onColor: MSGreen},
                                            //{ id: 'alias.0.NSPanel_1.TestBlind', icon: 'projector-screen', onColor: White, name: 'Beamer', secondRow: 'auch Text'},
                                            //{ id: 'alias.0.NSPanel_1.Kippfenster', useValue: true }
                                        ]
                                    };
                                    
                                    
                                         //Level 1
                                         let SensorenEG: PageType =
                                         {
                                             'type': 'cardGrid',
                                             'heading': 'Zigbee-Geräte EG',
                                             'useColor': true,
                                             'subPage': true,
                                             'parent': Navigation1,
                                             'items': [
                                                 { id: 'alias.0.NSPanel.1.1_Haus.EG.TempWZ.ACTUAL', name: 'WZ Temp.°C', offColor: MSRed, onColor: MSGreen, useValue: true, fontSize: 3, colorScale: {'val_min': 15, 'val_max': 35, 'val_best': 21} },
                                                 {},
                                                 { id: 'alias.0.NSPanel.1.1_Haus.EG.LuftfeuchteWZ.ACTUAL', name: 'WZ Luft %', offColor: MSYellow, onColor: MSYellow , useValue: true, fontSize: 3, colorScale: {'val_min': 30, 'val_max': 100, 'val_best': 60} },
                                                 { id: 'alias.0.NSPanel.1.1_Haus.EG.TempKueche.ACTUAL', name: 'Küche Temp.°C', offColor: MSRed, onColor: MSGreen, useValue: true, fontSize: 3, colorScale: {'val_min': 15, 'val_max': 35, 'val_best': 21} },
                                                 {},
                                                 { id: 'alias.0.NSPanel.1.1_Haus.EG.LuftfeuchteKueche.ACTUAL', name: 'Küche Luft %', offColor: MSYellow, onColor: MSYellow , useValue: true, fontSize: 3, colorScale: {'val_min': 30, 'val_max': 100, 'val_best': 60} },
                                             ]
                                         };
                                    
                                    
                                    //-- ENDE für eigene Seiten -- z.T. selbstdefinierte Aliase erforderlich -------------------------
                                    //-- END for your own pages -- some self-defined aliases required ------------------------
                                    
                                    

                                    b82cf168-1a52-4fb2-b17f-0e150abf1515-image.png

                                    69507981-2c3e-4357-887c-48f227874b16-image.png

                                    998cb31e-53bb-4669-ade4-657dbfc8ab62-WIN_20241214_20_16_43_Pro.jpg

                                    Macht es Sinn, nochmal bestimmte Punkte der Installation zu wiederholen?

                                    T Offline
                                    T Offline
                                    TT-Tom
                                    wrote on last edited by TT-Tom
                                    #6662

                                    @kerschte_de

                                    du hast mein Post anscheinend nicht verstanden. In der Page/Seitenconfig wird nicht auf den Datenpunkt verwiesen, sondern auf den Folder/Channel.

                                    id: 'alias.0.NSPanel.1.1_Haus.EG.TempWZ'
                                    

                                    Edit: link zum Post

                                    Macht es Sinn, nochmal bestimmte Punkte der Installation zu wiederholen?

                                    das passt schon, sind nur kleine Fehler. Das Grundgerüst steht doch. 🙂

                                    Gruß Tom
                                    https://github.com/tt-tom17
                                    Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

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

                                    NSPanel Adapter Wiki
                                    https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

                                    K 1 Reply Last reply
                                    1
                                    • T TT-Tom

                                      @kerschte_de

                                      du hast mein Post anscheinend nicht verstanden. In der Page/Seitenconfig wird nicht auf den Datenpunkt verwiesen, sondern auf den Folder/Channel.

                                      id: 'alias.0.NSPanel.1.1_Haus.EG.TempWZ'
                                      

                                      Edit: link zum Post

                                      Macht es Sinn, nochmal bestimmte Punkte der Installation zu wiederholen?

                                      das passt schon, sind nur kleine Fehler. Das Grundgerüst steht doch. 🙂

                                      K Offline
                                      K Offline
                                      Kerschte_de
                                      wrote on last edited by
                                      #6663

                                      @tt-tom sagte in SONOFF NSPanel mit Lovelace UI:

                                      @kerschte_de

                                      du hast mein Post anscheinend nicht verstanden. In der Page/Seitenconfig wird nicht auf den Datenpunkt verwiesen, sondern auf den Folder/Channel.

                                      id: 'alias.0.NSPanel.1.1_Haus.EG.TempWZ'
                                      

                                      Oh Mann, jetzt raff ich es erst. Habe es angepasst und es funktioniert tadellos. Dann starte ich mal mit dem Aufbau. Tausend Dank @TT-Tom für's Entdecken meines Fehlers. Schönes WE und schönen 3. Advent heute 🙂

                                      T 1 Reply Last reply
                                      1
                                      • K Kerschte_de

                                        @tt-tom sagte in SONOFF NSPanel mit Lovelace UI:

                                        @kerschte_de

                                        du hast mein Post anscheinend nicht verstanden. In der Page/Seitenconfig wird nicht auf den Datenpunkt verwiesen, sondern auf den Folder/Channel.

                                        id: 'alias.0.NSPanel.1.1_Haus.EG.TempWZ'
                                        

                                        Oh Mann, jetzt raff ich es erst. Habe es angepasst und es funktioniert tadellos. Dann starte ich mal mit dem Aufbau. Tausend Dank @TT-Tom für's Entdecken meines Fehlers. Schönes WE und schönen 3. Advent heute 🙂

                                        T Offline
                                        T Offline
                                        TT-Tom
                                        wrote on last edited by
                                        #6664

                                        @kerschte_de
                                        viel Spass beim Neuaufbau und schönen 3. Advent🎄

                                        Gruß Tom
                                        https://github.com/tt-tom17
                                        Wenn meine Hilfe erfolgreich war, benutze bitte das Voting unten rechts im Beitrag

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

                                        NSPanel Adapter Wiki
                                        https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki

                                        1 Reply Last reply
                                        0
                                        • K Offline
                                          K Offline
                                          Kerschte_de
                                          wrote on last edited by Kerschte_de
                                          #6665

                                          Guten Abend.
                                          Ich habe gerade eine Hue-Birne aus dem Hue-Adapter in das NSPanel integriert (als Gerät "Hue-Licht"). Die Steuerung der Farben geht soweit (auch wenn ich nicht auf ein sattes blau komme), aber bei der Steuerung der Farbtemperatur funktioniert genau diese nicht. Die Helligkeit auf der Seite läuft, die Farbtemperatur ist fest auf auf 2000 °K eingestellt (bei erstmaliger Betätigung des Farbtemperatur-Gebers). Man kann den Regler schieben wie man möchte, keine Reaktion. Ändere ich den Wert im Alias in der Objektstruktur durch Werteingabe, funktionert es tatellos. Handelt es sich um einen Fehler im Script?
                                          Das Script zum NSP habe ich mal auf debug gestellt und den Farbtemp-Regler betätigt. Aktion gibt es - sie kommt nur nirgends an und im Alias wird permanent die 2000 °K angezeigt. Alles andere lässt sich an der Lampe über das NSP bedienen.

                                          javascript.0	20:53:03.174	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_FINAL: HandleButtonEvent activePage: 4 id: 0 tempid: 0 pageItemId: alias.0.NSPanel.1.1_Haus.Og.Badlampe
                                          javascript.0	20:53:03.174	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_FINAL: HandleButtonEvent übergebene Werte event - buttonPress2 - 0 - colorTempSlider - 46 - PageId: 0
                                          javascript.0	20:53:03.174	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_FINAL: HandleButtonEvent buttonAction: colorTempSlider
                                          javascript.0	20:53:03.174	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_FINAL: HandleMessage -> buttonPress2 event - buttonPress2 - 0 - colorTempSlider - 46
                                          javascript.0	20:53:03.425	info	script.js.common.NSPanel.NSPanel_WZ_4_4_0_11_FINAL: findPageItem -> pageItem {"id":"alias.0.NSPanel.1.1_Haus.Og.Badlampe","offColor":{"red":251,"green":105,"blue":98},"onColor":{"red":121,"green":222,"blue":121},"name":"Bad-Lampe"}
                                          

                                          Der entsprechende Script-Eintrag lautet wie folgt:

                                                   let EinzellichterWZ: PageType =
                                                  {
                                                      'type': 'cardEntities',
                                                      'heading': 'WZ Einzel-Lampen',
                                                      'useColor': true,
                                                      'subPage': true,
                                                      'parent': Wohnzimmer1,
                                                      'prev': undefined,
                                                      'next': undefined,
                                                      'home': 'HOME1',
                                                      'items': [
                                                          { id: 'alias.0.NSPanel.1.1_Haus.Og.Badlampe', offColor: MSRed, onColor: MSGreen, name: 'Bad-Lampe', interpolateColor: true},
                                                          //{ id: 'alias.0.NSPanel.1.1_Haus.Og.Badlampe2', offColor: MSRed, onColor: MSGreen, name: 'Bad-Lampe'},
                                                          //{ id: 'alias.0.NSPanel.1.1_Haus.Og.Badlampe3', offColor: MSRed, onColor: MSGreen, name: 'Bad-Lampe'},
                                                          //{ id: 'alias.0.NSPanel.1.1_Haus.Og.Badlampe4', offColor: MSRed, onColor: MSGreen, name: 'Bad-Lampe'}
                                                      ]
                                                  };
                                          

                                          Vielen Dank für eine Rückmeldung.
                                          Kersten

                                          T 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          625

                                          Online

                                          32.4k

                                          Users

                                          81.4k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe