mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-29 21:56:35 +00:00
Merge branch 'development' into prerelease-12.5
This commit is contained in:
commit
e9e3b03dbb
@ -14,6 +14,8 @@ All notable changes to this project will be documented in this file.
|
|||||||
- Support for GDK101 gamma radiation sensor by Petr Novacek (#18390)
|
- Support for GDK101 gamma radiation sensor by Petr Novacek (#18390)
|
||||||
- Matter support in now stabilized for Apple and Google (not tested with Alexa)
|
- Matter support in now stabilized for Apple and Google (not tested with Alexa)
|
||||||
- Berry `instrospect.name()` to get names of functions, modules and classes (#18422)
|
- Berry `instrospect.name()` to get names of functions, modules and classes (#18422)
|
||||||
|
- Berry add `searchall()` and `matchall()` to `re` module and pre-compiled patterns (#18429)
|
||||||
|
- Matter automatically exposes all detected Temperature sensors (#18430)
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
- ESP32 LVGL library from v8.3.5 to v8.3.6 (no functional change)
|
- ESP32 LVGL library from v8.3.5 to v8.3.6 (no functional change)
|
||||||
|
@ -127,7 +127,9 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
|
|||||||
- Berry support for Tensorflow Lite (TFL) by Christiaan Baars [#18119](https://github.com/arendst/Tasmota/issues/18119)
|
- Berry support for Tensorflow Lite (TFL) by Christiaan Baars [#18119](https://github.com/arendst/Tasmota/issues/18119)
|
||||||
- Berry `webclient` features
|
- Berry `webclient` features
|
||||||
- Berry `instrospect.name()` to get names of functions, modules and classes [#18422](https://github.com/arendst/Tasmota/issues/18422)
|
- Berry `instrospect.name()` to get names of functions, modules and classes [#18422](https://github.com/arendst/Tasmota/issues/18422)
|
||||||
|
- Berry add `searchall()` and `matchall()` to `re` module and pre-compiled patterns [#18429](https://github.com/arendst/Tasmota/issues/18429)
|
||||||
- Matter support for Light and Relays by Stephan Hadinger [#18320](https://github.com/arendst/Tasmota/issues/18320)
|
- Matter support for Light and Relays by Stephan Hadinger [#18320](https://github.com/arendst/Tasmota/issues/18320)
|
||||||
|
- Matter automatically exposes all detected Temperature sensors [#18430](https://github.com/arendst/Tasmota/issues/18430)
|
||||||
|
|
||||||
### Breaking Changed
|
### Breaking Changed
|
||||||
- Shelly Pro 4PM using standard MCP23xxx driver and needs one time Auto-Configuration
|
- Shelly Pro 4PM using standard MCP23xxx driver and needs one time Auto-Configuration
|
||||||
|
@ -175,6 +175,42 @@ int re_pattern_search(bvm *vm) {
|
|||||||
be_raise(vm, "type_error", NULL);
|
be_raise(vm, "type_error", NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Berry: `re_pattern.searchall(s:string) -> list(list(string))`
|
||||||
|
int re_pattern_match_search_all(bvm *vm, bbool is_anchored) {
|
||||||
|
int32_t argc = be_top(vm); // Get the number of arguments
|
||||||
|
if (argc >= 2 && be_isstring(vm, 2)) {
|
||||||
|
const char * hay = be_tostring(vm, 2);
|
||||||
|
be_getmember(vm, 1, "_p");
|
||||||
|
ByteProg * code = (ByteProg*) be_tocomptr(vm, -1);
|
||||||
|
int limit = -1;
|
||||||
|
if (argc >= 3) {
|
||||||
|
limit = be_toint(vm, 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
be_newobject(vm, "list");
|
||||||
|
for (int i = limit; i != 0 && hay != NULL; i--) {
|
||||||
|
hay = be_re_match_search_run(vm, code, hay, is_anchored);
|
||||||
|
if (hay != NULL) {
|
||||||
|
be_data_push(vm, -2); // add sub list to list
|
||||||
|
}
|
||||||
|
be_pop(vm, 1);
|
||||||
|
}
|
||||||
|
be_pop(vm, 1);
|
||||||
|
be_return(vm);
|
||||||
|
}
|
||||||
|
be_raise(vm, "type_error", NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Berry: `re_pattern.searchall(s:string) -> list(list(string))`
|
||||||
|
int re_pattern_search_all(bvm *vm) {
|
||||||
|
return re_pattern_match_search_all(vm, bfalse);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Berry: `re_pattern.matchall(s:string) -> list(list(string))`
|
||||||
|
int re_pattern_match_all(bvm *vm) {
|
||||||
|
return re_pattern_match_search_all(vm, btrue);
|
||||||
|
}
|
||||||
|
|
||||||
// Berry: `re_pattern.match(s:string) -> list(string)`
|
// Berry: `re_pattern.match(s:string) -> list(string)`
|
||||||
int re_pattern_match(bvm *vm) {
|
int re_pattern_match(bvm *vm) {
|
||||||
int32_t argc = be_top(vm); // Get the number of arguments
|
int32_t argc = be_top(vm); // Get the number of arguments
|
||||||
@ -277,7 +313,9 @@ module re (scope: global) {
|
|||||||
class be_class_re_pattern (scope: global, name: re_pattern) {
|
class be_class_re_pattern (scope: global, name: re_pattern) {
|
||||||
_p, var
|
_p, var
|
||||||
search, func(re_pattern_search)
|
search, func(re_pattern_search)
|
||||||
|
searchall, func(re_pattern_search_all)
|
||||||
match, func(re_pattern_match)
|
match, func(re_pattern_match)
|
||||||
|
matchall, func(re_pattern_match_all)
|
||||||
split, func(re_pattern_split)
|
split, func(re_pattern_split)
|
||||||
}
|
}
|
||||||
@const_object_info_end */
|
@const_object_info_end */
|
||||||
|
@ -114,7 +114,7 @@ class Matter_Commisioning_Context
|
|||||||
if msg.opcode != 0x20 || msg.local_session_id != 0 || msg.protocol_id != 0
|
if msg.opcode != 0x20 || msg.local_session_id != 0 || msg.protocol_id != 0
|
||||||
tasmota.log("MTR: invalid PBKDFParamRequest message", 2)
|
tasmota.log("MTR: invalid PBKDFParamRequest message", 2)
|
||||||
tasmota.log("MTR: StatusReport(General Code: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: INVALID_PARAMETER)", 2)
|
tasmota.log("MTR: StatusReport(General Code: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: INVALID_PARAMETER)", 2)
|
||||||
var raw = self.send_status_report(msg, 0x01, 0x0000, 0x0002, false)
|
self.send_status_report(msg, 0x01, 0x0000, 0x0002, false)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
var pbkdfparamreq = matter.PBKDFParamRequest().parse(msg.raw, msg.app_payload_idx)
|
var pbkdfparamreq = matter.PBKDFParamRequest().parse(msg.raw, msg.app_payload_idx)
|
||||||
@ -126,7 +126,7 @@ class Matter_Commisioning_Context
|
|||||||
if pbkdfparamreq.passcodeId != 0
|
if pbkdfparamreq.passcodeId != 0
|
||||||
tasmota.log("MTR: non-zero passcode id", 2)
|
tasmota.log("MTR: non-zero passcode id", 2)
|
||||||
tasmota.log("MTR: StatusReport(General Code: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: INVALID_PARAMETER)", 2)
|
tasmota.log("MTR: StatusReport(General Code: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: INVALID_PARAMETER)", 2)
|
||||||
var raw = self.send_status_report(msg, 0x01, 0x0000, 0x0002, false)
|
self.send_status_report(msg, 0x01, 0x0000, 0x0002, false)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -164,7 +164,7 @@ class Matter_Commisioning_Context
|
|||||||
if msg.opcode != 0x22 || msg.local_session_id != 0 || msg.protocol_id != 0
|
if msg.opcode != 0x22 || msg.local_session_id != 0 || msg.protocol_id != 0
|
||||||
tasmota.log("MTR: invalid Pake1 message", 2)
|
tasmota.log("MTR: invalid Pake1 message", 2)
|
||||||
tasmota.log("MTR: StatusReport(General Code: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: INVALID_PARAMETER)", 2)
|
tasmota.log("MTR: StatusReport(General Code: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: INVALID_PARAMETER)", 2)
|
||||||
var raw = self.send_status_report(msg, 0x01, 0x0000, 0x0002, false)
|
self.send_status_report(msg, 0x01, 0x0000, 0x0002, false)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
var pake1 = matter.Pake1().parse(msg.raw, msg.app_payload_idx)
|
var pake1 = matter.Pake1().parse(msg.raw, msg.app_payload_idx)
|
||||||
@ -247,7 +247,7 @@ class Matter_Commisioning_Context
|
|||||||
if msg.opcode != 0x24 || msg.local_session_id != 0 || msg.protocol_id != 0
|
if msg.opcode != 0x24 || msg.local_session_id != 0 || msg.protocol_id != 0
|
||||||
tasmota.log("MTR: invalid Pake3 message", 2)
|
tasmota.log("MTR: invalid Pake3 message", 2)
|
||||||
tasmota.log("MTR: StatusReport(General Code: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: INVALID_PARAMETER)", 2)
|
tasmota.log("MTR: StatusReport(General Code: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: INVALID_PARAMETER)", 2)
|
||||||
var raw = self.send_status_report(msg, 0x01, 0x0000, 0x0002, false)
|
self.send_status_report(msg, 0x01, 0x0000, 0x0002, false)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
var pake3 = matter.Pake3().parse(msg.raw, msg.app_payload_idx)
|
var pake3 = matter.Pake3().parse(msg.raw, msg.app_payload_idx)
|
||||||
@ -259,7 +259,7 @@ class Matter_Commisioning_Context
|
|||||||
if cA != session.__spake_cA
|
if cA != session.__spake_cA
|
||||||
tasmota.log("MTR: invalid cA received", 2)
|
tasmota.log("MTR: invalid cA received", 2)
|
||||||
tasmota.log("MTR: StatusReport(General Code: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: INVALID_PARAMETER)", 2)
|
tasmota.log("MTR: StatusReport(General Code: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: INVALID_PARAMETER)", 2)
|
||||||
var raw = self.send_status_report(msg, 0x01, 0x0000, 0x0002, false)
|
self.send_status_report(msg, 0x01, 0x0000, 0x0002, false)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -278,7 +278,7 @@ class Matter_Commisioning_Context
|
|||||||
# tasmota.log("MTR: ******************************", 4)
|
# tasmota.log("MTR: ******************************", 4)
|
||||||
|
|
||||||
# StatusReport(GeneralCode: SUCCESS, ProtocolId: SECURE_CHANNEL, ProtocolCode: SESSION_ESTABLISHMENT_SUCCESS)
|
# StatusReport(GeneralCode: SUCCESS, ProtocolId: SECURE_CHANNEL, ProtocolCode: SESSION_ESTABLISHMENT_SUCCESS)
|
||||||
var raw = self.send_status_report(msg, 0x00, 0x0000, 0x0000, false)
|
self.send_status_report(msg, 0x00, 0x0000, 0x0000, false)
|
||||||
|
|
||||||
self.add_session(session.__future_local_session_id, session.__future_initiator_session_id, I2RKey, R2IKey, AttestationChallenge, created)
|
self.add_session(session.__future_local_session_id, session.__future_initiator_session_id, I2RKey, R2IKey, AttestationChallenge, created)
|
||||||
return true
|
return true
|
||||||
@ -315,7 +315,7 @@ class Matter_Commisioning_Context
|
|||||||
if msg.opcode != 0x30 || msg.local_session_id != 0 || msg.protocol_id != 0
|
if msg.opcode != 0x30 || msg.local_session_id != 0 || msg.protocol_id != 0
|
||||||
# tasmota.log("MTR: invalid Sigma1 message", 2)
|
# tasmota.log("MTR: invalid Sigma1 message", 2)
|
||||||
tasmota.log("MTR: StatusReport(General Code: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: INVALID_PARAMETER)", 2)
|
tasmota.log("MTR: StatusReport(General Code: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: INVALID_PARAMETER)", 2)
|
||||||
var raw = self.send_status_report(msg, 0x01, 0x0000, 0x0002, false)
|
self.send_status_report(msg, 0x01, 0x0000, 0x0002, false)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
var sigma1 = matter.Sigma1().parse(msg.raw, msg.app_payload_idx)
|
var sigma1 = matter.Sigma1().parse(msg.raw, msg.app_payload_idx)
|
||||||
@ -445,7 +445,7 @@ class Matter_Commisioning_Context
|
|||||||
|
|
||||||
if session == nil || session._fabric == nil
|
if session == nil || session._fabric == nil
|
||||||
tasmota.log("MTR: StatusReport(GeneralCode: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: NO_SHARED_TRUST_ROOTS)", 2)
|
tasmota.log("MTR: StatusReport(GeneralCode: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: NO_SHARED_TRUST_ROOTS)", 2)
|
||||||
var raw = self.send_status_report(msg, 0x01, 0x0000, 0x0001, false)
|
self.send_status_report(msg, 0x01, 0x0000, 0x0001, false)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
session._source_node_id = msg.source_node_id
|
session._source_node_id = msg.source_node_id
|
||||||
@ -539,7 +539,7 @@ class Matter_Commisioning_Context
|
|||||||
# sanity checks
|
# sanity checks
|
||||||
if msg.opcode != 0x32 || msg.local_session_id != 0 || msg.protocol_id != 0
|
if msg.opcode != 0x32 || msg.local_session_id != 0 || msg.protocol_id != 0
|
||||||
tasmota.log("MTR: StatusReport(General Code: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: INVALID_PARAMETER)", 2)
|
tasmota.log("MTR: StatusReport(General Code: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: INVALID_PARAMETER)", 2)
|
||||||
var raw = self.send_status_report(msg, 0x01, 0x0000, 0x0002, false)
|
self.send_status_report(msg, 0x01, 0x0000, 0x0002, false)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
var session = msg.session
|
var session = msg.session
|
||||||
@ -576,7 +576,7 @@ class Matter_Commisioning_Context
|
|||||||
if TBETag3 != tag
|
if TBETag3 != tag
|
||||||
tasmota.log("MTR: Tag don't match", 2)
|
tasmota.log("MTR: Tag don't match", 2)
|
||||||
tasmota.log("MTR: StatusReport(General Code: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: INVALID_PARAMETER)", 2)
|
tasmota.log("MTR: StatusReport(General Code: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: INVALID_PARAMETER)", 2)
|
||||||
var raw = self.send_status_report(msg, 0x01, 0x0000, 0x0002, false)
|
self.send_status_report(msg, 0x01, 0x0000, 0x0002, false)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -618,7 +618,7 @@ class Matter_Commisioning_Context
|
|||||||
tasmota.log("MTR: sigma3_tbs does not have a valid signature", 2)
|
tasmota.log("MTR: sigma3_tbs does not have a valid signature", 2)
|
||||||
tasmota.log("MTR: ******************* Invalid signature, trying anyways", 2)
|
tasmota.log("MTR: ******************* Invalid signature, trying anyways", 2)
|
||||||
# tasmota.log("MTR: StatusReport(General Code: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: INVALID_PARAMETER)", 2)
|
# tasmota.log("MTR: StatusReport(General Code: FAILURE, ProtocolId: SECURE_CHANNEL, ProtocolCode: INVALID_PARAMETER)", 2)
|
||||||
# var raw = self.send_status_report(msg, 0x01, 0x0000, 0x0002, false)
|
# self.send_status_report(msg, 0x01, 0x0000, 0x0002, false)
|
||||||
# return false
|
# return false
|
||||||
else
|
else
|
||||||
# All good, compute new keys
|
# All good, compute new keys
|
||||||
@ -654,7 +654,7 @@ class Matter_Commisioning_Context
|
|||||||
tasmota.log("MTR: ******************************", 4)
|
tasmota.log("MTR: ******************************", 4)
|
||||||
|
|
||||||
# StatusReport(GeneralCode: SUCCESS, ProtocolId: SECURE_CHANNEL, ProtocolCode: SESSION_ESTABLISHMENT_SUCCESS)
|
# StatusReport(GeneralCode: SUCCESS, ProtocolId: SECURE_CHANNEL, ProtocolCode: SESSION_ESTABLISHMENT_SUCCESS)
|
||||||
var raw = self.send_status_report(msg, 0x00, 0x0000, 0x0000, true)
|
self.send_status_report(msg, 0x00, 0x0000, 0x0000, true)
|
||||||
|
|
||||||
session.close()
|
session.close()
|
||||||
session.set_keys(i2r, r2i, ac, created)
|
session.set_keys(i2r, r2i, ac, created)
|
||||||
|
@ -116,8 +116,8 @@ class Matter_Device
|
|||||||
# autoconfigure other plugins
|
# autoconfigure other plugins
|
||||||
self.autoconf_device()
|
self.autoconf_device()
|
||||||
|
|
||||||
# for now read sensors every 5 seconds
|
# for now read sensors every 30 seconds
|
||||||
tasmota.add_cron("*/5 * * * * *", def () self._trigger_read_sensors() end, "matter_sensors_5s")
|
tasmota.add_cron("*/30 * * * * *", def () self._trigger_read_sensors() end, "matter_sensors_30s")
|
||||||
|
|
||||||
self._start_udp(self.UDP_PORT)
|
self._start_udp(self.UDP_PORT)
|
||||||
|
|
||||||
@ -908,6 +908,7 @@ class Matter_Device
|
|||||||
#
|
#
|
||||||
def autoconf_device()
|
def autoconf_device()
|
||||||
import string
|
import string
|
||||||
|
import json
|
||||||
# check if we have a light
|
# check if we have a light
|
||||||
var endpoint = 1
|
var endpoint = 1
|
||||||
var light_present = false
|
var light_present = false
|
||||||
@ -944,7 +945,33 @@ class Matter_Device
|
|||||||
endpoint += 1
|
endpoint += 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# auto-detect sensors
|
||||||
|
var sensors = json.load(tasmota.read_sensors())
|
||||||
|
|
||||||
|
# temperature sensors
|
||||||
|
# they are starting at endpoint `32..39` (8 max)
|
||||||
|
endpoint = 0x20
|
||||||
|
for k1:self.k2l(sensors)
|
||||||
|
var sensor_2 = sensors[k1]
|
||||||
|
if isinstance(sensor_2, map) && sensor_2.contains("Temperature")
|
||||||
|
var temp_rule = k1 + "#Temperature"
|
||||||
|
self.plugins.push(matter.Plugin_Temp_Sensor(self, endpoint, temp_rule))
|
||||||
|
tasmota.log(string.format("MTR: Endpoint:%i Temperature (%s)", endpoint, temp_rule), 2)
|
||||||
|
endpoint += 1
|
||||||
|
end
|
||||||
|
if endpoint > 0x28 break end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# get keys of a map in sorted order
|
||||||
|
static def k2l(m) var l=[] if m==nil return l end for k:m.keys() l.push(k) end
|
||||||
|
for i:1..size(l)-1 var k = l[i] var j = i while (j > 0) && (l[j-1] > k) l[j] = l[j-1] j -= 1 end l[j] = k end return l
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
# keys to llist
|
||||||
|
|
||||||
end
|
end
|
||||||
matter.Device = Matter_Device
|
matter.Device = Matter_Device
|
||||||
|
|
||||||
|
@ -216,6 +216,7 @@ class Matter_IM
|
|||||||
# should return true if answered, false if passing to next handler
|
# should return true if answered, false if passing to next handler
|
||||||
def read_single_attribute(ret, pi, ctx, direct)
|
def read_single_attribute(ret, pi, ctx, direct)
|
||||||
import string
|
import string
|
||||||
|
var TLV = matter.TLV
|
||||||
var attr_name = matter.get_attribute_name(ctx.cluster, ctx.attribute)
|
var attr_name = matter.get_attribute_name(ctx.cluster, ctx.attribute)
|
||||||
attr_name = attr_name ? " (" + attr_name + ")" : ""
|
attr_name = attr_name ? " (" + attr_name + ")" : ""
|
||||||
# Special case to report unsupported item, if pi==nil
|
# Special case to report unsupported item, if pi==nil
|
||||||
@ -230,7 +231,12 @@ class Matter_IM
|
|||||||
a1.attribute_data.path.attribute = ctx.attribute
|
a1.attribute_data.path.attribute = ctx.attribute
|
||||||
a1.attribute_data.data = res
|
a1.attribute_data.data = res
|
||||||
|
|
||||||
ret.attribute_reports.push(a1)
|
var a1_tlv = a1.to_TLV()
|
||||||
|
var a1_len = a1_tlv.encode_len()
|
||||||
|
var a1_bytes = bytes(a1_len)
|
||||||
|
var a2 = TLV.create_TLV(TLV.RAW, a1_tlv.tlv2raw(a1_bytes))
|
||||||
|
|
||||||
|
ret.attribute_reports.push(a2)
|
||||||
if !no_log
|
if !no_log
|
||||||
tasmota.log(string.format("MTR: >Read_Attr (%6i) %s%s - %s", session.local_session_id, str(ctx), attr_name, str(res)), 2)
|
tasmota.log(string.format("MTR: >Read_Attr (%6i) %s%s - %s", session.local_session_id, str(ctx), attr_name, str(res)), 2)
|
||||||
end
|
end
|
||||||
@ -246,7 +252,12 @@ class Matter_IM
|
|||||||
a1.attribute_status.path.attribute = ctx.attribute
|
a1.attribute_status.path.attribute = ctx.attribute
|
||||||
a1.attribute_status.status.status = ctx.status
|
a1.attribute_status.status.status = ctx.status
|
||||||
|
|
||||||
ret.attribute_reports.push(a1)
|
var a1_tlv = a1.to_TLV()
|
||||||
|
var a1_len = a1_tlv.encode_len()
|
||||||
|
var a1_bytes = bytes(a1_len)
|
||||||
|
var a2 = TLV.create_TLV(TLV.RAW, a1_tlv.tlv2raw(a1_bytes))
|
||||||
|
|
||||||
|
ret.attribute_reports.push(a2)
|
||||||
tasmota.log(string.format("MTR: >Read_Attr (%6i) %s%s - STATUS: 0x%02X %s", session.local_session_id, str(ctx), attr_name, ctx.status, ctx.status == matter.UNSUPPORTED_ATTRIBUTE ? "UNSUPPORTED_ATTRIBUTE" : ""), 2)
|
tasmota.log(string.format("MTR: >Read_Attr (%6i) %s%s - STATUS: 0x%02X %s", session.local_session_id, str(ctx), attr_name, ctx.status, ctx.status == matter.UNSUPPORTED_ATTRIBUTE ? "UNSUPPORTED_ATTRIBUTE" : ""), 2)
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
@ -445,10 +445,10 @@ class Matter_IM_SubscribeResponse : Matter_IM_ReportData
|
|||||||
|
|
||||||
# Status ok received
|
# Status ok received
|
||||||
def status_ok_received(msg)
|
def status_ok_received(msg)
|
||||||
# import string
|
import string
|
||||||
# tasmota.log(string.format("MTR: IM_SubscribeResponse status_ok_received sub=%i exch=%i ack=%i last_counter=%i", self.sub.subscription_id, self.resp.exchange_id, msg.ack_message_counter ? msg.ack_message_counter : 0 , self.last_counter), 3)
|
# tasmota.log(string.format("MTR: IM_SubscribeResponse status_ok_received sub=%i exch=%i ack=%i last_counter=%i", self.sub.subscription_id, self.resp.exchange_id, msg.ack_message_counter ? msg.ack_message_counter : 0 , self.last_counter), 3)
|
||||||
# once we receive ack, open flow for subscriptions
|
# once we receive ack, open flow for subscriptions
|
||||||
# tasmota.log(string.format("MTR: >Sub_OK (%6i) sub=%i", msg.session.local_session_id, self.sub.subscription_id), 2)
|
tasmota.log(string.format("MTR: >Sub_OK (%6i) sub=%i", msg.session.local_session_id, self.sub.subscription_id), 2)
|
||||||
return super(self).status_ok_received(msg)
|
return super(self).status_ok_received(msg)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -86,6 +86,7 @@ class Matter_TLV
|
|||||||
static var ARRAY = 0x16
|
static var ARRAY = 0x16
|
||||||
static var LIST = 0x17
|
static var LIST = 0x17
|
||||||
static var EOC = 0x18
|
static var EOC = 0x18
|
||||||
|
static var RAW = 0xFF # encodes an anonymous raw value (already encoded in TLV to save memory)
|
||||||
|
|
||||||
#################################################################################
|
#################################################################################
|
||||||
# Matter_TLV_item class
|
# Matter_TLV_item class
|
||||||
@ -224,6 +225,8 @@ class Matter_TLV
|
|||||||
var TLV = self.TLV
|
var TLV = self.TLV
|
||||||
if b == nil b = bytes() end # start new buffer if none passed
|
if b == nil b = bytes() end # start new buffer if none passed
|
||||||
|
|
||||||
|
if self.typ == TLV.RAW b..self.val return b end
|
||||||
|
|
||||||
# special case for bool
|
# special case for bool
|
||||||
# we need to change the type according to the value
|
# we need to change the type according to the value
|
||||||
if self.typ == TLV.BFALSE || self.typ == TLV.BTRUE
|
if self.typ == TLV.BFALSE || self.typ == TLV.BTRUE
|
||||||
@ -320,6 +323,8 @@ class Matter_TLV
|
|||||||
var TLV = self.TLV
|
var TLV = self.TLV
|
||||||
var len = 0
|
var len = 0
|
||||||
|
|
||||||
|
if self.typ == TLV.RAW return size(self.val) end
|
||||||
|
|
||||||
# special case for bool
|
# special case for bool
|
||||||
# we need to change the type according to the value
|
# we need to change the type according to the value
|
||||||
if self.typ == TLV.BFALSE || self.typ == TLV.BTRUE
|
if self.typ == TLV.BFALSE || self.typ == TLV.BTRUE
|
||||||
|
@ -352,8 +352,8 @@ be_local_closure(Matter_Commisioning_Context_parse_PBKDFParamRequest, /* name
|
|||||||
0x5828000A, // 001B LDCONST R10 K10
|
0x5828000A, // 001B LDCONST R10 K10
|
||||||
0x502C0000, // 001C LDBOOL R11 0 0
|
0x502C0000, // 001C LDBOOL R11 0 0
|
||||||
0x7C140C00, // 001D CALL R5 6
|
0x7C140C00, // 001D CALL R5 6
|
||||||
0x50180000, // 001E LDBOOL R6 0 0
|
0x50140000, // 001E LDBOOL R5 0 0
|
||||||
0x80040C00, // 001F RET 1 R6
|
0x80040A00, // 001F RET 1 R5
|
||||||
0xB8161C00, // 0020 GETNGBL R5 K14
|
0xB8161C00, // 0020 GETNGBL R5 K14
|
||||||
0x8C140B0F, // 0021 GETMET R5 R5 K15
|
0x8C140B0F, // 0021 GETMET R5 R5 K15
|
||||||
0x7C140200, // 0022 CALL R5 1
|
0x7C140200, // 0022 CALL R5 1
|
||||||
@ -389,8 +389,8 @@ be_local_closure(Matter_Commisioning_Context_parse_PBKDFParamRequest, /* name
|
|||||||
0x582C000A, // 0040 LDCONST R11 K10
|
0x582C000A, // 0040 LDCONST R11 K10
|
||||||
0x50300000, // 0041 LDBOOL R12 0 0
|
0x50300000, // 0041 LDBOOL R12 0 0
|
||||||
0x7C180C00, // 0042 CALL R6 6
|
0x7C180C00, // 0042 CALL R6 6
|
||||||
0x501C0000, // 0043 LDBOOL R7 0 0
|
0x50180000, // 0043 LDBOOL R6 0 0
|
||||||
0x80040E00, // 0044 RET 1 R7
|
0x80040C00, // 0044 RET 1 R6
|
||||||
0x88180B19, // 0045 GETMBR R6 R5 K25
|
0x88180B19, // 0045 GETMBR R6 R5 K25
|
||||||
0x90123006, // 0046 SETMBR R4 K24 R6
|
0x90123006, // 0046 SETMBR R4 K24 R6
|
||||||
0x8818011B, // 0047 GETMBR R6 R0 K27
|
0x8818011B, // 0047 GETMBR R6 R0 K27
|
||||||
@ -597,8 +597,8 @@ be_local_closure(Matter_Commisioning_Context_parse_Pake1, /* name */
|
|||||||
0x58240009, // 001A LDCONST R9 K9
|
0x58240009, // 001A LDCONST R9 K9
|
||||||
0x50280000, // 001B LDBOOL R10 0 0
|
0x50280000, // 001B LDBOOL R10 0 0
|
||||||
0x7C100C00, // 001C CALL R4 6
|
0x7C100C00, // 001C CALL R4 6
|
||||||
0x50140000, // 001D LDBOOL R5 0 0
|
0x50100000, // 001D LDBOOL R4 0 0
|
||||||
0x80040A00, // 001E RET 1 R5
|
0x80040800, // 001E RET 1 R4
|
||||||
0xB8121A00, // 001F GETNGBL R4 K13
|
0xB8121A00, // 001F GETNGBL R4 K13
|
||||||
0x8C10090E, // 0020 GETMET R4 R4 K14
|
0x8C10090E, // 0020 GETMET R4 R4 K14
|
||||||
0x7C100200, // 0021 CALL R4 1
|
0x7C100200, // 0021 CALL R4 1
|
||||||
@ -716,7 +716,7 @@ be_local_closure(Matter_Commisioning_Context_init, /* name */
|
|||||||
********************************************************************/
|
********************************************************************/
|
||||||
be_local_closure(Matter_Commisioning_Context_parse_Pake3, /* name */
|
be_local_closure(Matter_Commisioning_Context_parse_Pake3, /* name */
|
||||||
be_nested_proto(
|
be_nested_proto(
|
||||||
20, /* nstack */
|
19, /* nstack */
|
||||||
2, /* argc */
|
2, /* argc */
|
||||||
2, /* varg */
|
2, /* varg */
|
||||||
0, /* has upvals */
|
0, /* has upvals */
|
||||||
@ -789,8 +789,8 @@ be_local_closure(Matter_Commisioning_Context_parse_Pake3, /* name */
|
|||||||
0x58240009, // 001A LDCONST R9 K9
|
0x58240009, // 001A LDCONST R9 K9
|
||||||
0x50280000, // 001B LDBOOL R10 0 0
|
0x50280000, // 001B LDBOOL R10 0 0
|
||||||
0x7C100C00, // 001C CALL R4 6
|
0x7C100C00, // 001C CALL R4 6
|
||||||
0x50140000, // 001D LDBOOL R5 0 0
|
0x50100000, // 001D LDBOOL R4 0 0
|
||||||
0x80040A00, // 001E RET 1 R5
|
0x80040800, // 001E RET 1 R4
|
||||||
0xB8121A00, // 001F GETNGBL R4 K13
|
0xB8121A00, // 001F GETNGBL R4 K13
|
||||||
0x8C10090E, // 0020 GETMET R4 R4 K14
|
0x8C10090E, // 0020 GETMET R4 R4 K14
|
||||||
0x7C100200, // 0021 CALL R4 1
|
0x7C100200, // 0021 CALL R4 1
|
||||||
@ -819,8 +819,8 @@ be_local_closure(Matter_Commisioning_Context_parse_Pake3, /* name */
|
|||||||
0x582C0009, // 0038 LDCONST R11 K9
|
0x582C0009, // 0038 LDCONST R11 K9
|
||||||
0x50300000, // 0039 LDBOOL R12 0 0
|
0x50300000, // 0039 LDBOOL R12 0 0
|
||||||
0x7C180C00, // 003A CALL R6 6
|
0x7C180C00, // 003A CALL R6 6
|
||||||
0x501C0000, // 003B LDBOOL R7 0 0
|
0x50180000, // 003B LDBOOL R6 0 0
|
||||||
0x80040E00, // 003C RET 1 R7
|
0x80040C00, // 003C RET 1 R6
|
||||||
0xB81A0C00, // 003D GETNGBL R6 K6
|
0xB81A0C00, // 003D GETNGBL R6 K6
|
||||||
0x8C180D15, // 003E GETMET R6 R6 K21
|
0x8C180D15, // 003E GETMET R6 R6 K21
|
||||||
0x7C180200, // 003F CALL R6 1
|
0x7C180200, // 003F CALL R6 1
|
||||||
@ -856,16 +856,16 @@ be_local_closure(Matter_Commisioning_Context_parse_Pake3, /* name */
|
|||||||
0x58400004, // 005D LDCONST R16 K4
|
0x58400004, // 005D LDCONST R16 K4
|
||||||
0x50440000, // 005E LDBOOL R17 0 0
|
0x50440000, // 005E LDBOOL R17 0 0
|
||||||
0x7C2C0C00, // 005F CALL R11 6
|
0x7C2C0C00, // 005F CALL R11 6
|
||||||
0x8C30011C, // 0060 GETMET R12 R0 K28
|
0x8C2C011C, // 0060 GETMET R11 R0 K28
|
||||||
0x8838071D, // 0061 GETMBR R14 R3 K29
|
0x8834071D, // 0061 GETMBR R13 R3 K29
|
||||||
0x883C071E, // 0062 GETMBR R15 R3 K30
|
0x8838071E, // 0062 GETMBR R14 R3 K30
|
||||||
0x5C401000, // 0063 MOVE R16 R8
|
0x5C3C1000, // 0063 MOVE R15 R8
|
||||||
0x5C441200, // 0064 MOVE R17 R9
|
0x5C401200, // 0064 MOVE R16 R9
|
||||||
0x5C481400, // 0065 MOVE R18 R10
|
0x5C441400, // 0065 MOVE R17 R10
|
||||||
0x5C4C0C00, // 0066 MOVE R19 R6
|
0x5C480C00, // 0066 MOVE R18 R6
|
||||||
0x7C300E00, // 0067 CALL R12 7
|
0x7C2C0E00, // 0067 CALL R11 7
|
||||||
0x50300200, // 0068 LDBOOL R12 1 0
|
0x502C0200, // 0068 LDBOOL R11 1 0
|
||||||
0x80041800, // 0069 RET 1 R12
|
0x80041600, // 0069 RET 1 R11
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
@ -1014,8 +1014,8 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma3, /* name */
|
|||||||
0x58200008, // 0014 LDCONST R8 K8
|
0x58200008, // 0014 LDCONST R8 K8
|
||||||
0x50240000, // 0015 LDBOOL R9 0 0
|
0x50240000, // 0015 LDBOOL R9 0 0
|
||||||
0x7C0C0C00, // 0016 CALL R3 6
|
0x7C0C0C00, // 0016 CALL R3 6
|
||||||
0x50100000, // 0017 LDBOOL R4 0 0
|
0x500C0000, // 0017 LDBOOL R3 0 0
|
||||||
0x80040800, // 0018 RET 1 R4
|
0x80040600, // 0018 RET 1 R3
|
||||||
0x880C030B, // 0019 GETMBR R3 R1 K11
|
0x880C030B, // 0019 GETMBR R3 R1 K11
|
||||||
0xB8121800, // 001A GETNGBL R4 K12
|
0xB8121800, // 001A GETNGBL R4 K12
|
||||||
0x8C10090D, // 001B GETMET R4 R4 K13
|
0x8C10090D, // 001B GETMET R4 R4 K13
|
||||||
@ -1197,8 +1197,8 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma3, /* name */
|
|||||||
0x58480008, // 00CB LDCONST R18 K8
|
0x58480008, // 00CB LDCONST R18 K8
|
||||||
0x504C0000, // 00CC LDBOOL R19 0 0
|
0x504C0000, // 00CC LDBOOL R19 0 0
|
||||||
0x7C340C00, // 00CD CALL R13 6
|
0x7C340C00, // 00CD CALL R13 6
|
||||||
0x50380000, // 00CE LDBOOL R14 0 0
|
0x50340000, // 00CE LDBOOL R13 0 0
|
||||||
0x80041C00, // 00CF RET 1 R14
|
0x80041A00, // 00CF RET 1 R13
|
||||||
0xB8361800, // 00D0 GETNGBL R13 K12
|
0xB8361800, // 00D0 GETNGBL R13 K12
|
||||||
0x88341B31, // 00D1 GETMBR R13 R13 K49
|
0x88341B31, // 00D1 GETMBR R13 R13 K49
|
||||||
0x8C341B0E, // 00D2 GETMET R13 R13 K14
|
0x8C341B0E, // 00D2 GETMET R13 R13 K14
|
||||||
@ -1523,28 +1523,28 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma3, /* name */
|
|||||||
0x58880003, // 0211 LDCONST R34 K3
|
0x58880003, // 0211 LDCONST R34 K3
|
||||||
0x508C0200, // 0212 LDBOOL R35 1 0
|
0x508C0200, // 0212 LDBOOL R35 1 0
|
||||||
0x7C740C00, // 0213 CALL R29 6
|
0x7C740C00, // 0213 CALL R29 6
|
||||||
0x8C78075D, // 0214 GETMET R30 R3 K93
|
0x8C74075D, // 0214 GETMET R29 R3 K93
|
||||||
0x7C780200, // 0215 CALL R30 1
|
0x7C740200, // 0215 CALL R29 1
|
||||||
0x8C78075E, // 0216 GETMET R30 R3 K94
|
0x8C74075E, // 0216 GETMET R29 R3 K94
|
||||||
0x5C803200, // 0217 MOVE R32 R25
|
0x5C7C3200, // 0217 MOVE R31 R25
|
||||||
0x5C843400, // 0218 MOVE R33 R26
|
0x5C803400, // 0218 MOVE R32 R26
|
||||||
0x5C883600, // 0219 MOVE R34 R27
|
0x5C843600, // 0219 MOVE R33 R27
|
||||||
0x5C8C3800, // 021A MOVE R35 R28
|
0x5C883800, // 021A MOVE R34 R28
|
||||||
0x7C780A00, // 021B CALL R30 5
|
0x7C740A00, // 021B CALL R29 5
|
||||||
0x900EBF03, // 021C SETMBR R3 K95 K3
|
0x900EBF03, // 021C SETMBR R3 K95 K3
|
||||||
0x8C780760, // 021D GETMET R30 R3 K96
|
0x8C740760, // 021D GETMET R29 R3 K96
|
||||||
0x7C780200, // 021E CALL R30 1
|
0x7C740200, // 021E CALL R29 1
|
||||||
0x8C780761, // 021F GETMET R30 R3 K97
|
0x8C740761, // 021F GETMET R29 R3 K97
|
||||||
0x50800200, // 0220 LDBOOL R32 1 0
|
0x507C0200, // 0220 LDBOOL R31 1 0
|
||||||
0x7C780400, // 0221 CALL R30 2
|
0x7C740400, // 0221 CALL R29 2
|
||||||
0x8C780762, // 0222 GETMET R30 R3 K98
|
0x8C740762, // 0222 GETMET R29 R3 K98
|
||||||
0x7C780200, // 0223 CALL R30 1
|
0x7C740200, // 0223 CALL R29 1
|
||||||
0x8C780763, // 0224 GETMET R30 R3 K99
|
0x8C740763, // 0224 GETMET R29 R3 K99
|
||||||
0x7C780200, // 0225 CALL R30 1
|
0x7C740200, // 0225 CALL R29 1
|
||||||
0x8C780764, // 0226 GETMET R30 R3 K100
|
0x8C740764, // 0226 GETMET R29 R3 K100
|
||||||
0x7C780200, // 0227 CALL R30 1
|
0x7C740200, // 0227 CALL R29 1
|
||||||
0x50780200, // 0228 LDBOOL R30 1 0
|
0x50740200, // 0228 LDBOOL R29 1 0
|
||||||
0x80043C00, // 0229 RET 1 R30
|
0x80043A00, // 0229 RET 1 R29
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
@ -1882,8 +1882,8 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma1, /* name */
|
|||||||
0x5828000A, // 0016 LDCONST R10 K10
|
0x5828000A, // 0016 LDCONST R10 K10
|
||||||
0x502C0000, // 0017 LDBOOL R11 0 0
|
0x502C0000, // 0017 LDBOOL R11 0 0
|
||||||
0x7C140C00, // 0018 CALL R5 6
|
0x7C140C00, // 0018 CALL R5 6
|
||||||
0x50180000, // 0019 LDBOOL R6 0 0
|
0x50140000, // 0019 LDBOOL R5 0 0
|
||||||
0x80040C00, // 001A RET 1 R6
|
0x80040A00, // 001A RET 1 R5
|
||||||
0xB8161A00, // 001B GETNGBL R5 K13
|
0xB8161A00, // 001B GETNGBL R5 K13
|
||||||
0x8C140B0E, // 001C GETMET R5 R5 K14
|
0x8C140B0E, // 001C GETMET R5 R5 K14
|
||||||
0x7C140200, // 001D CALL R5 1
|
0x7C140200, // 001D CALL R5 1
|
||||||
@ -2299,8 +2299,8 @@ be_local_closure(Matter_Commisioning_Context_parse_Sigma1, /* name */
|
|||||||
0x5838000C, // 01B7 LDCONST R14 K12
|
0x5838000C, // 01B7 LDCONST R14 K12
|
||||||
0x503C0000, // 01B8 LDBOOL R15 0 0
|
0x503C0000, // 01B8 LDBOOL R15 0 0
|
||||||
0x7C240C00, // 01B9 CALL R9 6
|
0x7C240C00, // 01B9 CALL R9 6
|
||||||
0x50280000, // 01BA LDBOOL R10 0 0
|
0x50240000, // 01BA LDBOOL R9 0 0
|
||||||
0x80041400, // 01BB RET 1 R10
|
0x80041200, // 01BB RET 1 R9
|
||||||
0x88240331, // 01BC GETMBR R9 R1 K49
|
0x88240331, // 01BC GETMBR R9 R1 K49
|
||||||
0x90126009, // 01BD SETMBR R4 K48 R9
|
0x90126009, // 01BD SETMBR R4 K48 R9
|
||||||
0x8C240932, // 01BE GETMET R9 R4 K50
|
0x8C240932, // 01BE GETMET R9 R4 K50
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1371,7 +1371,7 @@ be_local_closure(Matter_IM__inner_process_read_request, /* name */
|
|||||||
1, /* has sup protos */
|
1, /* has sup protos */
|
||||||
( &(const struct bproto*[ 2]) {
|
( &(const struct bproto*[ 2]) {
|
||||||
be_nested_proto(
|
be_nested_proto(
|
||||||
19, /* nstack */
|
23, /* nstack */
|
||||||
4, /* argc */
|
4, /* argc */
|
||||||
0, /* varg */
|
0, /* varg */
|
||||||
1, /* has upvals */
|
1, /* has upvals */
|
||||||
@ -1382,204 +1382,225 @@ be_local_closure(Matter_IM__inner_process_read_request, /* name */
|
|||||||
0, /* has sup protos */
|
0, /* has sup protos */
|
||||||
NULL, /* no sub protos */
|
NULL, /* no sub protos */
|
||||||
1, /* has constants */
|
1, /* has constants */
|
||||||
( &(const bvalue[33]) { /* constants */
|
( &(const bvalue[39]) { /* constants */
|
||||||
/* K0 */ be_nested_str_weak(string),
|
/* K0 */ be_nested_str_weak(string),
|
||||||
/* K1 */ be_nested_str_weak(matter),
|
/* K1 */ be_nested_str_weak(matter),
|
||||||
/* K2 */ be_nested_str_weak(get_attribute_name),
|
/* K2 */ be_nested_str_weak(TLV),
|
||||||
/* K3 */ be_nested_str_weak(cluster),
|
/* K3 */ be_nested_str_weak(get_attribute_name),
|
||||||
/* K4 */ be_nested_str_weak(attribute),
|
/* K4 */ be_nested_str_weak(cluster),
|
||||||
/* K5 */ be_nested_str_weak(_X20_X28),
|
/* K5 */ be_nested_str_weak(attribute),
|
||||||
/* K6 */ be_nested_str_weak(_X29),
|
/* K6 */ be_nested_str_weak(_X20_X28),
|
||||||
/* K7 */ be_nested_str_weak(),
|
/* K7 */ be_nested_str_weak(_X29),
|
||||||
/* K8 */ be_nested_str_weak(read_attribute),
|
/* K8 */ be_nested_str_weak(),
|
||||||
/* K9 */ be_nested_str_weak(AttributeReportIB),
|
/* K9 */ be_nested_str_weak(read_attribute),
|
||||||
/* K10 */ be_nested_str_weak(attribute_data),
|
/* K10 */ be_nested_str_weak(AttributeReportIB),
|
||||||
/* K11 */ be_nested_str_weak(AttributeDataIB),
|
/* K11 */ be_nested_str_weak(attribute_data),
|
||||||
/* K12 */ be_nested_str_weak(data_version),
|
/* K12 */ be_nested_str_weak(AttributeDataIB),
|
||||||
/* K13 */ be_const_int(1),
|
/* K13 */ be_nested_str_weak(data_version),
|
||||||
/* K14 */ be_nested_str_weak(path),
|
/* K14 */ be_const_int(1),
|
||||||
/* K15 */ be_nested_str_weak(AttributePathIB),
|
/* K15 */ be_nested_str_weak(path),
|
||||||
/* K16 */ be_nested_str_weak(endpoint),
|
/* K16 */ be_nested_str_weak(AttributePathIB),
|
||||||
/* K17 */ be_nested_str_weak(data),
|
/* K17 */ be_nested_str_weak(endpoint),
|
||||||
/* K18 */ be_nested_str_weak(attribute_reports),
|
/* K18 */ be_nested_str_weak(data),
|
||||||
/* K19 */ be_nested_str_weak(push),
|
/* K19 */ be_nested_str_weak(to_TLV),
|
||||||
/* K20 */ be_nested_str_weak(tasmota),
|
/* K20 */ be_nested_str_weak(encode_len),
|
||||||
/* K21 */ be_nested_str_weak(log),
|
/* K21 */ be_nested_str_weak(create_TLV),
|
||||||
/* K22 */ be_nested_str_weak(format),
|
/* K22 */ be_nested_str_weak(RAW),
|
||||||
/* K23 */ be_nested_str_weak(MTR_X3A_X20_X3ERead_Attr_X20_X28_X256i_X29_X20_X25s_X25s_X20_X2D_X20_X25s),
|
/* K23 */ be_nested_str_weak(tlv2raw),
|
||||||
/* K24 */ be_nested_str_weak(local_session_id),
|
/* K24 */ be_nested_str_weak(attribute_reports),
|
||||||
/* K25 */ be_const_int(2),
|
/* K25 */ be_nested_str_weak(push),
|
||||||
/* K26 */ be_nested_str_weak(status),
|
/* K26 */ be_nested_str_weak(tasmota),
|
||||||
/* K27 */ be_nested_str_weak(attribute_status),
|
/* K27 */ be_nested_str_weak(log),
|
||||||
/* K28 */ be_nested_str_weak(AttributeStatusIB),
|
/* K28 */ be_nested_str_weak(format),
|
||||||
/* K29 */ be_nested_str_weak(StatusIB),
|
/* K29 */ be_nested_str_weak(MTR_X3A_X20_X3ERead_Attr_X20_X28_X256i_X29_X20_X25s_X25s_X20_X2D_X20_X25s),
|
||||||
/* K30 */ be_nested_str_weak(MTR_X3A_X20_X3ERead_Attr_X20_X28_X256i_X29_X20_X25s_X25s_X20_X2D_X20STATUS_X3A_X200x_X2502X_X20_X25s),
|
/* K30 */ be_nested_str_weak(local_session_id),
|
||||||
/* K31 */ be_nested_str_weak(UNSUPPORTED_ATTRIBUTE),
|
/* K31 */ be_const_int(2),
|
||||||
/* K32 */ be_nested_str_weak(MTR_X3A_X20_X3ERead_Attr_X20_X28_X256i_X29_X20_X25s_X25s_X20_X2D_X20IGNORED),
|
/* K32 */ be_nested_str_weak(status),
|
||||||
|
/* K33 */ be_nested_str_weak(attribute_status),
|
||||||
|
/* K34 */ be_nested_str_weak(AttributeStatusIB),
|
||||||
|
/* K35 */ be_nested_str_weak(StatusIB),
|
||||||
|
/* K36 */ be_nested_str_weak(MTR_X3A_X20_X3ERead_Attr_X20_X28_X256i_X29_X20_X25s_X25s_X20_X2D_X20STATUS_X3A_X200x_X2502X_X20_X25s),
|
||||||
|
/* K37 */ be_nested_str_weak(UNSUPPORTED_ATTRIBUTE),
|
||||||
|
/* K38 */ be_nested_str_weak(MTR_X3A_X20_X3ERead_Attr_X20_X28_X256i_X29_X20_X25s_X25s_X20_X2D_X20IGNORED),
|
||||||
}),
|
}),
|
||||||
be_str_weak(read_single_attribute),
|
be_str_weak(read_single_attribute),
|
||||||
&be_const_str_solidified,
|
&be_const_str_solidified,
|
||||||
( &(const binstruction[160]) { /* code */
|
( &(const binstruction[175]) { /* code */
|
||||||
0xA4120000, // 0000 IMPORT R4 K0
|
0xA4120000, // 0000 IMPORT R4 K0
|
||||||
0xB8160200, // 0001 GETNGBL R5 K1
|
0xB8160200, // 0001 GETNGBL R5 K1
|
||||||
0x8C140B02, // 0002 GETMET R5 R5 K2
|
0x88140B02, // 0002 GETMBR R5 R5 K2
|
||||||
0x881C0503, // 0003 GETMBR R7 R2 K3
|
0xB81A0200, // 0003 GETNGBL R6 K1
|
||||||
0x88200504, // 0004 GETMBR R8 R2 K4
|
0x8C180D03, // 0004 GETMET R6 R6 K3
|
||||||
0x7C140600, // 0005 CALL R5 3
|
0x88200504, // 0005 GETMBR R8 R2 K4
|
||||||
0x78160002, // 0006 JMPF R5 #000A
|
0x88240505, // 0006 GETMBR R9 R2 K5
|
||||||
0x001A0A05, // 0007 ADD R6 K5 R5
|
0x7C180600, // 0007 CALL R6 3
|
||||||
0x00180D06, // 0008 ADD R6 R6 K6
|
0x781A0002, // 0008 JMPF R6 #000C
|
||||||
0x70020000, // 0009 JMP #000B
|
0x001E0C06, // 0009 ADD R7 K6 R6
|
||||||
0x58180007, // 000A LDCONST R6 K7
|
0x001C0F07, // 000A ADD R7 R7 K7
|
||||||
0x5C140C00, // 000B MOVE R5 R6
|
0x70020000, // 000B JMP #000D
|
||||||
0x4C180000, // 000C LDNIL R6
|
0x581C0008, // 000C LDCONST R7 K8
|
||||||
0x20180206, // 000D NE R6 R1 R6
|
0x5C180E00, // 000D MOVE R6 R7
|
||||||
0x781A0004, // 000E JMPF R6 #0014
|
0x4C1C0000, // 000E LDNIL R7
|
||||||
0x8C180308, // 000F GETMET R6 R1 K8
|
0x201C0207, // 000F NE R7 R1 R7
|
||||||
0x68200000, // 0010 GETUPV R8 U0
|
0x781E0004, // 0010 JMPF R7 #0016
|
||||||
0x5C240400, // 0011 MOVE R9 R2
|
0x8C1C0309, // 0011 GETMET R7 R1 K9
|
||||||
0x7C180600, // 0012 CALL R6 3
|
0x68240000, // 0012 GETUPV R9 U0
|
||||||
0x70020000, // 0013 JMP #0015
|
0x5C280400, // 0013 MOVE R10 R2
|
||||||
0x4C180000, // 0014 LDNIL R6
|
0x7C1C0600, // 0014 CALL R7 3
|
||||||
0x4C1C0000, // 0015 LDNIL R7
|
0x70020000, // 0015 JMP #0017
|
||||||
0x201C0C07, // 0016 NE R7 R6 R7
|
0x4C1C0000, // 0016 LDNIL R7
|
||||||
0x781E0034, // 0017 JMPF R7 #004D
|
0x4C200000, // 0017 LDNIL R8
|
||||||
0xB81E0200, // 0018 GETNGBL R7 K1
|
0x20200E08, // 0018 NE R8 R7 R8
|
||||||
0x8C1C0F09, // 0019 GETMET R7 R7 K9
|
0x78220041, // 0019 JMPF R8 #005C
|
||||||
0x7C1C0200, // 001A CALL R7 1
|
0xB8220200, // 001A GETNGBL R8 K1
|
||||||
0xB8220200, // 001B GETNGBL R8 K1
|
0x8C20110A, // 001B GETMET R8 R8 K10
|
||||||
0x8C20110B, // 001C GETMET R8 R8 K11
|
0x7C200200, // 001C CALL R8 1
|
||||||
0x7C200200, // 001D CALL R8 1
|
0xB8260200, // 001D GETNGBL R9 K1
|
||||||
0x901E1408, // 001E SETMBR R7 K10 R8
|
0x8C24130C, // 001E GETMET R9 R9 K12
|
||||||
0x88200F0A, // 001F GETMBR R8 R7 K10
|
0x7C240200, // 001F CALL R9 1
|
||||||
0x9022190D, // 0020 SETMBR R8 K12 K13
|
0x90221609, // 0020 SETMBR R8 K11 R9
|
||||||
0x88200F0A, // 0021 GETMBR R8 R7 K10
|
0x8824110B, // 0021 GETMBR R9 R8 K11
|
||||||
0xB8260200, // 0022 GETNGBL R9 K1
|
0x90261B0E, // 0022 SETMBR R9 K13 K14
|
||||||
0x8C24130F, // 0023 GETMET R9 R9 K15
|
0x8824110B, // 0023 GETMBR R9 R8 K11
|
||||||
0x7C240200, // 0024 CALL R9 1
|
0xB82A0200, // 0024 GETNGBL R10 K1
|
||||||
0x90221C09, // 0025 SETMBR R8 K14 R9
|
0x8C281510, // 0025 GETMET R10 R10 K16
|
||||||
0x88200F0A, // 0026 GETMBR R8 R7 K10
|
0x7C280200, // 0026 CALL R10 1
|
||||||
0x8820110E, // 0027 GETMBR R8 R8 K14
|
0x90261E0A, // 0027 SETMBR R9 K15 R10
|
||||||
0x88240510, // 0028 GETMBR R9 R2 K16
|
0x8824110B, // 0028 GETMBR R9 R8 K11
|
||||||
0x90222009, // 0029 SETMBR R8 K16 R9
|
0x8824130F, // 0029 GETMBR R9 R9 K15
|
||||||
0x88200F0A, // 002A GETMBR R8 R7 K10
|
0x88280511, // 002A GETMBR R10 R2 K17
|
||||||
0x8820110E, // 002B GETMBR R8 R8 K14
|
0x9026220A, // 002B SETMBR R9 K17 R10
|
||||||
0x88240503, // 002C GETMBR R9 R2 K3
|
0x8824110B, // 002C GETMBR R9 R8 K11
|
||||||
0x90220609, // 002D SETMBR R8 K3 R9
|
0x8824130F, // 002D GETMBR R9 R9 K15
|
||||||
0x88200F0A, // 002E GETMBR R8 R7 K10
|
0x88280504, // 002E GETMBR R10 R2 K4
|
||||||
0x8820110E, // 002F GETMBR R8 R8 K14
|
0x9026080A, // 002F SETMBR R9 K4 R10
|
||||||
0x88240504, // 0030 GETMBR R9 R2 K4
|
0x8824110B, // 0030 GETMBR R9 R8 K11
|
||||||
0x90220809, // 0031 SETMBR R8 K4 R9
|
0x8824130F, // 0031 GETMBR R9 R9 K15
|
||||||
0x88200F0A, // 0032 GETMBR R8 R7 K10
|
0x88280505, // 0032 GETMBR R10 R2 K5
|
||||||
0x90222206, // 0033 SETMBR R8 K17 R6
|
0x90260A0A, // 0033 SETMBR R9 K5 R10
|
||||||
0x88200112, // 0034 GETMBR R8 R0 K18
|
0x8824110B, // 0034 GETMBR R9 R8 K11
|
||||||
0x8C201113, // 0035 GETMET R8 R8 K19
|
0x90262407, // 0035 SETMBR R9 K18 R7
|
||||||
0x5C280E00, // 0036 MOVE R10 R7
|
0x8C241113, // 0036 GETMET R9 R8 K19
|
||||||
0x7C200400, // 0037 CALL R8 2
|
0x7C240200, // 0037 CALL R9 1
|
||||||
0x68200001, // 0038 GETUPV R8 U1
|
0x8C281314, // 0038 GETMET R10 R9 K20
|
||||||
0x7422000F, // 0039 JMPT R8 #004A
|
0x7C280200, // 0039 CALL R10 1
|
||||||
0xB8222800, // 003A GETNGBL R8 K20
|
0x602C0015, // 003A GETGBL R11 G21
|
||||||
0x8C201115, // 003B GETMET R8 R8 K21
|
0x5C301400, // 003B MOVE R12 R10
|
||||||
0x8C280916, // 003C GETMET R10 R4 K22
|
0x7C2C0200, // 003C CALL R11 1
|
||||||
0x58300017, // 003D LDCONST R12 K23
|
0x8C300B15, // 003D GETMET R12 R5 K21
|
||||||
0x68340000, // 003E GETUPV R13 U0
|
0x88380B16, // 003E GETMBR R14 R5 K22
|
||||||
0x88341B18, // 003F GETMBR R13 R13 K24
|
0x8C3C1317, // 003F GETMET R15 R9 K23
|
||||||
0x60380008, // 0040 GETGBL R14 G8
|
0x5C441600, // 0040 MOVE R17 R11
|
||||||
0x5C3C0400, // 0041 MOVE R15 R2
|
0x7C3C0400, // 0041 CALL R15 2
|
||||||
0x7C380200, // 0042 CALL R14 1
|
0x7C300600, // 0042 CALL R12 3
|
||||||
0x5C3C0A00, // 0043 MOVE R15 R5
|
0x88340118, // 0043 GETMBR R13 R0 K24
|
||||||
0x60400008, // 0044 GETGBL R16 G8
|
0x8C341B19, // 0044 GETMET R13 R13 K25
|
||||||
0x5C440C00, // 0045 MOVE R17 R6
|
0x5C3C1800, // 0045 MOVE R15 R12
|
||||||
0x7C400200, // 0046 CALL R16 1
|
0x7C340400, // 0046 CALL R13 2
|
||||||
0x7C280C00, // 0047 CALL R10 6
|
0x68340001, // 0047 GETUPV R13 U1
|
||||||
0x582C0019, // 0048 LDCONST R11 K25
|
0x7436000F, // 0048 JMPT R13 #0059
|
||||||
0x7C200600, // 0049 CALL R8 3
|
0xB8363400, // 0049 GETNGBL R13 K26
|
||||||
0x50200200, // 004A LDBOOL R8 1 0
|
0x8C341B1B, // 004A GETMET R13 R13 K27
|
||||||
0x80041000, // 004B RET 1 R8
|
0x8C3C091C, // 004B GETMET R15 R4 K28
|
||||||
0x70020051, // 004C JMP #009F
|
0x5844001D, // 004C LDCONST R17 K29
|
||||||
0x881C051A, // 004D GETMBR R7 R2 K26
|
0x68480000, // 004D GETUPV R18 U0
|
||||||
0x4C200000, // 004E LDNIL R8
|
0x8848251E, // 004E GETMBR R18 R18 K30
|
||||||
0x201C0E08, // 004F NE R7 R7 R8
|
0x604C0008, // 004F GETGBL R19 G8
|
||||||
0x781E003E, // 0050 JMPF R7 #0090
|
0x5C500400, // 0050 MOVE R20 R2
|
||||||
0x780E003C, // 0051 JMPF R3 #008F
|
0x7C4C0200, // 0051 CALL R19 1
|
||||||
0xB81E0200, // 0052 GETNGBL R7 K1
|
0x5C500C00, // 0052 MOVE R20 R6
|
||||||
0x8C1C0F09, // 0053 GETMET R7 R7 K9
|
0x60540008, // 0053 GETGBL R21 G8
|
||||||
0x7C1C0200, // 0054 CALL R7 1
|
0x5C580E00, // 0054 MOVE R22 R7
|
||||||
0xB8220200, // 0055 GETNGBL R8 K1
|
0x7C540200, // 0055 CALL R21 1
|
||||||
0x8C20111C, // 0056 GETMET R8 R8 K28
|
0x7C3C0C00, // 0056 CALL R15 6
|
||||||
0x7C200200, // 0057 CALL R8 1
|
0x5840001F, // 0057 LDCONST R16 K31
|
||||||
0x901E3608, // 0058 SETMBR R7 K27 R8
|
0x7C340600, // 0058 CALL R13 3
|
||||||
0x88200F1B, // 0059 GETMBR R8 R7 K27
|
0x50340200, // 0059 LDBOOL R13 1 0
|
||||||
0xB8260200, // 005A GETNGBL R9 K1
|
0x80041A00, // 005A RET 1 R13
|
||||||
0x8C24130F, // 005B GETMET R9 R9 K15
|
0x70020051, // 005B JMP #00AE
|
||||||
0x7C240200, // 005C CALL R9 1
|
0x88200520, // 005C GETMBR R8 R2 K32
|
||||||
0x90221C09, // 005D SETMBR R8 K14 R9
|
0x4C240000, // 005D LDNIL R9
|
||||||
0x88200F1B, // 005E GETMBR R8 R7 K27
|
0x20201009, // 005E NE R8 R8 R9
|
||||||
0xB8260200, // 005F GETNGBL R9 K1
|
0x7822003E, // 005F JMPF R8 #009F
|
||||||
0x8C24131D, // 0060 GETMET R9 R9 K29
|
0x780E003C, // 0060 JMPF R3 #009E
|
||||||
0x7C240200, // 0061 CALL R9 1
|
0xB8220200, // 0061 GETNGBL R8 K1
|
||||||
0x90223409, // 0062 SETMBR R8 K26 R9
|
0x8C20110A, // 0062 GETMET R8 R8 K10
|
||||||
0x88200F1B, // 0063 GETMBR R8 R7 K27
|
0x7C200200, // 0063 CALL R8 1
|
||||||
0x8820110E, // 0064 GETMBR R8 R8 K14
|
0xB8260200, // 0064 GETNGBL R9 K1
|
||||||
0x88240510, // 0065 GETMBR R9 R2 K16
|
0x8C241322, // 0065 GETMET R9 R9 K34
|
||||||
0x90222009, // 0066 SETMBR R8 K16 R9
|
0x7C240200, // 0066 CALL R9 1
|
||||||
0x88200F1B, // 0067 GETMBR R8 R7 K27
|
0x90224209, // 0067 SETMBR R8 K33 R9
|
||||||
0x8820110E, // 0068 GETMBR R8 R8 K14
|
0x88241121, // 0068 GETMBR R9 R8 K33
|
||||||
0x88240503, // 0069 GETMBR R9 R2 K3
|
0xB82A0200, // 0069 GETNGBL R10 K1
|
||||||
0x90220609, // 006A SETMBR R8 K3 R9
|
0x8C281510, // 006A GETMET R10 R10 K16
|
||||||
0x88200F1B, // 006B GETMBR R8 R7 K27
|
0x7C280200, // 006B CALL R10 1
|
||||||
0x8820110E, // 006C GETMBR R8 R8 K14
|
0x90261E0A, // 006C SETMBR R9 K15 R10
|
||||||
0x88240504, // 006D GETMBR R9 R2 K4
|
0x88241121, // 006D GETMBR R9 R8 K33
|
||||||
0x90220809, // 006E SETMBR R8 K4 R9
|
0xB82A0200, // 006E GETNGBL R10 K1
|
||||||
0x88200F1B, // 006F GETMBR R8 R7 K27
|
0x8C281523, // 006F GETMET R10 R10 K35
|
||||||
0x8820111A, // 0070 GETMBR R8 R8 K26
|
0x7C280200, // 0070 CALL R10 1
|
||||||
0x8824051A, // 0071 GETMBR R9 R2 K26
|
0x9026400A, // 0071 SETMBR R9 K32 R10
|
||||||
0x90223409, // 0072 SETMBR R8 K26 R9
|
0x88241121, // 0072 GETMBR R9 R8 K33
|
||||||
0x88200112, // 0073 GETMBR R8 R0 K18
|
0x8824130F, // 0073 GETMBR R9 R9 K15
|
||||||
0x8C201113, // 0074 GETMET R8 R8 K19
|
0x88280511, // 0074 GETMBR R10 R2 K17
|
||||||
0x5C280E00, // 0075 MOVE R10 R7
|
0x9026220A, // 0075 SETMBR R9 K17 R10
|
||||||
0x7C200400, // 0076 CALL R8 2
|
0x88241121, // 0076 GETMBR R9 R8 K33
|
||||||
0xB8222800, // 0077 GETNGBL R8 K20
|
0x8824130F, // 0077 GETMBR R9 R9 K15
|
||||||
0x8C201115, // 0078 GETMET R8 R8 K21
|
0x88280504, // 0078 GETMBR R10 R2 K4
|
||||||
0x8C280916, // 0079 GETMET R10 R4 K22
|
0x9026080A, // 0079 SETMBR R9 K4 R10
|
||||||
0x5830001E, // 007A LDCONST R12 K30
|
0x88241121, // 007A GETMBR R9 R8 K33
|
||||||
0x68340000, // 007B GETUPV R13 U0
|
0x8824130F, // 007B GETMBR R9 R9 K15
|
||||||
0x88341B18, // 007C GETMBR R13 R13 K24
|
0x88280505, // 007C GETMBR R10 R2 K5
|
||||||
0x60380008, // 007D GETGBL R14 G8
|
0x90260A0A, // 007D SETMBR R9 K5 R10
|
||||||
0x5C3C0400, // 007E MOVE R15 R2
|
0x88241121, // 007E GETMBR R9 R8 K33
|
||||||
0x7C380200, // 007F CALL R14 1
|
0x88241320, // 007F GETMBR R9 R9 K32
|
||||||
0x5C3C0A00, // 0080 MOVE R15 R5
|
0x88280520, // 0080 GETMBR R10 R2 K32
|
||||||
0x8840051A, // 0081 GETMBR R16 R2 K26
|
0x9026400A, // 0081 SETMBR R9 K32 R10
|
||||||
0x8844051A, // 0082 GETMBR R17 R2 K26
|
0x88240118, // 0082 GETMBR R9 R0 K24
|
||||||
0xB84A0200, // 0083 GETNGBL R18 K1
|
0x8C241319, // 0083 GETMET R9 R9 K25
|
||||||
0x8848251F, // 0084 GETMBR R18 R18 K31
|
0x5C2C1000, // 0084 MOVE R11 R8
|
||||||
0x1C442212, // 0085 EQ R17 R17 R18
|
0x7C240400, // 0085 CALL R9 2
|
||||||
0x78460001, // 0086 JMPF R17 #0089
|
0xB8263400, // 0086 GETNGBL R9 K26
|
||||||
0x5844001F, // 0087 LDCONST R17 K31
|
0x8C24131B, // 0087 GETMET R9 R9 K27
|
||||||
0x70020000, // 0088 JMP #008A
|
0x8C2C091C, // 0088 GETMET R11 R4 K28
|
||||||
0x58440007, // 0089 LDCONST R17 K7
|
0x58340024, // 0089 LDCONST R13 K36
|
||||||
0x7C280E00, // 008A CALL R10 7
|
0x68380000, // 008A GETUPV R14 U0
|
||||||
0x582C0019, // 008B LDCONST R11 K25
|
0x88381D1E, // 008B GETMBR R14 R14 K30
|
||||||
0x7C200600, // 008C CALL R8 3
|
0x603C0008, // 008C GETGBL R15 G8
|
||||||
0x50200200, // 008D LDBOOL R8 1 0
|
0x5C400400, // 008D MOVE R16 R2
|
||||||
0x80041000, // 008E RET 1 R8
|
0x7C3C0200, // 008E CALL R15 1
|
||||||
0x7002000E, // 008F JMP #009F
|
0x5C400C00, // 008F MOVE R16 R6
|
||||||
0xB81E2800, // 0090 GETNGBL R7 K20
|
0x88440520, // 0090 GETMBR R17 R2 K32
|
||||||
0x8C1C0F15, // 0091 GETMET R7 R7 K21
|
0x88480520, // 0091 GETMBR R18 R2 K32
|
||||||
0x8C240916, // 0092 GETMET R9 R4 K22
|
0xB84E0200, // 0092 GETNGBL R19 K1
|
||||||
0x582C0020, // 0093 LDCONST R11 K32
|
0x884C2725, // 0093 GETMBR R19 R19 K37
|
||||||
0x68300000, // 0094 GETUPV R12 U0
|
0x1C482413, // 0094 EQ R18 R18 R19
|
||||||
0x88301918, // 0095 GETMBR R12 R12 K24
|
0x784A0001, // 0095 JMPF R18 #0098
|
||||||
0x60340008, // 0096 GETGBL R13 G8
|
0x58480025, // 0096 LDCONST R18 K37
|
||||||
0x5C380400, // 0097 MOVE R14 R2
|
0x70020000, // 0097 JMP #0099
|
||||||
0x7C340200, // 0098 CALL R13 1
|
0x58480008, // 0098 LDCONST R18 K8
|
||||||
0x5C380A00, // 0099 MOVE R14 R5
|
0x7C2C0E00, // 0099 CALL R11 7
|
||||||
0x7C240A00, // 009A CALL R9 5
|
0x5830001F, // 009A LDCONST R12 K31
|
||||||
0x58280019, // 009B LDCONST R10 K25
|
0x7C240600, // 009B CALL R9 3
|
||||||
0x7C1C0600, // 009C CALL R7 3
|
0x50240200, // 009C LDBOOL R9 1 0
|
||||||
0x501C0000, // 009D LDBOOL R7 0 0
|
0x80041200, // 009D RET 1 R9
|
||||||
0x80040E00, // 009E RET 1 R7
|
0x7002000E, // 009E JMP #00AE
|
||||||
0x80000000, // 009F RET 0
|
0xB8223400, // 009F GETNGBL R8 K26
|
||||||
|
0x8C20111B, // 00A0 GETMET R8 R8 K27
|
||||||
|
0x8C28091C, // 00A1 GETMET R10 R4 K28
|
||||||
|
0x58300026, // 00A2 LDCONST R12 K38
|
||||||
|
0x68340000, // 00A3 GETUPV R13 U0
|
||||||
|
0x88341B1E, // 00A4 GETMBR R13 R13 K30
|
||||||
|
0x60380008, // 00A5 GETGBL R14 G8
|
||||||
|
0x5C3C0400, // 00A6 MOVE R15 R2
|
||||||
|
0x7C380200, // 00A7 CALL R14 1
|
||||||
|
0x5C3C0C00, // 00A8 MOVE R15 R6
|
||||||
|
0x7C280A00, // 00A9 CALL R10 5
|
||||||
|
0x582C001F, // 00AA LDCONST R11 K31
|
||||||
|
0x7C200600, // 00AB CALL R8 3
|
||||||
|
0x50200000, // 00AC LDBOOL R8 0 0
|
||||||
|
0x80041000, // 00AD RET 1 R8
|
||||||
|
0x80000000, // 00AE RET 0
|
||||||
})
|
})
|
||||||
),
|
),
|
||||||
be_nested_proto(
|
be_nested_proto(
|
||||||
|
@ -1440,7 +1440,7 @@ be_local_closure(Matter_IM_SubscribeResponse_init, /* name */
|
|||||||
********************************************************************/
|
********************************************************************/
|
||||||
be_local_closure(Matter_IM_SubscribeResponse_status_ok_received, /* name */
|
be_local_closure(Matter_IM_SubscribeResponse_status_ok_received, /* name */
|
||||||
be_nested_proto(
|
be_nested_proto(
|
||||||
5, /* nstack */
|
10, /* nstack */
|
||||||
2, /* argc */
|
2, /* argc */
|
||||||
2, /* varg */
|
2, /* varg */
|
||||||
0, /* has upvals */
|
0, /* has upvals */
|
||||||
@ -1448,19 +1448,41 @@ be_local_closure(Matter_IM_SubscribeResponse_status_ok_received, /* name */
|
|||||||
0, /* has sup protos */
|
0, /* has sup protos */
|
||||||
NULL, /* no sub protos */
|
NULL, /* no sub protos */
|
||||||
1, /* has constants */
|
1, /* has constants */
|
||||||
( &(const bvalue[ 1]) { /* constants */
|
( &(const bvalue[11]) { /* constants */
|
||||||
/* K0 */ be_nested_str_weak(status_ok_received),
|
/* K0 */ be_nested_str_weak(string),
|
||||||
|
/* K1 */ be_nested_str_weak(tasmota),
|
||||||
|
/* K2 */ be_nested_str_weak(log),
|
||||||
|
/* K3 */ be_nested_str_weak(format),
|
||||||
|
/* K4 */ be_nested_str_weak(MTR_X3A_X20_X3ESub_OK_X20_X20_X20_X20_X28_X256i_X29_X20sub_X3D_X25i),
|
||||||
|
/* K5 */ be_nested_str_weak(session),
|
||||||
|
/* K6 */ be_nested_str_weak(local_session_id),
|
||||||
|
/* K7 */ be_nested_str_weak(sub),
|
||||||
|
/* K8 */ be_nested_str_weak(subscription_id),
|
||||||
|
/* K9 */ be_const_int(2),
|
||||||
|
/* K10 */ be_nested_str_weak(status_ok_received),
|
||||||
}),
|
}),
|
||||||
be_str_weak(status_ok_received),
|
be_str_weak(status_ok_received),
|
||||||
&be_const_str_solidified,
|
&be_const_str_solidified,
|
||||||
( &(const binstruction[ 7]) { /* code */
|
( &(const binstruction[19]) { /* code */
|
||||||
0x60080003, // 0000 GETGBL R2 G3
|
0xA40A0000, // 0000 IMPORT R2 K0
|
||||||
0x5C0C0000, // 0001 MOVE R3 R0
|
0xB80E0200, // 0001 GETNGBL R3 K1
|
||||||
0x7C080200, // 0002 CALL R2 1
|
0x8C0C0702, // 0002 GETMET R3 R3 K2
|
||||||
0x8C080500, // 0003 GETMET R2 R2 K0
|
0x8C140503, // 0003 GETMET R5 R2 K3
|
||||||
0x5C100200, // 0004 MOVE R4 R1
|
0x581C0004, // 0004 LDCONST R7 K4
|
||||||
0x7C080400, // 0005 CALL R2 2
|
0x88200305, // 0005 GETMBR R8 R1 K5
|
||||||
0x80040400, // 0006 RET 1 R2
|
0x88201106, // 0006 GETMBR R8 R8 K6
|
||||||
|
0x88240107, // 0007 GETMBR R9 R0 K7
|
||||||
|
0x88241308, // 0008 GETMBR R9 R9 K8
|
||||||
|
0x7C140800, // 0009 CALL R5 4
|
||||||
|
0x58180009, // 000A LDCONST R6 K9
|
||||||
|
0x7C0C0600, // 000B CALL R3 3
|
||||||
|
0x600C0003, // 000C GETGBL R3 G3
|
||||||
|
0x5C100000, // 000D MOVE R4 R0
|
||||||
|
0x7C0C0200, // 000E CALL R3 1
|
||||||
|
0x8C0C070A, // 000F GETMET R3 R3 K10
|
||||||
|
0x5C140200, // 0010 MOVE R5 R1
|
||||||
|
0x7C0C0400, // 0011 CALL R3 2
|
||||||
|
0x80040600, // 0012 RET 1 R3
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -35,6 +35,8 @@ WE517 {"Name":"WE517","Baud":9600,"Config":"8E1","Address":1,"Funct
|
|||||||
```
|
```
|
||||||
SDM72 {"Name":"SDM72","Baud":9600,"Config":"8N1","Address":0x01,"Function":0x04,"Power":0x0034,"Total":0x0156,"ExportActive":0x004A,"User":[{"R":0x0502,"J":"ImportActive","G":"Import Active","U":"kWh","D":24},{"R":0x0502,"J":"ExportPower","G":"Export Power","U":"W","D":23},{"R":0x0500,"J":"ImportPower","G":"Import Power","U":"W","D":23}]}
|
SDM72 {"Name":"SDM72","Baud":9600,"Config":"8N1","Address":0x01,"Function":0x04,"Power":0x0034,"Total":0x0156,"ExportActive":0x004A,"User":[{"R":0x0502,"J":"ImportActive","G":"Import Active","U":"kWh","D":24},{"R":0x0502,"J":"ExportPower","G":"Export Power","U":"W","D":23},{"R":0x0500,"J":"ImportPower","G":"Import Power","U":"W","D":23}]}
|
||||||
|
|
||||||
|
SDM72D_M {"Name":"SDM72D-M","Baud":9600,"Config":"8N1","Address":1,"Function":4,"Voltage":[0,2,4],"Current":[6,8,10],"Power":[12,14,16],"ApparentPower":[18,20,22],"ReactivePower":[24,26,28],"Factor":[30,32,34],"Frequency":70,"ExportActive":74,"Total":342,"User":[{"R":42,"J":"AverageVoltage","G":"Average Voltage","U":"V","D":21},{"R":46,"J":"AverageCurrent","G":"Average Current","U":"A","D":22},{"R":48,"J":"TotalCurrents","G":"Total Currents","U":"A","D":22},{"R":52,"J":"TotalPower","G":"Total Power","U":"W","D":23},{"R":56,"J":"TotalApparentPower","G":"Total Apparent Power","U":"W","D":23},{"R":60,"J":"TotalReactivePower","G":"Total Reactive Power","U":"W","D":23},{"R":62,"J":"TotalPowerFactor","G":"Total Power Factor","U":"W","D":2},{"R":72,"J":"ImportActive","G":"Import Active","U":"kWh","D":24},{"R":396,"J":"DiffPower","G":"Diff Power","U":"kWh","D":24},{"R":1280,"J":"TotalImportActive","G":"Total Import Active","U":"W","D":23},{"R":1282,"J":"TotalExportActive","G":"Total Export Active","U":"W","D":23}]}
|
||||||
|
|
||||||
SDM120 {"Name":"SDM120","Baud":2400,"Config":"8N1","Address":1,"Function":4,"Voltage":0,"Current":6,"Power":12,"ApparentPower":18,"ReactivePower":24,"Factor":30,"Frequency":70,"Total":342,"ExportActive":0x004A,"User":[{"R":0x0048,"J":"ImportActive","G":"Import Active","U":"kWh","D":24},{"R":0x004E,"J":"ExportReactive","G":"Export Reactive","U":"kVArh","D":24},{"R":0x004C,"J":"ImportReactive","G":"Import Reactive","U":"kVArh","D":24},{"R":0x0024,"J":"PhaseAngle","G":"Phase Angle","U":"Deg","D":2}]}
|
SDM120 {"Name":"SDM120","Baud":2400,"Config":"8N1","Address":1,"Function":4,"Voltage":0,"Current":6,"Power":12,"ApparentPower":18,"ReactivePower":24,"Factor":30,"Frequency":70,"Total":342,"ExportActive":0x004A,"User":[{"R":0x0048,"J":"ImportActive","G":"Import Active","U":"kWh","D":24},{"R":0x004E,"J":"ExportReactive","G":"Export Reactive","U":"kVArh","D":24},{"R":0x004C,"J":"ImportReactive","G":"Import Reactive","U":"kVArh","D":24},{"R":0x0024,"J":"PhaseAngle","G":"Phase Angle","U":"Deg","D":2}]}
|
||||||
|
|
||||||
SDM230 {"Name":"SDM230 with two user registers","Baud":2400,"Config":"8N1","Address":1,"Function":4,"Voltage":0,"Current":6,"Power":12,"ApparentPower":18,"ReactivePower":24,"Factor":30,"Frequency":70,"Total":342,"ExportActive":0x004A,"User":[{"R":0x004E,"J":"ExportReactive","G":"Export Reactive","U":"kVArh","D":3},{"R":0x0024,"J":"PhaseAngle","G":"Phase Angle","U":"Deg","D":2}]}
|
SDM230 {"Name":"SDM230 with two user registers","Baud":2400,"Config":"8N1","Address":1,"Function":4,"Voltage":0,"Current":6,"Power":12,"ApparentPower":18,"ReactivePower":24,"Factor":30,"Frequency":70,"Total":342,"ExportActive":0x004A,"User":[{"R":0x004E,"J":"ExportReactive","G":"Export Reactive","U":"kVArh","D":3},{"R":0x0024,"J":"PhaseAngle","G":"Phase Angle","U":"Deg","D":2}]}
|
||||||
|
@ -1302,9 +1302,15 @@ void ZCLFrame::syntheticAqaraCubeOrButton(class Z_attribute_list &attr_list, cla
|
|||||||
|
|
||||||
if (modelId.startsWith(F("lumi.sensor_cube"))) { // only for Aqara cube
|
if (modelId.startsWith(F("lumi.sensor_cube"))) { // only for Aqara cube
|
||||||
int32_t val = attr.getInt();
|
int32_t val = attr.getInt();
|
||||||
|
#ifdef ESP8266
|
||||||
const __FlashStringHelper *aqara_cube = F("AqaraCube");
|
const __FlashStringHelper *aqara_cube = F("AqaraCube");
|
||||||
const __FlashStringHelper *aqara_cube_side = F("AqaraCubeSide");
|
const __FlashStringHelper *aqara_cube_side = F("AqaraCubeSide");
|
||||||
const __FlashStringHelper *aqara_cube_from_side = F("AqaraCubeFromSide");
|
const __FlashStringHelper *aqara_cube_from_side = F("AqaraCubeFromSide");
|
||||||
|
#else
|
||||||
|
const char *aqara_cube = "AqaraCube";
|
||||||
|
const char *aqara_cube_side = "AqaraCubeSide";
|
||||||
|
const char *aqara_cube_from_side = "AqaraCubeFromSide";
|
||||||
|
#endif
|
||||||
|
|
||||||
switch (val) {
|
switch (val) {
|
||||||
case 0:
|
case 0:
|
||||||
@ -1355,8 +1361,13 @@ void ZCLFrame::syntheticAqaraCubeOrButton(class Z_attribute_list &attr_list, cla
|
|||||||
// presentValue = x + 512 = double tap while side x is on top
|
// presentValue = x + 512 = double tap while side x is on top
|
||||||
} else if (modelId.startsWith(F("lumi.remote")) || modelId.startsWith(F("lumi.sensor_swit"))) { // only for Aqara buttons WXKG11LM & WXKG12LM, 'swit' because of #9923
|
} else if (modelId.startsWith(F("lumi.remote")) || modelId.startsWith(F("lumi.sensor_swit"))) { // only for Aqara buttons WXKG11LM & WXKG12LM, 'swit' because of #9923
|
||||||
int32_t val = attr.getInt();
|
int32_t val = attr.getInt();
|
||||||
|
#ifdef ESP8266
|
||||||
const __FlashStringHelper *aqara_click = F("click"); // deprecated
|
const __FlashStringHelper *aqara_click = F("click"); // deprecated
|
||||||
const __FlashStringHelper *aqara_action = F("action"); // deprecated
|
const __FlashStringHelper *aqara_action = F("action"); // deprecated
|
||||||
|
#else
|
||||||
|
const char *aqara_click = "click"; // deprecated
|
||||||
|
const char *aqara_action = "action"; // deprecated
|
||||||
|
#endif
|
||||||
Z_attribute & attr_click = attr_list.addAttribute(PSTR("Click"), true);
|
Z_attribute & attr_click = attr_list.addAttribute(PSTR("Click"), true);
|
||||||
|
|
||||||
switch (val) {
|
switch (val) {
|
||||||
@ -1408,14 +1419,14 @@ void ZCLFrame::syntheticAqaraVibration(class Z_attribute_list &attr_list, class
|
|||||||
case 0x0055:
|
case 0x0055:
|
||||||
{
|
{
|
||||||
int32_t ivalue = attr.getInt();
|
int32_t ivalue = attr.getInt();
|
||||||
const __FlashStringHelper * svalue;
|
const char * svalue;
|
||||||
switch (ivalue) {
|
switch (ivalue) {
|
||||||
case 1: svalue = F("vibrate"); break;
|
case 1: svalue = PSTR("vibrate"); break;
|
||||||
case 2: svalue = F("tilt"); break;
|
case 2: svalue = PSTR("tilt"); break;
|
||||||
case 3: svalue = F("drop"); break;
|
case 3: svalue = PSTR("drop"); break;
|
||||||
default: svalue = F("unknown"); break;
|
default: svalue = PSTR("unknown"); break;
|
||||||
}
|
}
|
||||||
attr.setStr((const char*)svalue);
|
attr.setStr(svalue);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x0503:
|
case 0x0503:
|
||||||
|
@ -441,7 +441,7 @@ void TasmotaClient_Show(void) {
|
|||||||
if ((TClient.type) && (TClientSettings.features.func_json_append)) {
|
if ((TClient.type) && (TClientSettings.features.func_json_append)) {
|
||||||
TasmotaClient_sendCmnd(CMND_GET_JSON, 0);
|
TasmotaClient_sendCmnd(CMND_GET_JSON, 0);
|
||||||
|
|
||||||
char buffer[100];
|
char buffer[250]; // Keep size below 255 to stay within 8-bits index and len
|
||||||
uint8_t len = TasmotaClient_receiveData(buffer, sizeof(buffer) -1);
|
uint8_t len = TasmotaClient_receiveData(buffer, sizeof(buffer) -1);
|
||||||
|
|
||||||
buffer[len] = '\0';
|
buffer[len] = '\0';
|
||||||
|
Loading…
x
Reference in New Issue
Block a user