nspanel
nspanel copied to clipboard
bad json payload
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…
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
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"}}
See https://github.com/blakadder/nspanel/pull/27