nspanel icon indicating copy to clipboard operation
nspanel copied to clipboard

bad json payload

Open costascontis opened this issue 3 years ago • 3 comments

i have found a weird bug(?) …using the original blakadder’s nspanel.be .When i change the thermostat’s setting for example from 19 to 20 i get at mqtt

{"NSPanel":{"ATCMode":0,"ATCExpect0":20}}

and everything is working ok parsing and transforming reading the number setpoint in openhab but when i set to 21 and only then i get

{"NSPanel":{"ATCMode":0,"ATCExpect0":21}B}}

This is only happening with “21” value…

costascontis avatar Feb 11 '22 18:02 costascontis

I found the same... I found a little solution. Please comment....

def every_100ms()
   if self.ser.available() > 0
   var msg = self.ser.read()   # read bytes from serial as bytes
   import string
     if size(msg) > 0
       print("NSP: Received Raw =", msg)
       if msg[0..1] == self.header
         mode = "NSPanel"
         var lst = self.split_55(msg)
         for i:0..size(lst)-1
           msg = lst[i]
             if self.atc['mirror'] == true
               if msg[2] == 0x84 self.ser.write(msg)   # resend messages with type 0x84 for thermostat page
               end
             end
           var j = size(msg) - 1
           while msg[j] != 0x7D
             msg = msg[0..-1]
             j -= 1
           end        
           msg = msg[5..j]
             if size(msg) > 2
               if msg == bytes('7B226572726F72223A307D') # don't publish {"error":0}
               else 
               var jm = string.format("{\"NSPanel\":%s}",msg.asstring())
--->                if ((string.find(jm,"}B}")) != -1)
--->                    var substring =  string.split(jm, "}B}", 1) 
--->                    jm = substring[0]+substring[1]+"}"
--->                end
               
               tasmota.publish_result(jm, "RESULT")
               end
             end
         end
       elif msg == bytes('000000FFFFFF88FFFFFF')
         log("NSP: Screen Initialized")   # print the message as string
         self.screeninit()
       else
         var jm = string.format("{\"NSPanel\":{\"Nextion\":\"%s\"}}",str(msg[0..-4]))
         tasmota.publish_result(jm, "RESULT")        end       
     end
   end
 end


mbbrenner avatar Feb 14 '22 09:02 mbbrenner

I have a similar issue with a bad json payload, but on scene buttons. I have 3 scene buttons, but when I press on the last button, the last '}' is doubled. Press on the second button gives me: {"id":"2"} Press on the third button gives me: {"id":"3"}}

yvesdm3000 avatar Mar 02 '22 08:03 yvesdm3000

See https://github.com/blakadder/nspanel/pull/27

yvesdm3000 avatar Mar 05 '22 08:03 yvesdm3000