Merge branch 'development' into prerelease-12.5

This commit is contained in:
Theo Arends 2023-04-17 09:58:32 +02:00
commit e9e3b03dbb
16 changed files with 3482 additions and 3177 deletions

View File

@ -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)

View File

@ -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

View File

@ -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 */

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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(

View File

@ -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

View File

@ -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}]}

View File

@ -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:

View File

@ -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';