Merge branch 'development' into prerelease-13.3

This commit is contained in:
Theo Arends 2023-12-12 11:06:02 +01:00
commit fb904a0610
283 changed files with 29849 additions and 16607 deletions

View File

@ -106,6 +106,7 @@ jobs:
pip install wheel
pip install -U platformio
cp ./platformio_tasmota_core3_env_sample.ini ./platformio_tasmota_core3_env.ini
cp ./platformio_override_sample.ini ./platformio_override.ini
- name: Run PlatformIO
run: platformio run -e ${{ matrix.variant }}
- name: Upload safeboot firmware artifacts
@ -175,6 +176,8 @@ jobs:
- tasmota32s3
- tasmota32s3cdc
- tasmota32solo1
- tasmota32c2-arduino30
- tasmota32c6cdc-arduino30
steps:
- uses: actions/checkout@v3
with:
@ -187,6 +190,8 @@ jobs:
run: |
pip install wheel
pip install -U platformio
cp ./platformio_tasmota_core3_env_sample.ini ./platformio_tasmota_core3_env.ini
cp ./platformio_override_sample.ini ./platformio_override.ini
- name: Download safeboot firmwares
uses: actions/download-artifact@v3
with:
@ -224,6 +229,8 @@ jobs:
run: |
pip install wheel
pip install -U platformio
cp ./platformio_tasmota_core3_env_sample.ini ./platformio_tasmota_core3_env.ini
cp ./platformio_override_sample.ini ./platformio_override.ini
- name: Download safeboot firmwares
uses: actions/download-artifact@v3
with:

View File

@ -45,6 +45,7 @@ jobs:
pip install wheel
pip install -U platformio
cp ./platformio_tasmota_core3_env_sample.ini ./platformio_tasmota_core3_env.ini
cp ./platformio_override_sample.ini ./platformio_override.ini
- name: Run PlatformIO
run: platformio run -e ${{ matrix.variant }}
- name: Upload safeboot firmware artifacts

View File

@ -91,6 +91,7 @@ jobs:
- tasmota-zbbridge
- tasmota32
- tasmota32c3
- tasmota32c6cdc-arduino30
- tasmota32s2
- tasmota32s3
- tasmota32-zbbrdgpro
@ -129,6 +130,7 @@ jobs:
#platformio upgrade --dev
#platformio update
cp ./platformio_tasmota_core3_env_sample.ini ./platformio_tasmota_core3_env.ini
cp ./platformio_override_sample.ini ./platformio_override.ini
- name: Run PlatformIO
run: platformio run -e ${{ matrix.variant }}
- uses: actions/upload-artifact@v3

2
.gitignore vendored
View File

@ -19,6 +19,8 @@ data
unpacked_fs
unpacked_boards
tasmota/user_config_override.h
variants
variants3
build
build_output/*
firmware.map

2
API.md
View File

@ -17,7 +17,7 @@ Callback Id | Bool | xdrv | xsns | xnrg | xlgt | Description
----------------------------|------|------|------|------|------|----------------------------------
FUNC_SETTINGS_OVERRIDE | | x | | | | Override start-up settings
FUNC_PIN_STATE | x | 1 | 2 | | | At GPIO configuration
FUNC_I2C_INIT | | x | | | | Immediatly after I2C init
FUNC_I2C_INIT | | x | | | | Immediately after I2C init
FUNC_MODULE_INIT | x | 3 | 1 | | 2 | Init module specific parameters
FUNC_PRE_INIT | | 1 | 3 | 2 | | Once GPIO have been established
FUNC_INIT | | 1 | 3 | 2 | | At end of initialisation

View File

@ -1,8 +1,6 @@
## Available Features and Sensors
ESP8266 / ESP32
l = lite, t = tasmota, k = knx, s = sensors, i = ir, d = display
l = lite, t = tasmota (ESP8266 / ESP32), k = knx, s = sensors, i = ir, d = display
Note: `minimal` variant is not listed as it shouldn't be used outside of the [upgrading](https://tasmota.github.io/docs/Upgrading/) process.

View File

@ -3,6 +3,92 @@ All notable changes to this project will be documented in this file.
## [Released]
## [13.3.0] 20231213
- Release Quinlan
## [13.2.0.3] 20231213
### Added
- DeepSleep support through TIMERS (#20117)
- Command ``WebCanvas linear-gradient(#F02 7%,#F93,#FF4,#082,#00F,#708 93%)`` to set GUI canvas
### Breaking Changed
- Remove Berry `every_200ms` event which didn't work anyways (#20205)
### Changed
- ESP32 LVGL library from v8.3.10 to v8.3.11 (no functional change)
- Berry ULP API changes for Core3/IDF5 (#20198)
- Berry leds animation refactoring stage 1 (#20197)
### Fixed
- TUYA state machine (in TUYA v1) (#20110)
- ESP32 Neopixel flicker for Core3/IDF5 (#20196)
- HASPmota `bar` fixed `val` attribute (#20208)
## [13.2.0.2] 20231130
### Added
- Scripter TCP client (#19914)
- Berry ``debug.gcdebug()`` to enable GC debugging (#19936)
- Berry AES_CBC to crypto module (#19964)
- NeoPool sensor delta trigger (command ``NPTelePeriod``) (#19973)
- NeoPool store settings on unified file system (#19973)
- NeoPool command ``NPBoost`` (#19973)
- ESP32 Partition Wizard can be loaded dynamically (#19980)
- Berry `scale_int`, equivalent of `scale_uint` for signed integers (#20090)
- ESP32 support for Avago Tech Bluetooth Buttons (#20088)
### Changed
- Matter update hierarchy of plugins (#19915)
- NeoPool ``NPHydrolysis`` percent and unit (#19924)
- Thermostat JSON index from 0 to 1 (#20011)
### Fixed
- Scripter timer issue (#19914)
- Zero-Cross Dimmer for ESP32 with Core3 (#19929)
- Matter flow sensor (#19961)
- Berry ``gpio.dac_voltage()`` regression from v13.1.0.1 (#19997)
- ESP32-C3 ledlink functionality regression from v13.1.0.2
- Berry parser error in specific cases (#20059)
- ``changeUIntScale`` for linearity when expanding range (#20089)
- ESP32 remove restart energy logging if no energy monitoring is selected
- ``WebQuery`` response buffer corruption and format character ``%`` (#20111)
## [13.2.0.1] 20231103
### Added
- I2C bus2 support to iAQ core sensor (#19799)
- I2C bus2 support to HTU temperature and humidity sensor
- I2C bus2 support to BH1750 ambient light sensor
- I2C bus2 support to ADS1115 A/D Converter
- I2C bus2 support to SHTxX temperature and humidity sensor
- I2C bus2 support to HYTxxx temperature and humidity sensor
- I2C bus2 support to SI1145/6/7 Ultra violet index and light sensor
- I2C bus2 support to LM75AD temperature sensor
- Command ``GpioRead`` to show input state (#19810)
- ESP32 core v3 auto TasConsole USB or Serial connection by @staars
- Support for Winsen XH03x dust particle sensors using USE_PMS5003 and PMS_MODEL_ZH03X (#19850)
- NeoPool hydrolysis setpoint and max
- NeoPool command ``NPFiltrationSpeed`` to set non-standard filtration type speed (#19857)
- NeoPool ``SetOption157`` to output sensitive data (#19857)
- NeoPool enhancements for HA (#19857)
- ST7735S display.ini for 1.44 inch 128x128 red SPI display (#19862)
- HASPmota add styling properties (#19912)
- Matter flow sensor support (#19852)
### Breaking Changed
- NeoPool SENSOR topic ``Power`` renamed to ``Powerunit`` (#19857)
### Changed
- Prepare I2C drivers for bus2 support
- Matter Light0 now accept a Relay number (#19809)
- ESP32 keep FS intact when over flashing with VSC (#19816)
- Increase MAX_HUE_DEVICES to 32 (#19820)
- MI32 updates (#19893)
### Fixed
- NeoPool filtration mode display (#19801)
- Compile USE_PID (#19890)
- ESP32 I2C allow bus2 support when bus1 is not enabled
- ESP32 IR receive with Arduino Core 3 (#19904)
## [13.2.0] 20231019
- Release Quincy
@ -73,7 +159,7 @@ All notable changes to this project will be documented in this file.
- ESP32 Shutter migration (#19454)
- ESP32 Shutter multi press button events (#19465)
- Support for IPv6 link-local zones for esp-idf 5.1 (necessary for Matter)
- ESP32C3 relay click on restart
- ESP32-C3 relay click on restart
## [13.1.0.1] 20230831
### Added
@ -128,7 +214,7 @@ All notable changes to this project will be documented in this file.
- Zero cross dimmer minimum interrupt time (#19211)
- Fade would fail when the difference between start and target would be too small (#19248)
- Inverted shutter (#19243)
- Matter support for large atribute responses (#19252)
- Matter support for large attribute responses (#19252)
- Matter auto-configuration Relay indices (#19255)
## [13.0.0.2] 20230721
@ -975,14 +1061,14 @@ All notable changes to this project will be documented in this file.
- Support for MQ analog sensor for air quality by Francesco Adriani (#14581)
- Command ``SetOption134 1`` to disable PWM auto-phasing for lights by default (new behavior) (#14590)
- Increase PWM channels to 16 (Esp32 only)
- Initial support for ESP32S3 with support for 38 configurable GPIOs
- Initial support for ESP32-S3 with support for 38 configurable GPIOs
### Changed
- BME68x-Sensor-API library from v3.5.9 to v4.4.7
- ESP32 core library from v2.0.2 to v2.0.2.1 (#14553)
### Fixed
- OneWire-Stickbreaker (DS18x20) library support for ESP32S2 (#14338)
- OneWire-Stickbreaker (DS18x20) library support for ESP32-S2 (#14338)
## [2022.01.2 = 10.1.0.5] 20220116
### Added
@ -1171,10 +1257,10 @@ All notable changes to this project will be documented in this file.
### Added
- Command ``WebGetConfig <url>`` if ``#define USE_WEBGETCONFIG`` is enabled to restore/init configuration from external webserver (#13034)
- Berry class ``webclient`` for HTTP/HTTPS requests
- Support for ESP32S2 GPIOs
- Support for ESP32-S2 GPIOs
- ESP32 add GPIO 6/7/8/11 to template and remove GPIO 28-31 (remapping so backwards compatible)
- Crash recorder ``Status 12`` for ESP32/ESP32S2/ESP32C3, supporting Esp-idf 3.3/4.4
- Support for ESP32/ESP32S2 DAC gpio via Berry
- Crash recorder ``Status 12`` for ESP32/ESP32-S2/ESP32-C3, supporting Esp-idf 3.3/4.4
- Support for ESP32/ESP32-S2 DAC gpio via Berry
- Berry support for Serial
- Support for Sensirion SCD40/SCD41 CO2 sensor (#13139)
- Support for BL0939 energy monitor as used in ESP32 based Sonoff Dual R3 V2 Pow (#13195)
@ -1226,7 +1312,7 @@ All notable changes to this project will be documented in this file.
- Berry now compiling in ``strict`` mode to catch more bugs
### Fixed
- Fixed PWM5 on ESP32C3
- ESP32-C3 PWM5
## [9.5.0.5] 20210815
### Added

View File

@ -99,7 +99,7 @@ To accept the CLA it is required to put a x between [ ] on `[ ] I accept the CLA
**Why a CLA ?**
_"A Contributor Licence Agreement (CLA) is strongly recommended when accepting third party contributions to an open development project, such as an open source software project. In order to redistribute contributions, it is necessary to ensure that the project has the necessary rights to do so. A Contributor Licence Agreement is a lightweight agreement, signed by the copyright holder, that grants the necessary rights for the contribution to be redistributed as part of the project."_ [OSS Watch](http://oss-watch.ac.uk/resources/cla)
_"A Contributor License Agreement (CLA) is strongly recommended when accepting third party contributions to an open development project, such as an open source software project. In order to redistribute contributions, it is necessary to ensure that the project has the necessary rights to do so. A Contributor License Agreement is a lightweight agreement, signed by the copyright holder, that grants the necessary rights for the contribution to be redistributed as part of the project."_ [OSS Watch](http://oss-watch.ac.uk/resources/cla)
A CLA is a legal document in which you state _you are entitled to contribute the code/documentation/translation to the project_ youre contributing to and that _you are willing to have it used in distributions and derivative works_. This means that should there be any kind of legal issue in the future as to the origins and ownership of any particular piece of code, then that project has the necessary forms on file from the contributor(s) saying they were permitted to make this contribution.

View File

@ -27,7 +27,7 @@ See [CHANGELOG.md](https://github.com/arendst/Tasmota/blob/development/tasmota/C
Unless your Tasmota powered device exhibits a problem or you need to make use of a feature that is not available in the Tasmota version currently installed on your device, leave your device alone - it works so don't make unnecessary changes! If the release version (i.e., the master branch) exhibits unexpected behaviour for your device and configuration, you should upgrade to the latest development version instead to see if your problem is resolved as some bugs in previous releases or development builds may already have been resolved.
If new commits have been merged and they compile successfuly, new binary files for every variant will be placed here https://github.com/arendst/Tasmota-firmware/tree/main/firmware (this URL address can NOT be used for OTA updates) It is important to note that these binaries are based on the current development codebase. These commits are tested as much as is possible and are typically quite stable. However, it is infeasible to test on the hundreds of different types of devices with all the available configuration options permitted.
If new commits have been merged and they compile successfully, new binary files for every variant will be placed here https://github.com/arendst/Tasmota-firmware/tree/main/firmware (this URL address can NOT be used for OTA updates) It is important to note that these binaries are based on the current development codebase. These commits are tested as much as is possible and are typically quite stable. However, it is infeasible to test on the hundreds of different types of devices with all the available configuration options permitted.
Note that there is a chance, as with any upgrade, that the device may not function as expected. You must always account for the possibility that you may need to flash the device via the serial programming interface if the OTA upgrade fails. Even with the master release, you should always attempt to test the device or a similar prototype before upgrading a device which is in production or is hard to reach. And, as always, make a backup of the device configuration before beginning any firmware update.

View File

@ -6,120 +6,122 @@ Using command ``I2cDriver`` individual drivers can be enabled or disabled at run
## Supported I2C devices
The following table lists the supported I2C devices
Index | Define | Driver | Device | Address(es) | Description
------|---------------------|----------|----------|-------------|-----------------------------------------------
1 | USE_PCA9685 | xdrv_15 | PCA9685 | 0x40 - 0x47 | 16-channel 12-bit pwm driver
1 | USE_PCA9685_V2 | xdrv_15 | PCA9685 | 0x40 - 0x47 | 16-channel 12-bit pwm driver
2 | USE_PCF8574 | xdrv_28 | PCF8574 | 0x20 - 0x26 | 8-bit I/O expander (address range overridable)
2 | USE_PCF8574 | xdrv_28 | PCF8574A | 0x39 - 0x3F | 8-bit I/O expander (address range overridable)
3 | USE_DISPLAY_LCD | xdsp_01 | | 0x27, 0x3F | LCD display
4 | USE_DISPLAY_SSD1306 | xdsp_02 | SSD1306 | 0x3C - 0x3D | Oled display
5 | USE_DISPLAY_MATRIX | xdsp_03 | HT16K33 | 0x70 - 0x77 | 8x8 led matrix
6 | USE_DISPLAY_SH1106 | xdsp_07 | SH1106 | 0x3C - 0x3D | Oled display
7 | USE_ADE7953 | xnrg_07 | ADE7953 | 0x38 | Energy monitor
8 | USE_SHT | xsns_07 | SHT1X | Any | Temperature and Humidity sensor
9 | USE_HTU | xsns_08 | HTU21 | 0x40 | Temperature and Humidity sensor
9 | USE_HTU | xsns_08 | SI7013 | 0x40 | Temperature and Humidity sensor
9 | USE_HTU | xsns_08 | SI7020 | 0x40 | Temperature and Humidity sensor
9 | USE_HTU | xsns_08 | SI7021 | 0x40 | Temperature and Humidity sensor
10 | USE_BMP | xsns_09 | BMP085 | 0x76 - 0x77 | Pressure and temperature sensor
10 | USE_BMP | xsns_09 | BMP180 | 0x76 - 0x77 | Pressure and temperature sensor
10 | USE_BMP | xsns_09 | BMP280 | 0x76 - 0x77 | Pressure and temperature sensor
10 | USE_BMP | xsns_09 | BME280 | 0x76 - 0x77 | Pressure, temperature and humidity sensor
10 | USE_BMP | xsns_09 | BME680 | 0x76 - 0x77 | Pressure, temperature, humidity and gas sensor
11 | USE_BH1750 | xsns_10 | BH1750 | 0x23, 0x5C | Ambient light intensity sensor
12 | USE_VEML6070 | xsns_11 | VEML6070 | 0x38 - 0x39 | Ultra violet light intensity sensor
13 | USE_ADS1115 | xsns_12 | ADS1115 | 0x48 - 0x4B | 4-channel 16-bit A/D converter
14 | USE_INA219 | xsns_13 | INA219 | 0x40 - 0x41, 0x44 - 0x45 | Low voltage current sensor
15 | USE_SHT3X | xsns_14 | SHT3X | 0x44 - 0x45 | Temperature and Humidity sensor
15 | USE_SHT3X | xsns_14 | SHT4X | 0x44 - 0x45 | Temperature and Humidity sensor
15 | USE_SHT3X | xsns_14 | SHTCX | 0x70 | Temperature and Humidity sensor
16 | USE_TSL2561 | xsns_16 | TSL2561 | 0x29, 0x39, 0x49 | Light intensity sensor
17 | USE_MGS | xsns_19 | Grove | 0x04 | Multichannel gas sensor
18 | USE_SGP30 | xsns_21 | SGP30 | 0x58 | Gas (TVOC) and air quality sensor
19 | USE_SI1145 | xsns_24 | SI1145 | 0x60 | Ultra violet index and light sensor
19 | USE_SI1145 | xsns_24 | SI1146 | 0x60 | Ultra violet index and light sensor
19 | USE_SI1145 | xsns_24 | SI1147 | 0x60 | Ultra violet index and light sensor
20 | USE_LM75AD | xsns_26 | LM75AD | 0x48 - 0x4F | Temperature sensor
21 | USE_APDS9960 | xsns_27 | APDS9960 | 0x39 | Proximity ambient light RGB and gesture sensor
22 | USE_MCP230xx | xsns_29 | MCP23008 | 0x20 - 0x26 | 8-bit I/O expander
22 | USE_MCP230xx | xsns_29 | MCP23017 | 0x20 - 0x26 | 16-bit I/O expander
23 | USE_MPR121 | xsns_30 | MPR121 | 0x5A - 0x5D | Proximity capacitive touch sensor
24 | USE_CCS811 | xsns_31 | CCS811 | 0x5A | Gas (TVOC) and air quality sensor
24' | USE_CCS811_V2 | xsns_31 | CCS811 | 0x5A - 0x5B | Gas (TVOC) and air quality sensor
25 | USE_MPU6050 | xsns_32 | MPU6050 | 0x68 - 0x69 | 3-axis gyroscope and temperature sensor
26 | USE_DS3231 | xsns_33 | DS3231 | 0x68 | Real time clock
27 | USE_MGC3130 | xsns_36 | MGC3130 | 0x42 | Electric field sensor
28 | USE_MAX44009 | xsns_41 | MAX44009 | 0x4A - 0x4B | Ambient light intensity sensor
29 | USE_SCD30 | xsns_42 | SCD30 | 0x61 | CO2 sensor
30 | USE_SPS30 | xsns_44 | SPS30 | 0x69 | Particle sensor
31 | USE_VL53L0X | xsns_45 | VL53L0X | 0x29 | Time-of-flight (ToF) distance sensor
32 | USE_MLX90614 | xsns_46 | MLX90614 | 0x5A | Infra red temperature sensor
33 | USE_CHIRP | xsns_48 | CHIRP | 0x20 | Soil moisture sensor
34 | USE_PAJ7620 | xsns_50 | PAJ7620 | 0x73 | Gesture sensor
35 | USE_INA226 | xsns_54 | INA226 | 0x40 - 0x41, 0x44 - 0x45 | Low voltage current sensor
36 | USE_HIH6 | xsns_55 | HIH6130 | 0x27 | Temperature and Humidity sensor
37 | USE_24C256 | xdrv_10 | 24C256 | 0x50 | Scripter EEPROM storage
38 | USE_DISPLAY_ILI9488 | xdsp_08 | FT6236 | 0x38 | Touch panel controller
39 | USE_DISPLAY_RA8876 | xdsp_10 | FT5316 | 0x38 | Touch panel controller
40 | USE_TSL2591 | xsns_57 | TSL2591 | 0x29 | Light intensity sensor
41 | USE_DHT12 | xsns_58 | DHT12 | 0x5C | Temperature and humidity sensor
42 | USE_DS1624 | xsns_59 | DS1621 | 0x48 - 0x4F | Temperature sensor
42 | USE_DS1624 | xsns_59 | DS1624 | 0x48 - 0x4F | Temperature sensor
43 | USE_AHT1x | xsns_63 | AHT10/15 | 0x38 - 0x39 | Temperature and humidity sensor
43 | USE_AHT2x | xsns_63 | AHT20 | 0x38 | Temperature and humidity sensor
43 | USE_AHT2x | xsns_63 | AM2301B | 0x38 | Temperature and humidity sensor
44 | USE_WEMOS_MOTOR_V1 | xdrv_34 | | 0x2D - 0x30 | WEMOS motor shield v1.0.0 (6612FNG)
45 | USE_HDC1080 | xsns_65 | HDC1080 | 0x40 | Temperature and Humidity sensor
46 | USE_IAQ | xsns_66 | IAQ | 0x5a | Air quality sensor
47 | USE_DISPLAY_SEVENSEG| xdsp_11 | HT16K33 | 0x70 - 0x77 | Seven segment LED
48 | USE_AS3935 | xsns_67 | AS3935 | 0x03 | Franklin Lightning Sensor
49 | USE_VEML6075 | xsns_70 | VEML6075 | 0x10 | UVA/UVB/UVINDEX Sensor
50 | USE_VEML7700 | xsns_71 | VEML7700 | 0x10 | Ambient light intensity sensor
51 | USE_MCP9808 | xsns_72 | MCP9808 | 0x18 - 0x1F | Temperature sensor
52 | USE_HP303B | xsns_73 | HP303B | 0x76 - 0x77 | Pressure and temperature sensor
53 | USE_MLX90640 | xdrv_43 | MLX90640 | 0x33 | IR array temperature sensor
54 | USE_VL53L1X | xsns_77 | VL53L1X | 0x29 | Time-of-flight (ToF) distance sensor
55 | USE_EZOPH | xsns_78 | EZOPH | 0x61 - 0x70 | pH sensor
55 | USE_EZOORP | xsns_78 | EZOORP | 0x61 - 0x70 | ORP sensor
55 | USE_EZORTD | xsns_78 | EZORTD | 0x61 - 0x70 | Temperature sensor
55 | USE_EZOHUM | xsns_78 | EZOHUM | 0x61 - 0x70 | Humidity sensor
55 | USE_EZOEC | xsns_78 | EZOEC | 0x61 - 0x70 | Electric conductivity sensor
55 | USE_EZOCO2 | xsns_78 | EZOCO2 | 0x61 - 0x70 | CO2 sensor
55 | USE_EZOO2 | xsns_78 | EZOO2 | 0x61 - 0x70 | O2 sensor
55 | USE_EZOPRS | xsns_78 | EZOPRS | 0x61 - 0x70 | Pressure sensor
55 | USE_EZOFLO | xsns_78 | EZOFLO | 0x61 - 0x70 | Flow meter sensor
55 | USE_EZODO | xsns_78 | EZODO | 0x61 - 0x70 | Disolved Oxygen sensor
55 | USE_EZORGB | xsns_78 | EZORGB | 0x61 - 0x70 | Color sensor
55 | USE_EZOPMP | xsns_78 | EZOPMP | 0x61 - 0x70 | Peristaltic Pump
56 | USE_SEESAW_SOIL | xsns_81 | SEESOIL | 0x36 - 0x39 | Adafruit seesaw soil moisture sensor
57 | USE_TOF10120 | xsns_84 | TOF10120 | 0x52 | Time-of-flight (ToF) distance sensor
58 | USE_MPU_ACCEL | xsns_85 | MPU_ACCEL| 0x68 | MPU6886/MPU9250 6-axis MotionTracking sensor from M5Stack
59 | USE_BM8563 | xdrv_56 | BM8563 | 0x51 | BM8563 RTC from M5Stack
60 | USE_AM2320 | xsns_88 | AM2320 | 0x5C | Temperature and Humidity sensor
61 | USE_T67XX | xsns_89 | T67XX | 0x15 | CO2 sensor
62 | USE_SCD40 | xsns_92 | SCD40 | 0x62 | CO2 sensor Sensirion SCD40/SCD41
63 | USE_HM330X | xsns_93 | HM330X | 0x40 | Particule sensor
64 | USE_HDC2010 | xsns_94 | HDC2010 | 0x40 | Temperature and Humidity sensor
65 | USE_ADE7880 | xnrg_23 | ADE7880 | 0x38 | Energy monitor
66 | USE_PCF85363 | xsns_99 | PCF85363 | 0x51 | Real time clock
67 | USE_DS3502 | xdrv_61 | DS3502 | 0x28 - 0x2B | Digital potentiometer
68 | USE_HYT | xsns_97 | HYTxxx | 0x28 | Temperature and Humidity sensor
69 | USE_SGP40 | xsns_98 | SGP40 | 0x59 | Gas (TVOC) and air quality
70 | USE_LUXV30B | xsns_99 | LUXV30B | 0x4A | DFRobot SEN0390 V30B lux sensor
71 | USE_QMC5883L | xsns_33 | QMC5883L | 0x0D | Magnetic Field Sensor
72 | USE_INA3221 | xsns_100 | INA3221 | 0x40-0x43 | 3-channels Voltage and Current sensor
73 | USE_HMC5883L | xsns_101 | HMC5883L | 0x1E | 3-channels Magnetic Field Sensor
74 | USE_DISPLAY_TM1650 | xdsp_20 | TM1650 | 0x24 - 0x27, 0x34 - 0x37 | Four-digit seven-segment LED controller
75 | USE_PCA9632 | xdrv_64 | PCA9632 | 0x60 | 4-channel 4-bit pwm driver
76 | USE_SEN5X | xsns_103 | SEN5X | 0x69 | Gas (VOC/NOx index) and air quality (PPM <1,<2.5,<4,<10)
77 | USE_MCP23XXX_DRV | xdrv_67 | MCP23x17 | 0x20 - 0x26 | 16-bit I/O expander as virtual button/switch/relay
78 | USE_PMSA003I | xsns_104 | PMSA003I | 0x12 | PM2.5 Air Quality Sensor with I2C Interface
79 | USE_GDK101 | xsns_106 | GDK101 | 0x18 - 0x1B | Gamma Radiation Sensor
80 | USE_TC74 | xsns_108 | TC74 | 0x48 - 0x4F | Temperature sensor
81 | USE_PCA9557 | xdrv_69 | PCA95xx | 0x18 - 0x1F | 8-bit I/O expander as virtual button/switch/relay
82 | USE_SGP4X | xsns_109 | SGP4X | 0x59 | Gas (TVOC/NOx index)
83 | USE_MAX17043 | xsns_110 | MAX17043 | 0x36 | Fuel-gauge for 3.7 Volt Lipo battery
84 | USE_ENS16x | xsns_111 | ENS16x | 0x52 - 0x53 | Gas (TVOC, eCO2) and air quality sensor
85 | USE_ENS210 | xsns_112 | ENS210 | 0x43 - 0x44 | Temperature and humidity sensor
Index | Define | Driver | Device | Address(es) | Bus2 | Description
------|---------------------|----------|----------|-------------|------|-----------------------------------------------
1 | USE_PCA9685 | xdrv_15 | PCA9685 | 0x40 - 0x47 | | 16-channel 12-bit pwm driver
1 | USE_PCA9685_V2 | xdrv_15 | PCA9685 | 0x40 - 0x47 | | 16-channel 12-bit pwm driver
2 | USE_PCF8574 | xdrv_28 | PCF8574 | 0x20 - 0x26 | | 8-bit I/O expander (address range overridable)
2 | USE_PCF8574 | xdrv_28 | PCF8574A | 0x39 - 0x3F | | 8-bit I/O expander (address range overridable)
3 | USE_DISPLAY_LCD | xdsp_01 | | 0x27, 0x3F | | LCD display
4 | USE_DISPLAY_SSD1306 | xdsp_02 | SSD1306 | 0x3C - 0x3D | | Oled display
5 | USE_DISPLAY_MATRIX | xdsp_03 | HT16K33 | 0x70 - 0x77 | | 8x8 led matrix
6 | USE_DISPLAY_SH1106 | xdsp_07 | SH1106 | 0x3C - 0x3D | | Oled display
7 | USE_ADE7953 | xnrg_07 | ADE7953 | 0x38 | | Energy monitor
8 | USE_SHT | xsns_07 | SHT1X | Any | | Temperature and Humidity sensor
9 | USE_HTU | xsns_08 | HTU21 | 0x40 | Yes | Temperature and Humidity sensor
9 | USE_HTU | xsns_08 | SI7013 | 0x40 | Yes | Temperature and Humidity sensor
9 | USE_HTU | xsns_08 | SI7020 | 0x40 | Yes | Temperature and Humidity sensor
9 | USE_HTU | xsns_08 | SI7021 | 0x40 | Yes | Temperature and Humidity sensor
10 | USE_BMP | xsns_09 | BMP085 | 0x76 - 0x77 | Yes | Pressure and temperature sensor
10 | USE_BMP | xsns_09 | BMP180 | 0x76 - 0x77 | Yes | Pressure and temperature sensor
10 | USE_BMP | xsns_09 | BMP280 | 0x76 - 0x77 | Yes | Pressure and temperature sensor
10 | USE_BMP | xsns_09 | BME280 | 0x76 - 0x77 | Yes | Pressure, temperature and humidity sensor
10 | USE_BMP | xsns_09 | BME680 | 0x76 - 0x77 | Yes | Pressure, temperature, humidity and gas sensor
11 | USE_BH1750 | xsns_10 | BH1750 | 0x23, 0x5C | Yes | Ambient light intensity sensor
12 | USE_VEML6070 | xsns_11 | VEML6070 | 0x38 - 0x39 | | Ultra violet light intensity sensor
13 | USE_ADS1115 | xsns_12 | ADS1115 | 0x48 - 0x4B | Yes | 4-channel 16-bit A/D converter
14 | USE_INA219 | xsns_13 | INA219 | 0x40 - 0x41, 0x44 - 0x45 | | Low voltage current sensor
15 | USE_SHT3X | xsns_14 | SHT3X | 0x44 - 0x45 | Yes | Temperature and Humidity sensor
15 | USE_SHT3X | xsns_14 | SHT4X | 0x44 - 0x45 | Yes | Temperature and Humidity sensor
15 | USE_SHT3X | xsns_14 | SHTCX | 0x70 | Yes | Temperature and Humidity sensor
16 | USE_TSL2561 | xsns_16 | TSL2561 | 0x29, 0x39, 0x49 | | Light intensity sensor
17 | USE_MGS | xsns_19 | Grove | 0x04 | | Multichannel gas sensor
18 | USE_SGP30 | xsns_21 | SGP30 | 0x58 | | Gas (TVOC) and air quality sensor
19 | USE_SI1145 | xsns_24 | SI1145 | 0x60 | Yes | Ultra violet index and light sensor
19 | USE_SI1145 | xsns_24 | SI1146 | 0x60 | Yes | Ultra violet index and light sensor
19 | USE_SI1145 | xsns_24 | SI1147 | 0x60 | Yes | Ultra violet index and light sensor
20 | USE_LM75AD | xsns_26 | LM75AD | 0x48 - 0x4F | Yes | Temperature sensor
21 | USE_APDS9960 | xsns_27 | APDS9960 | 0x39 | | Proximity ambient light RGB and gesture sensor
22 | USE_MCP230xx | xsns_29 | MCP23008 | 0x20 - 0x26 | | 8-bit I/O expander
22 | USE_MCP230xx | xsns_29 | MCP23017 | 0x20 - 0x26 | | 16-bit I/O expander
23 | USE_MPR121 | xsns_30 | MPR121 | 0x5A - 0x5D | | Proximity capacitive touch sensor
24 | USE_CCS811 | xsns_31 | CCS811 | 0x5A | | Gas (TVOC) and air quality sensor
24' | USE_CCS811_V2 | xsns_31 | CCS811 | 0x5A - 0x5B | | Gas (TVOC) and air quality sensor
25 | USE_MPU6050 | xsns_32 | MPU6050 | 0x68 - 0x69 | | 3-axis gyroscope and temperature sensor
26 | USE_DS3231 | xsns_33 | DS1307 | 0x68 | | Real time clock
26 | USE_DS3231 | xsns_33 | DS3231 | 0x68 | | Real time clock
27 | USE_MGC3130 | xsns_36 | MGC3130 | 0x42 | | Electric field sensor
28 | USE_MAX44009 | xsns_41 | MAX44009 | 0x4A - 0x4B | | Ambient light intensity sensor
29 | USE_SCD30 | xsns_42 | SCD30 | 0x61 | | CO2 sensor
30 | USE_SPS30 | xsns_44 | SPS30 | 0x69 | | Particle sensor
31 | USE_VL53L0X | xsns_45 | VL53L0X | 0x29 | | Time-of-flight (ToF) distance sensor
32 | USE_MLX90614 | xsns_46 | MLX90614 | 0x5A | | Infra red temperature sensor
33 | USE_CHIRP | xsns_48 | CHIRP | 0x20 | | Soil moisture sensor
34 | USE_PAJ7620 | xsns_50 | PAJ7620 | 0x73 | | Gesture sensor
35 | USE_INA226 | xsns_54 | INA226 | 0x40 - 0x41, 0x44 - 0x45 | | Low voltage current sensor
36 | USE_HIH6 | xsns_55 | HIH6130 | 0x27 | | Temperature and Humidity sensor
37 | USE_24C256 | xdrv_10 | 24C256 | 0x50 | | Scripter EEPROM storage
38 | USE_DISPLAY_ILI9488 | xdsp_08 | FT6236 | 0x38 | | Touch panel controller
39 | USE_DISPLAY_RA8876 | xdsp_10 | FT5316 | 0x38 | | Touch panel controller
40 | USE_TSL2591 | xsns_57 | TSL2591 | 0x29 | | Light intensity sensor
41 | USE_DHT12 | xsns_58 | DHT12 | 0x5C | | Temperature and humidity sensor
42 | USE_DS1624 | xsns_59 | DS1621 | 0x48 - 0x4F | | Temperature sensor
42 | USE_DS1624 | xsns_59 | DS1624 | 0x48 - 0x4F | | Temperature sensor
43 | USE_AHT1x | xsns_63 | AHT10/15 | 0x38 - 0x39 | | Temperature and humidity sensor
43 | USE_AHT2x | xsns_63 | AHT20 | 0x38 | | Temperature and humidity sensor
43 | USE_AHT2x | xsns_63 | AM2301B | 0x38 | | Temperature and humidity sensor
44 | USE_WEMOS_MOTOR_V1 | xdrv_34 | | 0x2D - 0x30 | | WEMOS motor shield v1.0.0 (6612FNG)
45 | USE_HDC1080 | xsns_65 | HDC1080 | 0x40 | | Temperature and Humidity sensor
46 | USE_IAQ | xsns_66 | IAQ | 0x5a | Yes | Air quality sensor
47 | USE_DISPLAY_SEVENSEG| xdsp_11 | HT16K33 | 0x70 - 0x77 | | Seven segment LED
48 | USE_AS3935 | xsns_67 | AS3935 | 0x03 | | Franklin Lightning Sensor
49 | USE_VEML6075 | xsns_70 | VEML6075 | 0x10 | | UVA/UVB/UVINDEX Sensor
50 | USE_VEML7700 | xsns_71 | VEML7700 | 0x10 | | Ambient light intensity sensor
51 | USE_MCP9808 | xsns_72 | MCP9808 | 0x18 - 0x1F | | Temperature sensor
52 | USE_HP303B | xsns_73 | HP303B | 0x76 - 0x77 | | Pressure and temperature sensor
53 | USE_MLX90640 | xdrv_43 | MLX90640 | 0x33 | | IR array temperature sensor
54 | USE_VL53L1X | xsns_77 | VL53L1X | 0x29 | | Time-of-flight (ToF) distance sensor
55 | USE_EZOPH | xsns_78 | EZOPH | 0x61 - 0x70 | | pH sensor
55 | USE_EZOORP | xsns_78 | EZOORP | 0x61 - 0x70 | | ORP sensor
55 | USE_EZORTD | xsns_78 | EZORTD | 0x61 - 0x70 | | Temperature sensor
55 | USE_EZOHUM | xsns_78 | EZOHUM | 0x61 - 0x70 | | Humidity sensor
55 | USE_EZOEC | xsns_78 | EZOEC | 0x61 - 0x70 | | Electric conductivity sensor
55 | USE_EZOCO2 | xsns_78 | EZOCO2 | 0x61 - 0x70 | | CO2 sensor
55 | USE_EZOO2 | xsns_78 | EZOO2 | 0x61 - 0x70 | | O2 sensor
55 | USE_EZOPRS | xsns_78 | EZOPRS | 0x61 - 0x70 | | Pressure sensor
55 | USE_EZOFLO | xsns_78 | EZOFLO | 0x61 - 0x70 | | Flow meter sensor
55 | USE_EZODO | xsns_78 | EZODO | 0x61 - 0x70 | | Disolved Oxygen sensor
55 | USE_EZORGB | xsns_78 | EZORGB | 0x61 - 0x70 | | Color sensor
55 | USE_EZOPMP | xsns_78 | EZOPMP | 0x61 - 0x70 | | Peristaltic Pump
56 | USE_SEESAW_SOIL | xsns_81 | SEESOIL | 0x36 - 0x39 | | Adafruit seesaw soil moisture sensor
57 | USE_TOF10120 | xsns_84 | TOF10120 | 0x52 | | Time-of-flight (ToF) distance sensor
58 | USE_MPU_ACCEL | xsns_85 | MPU_ACCEL| 0x68 | Yes | MPU6886/MPU9250 6-axis MotionTracking sensor from M5Stack
59 | USE_BM8563 | xdrv_56 | BM8563 | 0x51 | Yes | BM8563 RTC from M5Stack
60 | USE_AM2320 | xsns_88 | AM2320 | 0x5C | | Temperature and Humidity sensor
61 | USE_T67XX | xsns_89 | T67XX | 0x15 | | CO2 sensor
62 | USE_SCD40 | xsns_92 | SCD40 | 0x62 | | CO2 sensor Sensirion SCD40/SCD41
63 | USE_HM330X | xsns_93 | HM330X | 0x40 | | Particule sensor
64 | USE_HDC2010 | xsns_94 | HDC2010 | 0x40 | | Temperature and Humidity sensor
65 | USE_ADE7880 | xnrg_23 | ADE7880 | 0x38 | | Energy monitor
66 | USE_PCF85363 | xsns_99 | PCF85363 | 0x51 | | Real time clock
67 | USE_DS3502 | xdrv_61 | DS3502 | 0x28 - 0x2B | | Digital potentiometer
68 | USE_HYT | xsns_97 | HYTxxx | 0x28 | Yes | Temperature and Humidity sensor
69 | USE_SGP40 | xsns_98 | SGP40 | 0x59 | | Gas (TVOC) and air quality
70 | USE_LUXV30B | xsns_99 | LUXV30B | 0x4A | | DFRobot SEN0390 V30B lux sensor
71 | USE_QMC5883L | xsns_33 | QMC5883L | 0x0D | | Magnetic Field Sensor
72 | USE_INA3221 | xsns_100 | INA3221 | 0x40-0x43 | | 3-channels Voltage and Current sensor
73 | USE_HMC5883L | xsns_101 | HMC5883L | 0x1E | | 3-channels Magnetic Field Sensor
74 | USE_DISPLAY_TM1650 | xdsp_20 | TM1650 | 0x24 - 0x27, 0x34 - 0x37 | | Four-digit seven-segment LED controller
75 | USE_PCA9632 | xdrv_64 | PCA9632 | 0x60 | | 4-channel 4-bit pwm driver
76 | USE_SEN5X | xsns_103 | SEN5X | 0x69 | Yes | Gas (VOC/NOx index) and air quality (PPM <1,<2.5,<4,<10)
77 | USE_MCP23XXX_DRV | xdrv_67 | MCP23x17 | 0x20 - 0x26 | | 16-bit I/O expander as virtual button/switch/relay
78 | USE_PMSA003I | xsns_104 | PMSA003I | 0x12 | | PM2.5 Air Quality Sensor with I2C Interface
79 | USE_GDK101 | xsns_106 | GDK101 | 0x18 - 0x1B | | Gamma Radiation Sensor
80 | USE_TC74 | xsns_108 | TC74 | 0x48 - 0x4F | | Temperature sensor
81 | USE_PCA9557 | xdrv_69 | PCA95xx | 0x18 - 0x1F | | 8-bit I/O expander as virtual button/switch/relay
82 | USE_SGP4X | xsns_109 | SGP4X | 0x59 | | Gas (TVOC/NOx index)
83 | USE_MAX17043 | xsns_110 | MAX17043 | 0x36 | | Fuel-gauge for 3.7 Volt Lipo battery
84 | USE_ENS16x | xsns_111 | ENS16x | 0x52 - 0x53 | | Gas (TVOC, eCO2) and air quality sensor
85 | USE_ENS210 | xsns_112 | ENS210 | 0x43 - 0x44 | | Temperature and humidity sensor
NOTE: Bus2 supported on ESP32 only.

View File

@ -6,7 +6,7 @@ _Written for PlatformIO._
[![GitHub version](https://img.shields.io/github/release/arendst/Tasmota.svg)](http://ota.tasmota.com/tasmota/release)
[![GitHub download](https://img.shields.io/github/downloads/arendst/Tasmota/total.svg)](https://github.com/arendst/Tasmota/releases/latest)
[![License](https://img.shields.io/github/license/arendst/Tasmota.svg)](LICENSE.txt)
[![Chat](https://img.shields.io/discord/479389167382691863.svg)](https://discord.gg/Ks2Kzd4)
[![Discord](https://img.shields.io/discord/479389167382691863.svg?logo=discord&logoColor=white&color=5865F2&label=Discord)](https://discord.gg/Ks2Kzd4)
[![Gitpod Ready-to-Code](https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/arendst/Tasmota)
<hr></hr>

View File

@ -75,7 +75,7 @@ Latest released binaries can be downloaded from
- http://ota.tasmota.com/tasmota/release
Historical binaries can be downloaded from
- http://ota.tasmota.com/tasmota/release-13.2.0
- http://ota.tasmota.com/tasmota/release-13.3.0
The latter links can be used for OTA upgrades too like ``OtaUrl http://ota.tasmota.com/tasmota/release/tasmota.bin.gz``
@ -95,12 +95,18 @@ The following binary downloads have been compiled with ESP32/Arduino library cor
- **tasmota32-webcam.bin** = The Webcam version adds webcam support for 4M+ flash.
- **tasmota32-zbbridgepro.bin** - The Sonoff Zigbee Bridge Pro version with CC2652P firmware load support.
### ESP32-C2 and ESP32-C6 based
The following binary downloads have been compiled with ESP32/Arduino library core version **3.0.0-alpha3**.
- **tasmota32c2-arduino30.bin** = The Tasmota version with most drivers including additional sensors and KNX for ESP32-C2 and 4M+ flash.
- **tasmota32c6cdc-arduino30.bin** = The Tasmota version with most drivers including additional sensors and KNX for ESP32-C6 with serial over embedded USB CDC or hardware USB and 4M+ flash.
Latest released binaries can be downloaded from
- https://github.com/arendst/Tasmota-firmware/tree/main/release-firmware
- https://ota.tasmota.com/tasmota32/release
Historical binaries can be downloaded from
- https://ota.tasmota.com/tasmota32/release-13.2.0
- https://ota.tasmota.com/tasmota32/release-13.3.0
The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasmota.com/tasmota32/release/tasmota32.bin``
@ -110,55 +116,69 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
[Complete list](BUILDS.md) of available feature and sensors.
## Changelog v13.2.0 Quincy
## Changelog v13.3.0 Quinlan
### Added
- Experimental support for ESP32-C2 and ESP32-C6 using Arduino core v3
- Commands to allow setting of timeprop parameters [#19310](https://github.com/arendst/Tasmota/issues/19310)
- Command ``Mi32Name`` [#19619](https://github.com/arendst/Tasmota/issues/19619)
- Variables ``%power<1..28>%`` and ``%switch<1..28>%`` to rules [#19331](https://github.com/arendst/Tasmota/issues/19331)
- Support different baudrates on BL0942 energy monitor
- Support for Shelly PlusPMMini, Plus1Mini and Plus1PMMini
- Support for HDMI CEC protocol [#19434](https://github.com/arendst/Tasmota/issues/19434)
- Support for ENS16x (air quality) and ENS210 (temp & RH) sensors [#19479](https://github.com/arendst/Tasmota/issues/19479)
- Support for HC8 CO2 sensor [#19714](https://github.com/arendst/Tasmota/issues/19714)
- Support for non-persistent ``WebButton17`` to ``WebButton32`` [#19580](https://github.com/arendst/Tasmota/issues/19580)
- ESP32 commands ``Ds18Rescan`` and ``Ds18RetryRead`` [#19700](https://github.com/arendst/Tasmota/issues/19700)
- ESP32 support for influxdb access using https [#19582](https://github.com/arendst/Tasmota/issues/19582)
- Berry read and write Counters [#19558](https://github.com/arendst/Tasmota/issues/19558)
- Matter support for Virtual Devices controllable via Rules or Berry [#19520](https://github.com/arendst/Tasmota/issues/19520)
- Support for ESP32-C2 and ESP32-C6 using Arduino Core3
- Command ``GpioRead`` to show input state [#19810](https://github.com/arendst/Tasmota/issues/19810)
- Command ``WebCanvas linear-gradient(#F02 7%,#F93,#FF4,#082,#00F,#708 93%)`` to set GUI canvas
- I2C bus2 support to iAQ core sensor [#19799](https://github.com/arendst/Tasmota/issues/19799)
- I2C bus2 support to HTU temperature and humidity sensor
- I2C bus2 support to BH1750 ambient light sensor
- I2C bus2 support to ADS1115 A/D Converter
- I2C bus2 support to SHTxX temperature and humidity sensor
- I2C bus2 support to HYTxxx temperature and humidity sensor
- I2C bus2 support to SI1145/6/7 Ultra violet index and light sensor
- I2C bus2 support to LM75AD temperature sensor
- Support for Winsen XH03x dust particle sensors using USE_PMS5003 and PMS_MODEL_ZH03X [#19850](https://github.com/arendst/Tasmota/issues/19850)
- ST7735S display.ini for 1.44 inch 128x128 red SPI display [#19862](https://github.com/arendst/Tasmota/issues/19862)
- Scripter TCP client [#19914](https://github.com/arendst/Tasmota/issues/19914)
- NeoPool hydrolysis setpoint and max
- NeoPool command ``NPFiltrationSpeed`` to set non-standard filtration type speed [#19857](https://github.com/arendst/Tasmota/issues/19857)
- NeoPool command ``SetOption157`` to enable output of sensitive data [#19857](https://github.com/arendst/Tasmota/issues/19857)
- NeoPool command ``NPBoost`` [#19973](https://github.com/arendst/Tasmota/issues/19973)
- NeoPool sensor delta trigger (command ``NPTelePeriod``) [#19973](https://github.com/arendst/Tasmota/issues/19973)
- NeoPool enhancements for HomeAssistant [#19857](https://github.com/arendst/Tasmota/issues/19857)
- NeoPool store settings on unified file system [#19973](https://github.com/arendst/Tasmota/issues/19973)
- DeepSleep support through TIMERS [#20117](https://github.com/arendst/Tasmota/issues/20117)
- ESP32 auto TasConsole USB or Serial connection for Core3 by @staars
- ESP32 Partition Wizard can be loaded dynamically [#19980](https://github.com/arendst/Tasmota/issues/19980)
- ESP32 support for Avago Tech Bluetooth Buttons [#20088](https://github.com/arendst/Tasmota/issues/20088)
- Berry ``debug.gcdebug()`` to enable GC debugging [#19936](https://github.com/arendst/Tasmota/issues/19936)
- Berry AES_CBC to crypto module [#19964](https://github.com/arendst/Tasmota/issues/19964)
- Berry `scale_int`, equivalent of `scale_uint` for signed integers [#20090](https://github.com/arendst/Tasmota/issues/20090)
- HASPmota add styling properties [#19912](https://github.com/arendst/Tasmota/issues/19912)
- Matter flow sensor support [#19852](https://github.com/arendst/Tasmota/issues/19852)
### Breaking Changed
- `Sendmail` upgraded to ESP-Mail-Client v3.4.9 from v1.2.0, using BearSSL instead of MbedTLS [#19460](https://github.com/arendst/Tasmota/issues/19460)
- Removed support for Homekit in favour of Matter [#19738](https://github.com/arendst/Tasmota/issues/19738)
- NeoPool SENSOR topic ``Power`` renamed to ``Powerunit`` [#19857](https://github.com/arendst/Tasmota/issues/19857)
- Remove Berry `every_200ms` event which didn't work anyways [#20205](https://github.com/arendst/Tasmota/issues/20205)
### Changed
- ESP32 Framework (Arduino Core) from v2.0.11 to v2.0.14
- ESP32 LVGL library from v8.3.8 to v8.3.10 (no functional change)
- Display invert setting after tasmota start in uDisplay driver [#19337](https://github.com/arendst/Tasmota/issues/19337)
- Consolidate SGP40 and SGP41 into SGP4x driver [#19560](https://github.com/arendst/Tasmota/issues/19560)
- MAX31855/MAX6675 sensors driver support up to 6 [#19329](https://github.com/arendst/Tasmota/issues/19329)
- Teleinfo use Apparent Power as Active Power approximation [#19756](https://github.com/arendst/Tasmota/issues/19756)
- ESP32 LittleFS updated to version with grow option [#19635](https://github.com/arendst/Tasmota/issues/19635)
- ESP32 I2S audio preparation for Arduino Core v3 [#19637](https://github.com/arendst/Tasmota/issues/19637)
- ESP32 analog from `analogRead()` to calibrated `analogReadMilliVolts()` [#19732](https://github.com/arendst/Tasmota/issues/19732)
- ESP32 Framework (Arduino Core3) from v3.0.0-alpha1 to v3.0.0-alpha3
- ESP32 LVGL library from v8.3.10 to v8.3.11 (no functional change)
- Increase MAX_HUE_DEVICES to 32 [#19820](https://github.com/arendst/Tasmota/issues/19820)
- NeoPool ``NPHydrolysis`` percent and unit [#19924](https://github.com/arendst/Tasmota/issues/19924)
- Thermostat JSON index from 0 to 1 [#20011](https://github.com/arendst/Tasmota/issues/20011)
- MI32 updates [#19893](https://github.com/arendst/Tasmota/issues/19893)
- ESP32 keep FileSystem intact when over flashing with VSC [#19816](https://github.com/arendst/Tasmota/issues/19816)
- Berry leds animation refactoring stage 1 [#20197](https://github.com/arendst/Tasmota/issues/20197)
- Berry ULP API changes for Core3/IDF5 [#20198](https://github.com/arendst/Tasmota/issues/20198)
- Matter Light0 now accept a Relay number [#19809](https://github.com/arendst/Tasmota/issues/19809)
- Matter update hierarchy of plugins [#19915](https://github.com/arendst/Tasmota/issues/19915)
### Fixed
- Shutter invert [#19341](https://github.com/arendst/Tasmota/issues/19341) and [#19374](https://github.com/arendst/Tasmota/issues/19374)
- Teleinfo power [#19381](https://github.com/arendst/Tasmota/issues/19381)
- Exception 3 in IRHVAC [#19389](https://github.com/arendst/Tasmota/issues/19389)
- PCF8574 mode 1 with base relays exception 3/28 regression from v12.4.0.4 [#19408](https://github.com/arendst/Tasmota/issues/19408)
- ModbusBridge write memory leak [#19758](https://github.com/arendst/Tasmota/issues/19758)
- Zigbee timezone when device reads LocalTime attribute [#19772](https://github.com/arendst/Tasmota/issues/19772)
- ESP32 DS18x20 driver support extended over GPIO33
- ESP32 Support for IPv6 link-local zones for esp-idf 5.1 (necessary for Matter)
- ESP32 Shutter migration [#19454](https://github.com/arendst/Tasmota/issues/19454)
- ESP32 Shutter multi press button events [#19465](https://github.com/arendst/Tasmota/issues/19465)
- ESP32 Shutter button quad press [#19589](https://github.com/arendst/Tasmota/issues/19589)
- ESP32 shutter frequency [#19717](https://github.com/arendst/Tasmota/issues/19717)
- ESP32 Arduino Core v2 wifi client flush [#19642](https://github.com/arendst/Tasmota/issues/19642)
- ESP32 Partition Wizard grow filesystem support [#19645](https://github.com/arendst/Tasmota/issues/19645)
- ESP32-C3 relay click on restart
- Matter support for Virtual Devices controllable via Rules or Berry [#19520](https://github.com/arendst/Tasmota/issues/19520)
### Removed
- Support for Homekit in favour of Matter [#19738](https://github.com/arendst/Tasmota/issues/19738)
- Compile USE_PID [#19890](https://github.com/arendst/Tasmota/issues/19890)
- Scripter timer issue [#19914](https://github.com/arendst/Tasmota/issues/19914)
- NeoPool filtration mode display [#19801](https://github.com/arendst/Tasmota/issues/19801)
- ``changeUIntScale`` for linearity when expanding range [#20089](https://github.com/arendst/Tasmota/issues/20089)
- TUYA state machine (in TUYA v1) [#20110](https://github.com/arendst/Tasmota/issues/20110)
- ``WebQuery`` response buffer corruption and format character ``%`` [#20111](https://github.com/arendst/Tasmota/issues/20111)
- ESP32 I2C allow bus2 support when bus1 is not enabled
- ESP32 remove restart energy logging if no energy monitoring is selected
- ESP32 IR receive with Arduino Core3 [#19904](https://github.com/arendst/Tasmota/issues/19904)
- ESP32 Zero-Cross Dimmer for Core3 [#19929](https://github.com/arendst/Tasmota/issues/19929)
- ESP32-C3 ledlink functionality regression from v13.1.0.2
- ESP32 Neopixel flicker for Core3/IDF5 [#20196](https://github.com/arendst/Tasmota/issues/20196)
- Berry parser error in specific cases [#20059](https://github.com/arendst/Tasmota/issues/20059)
- Berry ``gpio.dac_voltage()`` regression from v13.1.0.1 [#19997](https://github.com/arendst/Tasmota/issues/19997)
- HASPmota `bar` fixed `val` attribute [#20208](https://github.com/arendst/Tasmota/issues/20208)

View File

@ -5,7 +5,7 @@
# Templates
Find below the available templates as of October 2023. More template information can be found in the [Tasmota Device Templates Repository](http://blakadder.github.io/templates)
Find below the available templates as of December 2023. More template information can be found in the [Tasmota Device Templates Repository](http://blakadder.github.io/templates)
## Adapter Board
```
@ -183,7 +183,7 @@ HeyLight Plafoniera 30W CCT {"NAME":"HeyLight Ceiling Light","GPIO":[0,0,0,0,0,
Hykolity 13" RGBCCT Flush Mount {"NAME":"Hykolity","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18}
Lamptan 3 Lights in 1 36W {"NAME":"Lamptan Smart Wi-Fi Ceiling Lamp LUMINA 36W","GPIO":[0,0,0,0,0,416,0,0,0,417,0,0,0,0],"FLAG":0,"BASE":54}
LE lampUX 15W RGBCCT {"NAME":"LE lampUX 15W","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18}
LightZone MeLiTec {"NAME":"LightZone MeLiTec D114 Light ","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54,"CMND":"TuyaMCU 11,20 | TuyaMCU 21,22 | TuyaMCU 23,23 | DimmerRange 25,1000"}
LightZone MeLiTec {"NAME":"LightZone MeLiTec D114 Light ","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54}
Lohas ZN026CL10 RGBCCT {"NAME":"Lohas LED Lamp","GPIO":[0,0,0,0,417,416,0,0,419,418,420,0,0,0],"FLAG":0,"BASE":18}
LOLAsmart Uranus White 70 cm {"NAME":"lola smart","GPIO":[0,0,0,1088,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18}
LSC 20W 1400lm White Ambiance {"NAME":"LSC RGBCW LED","GPIO":[0,0,0,0,0,0,0,0,4064,0,4032,0,0,0],"FLAG":0,"BASE":18}
@ -301,6 +301,7 @@ Coiaca Tasmota Development Board AWR12 {"NAME":"AWR12t","GPIO":[320,1,1,1,1,1,0
Dasduino CONNECT {"NAME":"Dasduino CONNECT","GPIO":[1,1,1376,1,640,608,1,1,1,1,1,1,1,1],"FLAG":0,"BASE":18}
Dasduino CONNECTPLUS {"NAME":"Dasduino CONNECTPLUS","GPIO":[32,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,640,608,1,0,1,1,1,0,0,0,0,1376,1,1,1,1,0,0,1],"FLAG":0,"BASE":1}
Espoir Rev 1.0.0 PoE+ {"NAME":"Espoir","GPIO":[0,0,1,0,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,5568,5600,1,7968,1,1,1,1],"FLAG":0,"BASE":1}
Freenove ESP32-WROOM {"NAME":"FREENOVE SP32 WROOM","GPIO":[1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0],"FLAG":0,"BASE":1}
KinCony 128 Channel Controller {"NAME":"KC868-A128","GPIO":[0,1,0,1,609,640,1,1,1,3232,3200,641,608,1,5600,0,0,1,0,5568,0,1,0,0,0,0,0,0,0,0,4705,4707,4706,0,0,4704],"FLAG":0,"BASE":1}
KinCony 64 Channel Controller {"NAME":"KC868-A64","GPIO":[0,1,0,1,609,640,1,1,1,3232,3200,641,608,1,5600,0,0,1,0,5568,0,1,0,0,0,0,0,0,0,0,4705,4707,4706,0,0,4704],"FLAG":0,"BASE":1}
LC Technology MicroPython Maker {"NAME":"LC-ESP-Python","GPIO":[1,1,544,1,1,1,1,1,1,1,1,1,1,1],"FLAG":0,"BASE":18}
@ -314,6 +315,7 @@ Olimex ESP32-POE Ethernet {"NAME":"Olimex ESP32-PoE","GPIO":[1,1,1,1,1,1,0,0,
QuinLED 2 Channel {"NAME":"QuinLED 2 channel","GPIO":[416,0,417,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18}
Silicognition wESP32 {"NAME":"wESP32","GPIO":[0,0,1,0,1,1,0,0,1,1,1,1,5568,5600,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1],"FLAG":0,"BASE":1}
TZT ESP8266 Weather Station Kit {"NAME":"TZT Weather Station","GPIO":[32,0,640,0,1,1184,0,0,1,1,608,1,1,1],"FLAG":0,"BASE":18}
WeAct Studio ESP32 Core {"NAME":"ESP32CoreBoard","GPIO":[32,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,544,1,0,1,1,1,0,0,0,0,1,1,1,1,1,0,0,1],"FLAG":0,"BASE":1}
Wemos D1 Mini ESP32 {"NAME":"Wemos D1 Mini ESP32","GPIO":[0,0,1,0,1,1,0,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0],"FLAG":0,"BASE":1}
Wemos LOLIN32 Lite V1.0.0 (ESP32) {"NAME":"Wemos LOLIN32 Lite V1.0.0","GPIO":[1,0,1,0,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,1,0,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0],"FLAG":0,"BASE":1}
Wireless Tag ESP32 Ethernet {"NAME":"WT32_ETH01","GPIO":[1,1,1,1,1,1,0,0,1,0,1,1,3840,576,5600,0,0,0,0,5568,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,1],"FLAG":0,"BASE":1}
@ -456,11 +458,13 @@ QS-WiFi-D01-TRIAC 150W {"NAME":"QS-WiFi-D01-TRIAC","GPIO":[0,3200,0,3232,0
RJWF-02A {"NAME":"RJWF-02A","GPIO":[32,2272,0,2304,0,0,0,0,0,0,288,0,0,0],"FLAG":0,"BASE":54}
Shelly Dimmer {"NAME":"Shelly Dimmer 1","GPIO":[0,3200,0,3232,5568,5600,0,0,192,0,193,288,0,4736],"FLAG":0,"BASE":18}
Shelly Dimmer 2 {"NAME":"Shelly Dimmer 2","GPIO":[0,3200,0,3232,5568,5600,0,0,193,0,192,0,320,4736],"FLAG":0,"BASE":18}
Shelly Plus 0-10V Dimmer {"NAME":"Shelly Plus 0-10V Dimmer","GPIO":[288,0,0,0,192,0,0,0,0,0,0,0,0,0,193,1,0,0,0,0,0,32,416,0,0,0,0,0,4736,0,0,0,0,0,0,0],"FLAG":0,"BASE":1}
Sonoff D1 {"NAME":"Sonoff D1","GPIO":[1,3200,0,3232,0,0,0,0,0,320,0,0,0,0],"FLAG":0,"BASE":74}
```
## Display
```
Espressif ESP-WROVER-KIT {"NAME":"ESPWroverKit41","GPIO":[1,1,1,1,1,992,1,1,1,1,1,1,1,1,1024,736,0,800,768,704,0,672,6210,1,0,0,0,0,1,1,1,1,1,0,0,1],"FLAG":0,"BASE":1}
Heltec WiFi Kit 32 {"NAME":"WiFi Kit 32","GPIO":[1,1,1,1,640,1,1,1,1,1,1,608,3840,1,1,1,0,1,1,1,0,224,1,1,0,0,0,0,1,1,1,1,1,0,0,1],"FLAG":0,"BASE":1}
Heltec WiFi Kit 8 {"NAME":"WifiKit8","GPIO":[1,1,1,1,640,608,1,1,1,1,1,1,1024,1],"FLAG":0,"BASE":18}
LilyGO T5 4.7 inch E-paper {"NAME":"LilyGO T5-4.7","GPIO":[0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,7616,0,0,0,0,0,0,0,0,0,0,33,34,4704,0,0,32],"FLAG":0,"BASE":1}
@ -477,6 +481,7 @@ M5Stack M5StickC {"NAME":"M5StickC","GPIO":[1,0,0,0,0,768,1056,576,0
M5Stack Tough {"NAME":"M5Stack Tough","GPIO":[6210,1,1,1,6720,768,0,0,0,1,1,800,0,0,736,1,0,641,609,704,0,0,0,1,0,0,0,0,640,608,1,1,1,0,672,7968],"FLAG":0,"BASE":1}
ODROID-GO Game Kit {"NAME":"ODROID-GO","GPIO":[32,3200,544,3232,608,768,0,0,6210,33,416,640,1,1,736,672,0,800,6720,704,0,0,0,34,0,0,0,0,164,165,3328,3329,4866,0,0,35],"FLAG":0,"BASE":3}
OLED Display Module 0.66" for Wemos D1 Mini {"NAME":"OLED 64x48","GPIO":[1,1,1,1,640,608,0,0,1,1,1,1,1024,1],"FLAG":0,"BASE":18}
Sunton 2.8" 240*320 CYD {"NAME":"ESP32-2432S028","GPIO":[6210,1,800,0,448,0,1,1,672,704,736,768,449,450,1,1,0,992,1,1,0,737,480,1,0,0,0,0,705,7264,4768,1,0,0,0,673],"FLAG":0,"BASE":1}
Wireless Tag 3.5" Touch {"NAME":"WT32-SC01","GPIO":[6210,1,1,1,1,1,0,0,1,704,736,768,1,1,640,608,1,800,1024,992,0,1,1,1,0,0,0,0,1,1,1,1,1,0,0,1],"FLAG":0,"BASE":1}
```
@ -591,6 +596,7 @@ Devola Designer Glass Panel {"NAME":"Devola Heater","GPIO":[0,0,0,0,224,1,0,0,0
EBERG ROT 720 Infrared {"NAME":"Tuya MCU","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54,"CMND":"TuyaMCU 11,4 | TuyaMCU 72,2 | TuyaMCU 71,3"}
Klarstein Bornholm Smart 2000W {"NAME":"Klarstein Bornholm","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54}
Kogan 1500W Panel {"NAME":"Kogan Panel Heater","GPIO":[0,0,0,0,0,0,0,0,0,2304,0,2272,0,0],"FLAG":0,"BASE":54}
LSC Smart Connect 500W IR Panel {"NAME":"LSC Connect Smart IR Panel Heater","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54}
SmartMi Electric Air {"NAME":"ZNNFJ07ZM","GPIO":[0,0,0,0,0,0,0,0,0,0,0,0,0,3200,3232,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":1}
```
@ -618,12 +624,13 @@ BlitzWolf BW-RC1 {"NAME":"BW-RC1","GPIO":[0,0,0,0,320,1088,0,0,0,32,
Connect SmartHome Universal Remote {"NAME":"CSH IR Controller","GPIO":[1,1,1,1,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62}
Cusam CS-IRC-1 {"NAME":"YTF IR Controller","GPIO":[1,1,1,1,288,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62}
Eachen IR DC6 {"NAME":"Eachen IR","GPIO":[0,0,0,0,320,1088,0,0,1,32,1056,0,0,0],"FLAG":0,"BASE":18}
ESP_IR_TR {"NAME":"Tasmota IR-Gateway","GPIO":[0,0,0,0,1056,0,0,0,0,0,1088,0,0,0],"FLAG":0,"BASE":18}
Frankever Smart Remote {"NAME":"FK-UFO-R4","GPIO":[1,1,1,1,288,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62}
Geeklink GK01 {"NAME":"GL IR Blaster","GPIO":[1,1,1,1,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62}
HIPER IoT IR2 {"NAME":"hiper_HI-IR2","GPIO":[1,1,1,1,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62}
Jinvoo AC/TV Box {"NAME":"Jinvoo IR Controller","GPIO":[1,1,1,1,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62}
JS-IR1 Universal Remote {"NAME":"JS-IR1","GPIO":[1,1,1,1,288,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":18}
KinCony ESP32 433MHz RF and {"NAME":"KC868-AG","GPIO":[0,0,1056,0,480,0,0,0,0,0,1,0,1,1,1,1,0,1,1120,1152,0,7968,0,0,0,0,0,0,1,1,1,1,1,0,0,1],"FLAG":0,"BASE":1,"CMND":"BuzzerPwm 1"}
KinCony ESP32 433MHz RF and {"NAME":"KC868-AG","GPIO":[0,0,1056,0,480,0,0,0,0,1152,1,0,1,1,1,1,0,1,1120,1088,0,1,1,1,0,0,0,0,1,1,1,1,1,0,0,1],"FLAG":0,"BASE":1,"CMND":"BuzzerPwm 1"}
Lenovo SE-741C {"NAME":"Lenovo IR","GPIO":[1,1,1,1,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62}
Mirabella Genio I002577 {"NAME":"Genio IR TxRx","GPIO":[1,1,1,1,320,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62}
Moes Tuya Remote Control {"NAME":"Moes IR Controller","GPIO":[1,1,1,1,1,1088,0,0,0,32,1056,0,0,0],"FLAG":0,"BASE":62}
@ -864,12 +871,13 @@ Sinilink PCIe Computer Remote {"NAME":"XY-WPCE","GPIO":[1,1,320,1,32,224,0,0,16
Sinilink USB Computer Remote {"NAME":"XY-WPCL","GPIO":[0,0,320,0,0,224,0,32,160,0,0,0,0,0],"FLAG":0,"BASE":18,"CMND":"SO114 1 | Pulsetime 10 | SwitchMode1 2"}
Sinilink XY-Clock Clock Alarm Module {"NAME":"XY-Clock","GPIO":[288,0,289,0,0,416,32,33,608,640,0,0,34,0],"FLAG":0,"BASE":18}
Sunbeam LoftTec Electric Blanket {"NAME":"Sunbeam Heated Blanket","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54}
Ulanzi Smart Pixel Clock {"NAME":"Ulanzi TC001","GPIO":[0,0,0,0,0,0,0,0,0,0,34,480,0,0,0,0,0,640,608,0,0,0,32,33,0,0,0,0,1376,0,4704,4768,0,0,0,0],"FLAG":0,"BASE":1}
Ulanzi Smart Pixel Clock {"NAME":"Ulanzi TC001","GPIO":[0,0,0,0,0,0,0,0,0,0,34,480,0,0,0,0,0,640,608,0,0,0,32,33,0,0,0,0,1376,0,4705,4768,0,0,0,0],"FLAG":0,"BASE":1}
Xystec USB3.0 4 Port Hub {"NAME":"Xystec USB Hub","GPIO":[0,0,0,0,224,0,0,0,226,227,225,0,0,0],"FLAG":0,"BASE":18}
```
## Module
```
Ants Make 16 Channel ESP32 Relay Driver 5V DC {"NAME":"AM-022","GPIO":[1,1,1,1,232,237,1,1,228,231,229,1,233,230,234,235,0,238,239,236,0,224,227,226,0,0,0,0,1,225,1,1,1,0,0,1],"FLAG":0,"BASE":1}
DT-Light ESP8285 Lighting {"NAME":"DMP-L1","GPIO":[1,1,0,1,1,1,0,0,1,1,1,1,1,1],"FLAG":0,"BASE":18}
ESP-01D {"NAME":"ESP-01D","GPIO":[1,1,0,1,1,0,0,0,1,0,1,0,0,0],"FLAG":0,"BASE":18}
ESP-01S {"NAME":"ESP-01","GPIO":[1,1,1,1,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18}
@ -899,13 +907,18 @@ Tuya Alarm PIR {"NAME":"CT61W","GPIO":[0,0,0,0,0,0,0,0,0,160,480,2
```
Steren Curtain {"NAME":"Steren_SHOME-155","GPIO":[0,0,0,0,0,0,0,0,0,2304,0,2272,0,0],"FLAG":0,"BASE":54,"CMND":"SO54 1|SO20 1|TuyaMCU 61,1|TuyaMCU 21,2|TuyaMCU 27,3|TuyaMCU 97,5|TuyaMCU 11,6|TuyaMCU 62,7|TuyaMCU 63,8|TuyaMCU 81,9|TuyaMCU 98,10|TuyaMCU 82,11"}
Zemismart BCM300D-TY {"NAME":"Zemistart_Curt","GPIO":[0,0,0,0,0,0,0,0,0,2304,0,2272,0,0],"FLAG":0,"BASE":54}
Zemismart Blinds Controller {"NAME":"Zemismart Blind","GPIO":[1,1,1,1,1,1,0,0,1,2304,1,2272,1,0],"FLAG":0,"BASE":54}
Zemismart Blinds Controller {"NAME":"Zemismart Blind WBR3","GPIO":[0,2272,0,2304,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":54,"CMND":"TuyaMCU 11,7|TuyaMCU 21,2"}
Zemismart Curtain {"NAME":"Zemismart_Curt","GPIO":[0,0,0,0,0,0,0,0,0,2304,0,2272,0,0],"FLAG":0,"BASE":54}
Zemismart Rechargeable Roller Shade {"NAME":"Zemismart Remote","GPIO":[544,0,288,33,225,32,0,0,34,226,289,224,290,0],"FLAG":0,"BASE":18}
Zemismart Roller Shade {"NAME":"M2805EIGB","GPIO":[1,2272,1,2304,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54}
Zemismart Updated RF Remote Roller Shade {"NAME":"Zemismart M515EGB","GPIO":[1,2272,1,2304,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54}
```
## Other
```
Kogan SmarterHome 1.9L Pet Water Fountain {"NAME":"WaterFountain","GPIO":[257,0,259,0,576,32,0,0,224,161,0,480,226,4704],"FLAG":0,"BASE":18}
```
## Outdoor Plug
```
Acenx SOP04-US Dual {"NAME":"SOP04-US Dual","GPIO":[1,1,1,1,320,321,0,0,224,32,225,1,1,0],"FLAG":0,"BASE":18}
@ -962,6 +975,7 @@ Maxcio EOP03-EU {"NAME":"Maxcio EOP03-EU","GPIO":[0,0,0,0,225,321,0
Maxcio SOP02-US {"NAME":"Maxcio SOP02US","GPIO":[0,0,0,0,0,544,0,0,224,32,225,0,0,1],"FLAG":0,"BASE":18}
Merkury {"NAME":"Merkury Switch","GPIO":[32,0,0,0,0,321,0,0,0,288,224,0,0,0],"FLAG":0,"BASE":18}
Merkury {"NAME":"Merkury Switch","GPIO":[0,0,0,0,32,0,0,0,0,224,0,0,0,0],"FLAG":0,"BASE":18}
Meross MSS620 16A IP44 {"NAME":"MSS620","GPIO":[0,320,0,320,225,0,0,0,224,576,32,0,0,0],"FLAG":0,"BASE":18}
Minoston MP22W {"NAME":"Minoston MP22W","GPIO":[0,0,0,0,320,0,0,0,224,64,0,0,0,0],"FLAG":0,"BASE":18}
Nedis PO120 IP44 {"NAME":"WIFIPO120FWT","GPIO":[32,0,0,0,2688,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":49}
Obi Stecker IP44 {"NAME":"OBI-Outdoor-Socket2","GPIO":[0,0,0,0,224,32,0,0,576,288,1,1,1,1],"FLAG":0,"BASE":18}
@ -1036,7 +1050,7 @@ Aquiv S1 {"NAME":"Aquiv S1","GPIO":[0,0,544,0,320,0,0,0,224,
Arlec 10m Smart Extension Lead {"NAME":"Arlec Ext Cord","GPIO":[0,32,0,0,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18}
Arlec Heavy Duty 20m Extension Lead {"NAME":"Arlec Ext Cord","GPIO":[0,32,0,0,0,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":18}
Arlec Plug In Socket {"NAME":"PC191HA","GPIO":[0,32,0,0,2720,2656,0,0,2624,224,288,0,0,0],"FLAG":0,"BASE":18}
Arlec Plug In Socket {"NAME":"PC191HAS2","GPIO":[0,0,0,32,2656,2624,0,0,224,2720,320,0,0,0],"FLAG":0,"BASE":18}
Arlec Plug In Socket {"NAME":"PC191HAS2 CB2S","GPIO":[0,0,0,32,2656,2624,0,0,224,2720,320,0,0,0],"FLAG":0,"BASE":18}
Arlec Smart {"NAME":"Arlec-PC190HA","GPIO":[0,0,0,0,320,0,0,0,224,576,32,0,0,0],"FLAG":0,"BASE":18}
Arlec Smart {"NAME":"PC399HA","GPIO":[0,0,0,32,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":52}
Arlec Smart 2.1A USB Charger {"NAME":"Arlec Single","GPIO":[0,0,0,0,321,0,0,0,224,0,64,0,0,0],"FLAG":0,"BASE":18}
@ -1053,11 +1067,11 @@ Athom 16A EU V2 {"NAME":"Athom Plug V2","GPIO":[0,0,0,3104,0,32,0,0
Athom 16A Israel {"NAME":"Athom Power Monitoring Plug","GPIO":[0,0,0,32,2720,2656,0,0,2624,544,224,0,0,1],"FLAG":0,"BASE":18}
Athom 16A Israel v2 {"NAME":"Athom Plug V2","GPIO":[0,0,0,3104,0,32,0,0,224,576,0,0,0,0],"FLAG":0,"BASE":18}
Athom 16A Italy {"NAME":"Athom PG05-IT16A","GPIO":[0,0,0,32,2720,2656,0,0,2624,544,224,0,0,0],"FLAG":0,"BASE":1}
Athom 16A Switzerland v2 {"NAME":"Athom Plug V2","GPIO":[0,0,0,3104,0,32,0,0,224,576,0,0,0,0],"FLAG":0,"BASE":18}
Athom 16A UK {"NAME":"Athom PG04-UK16A","GPIO":[0,0,0,32,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":18}
Athom 16A UK V2 {"NAME":"Athom Plug V2","GPIO":[0,0,0,3104,0,32,0,0,224,576,0,0,0,0],"FLAG":0,"BASE":18}
Athom 16A US {"NAME":"Athom PG03-US16A","GPIO":[0,0,0,32,2720,2656,0,0,2624,288,224,0,0,0],"FLAG":0,"BASE":18}
Athom 16A US V2 {"NAME":"Athom Plug V2","GPIO":[0,0,0,3104,0,32,0,0,224,576,0,0,0,0],"FLAG":0,"BASE":18}
Athom Plug V3 {"NAME":"Athom Plug V3","GPIO":[0,0,0,32,0,224,576,0,0,0,0,0,0,0,0,0,0,0,0,0,3104,0],"FLAG":0,"BASE":1}
Atlantis {"NAME":"Atlantis Smart Plug","GPIO":[32,0,0,0,2720,2656,0,0,2624,544,224,0,0,0],"FLAG":0,"BASE":18}
Atomi AT1217 {"NAME":"AT1217","GPIO":[0,0,0,0,320,321,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18}
Aubess 16A {"NAME":"Aubess 16A Power Monitoring Plug","GPIO":[0,32,0,0,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":18}
@ -1083,10 +1097,10 @@ Avatto OT08 {"NAME":"Avatto OT08","GPIO":[416,0,418,0,417,2720,
Avidsen Home {"NAME":"Avidsen HomePlug","GPIO":[0,0,0,0,224,35,0,0,289,288,0,0,0,0],"FLAG":0,"BASE":18}
Awow X5P {"NAME":"Awow","GPIO":[0,0,320,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18}
AWP02L-N {"NAME":"AWP02L-N","GPIO":[0,0,320,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18}
AWP08L 20A {"NAME":"AWP08L","GPIO":[0,0,0,32,0,0,0,0,0,0,224,0,0,0],"FLAG":0,"BASE":18}
AzpenHome Smart {"NAME":"Socket2Me","GPIO":[288,1,1,1,225,1,0,0,224,1,32,1,1,0],"FLAG":0,"BASE":18}
Baco Smart Power Socket {"NAME":"Balco HE200021","GPIO":[0,0,0,32,2720,2656,0,0,2624,576,224,0,0,0],"FLAG":0,"BASE":52}
Bagotte SK-EU-A01 {"NAME":"Bagotte SK-EU-A01","GPIO":[96,0,0,0,0,0,0,0,224,320,0,0,0,0],"FLAG":0,"BASE":18}
Bakibo Mini {"NAME":"SM300","GPIO":[320,0,576,0,0,2720,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":59}
Bakibo TP22Y {"NAME":"Bakibo TP22Y","GPIO":[0,0,0,32,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":52}
Bardi 16A {"NAME":"BARDI","GPIO":[320,0,0,0,0,2720,0,0,224,32,2656,321,2624,0],"FLAG":0,"BASE":18}
Bauhn ASPU-1019 {"NAME":"Bauhn Smart Pl","GPIO":[0,0,0,0,224,225,0,0,0,320,32,0,0,0],"FLAG":0,"BASE":18}
@ -1180,6 +1194,7 @@ DWFeng AWP02L-N {"NAME":"AWP02L-N","GPIO":[1,1,320,1,1,1,0,0,1,32,1
DWFeng BSD01 {"NAME":"DWFeng BSD01","GPIO":[1,1,1,1,1,1,1,1,224,32,320,1,1,1],"FLAG":0,"BASE":18}
ECO Plugs CT-065W {"NAME":"ECO/CT-065W","GPIO":[0,0,576,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18}
eco4life DPS1101S {"NAME":"Eco4Life Plug","GPIO":[0,0,0,0,288,321,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18}
Edisio 10A {"NAME":"Edisio Wifi Timer","GPIO":[1,1,1,1,1,1,1,1,1,1,32,1,320,1,1,1,1,1,1,1,1,1,224,1,1,1,1,1,1,1,1,1,1,1,1,1],"FLAG":0,"BASE":1}
ednet 84334 {"NAME":"84334","GPIO":[0,0,0,0,320,321,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18}
eFamilyCloud ASDFEE174 {"NAME":"eFamily Plug","GPIO":[0,0,0,0,288,224,0,0,0,32,0,0,0,0],"FLAG":0,"BASE":18}
EFUN SH330W {"NAME":"EFUNPlug","GPIO":[320,1,1,1,1,1,1,1,1,32,1,224,1,1],"FLAG":0,"BASE":18}
@ -1343,6 +1358,7 @@ Koogeek KLSP2 {"NAME":"KOOGEEK KLSP2","GPIO":[321,3072,320,3104,0
Koogeek KLWP1 {"NAME":"Koogeek-KLWP1","GPIO":[544,0,320,0,0,2720,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":1}
Koogeek W-DEXI {"NAME":"W-DEXI","GPIO":[0,64,0,0,2720,2656,0,0,2592,288,224,0,0,0],"FLAG":0,"BASE":18}
Koogeek W-UKX {"NAME":"Koogeek W-UKX","GPIO":[0,32,1,1,1,0,0,0,0,320,224,0,0,0],"FLAG":0,"BASE":1}
Kruger & Matz Connect P2 {"NAME":"KM2200","GPIO":[0,0,321,0,0,0,0,0,0,32,0,224,0,0],"FLAG":0,"BASE":18}
KULED K63 {"NAME":"KULED K63","GPIO":[0,0,0,0,224,32,0,0,320,0,0,0,0,0],"FLAG":0,"BASE":18}
Laduo YX-DE01 {"NAME":"YX-DE01","GPIO":[1,32,1,1,1,1,0,0,1,320,224,1,1,0],"FLAG":0,"BASE":18}
LE LampUX Smart Socket {"NAME":"LE LampUX","GPIO":[0,0,0,0,0,320,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18}
@ -1406,7 +1422,7 @@ MoKo 2 USB {"NAME":"MoKo Plug","GPIO":[0,32,0,0,0,0,0,0,0,321,
MoKo YX-WS01A {"NAME":"MoKo Plug","GPIO":[0,32,0,0,0,0,0,0,0,321,224,0,0,0],"FLAG":0,"BASE":18}
Muvit iO MIOSMP008 {"NAME":"MIOSMP008","GPIO":[0,0,0,32,2656,2624,0,0,224,2720,320,0,0,0],"FLAG":0,"BASE":1}
MXQ LED Nightlight {"NAME":"MXQ SP06","GPIO":[0,0,0,0,288,192,0,0,225,321,224,0,0,0],"FLAG":0,"BASE":18}
Nanxin NX-SM400 {"NAME":"NX-SM400","GPIO":[0,0,0,32,2720,2656,0,0,2592,288,224,0,0,0],"FLAG":0,"BASE":18}
Nanxin {"NAME":"NX-SM400","GPIO":[0,0,0,32,2720,2656,0,0,2592,288,224,0,0,0],"FLAG":0,"BASE":18}
Naxa NSH-1000 {"NAME":"Naxa NSH-1000","GPIO":[0,0,0,0,32,0,0,0,321,320,224,0,0,0],"FLAG":0,"BASE":18}
Nedis P110 {"NAME":"Nedis WIFIP110","GPIO":[32,0,0,0,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":49}
Nedis P120 {"NAME":"WIFIP120EWT","GPIO":[32,0,0,0,2688,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":49}
@ -1507,7 +1523,7 @@ SM-PW701K {"NAME":"SM-PW701K","GPIO":[0,0,0,0,288,0,0,0,224,3
Smaho {"NAME":"SMAHO WiFi P.","GPIO":[32,0,0,0,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":18}
Smart 15A {"NAME":"JH-G09U","GPIO":[0,0,0,0,224,32,0,0,288,0,0,0,0,0],"FLAG":0,"BASE":18}
Smart Plug {"NAME":"SO08WP","GPIO":[1,1,1,32,2688,2656,1,1,2624,288,224,1,1,1],"FLAG":0,"BASE":18}
SmartDGM PP-W162 {"NAME":"SmartDGM Plug","GPIO":[0,0,0,32,2720,2656,0,0,2624,288,224,0,0,0],"FLAG":0,"BASE":18}
SmartDGM PP-W162 {"NAME":"SmartDGM Plug","GPIO":[0,0,0,32,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":18}
SmartGrade {"NAME":"SmartGrade AC","GPIO":[32,0,0,0,2688,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":49}
SmartVU Home {"NAME":"SHWSP1","GPIO":[0,0,0,32,2720,2656,0,0,2624,320,224,0,0,0],"FLAG":0,"BASE":52}
Smitch 16A {"NAME":"Smitch SP0602","GPIO":[321,1,320,1,0,2720,0,0,2624,32,2656,224,0,0],"FLAG":0,"BASE":45}
@ -1797,6 +1813,8 @@ ZLD64-EU-W {"NAME":"ZLD64-EU-W","GPIO":[0,320,0,32,225,224,0,0
## Presence Sensor
```
Everything Presence Lite {"NAME":"Everything Presence Lite","GPIO":[0,0,0,0,0,0,0,0,0,0,544,0,3232,3200,160,161,0,640,608,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0],"FLAG":0,"BASE":1}
Everything Presence One {"NAME":"Everything Presence One","GPIO":[0,0,0,0,0,0,0,0,0,3200,3232,160,0,1,1,1,0,0,1,1,0,608,640,0,0,0,0,0,544,161,0,0,0,0,0,0],"FLAG":0,"BASE":1,"CMND":"SO114 1 | SwitchMode1 1 | SwitchMode2 1"}
Tuya mmWave {"NAME":"ZY-M100","GPIO":[1,1,1,1,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54,"CMND":"SO97 1 | TuyaMCU 99,1 | TuyaMCU 75,104"}
```
@ -1819,7 +1837,6 @@ muvit IO miobulb001 600lm {"NAME":"miobulb001","GPIO":[0,0,0,0,419,0,0,0,417,
Oobest ZN93028 11W {"NAME":"RGB Bulb 11W","GPIO":[0,0,0,0,419,0,0,0,417,418,416,0,0,4704],"FLAG":0,"BASE":18}
SuperBrightLEDs 3W 70lm 12V {"NAME":"G4-RGB3W","GPIO":[0,0,0,0,417,0,0,0,418,0,416,0,0,0],"FLAG":0,"BASE":18}
V-Tac P45 4.5W 300lm {"NAME":"V-TAC VT-5154","GPIO":[0,0,0,0,0,0,0,0,4065,0,4032,0,0,0],"FLAG":0,"BASE":18}
Wipro Garnet NS7001 480lm {"NAME":"WiproSmartBulb","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18}
```
## RGBCCT
@ -2006,6 +2023,7 @@ WdtPro 8W 800lm {"NAME":"WdtPro","GPIO":[0,0,0,0,419,420,0,0,417,41
Wipro Garnet 9W 810lm {"NAME":"Wipro","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18}
WiZ BR30 13.8W 750lm {"NAME":"WiZ RGBCCT PAR30","GPIO":[0,0,0,0,419,0,0,0,417,420,418,416,0,0],"FLAG":0,"BASE":48}
Wiz Colors A19 8.8w 800lm {"NAME":"Wiz Colors RGBCCT","GPIO":[0,0,0,0,419,0,0,0,416,420,418,417,0,0],"FLAG":0,"BASE":48}
Wiz Colors A21 14.5w 1600lm {"NAME":"WIZ-922-65","GPIO":[1,1,420,1,419,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,416,417,418,0,0,0,0,1,1,1,1,1,0,0,1],"FLAG":0,"BASE":1}
WiZ PAR16 4.9W 400lm {"NAME":"WIZ GU10","GPIO":[0,0,420,0,419,416,0,0,0,0,0,0,0,0,417,418,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":1}
Xtricity A19 10W 800lm {"NAME":"XTRICITY A19 10W 800LM RGBCCT BULB","GPIO":[0,0,0,0,416,419,0,0,417,452,418,2304,2272,0],"FLAG":0,"BASE":48}
Zemismart 5W 480lm {"NAME":"Zemismart 5W","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18}
@ -2154,6 +2172,7 @@ MoKo GU10 {"NAME":"MoKo GU10","GPIO":[1,1,1,1,418,1,1,1,417,4
MoKo JL81 5W 400lm {"NAME":"MoKo E14","GPIO":[0,0,0,0,0,0,0,0,3008,0,3040,0,0,0],"FLAG":0,"BASE":27}
MOKO YX-L01C-E14 A60 810lm {"NAME":"MOKO","GPIO":[32,0,0,0,3008,3040,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":27}
Nedis 4.5W 380lm {"NAME":"Nedis RGBW","GPIO":[0,0,0,0,2912,416,0,0,417,2976,2944,0,0,0],"FLAG":0,"BASE":18}
Nedis 6W 450lm {"NAME":"WIFILC10WTB22","GPIO":[0,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18}
Nedis 6W 470lm {"NAME":"nedis Bulb","GPIO":[0,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18}
Nedis A60 800lm {"NAME":"Nedis RGBW","GPIO":[0,0,0,0,2912,416,0,0,0,2976,2944,0,0,4704],"FLAG":0,"BASE":18}
Nedis C10 350lm {"NAME":"Nedis WIFILC10","GPIO":[0,0,0,0,418,416,0,0,419,417,420,0,0,4704],"FLAG":0,"BASE":18}
@ -2200,6 +2219,7 @@ V-TAC A95 18W 1350lm {"NAME":"V-TAC VT-5021","GPIO":[0,0,0,0,416,420,0,0
V-TAC G45 4.5W 300lm {"NAME":"V-TAC VT-5124","GPIO":[0,0,0,0,0,0,0,0,4065,0,4032,0,0,0],"FLAG":0,"BASE":18}
Vivitar 1100lm {"NAME":"Vivitar (Tuya) RGBW Lamp","GPIO":[0,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18}
Wallfire WF-05 {"NAME":"Wallfire E27","GPIO":[32,0,0,0,0,0,0,0,0,3008,0,3040,0,0],"FLAG":0,"BASE":27}
Wipro Garnet NS7001 480lm {"NAME":"Wipro Garnet NS7001","GPIO":[0,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18}
Wixann C37 5W 450lm {"NAME":"WIXANNE12","GPIO":[0,0,0,0,416,419,0,0,417,420,418,0,0,0],"FLAG":0,"BASE":18}
Woopower 460lm {"NAME":"Woopower E14","GPIO":[0,0,0,0,0,0,0,0,0,3008,0,3040,0,0],"FLAG":0,"BASE":27}
WOOX 4W 350lm {"NAME":"WOOX R4553","GPIO":[0,0,0,0,416,419,0,0,417,0,418,0,0,0],"FLAG":0,"BASE":18}
@ -2341,8 +2361,10 @@ T13 100W PD3.0 Portable {"NAME":"PTS200","GPIO":[0,0,33,0,34,0,0,0,6210,0,3
```
3 Way Smart Light {"NAME":"KS-602F","GPIO":[1,1,1,1,1,1,0,0,1,1,1,1,1,0],"FLAG":0,"BASE":54}
3A Smart Home {"NAME":"3A Smart Home ","GPIO":[544,0,290,33,225,34,0,0,32,224,289,226,288,0],"FLAG":0,"BASE":18}
4 Gang Light Touch {"NAME":"03O","GPIO":[32,0,0,0,226,225,33,34,224,260,35,227,0,0],"FLAG":0,"BASE":7}
AGL 2 Gang {"NAME":"AGL WiFi 02","GPIO":[0,0,544,0,0,33,0,0,225,224,0,0,32,0],"FLAG":0,"BASE":18}
AGL 3 Gang {"NAME":"AGL WiFi 03","GPIO":[0,0,544,0,34,33,0,0,225,224,226,0,32,0],"FLAG":0,"BASE":18}
AmmToo 433Mhz 2 Gang US Light {"NAME":"Dual band touch switch","GPIO":[0,0,0,32,33,0,0,0,0,224,225,0,0,0],"FLAG":0,"BASE":18}
Aoycocr SW1 {"NAME":"Aoycocr SW1","GPIO":[576,1,321,1,1,1,1,1,320,32,1,224,1,1],"FLAG":0,"BASE":18}
APPIO 1 Gang Switch {"NAME":"Appio-9608","GPIO":[0,0,0,0,0,32,0,0,0,0,0,224,288,0],"FLAG":0,"BASE":18}
Appio 3 Gang Touch {"NAME":"Appio-9611","GPIO":[0,0,0,0,224,33,0,0,34,226,32,225,288,0],"FLAG":0,"BASE":18}
@ -2406,6 +2428,7 @@ Eachen 3CH {"NAME":"Eachen Smart Switch 3CH","GPIO":[34,0,0,0,
Eachen CD303 3 Gang {"NAME":"ID Components","GPIO":[544,289,0,162,224,161,0,0,160,225,290,226,288,1],"FLAG":0,"BASE":18}
Eachen SWT-2Gang {"NAME":"ID Components","GPIO":[544,1,1,1,1,161,1,1,160,224,289,225,288,1],"FLAG":0,"BASE":18}
Earda 3-Way {"NAME":"ESW-1WAA-US","GPIO":[160,0,0,0,320,0,0,0,0,224,0,0,0,0],"FLAG":0,"BASE":18}
EJLINK RF433 2 Gang {"NAME":"EJLINK EK02","GPIO":[32,0,0,0,0,225,33,0,224,544,0,0,0,0],"FLAG":0,"BASE":18}
Enjowi WF-SK301 {"NAME":"Tuya 3 Channel","GPIO":[0,0,0,0,226,33,0,0,32,224,34,225,544,0],"FLAG":0,"BASE":18}
Esooli 1 Gang {"NAME":"Esooli 1G","GPIO":[0,288,0,0,0,32,0,0,224,0,0,0,0,0],"FLAG":0,"BASE":1}
Esooli 2 Gang 1 Way {"NAME":"Esooli 2 gang","GPIO":[0,288,0,32,33,0,0,0,0,224,225,0,0,0],"FLAG":0,"BASE":1}
@ -2441,6 +2464,7 @@ Jinvoo SM-SW101-2 {"NAME":"SM-SW101-2","GPIO":[288,0,0,33,225,0,0,0,3
Jinvoo SM-SW101-3 {"NAME":"Jinvoo Wall Sw","GPIO":[288,0,0,33,225,34,0,0,32,224,0,226,0,4704],"FLAG":0,"BASE":18}
KaBuM! 15A 3 Gang Touch {"NAME":"Kabum Switch 3","GPIO":[0,0,0,0,226,33,0,0,32,224,34,225,576,0],"FLAG":0,"BASE":18}
Kauf RGB Wall {"NAME":"Kauf SRF10","GPIO":[448,1,450,1,450,449,1,1,449,32,448,224,1,1],"FLAG":0,"BASE":18}
Ketotek {"NAME":"KETOTEK KTSS1NU","GPIO":[0,0,0,0,0,32,0,0,224,0,0,0,0,0],"FLAG":0,"BASE":18}
KingArt 1 Gang {"NAME":"KING-L1","GPIO":[0,0,0,0,0,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18}
KingArt 3 Gang {"NAME":"KING-L3","GPIO":[0,0,0,0,226,225,0,0,224,164,165,0,167,0],"FLAG":0,"BASE":18}
KMC 70008 {"NAME":"KMC 70008","GPIO":[32,1,1,0,0,1,0,0,0,320,224,1,1,0],"FLAG":0,"BASE":18}
@ -2603,6 +2627,11 @@ Sonoff TX T4 EU No Neutral 1 Gang {"NAME":"Sonoff T4 1CH","GPIO":[32,1,1,1,0,0,
Sonoff TX Ultimate 1 Gang {"NAME":"TX Ultimate 1","GPIO":[0,0,7808,0,7840,3872,0,0,0,1376,0,7776,0,0,224,3232,0,480,3200,0,0,0,3840,0,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":1,"CMND":"Backlog Pixels 28"}
Sonoff TX Ultimate 2 Gang {"NAME":"TX Ultimate 2","GPIO":[0,0,7808,0,7840,3872,0,0,0,1376,0,7776,0,225,224,3232,0,480,3200,0,0,0,3840,0,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":1,"CMND":"Backlog Pixels 28"}
Sonoff TX Ultimate 3 Gang {"NAME":"TX Ultimate 3","GPIO":[0,0,7808,0,7840,3872,0,0,0,1376,0,7776,0,225,224,3232,0,480,3200,0,0,0,3840,226,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":1,"CMND":"Backlog Pixels 28"}
Sonoff TX Ultimate 4 Gang {"NAME":"TX Ultimate 1","GPIO":[0,0,7808,0,7840,3872,0,0,0,1376,0,7776,0,0,224,3232,0,480,3200,0,0,0,3840,0,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":1,"CMND":"Backlog Pixels 28"}
Sonoff TX Ultimate US 1 Gang {"NAME":"TX Ultimate 1","GPIO":[0,0,7808,0,7840,3872,0,0,0,1376,0,7776,0,0,224,3232,0,480,3200,0,0,0,3840,0,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":1,"CMND":"Backlog Pixels 28"}
Sonoff TX Ultimate US 2 Gang {"NAME":"TX Ultimate 2","GPIO":[0,0,7808,0,7840,3872,0,0,0,1376,0,7776,0,225,224,3232,0,480,3200,0,0,0,3840,0,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":1,"CMND":"Backlog Pixels 28"}
Sonoff TX Ultimate US 3 Gang {"NAME":"TX Ultimate 3","GPIO":[0,0,7808,0,7840,3872,0,0,0,1376,0,7776,0,225,224,3232,0,480,3200,0,0,0,3840,226,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":1,"CMND":"Backlog Pixels 28"}
Sonoff TX Ultimate US 4 Gang {"NAME":"TX Ultimate 1","GPIO":[0,0,7808,0,7840,3872,0,0,0,1376,0,7776,0,0,224,3232,0,480,3200,0,0,0,3840,0,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":1,"CMND":"Backlog Pixels 28"}
SPC Hera {"NAME":"SPC HERA","GPIO":[544,0,0,32,224,0,0,0,0,0,288,0,0,0],"FLAG":0,"BASE":18}
SRL 2 Gang {"NAME":"SRL 4WW Switch","GPIO":[0,0,0,0,0,33,0,0,32,224,0,225,0,0],"FLAG":0,"BASE":18}
SRL 4 Gang {"NAME":"SRL 4WW Switch","GPIO":[0,0,0,34,226,33,0,0,32,224,227,225,35,0],"FLAG":0,"BASE":18}
@ -2632,6 +2661,8 @@ TreatLife 3-Way {"NAME":"Treatlife 3-Way","GPIO":[0,0,0,0,224,576,0
TreatLife Single Pole ON/OFF {"NAME":"Treatlife SS02","GPIO":[0,0,0,0,288,576,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18}
Tuya 20A {"NAME":"DS-161","GPIO":[544,0,0,32,0,0,0,0,0,224,288,0,0,0],"FLAG":0,"BASE":1}
Tuya 3 Gang {"NAME":"KING-Tuya-key","GPIO":[0,0,0,0,226,225,0,0,224,32,34,0,33,0],"FLAG":0,"BASE":18}
Tuya T1 2 Gang No Neutral {"NAME":"Tuya T1 Wifi 2 Gang No Neutral Switch","GPIO":[32,0,0,0,0,225,33,0,224,544,0,0,0,0],"FLAG":0,"BASE":18}
Tuya T1 3 Gang No Neutral {"NAME":"Tuya T1 Wifi 3 Gang No Neutral Switch","GPIO":[32,0,0,0,226,225,33,34,224,544,0,0,0,0],"FLAG":0,"BASE":18}
TY-US-L1-W {"NAME":"TY-US-L1-W","GPIO":[0,0,0,0,0,32,0,0,0,224,0,0,576,0],"FLAG":0,"BASE":18}
TY-US-L3-W {"NAME":"TY-US-L3-W","GPIO":[0,0,0,0,224,33,0,0,34,226,32,225,576,1],"FLAG":0,"BASE":18}
Useelink 1 Gang {"NAME":"USEELINK-SW-1G","GPIO":[288,0,0,0,0,0,0,0,32,224,0,0,0,0],"FLAG":0,"BASE":18}
@ -2718,6 +2749,7 @@ Nous 1 Channel Touch {"NAME":"NOUS L1T","GPIO":[544,0,1,32,0,0,0,0,0,224
Nous 1/2 Channel {"NAME":"NOUS L13T Smart Switch Module","GPIO":[1,161,1,160,225,224,1,1,544,1,32,1,1,1],"FLAG":0,"BASE":18}
Nous 2 Channel Touch {"NAME":"NOUS L2T","GPIO":[544,289,1,32,225,33,0,0,0,224,288,0,0,0],"FLAG":0,"BASE":1}
Nova Digital Basic 1 MS101 {"NAME":"NovaDigBasic1","GPIO":[0,1,0,1,320,0,0,0,224,32,0,0,0,0],"FLAG":0,"BASE":18}
ONiOFF Smart Switch {"NAME":"ONOFF SmartSwitch","GPIO":[1,320,1,1,1,32,0,0,224,1,1,0,0,0],"FLAG":0,"BASE":1}
PPA Contatto Wi-Fi {"NAME":"PPA Contatto","GPIO":[0,0,32,0,224,162,0,0,288,225,0,0,0,0],"FLAG":0,"BASE":18}
PS-1604 16A {"NAME":"PS-1604 16A","GPIO":[32,1,1,1,1,0,0,0,224,320,1,0,0,0],"FLAG":0,"BASE":1}
QS-WIFI-S03 {"NAME":"QS-WIFI-S03","GPIO":[32,1,1,1,1,0,0,0,192,224,0,0,0,0],"FLAG":0,"BASE":1}

View File

@ -31,7 +31,7 @@
"flash_extra_images": [
[
"0x10000",
"variants/tasmota/tasmota32-safeboot.bin"
"tasmota32-safeboot.bin"
]
]
},

View File

@ -31,7 +31,7 @@
"flash_extra_images": [
[
"0x10000",
"variants/tasmota/tasmota32-safeboot.bin"
"tasmota32-safeboot.bin"
]
]
},

View File

@ -31,7 +31,7 @@
"flash_extra_images": [
[
"0x10000",
"variants/tasmota/tasmota32solo1-safeboot.bin"
"tasmota32solo1-safeboot.bin"
]
]
},

View File

@ -7,7 +7,7 @@
"extra_flags": "-DESP32_4M -DESP32C2",
"f_cpu": "120000000L",
"f_flash": "60000000L",
"flash_mode": "dio",
"flash_mode": "qio",
"mcu": "esp32c2",
"variant": "esp32c2",
"partitions": "partitions/esp32_partition_app2880k_fs320k.csv"
@ -23,13 +23,13 @@
"arduino",
"espidf"
],
"name": "Espressif Generic ESP32-C2 = 4M Flash",
"name": "Espressif Generic ESP32-C2 = 4M Flash, Tasmota 2880k Code/OTA, 320k FS",
"upload": {
"arduino": {
"flash_extra_images": [
[
"0x10000",
"variants/tasmota/tasmota32c2-safeboot.bin"
"tasmota32c2-safeboot.bin"
]
]
},

View File

@ -7,7 +7,7 @@
"extra_flags": "-DESP32_2M -DESP32C2",
"f_cpu": "120000000L",
"f_flash": "60000000L",
"flash_mode": "dio",
"flash_mode": "qio",
"mcu": "esp32c2",
"variant": "esp32c2",
"partitions": "partitions/esp32_partition_app1245k_fs64k.csv"
@ -29,7 +29,7 @@
"flash_extra_images": [
[
"0x10000",
"variants/tasmota/tasmota32c2-safeboot.bin"
"tasmota32c2-safeboot.bin"
]
]
},

View File

@ -29,7 +29,7 @@
"flash_extra_images": [
[
"0x10000",
"variants/tasmota/tasmota32c3-safeboot.bin"
"tasmota32c3-safeboot.bin"
]
]
},

View File

@ -17,6 +17,10 @@
"bluetooth"
],
"debug": {
"default_tool": "esp-builtin",
"onboard_tools": [
"esp-builtin"
],
"openocd_target": "esp32c3.cfg"
},
"frameworks": [
@ -29,7 +33,7 @@
"flash_extra_images": [
[
"0x10000",
"variants/tasmota/tasmota32c3cdc-safeboot.bin"
"tasmota32c3cdc-safeboot.bin"
]
]
},
@ -37,7 +41,6 @@
"maximum_ram_size": 327680,
"maximum_size": 4194304,
"require_upload_port": true,
"before_reset": "usb_reset",
"speed": 460800
},
"url": "https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/hw-reference/esp32c3/user-guide-devkitm-1.html",

View File

@ -29,7 +29,7 @@
"flash_extra_images": [
[
"0x10000",
"variants/tasmota/tasmota32c6-safeboot.bin"
"tasmota32c6-safeboot.bin"
]
]
},

View File

@ -17,6 +17,10 @@
"bluetooth"
],
"debug": {
"default_tool": "esp-builtin",
"onboard_tools": [
"esp-builtin"
],
"openocd_target": "esp32c6.cfg"
},
"frameworks": [
@ -29,7 +33,7 @@
"flash_extra_images": [
[
"0x10000",
"variants/tasmota/tasmota32c6cdc-safeboot.bin"
"tasmota32c6cdc-safeboot.bin"
]
]
},
@ -37,7 +41,6 @@
"maximum_ram_size": 327680,
"maximum_size": 4194304,
"require_upload_port": true,
"before_reset": "usb_reset",
"speed": 460800
},
"url": "https://docs.espressif.com/projects/espressif-esp-dev-kits/en/latest/esp32c6/esp32-c6-devkitc-1/index.html",

View File

@ -28,7 +28,7 @@
"flash_extra_images": [
[
"0x10000",
"variants/tasmota/tasmota32s2-safeboot.bin"
"tasmota32s2-safeboot.bin"
]
]
},

View File

@ -28,7 +28,7 @@
"flash_extra_images": [
[
"0x10000",
"variants/tasmota/tasmota32s2cdc-safeboot.bin"
"tasmota32s2cdc-safeboot.bin"
]
]
},
@ -37,7 +37,6 @@
"maximum_size": 4194304,
"require_upload_port": true,
"before_reset": "usb_reset",
"after_reset": "no_reset",
"speed": 460800
},
"url": "https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/hw-reference/esp32s2/user-guide-saola-1-v1.2.html",

View File

@ -0,0 +1,46 @@
{
"build": {
"arduino":{
"ldscript": "esp32s3_out.ld",
"memory_type": "opi_opi"
},
"core": "esp32",
"extra_flags": "-DBOARD_HAS_PSRAM -DESP32_4M -DESP32S3",
"f_cpu": "240000000L",
"f_flash": "80000000L",
"flash_mode": "dout",
"mcu": "esp32s3",
"variant": "esp32s3",
"partitions": "partitions/esp32_partition_app2880k_fs320k.csv"
},
"connectivity": [
"wifi",
"bluetooth",
"ethernet"
],
"debug": {
"openocd_target": "esp32s3.cfg"
},
"frameworks": [
"espidf",
"arduino"
],
"name": "Espressif Generic ESP32-S3 >= 4M OPI Flash + PSRAM, Tasmota 2880k Code/OTA, 320k FS",
"upload": {
"arduino": {
"flash_extra_images": [
[
"0x10000",
"tasmota32s3-safeboot.bin"
]
]
},
"flash_size": "4MB",
"maximum_ram_size": 327680,
"maximum_size": 4194304,
"require_upload_port": true,
"speed": 460800
},
"url": "https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/hw-reference/esp32s3/",
"vendor": "Espressif"
}

View File

@ -31,7 +31,7 @@
"flash_extra_images": [
[
"0x10000",
"variants/tasmota/tasmota32s3-safeboot.bin"
"tasmota32s3-safeboot.bin"
]
]
},

View File

@ -31,7 +31,7 @@
"flash_extra_images": [
[
"0x10000",
"variants/tasmota/tasmota32s3-safeboot.bin"
"tasmota32s3-safeboot.bin"
]
]
},

View File

@ -0,0 +1,56 @@
{
"build": {
"arduino":{
"ldscript": "esp32s3_out.ld",
"memory_type": "opi_opi"
},
"core": "esp32",
"extra_flags": "-DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_4M -DESP32S3",
"f_cpu": "240000000L",
"f_flash": "80000000L",
"flash_mode": "dout",
"hwids": [
[
"0x303A",
"0x1001"
]
],
"mcu": "esp32s3",
"variant": "esp32s3",
"partitions": "partitions/esp32_partition_app2880k_fs320k.csv"
},
"connectivity": [
"wifi",
"bluetooth",
"ethernet"
],
"debug": {
"default_tool": "esp-builtin",
"onboard_tools": [
"esp-builtin"
],
"openocd_target": "esp32s3.cfg"
},
"frameworks": [
"espidf",
"arduino"
],
"name": "Espressif Generic ESP32-S3 >= 4M OPI Flash + PSRAM, Tasmota 2880k Code/OTA, 320k FS",
"upload": {
"arduino": {
"flash_extra_images": [
[
"0x10000",
"tasmota32s3cdc-safeboot.bin"
]
]
},
"flash_size": "4MB",
"maximum_ram_size": 327680,
"maximum_size": 4194304,
"require_upload_port": true,
"speed": 460800
},
"url": "https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/hw-reference/esp32s3/",
"vendor": "Espressif"
}

View File

@ -41,7 +41,7 @@
"flash_extra_images": [
[
"0x10000",
"variants/tasmota/tasmota32s3cdc-safeboot.bin"
"tasmota32s3cdc-safeboot.bin"
]
]
},
@ -49,7 +49,6 @@
"maximum_ram_size": 327680,
"maximum_size": 4194304,
"require_upload_port": true,
"before_reset": "usb_reset",
"speed": 460800
},
"url": "https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/hw-reference/esp32s3/",

View File

@ -41,7 +41,7 @@
"flash_extra_images": [
[
"0x10000",
"variants/tasmota/tasmota32s3cdc-safeboot.bin"
"tasmota32s3cdc-safeboot.bin"
]
]
},
@ -49,7 +49,6 @@
"maximum_ram_size": 327680,
"maximum_size": 4194304,
"require_upload_port": true,
"before_reset": "usb_reset",
"speed": 460800
},
"url": "https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/hw-reference/esp32s3/",

View File

@ -58,38 +58,15 @@
#define FSPI_HOST SPI2_HOST
#define HSPI_HOST SPI3_HOST
#define VSPI_HOST SPI3_HOST
#ifndef REG_SPI_BASE
#define REG_SPI_BASE(i) (DR_REG_SPI1_BASE + (((i)>1) ? (((i)* 0x1000) + 0x20000) : (((~(i)) & 1)* 0x1000 )))
// SPI_MOSI_DLEN_REG is not defined anymore in esp32s3, instead use SPI_MS_DLEN_REG
// SPI_MOSI_DLEN_REG is not defined anymore in esp32s3
#define SPI_MOSI_DLEN_REG(x) SPI_MS_DLEN_REG(x)
#endif // REG_SPI_BASE
#elif CONFIG_IDF_TARGET_ESP32C3
#elif CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6
#define SPI_HOST SPI1_HOST
#define HSPI_HOST SPI2_HOST
#define VSPI_HOST SPI2_HOST /* No SPI3_host on C3 */
#if ESP_IDF_VERSION_MAJOR < 5
// fix a bug in esp-idf 4.4 for esp32c3
#ifndef REG_SPI_BASE
#define REG_SPI_BASE(i) (DR_REG_SPI1_BASE + (((i)>1) ? (((i)* 0x1000) + 0x20000) : (((~(i)) & 1)* 0x1000 )))
// SPI_MOSI_DLEN_REG is not defined anymore in esp32c3, instead use SPI_MS_DLEN_REG
#define SPI_MOSI_DLEN_REG(x) SPI_MS_DLEN_REG(x)
#endif // REG_SPI_BASE
#endif //ESP_IDF_VERSION_MAJOR < 5
#elif CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C6
#define SPI_HOST SPI1_HOST
#define HSPI_HOST SPI1_HOST /* No SPI2_host on C2/C6 */
#define VSPI_HOST SPI1_HOST /* No SPI3_host on C2/C6 */
#define VSPI_HOST SPI2_HOST /* No SPI3_host on C2/C6 */
#define VSPI SPI
// #if ESP_IDF_VERSION_MAJOR < 5
// // fix a bug in esp-idf 4.4 for esp32c3
// #ifndef REG_SPI_BASE
// #define REG_SPI_BASE(i) (DR_REG_SPI1_BASE + (((i)>1) ? (((i)* 0x1000) + 0x20000) : (((~(i)) & 1)* 0x1000 )))
// // SPI_MOSI_DLEN_REG is not defined anymore in esp32c3, instead use SPI_MS_DLEN_REG
// SPI_MOSI_DLEN_REG is not defined anymore
#define SPI_MOSI_DLEN_REG(x) SPI_MS_DLEN_REG(x)
// #endif // REG_SPI_BASE
// #endif //ESP_IDF_VERSION_MAJOR < 5
#endif // TARGET

View File

@ -8,7 +8,7 @@ Automatic payload encryption is applied using the WiFi-password1 as the key. A m
As ACK/NACK messages seem to be not reliable on both ESP-platforms, the method "send-and-pray" is used.
## Working priciple
## Working principle
An ESP32 is needed as gateway/broker to connect the nodes (typically an ESP8266) to the WLAN. The ESP32 will receive the MQTT-topic of every node and subscribe to it as a proxy.
If a MQTT-message in the form of 'cmnd/node_topic/...' is received, the broker will automatically send this to the referring node via ESP-NOW.

View File

@ -248,8 +248,8 @@ static void USE_IRAM_ATTR gpio_intr() {
timer->dev->config.alarm_en = 1;
#else // _ESP32_IRRECV_TIMER_HACK
#if ( defined(ESP_ARDUINO_VERSION_MAJOR) && (ESP_ARDUINO_VERSION_MAJOR >= 3) )
timerAlarm(timer, MS_TO_USEC(params.timeout), ONCE, 0);
timerAttachInterrupt(timer, &read_timeout);
timerWrite(timer, 0);
timerStart(timer);
#else // ESP_ARDUINO_VERSION_MAJOR >= 3
timerWrite(timer, 0);
timerAlarmEnable(timer);
@ -344,7 +344,10 @@ IRrecv::IRrecv(const uint16_t recvpin, const uint16_t bufsize,
IRrecv::~IRrecv(void) {
disableIRIn();
#if defined(ESP32)
if (timer != NULL) timerEnd(timer); // Cleanup the ESP32 timeout timer.
if (timer != NULL) {
timerEnd(timer); // Cleanup the ESP32 timeout timer.
timer = NULL;
}
#endif // ESP32
delete[] params.rawbuf;
if (params_save != NULL) {
@ -370,9 +373,9 @@ void IRrecv::enableIRIn(const bool pullup) {
// Initialise the ESP32 timer.
// 80MHz / 80 = 1 uSec granularity.
#if ( defined(ESP_ARDUINO_VERSION_MAJOR) && (ESP_ARDUINO_VERSION_MAJOR >= 3) )
timer = timerBegin(80);
timer = timerBegin(1000000); // 1 MHz
#else // ESP_ARDUINO_VERSION_MAJOR >= 3
timer = timerBegin(_timer_num, 80, true);
timer = timerBegin(_timer_num, 80, true); // 1 MHz : 80 MHz with divider 80
#endif // ESP_ARDUINO_VERSION_MAJOR >= 3
#ifdef DEBUG
if (timer == NULL) {
@ -382,8 +385,8 @@ void IRrecv::enableIRIn(const bool pullup) {
#endif // DEBUG
assert(timer != NULL); // Check we actually got the timer.
#if ( defined(ESP_ARDUINO_VERSION_MAJOR) && (ESP_ARDUINO_VERSION_MAJOR >= 3) )
timerAlarm(timer, MS_TO_USEC(params.timeout), ONCE, 0);
timerAttachInterrupt(timer, &read_timeout);
timerAlarm(timer, MS_TO_USEC(params.timeout), ONCE, 0);
#else // ESP_ARDUINO_VERSION_MAJOR >= 3
// Set the timer so it only fires once, and set it's trigger in uSeconds.
timerAlarmWrite(timer, MS_TO_USEC(params.timeout), ONCE);
@ -418,6 +421,7 @@ void IRrecv::disableIRIn(void) {
#endif // ESP8266
#if defined(ESP32)
#if ( defined(ESP_ARDUINO_VERSION_MAJOR) && (ESP_ARDUINO_VERSION_MAJOR >= 3) )
timerDetachInterrupt(timer);
timerEnd(timer);
#else // ESP_ARDUINO_VERSION_MAJOR >= 3
timerAlarmDisable(timer);
@ -450,7 +454,7 @@ void IRrecv::resume(void) {
params.overflow = false;
#if defined(ESP32)
#if ( defined(ESP_ARDUINO_VERSION_MAJOR) && (ESP_ARDUINO_VERSION_MAJOR >= 3) )
timerEnd(timer);
timerStop(timer);
#else // ESP_ARDUINO_VERSION_MAJOR >= 3
timerAlarmDisable(timer);
#endif // ESP_ARDUINO_VERSION_MAJOR >= 3

View File

@ -513,7 +513,7 @@ public:
rmt_tx_channel_config_t config = {};
config.clk_src = RMT_CLK_SRC_DEFAULT;
config.gpio_num = static_cast<gpio_num_t>(_pin);
config.mem_block_symbols = 64; // memory block size, 64 * 4 = 256 Bytes
config.mem_block_symbols = 192; // memory block size, 64 * 4 = 256 Bytes
config.resolution_hz = RMT_LED_STRIP_RESOLUTION_HZ; // 1 MHz tick resolution, i.e., 1 tick = 1 µs
config.trans_queue_depth = 4; // set the number of transactions that can pend in the background
config.flags.invert_out = false; // do not invert output signal
@ -529,7 +529,9 @@ public:
// ESP_LOGI(TAG, "Enable RMT TX channel");
ret += rmt_enable(_channel.RmtChannelNumber);
AddLog(2,"RMT:initialized with error code: %u on pin: %u",ret, _pin);
// if (ret) {
// AddLog(2,"RMT: initialized with error code: %u on pin: %u",ret, _pin);
// }
}
void Update(bool maintainBufferConsistency)

View File

@ -328,8 +328,9 @@ public:
_spi_strip->bytes_per_pixel = bytes_per_pixel;
_spi_strip->strip_len = _pixelCount;
AddLog(2,"SPI:initialized with error code: %u on pin: %u",ret, _pin);
// if (ret) {
// AddLog(2,"SPI: initialized with error code: %u on pin: %u",ret, _pin);
// }
return;
err:
if (_spi_strip) {
@ -341,7 +342,9 @@ public:
}
free(_spi_strip);
}
AddLog(2,"SPI-Error:initialized with error code: %u on pin: %u",ret, _pin);
// if (ret) {
// AddLog(2,"SPI-Error:initialized with error code: %u on pin: %u",ret, _pin);
// }
return;
}

Binary file not shown.

View File

@ -206,8 +206,10 @@ be_extern_native_class(AXP192);
be_extern_native_class(AXP202);
be_extern_native_class(OneWire);
be_extern_native_class(Leds_ntv);
be_extern_native_class(Leds_frame);
be_extern_native_class(Leds);
be_extern_native_class(Leds_animator);
be_extern_native_class(Leds_pulse);
be_extern_native_class(AudioGenerator);
be_extern_native_class(AudioFileSource);
be_extern_native_class(AudioOutputI2S);
@ -276,7 +278,9 @@ BERRY_LOCAL bclass_array be_class_table = {
#ifdef USE_WS2812
&be_native_class(Leds_ntv),
&be_native_class(Leds),
&be_native_class(Leds_frame),
&be_native_class(Leds_animator),
&be_native_class(Leds_pulse),
#endif // USE_WS2812
#ifdef USE_ENERGY_SENSOR
&be_native_class(energy_struct),

View File

@ -596,6 +596,24 @@ void load_global_info(bvm *vm, void *fp)
be_global_release_space(vm);
}
bclosure* be_bytecode_load_from_fs(bvm *vm, void *fp)
{
int version = load_head(fp);
if (version == BYTECODE_VERSION) {
bclosure *cl = be_newclosure(vm, 0);
var_setclosure(vm->top, cl);
be_stackpush(vm);
load_global_info(vm, fp);
load_proto(vm, fp, &cl->proto, -1, version);
be_stackpop(vm, 2); /* pop the closure and list */
be_fclose(fp);
return cl;
}
bytecode_error(vm, be_pushfstring(vm,
"invalid bytecode version."));
return NULL;
}
bclosure* be_bytecode_load(bvm *vm, const char *filename)
{
void *fp = be_fopen(filename, "rb");
@ -603,22 +621,9 @@ bclosure* be_bytecode_load(bvm *vm, const char *filename)
bytecode_error(vm, be_pushfstring(vm,
"can not open file '%s'.", filename));
} else {
int version = load_head(fp);
if (version == BYTECODE_VERSION) {
bclosure *cl = be_newclosure(vm, 0);
var_setclosure(vm->top, cl);
be_stackpush(vm);
load_global_info(vm, fp);
load_proto(vm, fp, &cl->proto, -1, version);
be_stackpop(vm, 2); /* pop the closure and list */
be_fclose(fp);
return cl;
}
bytecode_error(vm, be_pushfstring(vm,
"invalid bytecode version '%s'.", filename));
return be_bytecode_load_from_fs(vm, fp);
}
bytecode_error(vm, be_pushfstring(vm,
"invalid bytecode file '%s'.", filename));
return NULL;
}
#endif /* BE_USE_BYTECODE_LOADER */

View File

@ -12,6 +12,7 @@
void be_bytecode_save(bvm *vm, const char *filename, bproto *proto);
bclosure* be_bytecode_load(bvm *vm, const char *filename);
bclosure* be_bytecode_load_from_fs(bvm *vm, void *fp);
bbool be_bytecode_check(const char *path);
#endif

View File

@ -364,7 +364,7 @@ static uint32_t buf_get3_le(buf_impl* attr, size_t offset)
return 0;
}
static uint16_t buf_get3_be(buf_impl* attr, size_t offset)
static uint32_t buf_get3_be(buf_impl* attr, size_t offset)
{
if ((int32_t)offset + 2 < attr->len) {
return attr->bufptr[offset+2] | (attr->bufptr[offset+1] << 8) | (attr->bufptr[offset] << 16);

View File

@ -478,11 +478,7 @@ static int exp2reg(bfuncinfo *finfo, bexpdesc *e, int dst)
reg = e->v.idx;
} else {
/* otherwise, we allocate a new register or use the target provided */
if (dst < 0) {
reg = be_code_allocregs(finfo, 1);
} else {
reg = dst;
}
reg = (dst < 0) ? be_code_allocregs(finfo, 1) : dst;
}
be_code_conjump(finfo, &e->t, jpt);
pcf = code_bool(finfo, reg, 0, 1);
@ -690,16 +686,20 @@ static void setsfxvar(bfuncinfo *finfo, bopcode op, bexpdesc *e1, int src)
/* Assign expr e2 to e1 */
/* e1 must be in a register and have a valid idx */
/* if `keep_reg` is true, do not release registre */
/* if `keep_reg` is true, do not release register */
/* return 1 if assignment was possible, 0 if type is not compatible */
int be_code_setvar(bfuncinfo *finfo, bexpdesc *e1, bexpdesc *e2, bbool keep_reg)
{
/* free_e2 indicates special case where ETINDEX or ETMEMBER need to be freed if top of registers */
bbool free_e2 = (e2->type == ETINDEX || e2->type == ETMEMBER) && (e2->v.ss.idx != e1->v.idx) && (e2->v.ss.idx == finfo->freereg - 1);
int src = exp2reg(finfo, e2,
e1->type == ETLOCAL ? e1->v.idx : -1); /* Convert e2 to kreg */
/* If e1 is a local variable, use the register */
if (!keep_reg && (e1->type != ETLOCAL || e1->v.idx != src)) {
free_expreg(finfo, e2); /* free source (checks only ETREG) */ /* TODO e2 is at top */
} else if (!keep_reg && free_e2) {
be_code_freeregs(finfo, 1);
}
switch (e1->type) {
case ETLOCAL: /* It can't be ETREG. */

View File

@ -84,6 +84,19 @@ static int m_codedump(bvm *vm)
be_return_nil(vm);
}
static int m_gcdebug(bvm *vm) {
int argc = be_top(vm);
if (argc >= 1 && be_isbool(vm, 1)) {
if (be_tobool(vm, 1)) {
comp_set_gc_debug(vm);
} else {
comp_clear_gc_debug(vm);
}
}
be_pushbool(vm, comp_is_gc_debug(vm));
be_return(vm);
}
static int m_traceback(bvm *vm)
{
be_tracestack(vm);
@ -223,6 +236,7 @@ be_native_module_attr_table(debug) {
be_native_module_function("varname", m_varname),
be_native_module_function("upvname", m_upvname)
#endif
be_native_module_function("gcdebug", m_gcdebug)
};
be_define_native_module(debug, NULL);
@ -242,6 +256,8 @@ module debug (scope: global, depend: BE_USE_DEBUG_MODULE) {
allocs, func(m_allocs)
frees, func(m_frees)
reallocs, func(m_reallocs)
// GC debug mode
gcdebug, func(m_gcdebug)
}
@const_object_info_end */
#include "../generate/be_fixed_debug.h"

View File

@ -545,15 +545,9 @@ static void reset_fixedlist(bvm *vm)
void be_gc_auto(bvm *vm)
{
#if BE_USE_DEBUG_GC
if (vm->gc.status & GC_PAUSE) { /* force gc each time it's possible */
if (vm->gc.status & GC_PAUSE && (BE_USE_DEBUG_GC || vm->gc.usage > vm->gc.threshold || comp_is_gc_debug(vm))) {
be_gc_collect(vm);
}
#else
if (vm->gc.status & GC_PAUSE && vm->gc.usage > vm->gc.threshold) {
be_gc_collect(vm);
}
#endif
}
size_t be_gc_memcount(bvm *vm)

View File

@ -260,6 +260,7 @@ static void skip_comment(blexer *lexer)
{
next(lexer); /* skip '#' */
if (lgetc(lexer) == '-') { /* mult-line comment */
int lno = lexer->linenumber;
int mark, c = 'x'; /* skip first '-' (#- ... -#) */
do {
mark = c == '-';
@ -269,6 +270,9 @@ static void skip_comment(blexer *lexer)
}
c = next(lexer);
} while (!(mark && c == '#') && c != EOS);
if (c == EOS) {
be_lexerror(lexer, be_pushfstring(lexer->vm, "unterminated comment block started in line %d", lno));
}
next(lexer); /* skip '#' */
} else { /* line comment */
while (!is_newline(lgetc(lexer)) && lgetc(lexer)) {

View File

@ -73,9 +73,9 @@ BERRY_API void* be_realloc(bvm *vm, void *ptr, size_t old_size, size_t new_size)
vm->counter_mem_free++;
#endif
if (ptr == NULL) { return NULL; } /* safeguard */
#if BE_USE_DEBUG_GC
memset(ptr, 0xFF, old_size); /* fill the structure with invalid pointers */
#endif
if (BE_USE_DEBUG_GC || comp_is_gc_debug(vm)) {
memset(ptr, 0xFF, old_size); /* fill the structure with invalid pointers */
}
free_from_pool(vm, ptr, old_size);
break; /* early exit */
}

View File

@ -268,13 +268,13 @@ void be_gcstrtab(bvm *vm)
}
}
}
#if BE_USE_DEBUG_GC == 0
if (tab->count < size >> 2 && size > 8) {
resize(vm, size >> 1);
if (BE_USE_DEBUG_GC || comp_is_gc_debug(vm)) {
resize(vm, tab->count + 4);
} else {
if (tab->count < size >> 2 && size > 8) {
resize(vm, size >> 1);
}
}
#else
resize(vm, tab->count + 4);
#endif
}
uint32_t be_strhash(const bstring *s)

View File

@ -671,8 +671,17 @@ newframe: /* a new call frame */
if (var_isint(a) && var_isint(b)) {
var_setint(dst, ibinop(-, a, b));
} else if (var_isnumber(a) && var_isnumber(b)) {
#if CONFIG_IDF_TARGET_ESP32 /* when running on ESP32 in IRAM, there is a bug in early chip revision */
union bvaldata x, y; // TASMOTA workaround for ESP32 rev0 bug
x.i = a->v.i;
if (var_isint(a)) { x.r = (breal) x.i; }
y.i = b->v.i;
if (var_isint(b)) { y.r = (breal) y.i; }
var_setreal(dst, x.r - y.r);
#else // CONFIG_IDF_TARGET_ESP32
breal x = var2real(a), y = var2real(b);
var_setreal(dst, x - y);
#endif // CONFIG_IDF_TARGET_ESP32
} else if (var_isinstance(a)) {
ins_binop(vm, "-", ins);
} else {
@ -685,8 +694,17 @@ newframe: /* a new call frame */
if (var_isint(a) && var_isint(b)) {
var_setint(dst, ibinop(*, a, b));
} else if (var_isnumber(a) && var_isnumber(b)) {
#if CONFIG_IDF_TARGET_ESP32 /* when running on ESP32 in IRAM, there is a bug in early chip revision */
union bvaldata x, y; // TASMOTA workaround for ESP32 rev0 bug
x.i = a->v.i;
if (var_isint(a)) { x.r = (breal) x.i; }
y.i = b->v.i;
if (var_isint(b)) { y.r = (breal) y.i; }
var_setreal(dst, x.r * y.r);
#else // CONFIG_IDF_TARGET_ESP32
breal x = var2real(a), y = var2real(b);
var_setreal(dst, x * y);
#endif // CONFIG_IDF_TARGET_ESP32
} else if (var_isinstance(a)) {
ins_binop(vm, "*", ins);
} else {
@ -704,11 +722,23 @@ newframe: /* a new call frame */
var_setint(dst, x / y);
}
} else if (var_isnumber(a) && var_isnumber(b)) {
#if CONFIG_IDF_TARGET_ESP32 /* when running on ESP32 in IRAM, there is a bug in early chip revision */
union bvaldata x, y; // TASMOTA workaround for ESP32 rev0 bug
x.i = a->v.i;
if (var_isint(a)) { x.r = (breal) x.i; }
y.i = b->v.i;
if (var_isint(b)) { y.r = (breal) y.i; }
if (y.r == cast(breal, 0)) {
vm_error(vm, "divzero_error", "division by zero");
}
var_setreal(dst, x.r / y.r);
#else // CONFIG_IDF_TARGET_ESP32
breal x = var2real(a), y = var2real(b);
if (y == cast(breal, 0)) {
vm_error(vm, "divzero_error", "division by zero");
}
var_setreal(dst, x / y);
#endif // CONFIG_IDF_TARGET_ESP32
} else if (var_isinstance(a)) {
ins_binop(vm, "/", ins);
} else {
@ -721,7 +751,16 @@ newframe: /* a new call frame */
if (var_isint(a) && var_isint(b)) {
var_setint(dst, ibinop(%, a, b));
} else if (var_isnumber(a) && var_isnumber(b)) {
#if CONFIG_IDF_TARGET_ESP32 /* when running on ESP32 in IRAM, there is a bug in early chip revision */
union bvaldata x, y; // TASMOTA workaround for ESP32 rev0 bug
x.i = a->v.i;
if (var_isint(a)) { x.r = (breal) x.i; }
y.i = b->v.i;
if (var_isint(b)) { y.r = (breal) y.i; }
var_setreal(dst, mathfunc(fmod)(x.r, y.r));
#else // CONFIG_IDF_TARGET_ESP32
var_setreal(dst, mathfunc(fmod)(var_toreal(a), var_toreal(b)));
#endif // CONFIG_IDF_TARGET_ESP32
} else if (var_isinstance(a)) {
ins_binop(vm, "%", ins);
} else {

View File

@ -14,14 +14,19 @@
#define comp_set_named_gbl(vm) ((vm)->compopt |= (1<<COMP_NAMED_GBL))
#define comp_clear_named_gbl(vm) ((vm)->compopt &= ~(1<<COMP_NAMED_GBL))
#define comp_is_strict(vm) ((vm)->compopt & (1<<COMP_STRICT))
#define comp_set_strict(vm) ((vm)->compopt |= (1<<COMP_STRICT))
#define comp_clear_strict(vm) ((vm)->compopt &= ~(1<<COMP_STRICT))
#define comp_is_strict(vm) ((vm)->compopt & (1<<COMP_STRICT))
#define comp_set_strict(vm) ((vm)->compopt |= (1<<COMP_STRICT))
#define comp_clear_strict(vm) ((vm)->compopt &= ~(1<<COMP_STRICT))
#define comp_is_gc_debug(vm) ((vm)->compopt & (1<<COMP_GC_DEBUG))
#define comp_set_gc_debug(vm) ((vm)->compopt |= (1<<COMP_GC_DEBUG))
#define comp_clear_gc_debug(vm) ((vm)->compopt &= ~(1<<COMP_GC_DEBUG))
/* Compilation options */
typedef enum {
COMP_NAMED_GBL = 0x00, /* compile with named globals */
COMP_STRICT = 0x01, /* compile with named globals */
COMP_NAMED_GBL = 0x00, /* compile with named globals */
COMP_STRICT = 0x01, /* compile with named globals */
COMP_GC_DEBUG = 0x02, /* compile with gc debug */
} compoptmask;
typedef struct {

View File

@ -57,3 +57,24 @@ assert(s == "foo")
def f(a,b) return b end
l = [1,2,3,4]
assert(f(l[-1],l[-2]) == 3)
# Compilation problem:
# def test()
# var line = '1234567890'
# line = line[3..7]
# # print(line)
# for n : 1..2 end
# end
# test()
# BRY: Exception> 'attribute_error' - the 'range' object has no method '()'
# stack traceback:
# :5: in function `test`
# :7: in function `main`
def test()
var line = '1234567890'
line = line[3..7]
# print(line)
for n : 1..2 end
end
test()

View File

@ -104,7 +104,7 @@ class coc_parser:
return r[0]
def parse_object(self):
self.text = re.sub("\s+//.*?$", "", self.text, flags=re.MULTILINE) # remove trailing comments
self.text = re.sub(r"\s+//.*?$", "", self.text, flags=re.MULTILINE) # remove trailing comments
while True:
obj = self.parse_block()
self.objects.append(obj)

View File

@ -204,39 +204,41 @@ extern const bclass be_class_Matter_TLV; // need to declare it upfront because
#include "solidify/solidified_Matter_Plugin_0.h"
#include "solidify/solidified_Matter_Base38.h"
#include "solidify/solidified_Matter_UI.h"
#include "solidify/solidified_Matter_Device.h"
#include "solidify/solidified_Matter_Profiler.h"
#include "../generate/be_matter_certs.h"
#include "solidify/solidified_Matter_Plugin_1_Root.h"
#include "solidify/solidified_Matter_Plugin_2_Aggregator.h"
#include "solidify/solidified_Matter_Plugin_1_Aggregator.h"
#include "solidify/solidified_Matter_Plugin_1_Device.h"
#include "solidify/solidified_Matter_Plugin_2_OnOff.h"
#include "solidify/solidified_Matter_Plugin_9_Virt_OnOff.h"
#include "solidify/solidified_Matter_Plugin_2_Light0.h"
#include "solidify/solidified_Matter_Plugin_3_Light0.h"
#include "solidify/solidified_Matter_Plugin_9_Virt_Light0.h"
#include "solidify/solidified_Matter_Plugin_3_Light1.h"
#include "solidify/solidified_Matter_Plugin_2_Light1.h"
#include "solidify/solidified_Matter_Plugin_9_Virt_Light1.h"
#include "solidify/solidified_Matter_Plugin_4_Light2.h"
#include "solidify/solidified_Matter_Plugin_3_Light2.h"
#include "solidify/solidified_Matter_Plugin_9_Virt_Light2.h"
#include "solidify/solidified_Matter_Plugin_4_Light3.h"
#include "solidify/solidified_Matter_Plugin_3_Light3.h"
#include "solidify/solidified_Matter_Plugin_9_Virt_Light3.h"
#include "solidify/solidified_Matter_Plugin_2_Shutter.h"
#include "solidify/solidified_Matter_Plugin_3_ShutterTilt.h"
#include "solidify/solidified_Matter_Plugin_2_Sensor.h"
#include "solidify/solidified_Matter_Plugin_3_Sensor_Pressure.h"
#include "solidify/solidified_Matter_Plugin_3_Sensor_Flow.h"
#include "solidify/solidified_Matter_Plugin_9_Virt_Sensor_Pressure.h"
#include "solidify/solidified_Matter_Plugin_9_Virt_Sensor_Flow.h"
#include "solidify/solidified_Matter_Plugin_3_Sensor_Temp.h"
#include "solidify/solidified_Matter_Plugin_9_Virt_Sensor_Temp.h"
#include "solidify/solidified_Matter_Plugin_3_Sensor_Illuminance.h"
#include "solidify/solidified_Matter_Plugin_9_Virt_Sensor_Illuminance.h"
#include "solidify/solidified_Matter_Plugin_3_Sensor_Humidity.h"
#include "solidify/solidified_Matter_Plugin_9_Virt_Sensor_Humidity.h"
#include "solidify/solidified_Matter_Plugin_3_Sensor_Occupancy.h"
#include "solidify/solidified_Matter_Plugin_3_Sensor_OnOff.h"
#include "solidify/solidified_Matter_Plugin_3_Sensor_Contact.h"
#include "solidify/solidified_Matter_Plugin_2_Sensor_Occupancy.h"
#include "solidify/solidified_Matter_Plugin_2_Sensor_OnOff.h"
#include "solidify/solidified_Matter_Plugin_2_Sensor_Contact.h"
#include "solidify/solidified_Matter_Plugin_9_Virt_Sensor_Contact.h"
#include "solidify/solidified_Matter_Plugin_9_Virt_Sensor_Occupancy.h"
#include "solidify/solidified_Matter_Plugin_2_Bridge_HTTP.h"
#include "solidify/solidified_Matter_Plugin_4_Bridge_OnOff.h"
#include "solidify/solidified_Matter_Plugin_3_Bridge_Light0.h"
@ -248,8 +250,11 @@ extern const bclass be_class_Matter_TLV; // need to declare it upfront because
#include "solidify/solidified_Matter_Plugin_4_Bridge_Sensor_Temp.h"
#include "solidify/solidified_Matter_Plugin_4_Bridge_Sensor_Illuminance.h"
#include "solidify/solidified_Matter_Plugin_4_Bridge_Sensor_Humidity.h"
#include "solidify/solidified_Matter_Plugin_4_Bridge_Sensor_Occupancy.h"
#include "solidify/solidified_Matter_Plugin_4_Bridge_Sensor_Contact.h"
#include "solidify/solidified_Matter_Plugin_3_Bridge_Sensor_Occupancy.h"
#include "solidify/solidified_Matter_Plugin_3_Bridge_Sensor_Contact.h"
#include "solidify/solidified_Matter_Plugin_4_Bridge_Sensor_Flow.h"
#include "solidify/solidified_Matter_Plugin_z_All.h"
#include "solidify/solidified_Matter_zz_Device.h"
/*********************************************************************************************\
* Get a bytes() object of the certificate DAC/PAI_Cert
@ -429,48 +434,10 @@ module matter (scope: global, strings: weak) {
DAC_Priv_FFF1_8000, func(matter_DAC_Priv_FFF1_8000)
CD_FFF1_8000, func(matter_CD_FFF1_8000) // Certification Declaration
// Plugins
// Plugins - only the core classes, all others are taken from `matter_device.plugins_classes`
Plugin_Root, class(be_class_Matter_Plugin_Root) // Generic behavior common to all devices
Plugin_Aggregator, class(be_class_Matter_Plugin_Aggregator) // Aggregator
Plugin_Device, class(be_class_Matter_Plugin_Device) // Generic device (abstract)
Plugin_OnOff, class(be_class_Matter_Plugin_OnOff) // Relay/Light behavior (OnOff)
Plugin_Virt_OnOff, class(be_class_Matter_Plugin_Virt_OnOff) // Relay/Light virtual (OnOff)
Plugin_Light0, class(be_class_Matter_Plugin_Light0) // OnOff Light
Plugin_Virt_Light0, class(be_class_Matter_Plugin_Virt_Light0) // OnOff Light Virtual
Plugin_Light1, class(be_class_Matter_Plugin_Light1) // Dimmable Light
Plugin_Virt_Light1, class(be_class_Matter_Plugin_Virt_Light1) // Dimmable Light Virtual
Plugin_Light2, class(be_class_Matter_Plugin_Light2) // Color Temperature Light
Plugin_Virt_Light2, class(be_class_Matter_Plugin_Virt_Light2) // Color Temperature Light Virtual
Plugin_Light3, class(be_class_Matter_Plugin_Light3) // Extended Color Light
Plugin_Virt_Light3, class(be_class_Matter_Plugin_Virt_Light3) // Extended Color Light Virtual
Plugin_Shutter, class(be_class_Matter_Plugin_Shutter) // Shutter
Plugin_ShutterTilt, class(be_class_Matter_Plugin_ShutterTilt) // Shutter + Tilt
Plugin_Sensor, class(be_class_Matter_Plugin_Sensor) // Generic Sensor
Plugin_Sensor_Pressure, class(be_class_Matter_Plugin_Sensor_Pressure) // Pressure Sensor
Plugin_Sensor_Virt_Pressure, class(be_class_Matter_Plugin_Virt_Sensor_Pressure) // Pressure Virtual Sensor
Plugin_Sensor_Temp, class(be_class_Matter_Plugin_Sensor_Temp) // Temperature Sensor
Plugin_Virt_Sensor_Temp, class(be_class_Matter_Plugin_Virt_Sensor_Temp) // Temperature Sensor
Plugin_Sensor_Illuminance, class(be_class_Matter_Plugin_Sensor_Illuminance) // Illuminance Sensor
Plugin_Virt_Sensor_Illuminance, class(be_class_Matter_Plugin_Virt_Sensor_Illuminance) // Illuminance Virtual Sensor
Plugin_Sensor_Humidity, class(be_class_Matter_Plugin_Sensor_Humidity) // Humidity Sensor
Plugin_Sensor_Virt_Humidity, class(be_class_Matter_Plugin_Virt_Sensor_Humidity) // Humidity Virtual Sensor
Plugin_Sensor_Occupancy, class(be_class_Matter_Plugin_Sensor_Occupancy) // Occupancy Sensor
Plugin_Sensor_OnOff, class(be_class_Matter_Plugin_Sensor_OnOff) // Simple OnOff Sensor
Plugin_Sensor_Contact, class(be_class_Matter_Plugin_Sensor_Contact) // Contact Sensor
Plugin_Virt_Sensor_Contact, class(be_class_Matter_Plugin_Virt_Sensor_Contact) // Virtual Contact Sensor
Plugin_Bridge_HTTP, class(be_class_Matter_Plugin_Bridge_HTTP) // HTTP bridge superclass
Plugin_Bridge_OnOff, class(be_class_Matter_Plugin_Bridge_OnOff) // HTTP Relay/Light behavior (OnOff)
Plugin_Bridge_Light0, class(be_class_Matter_Plugin_Bridge_Light0) // HTTP OnOff Light
Plugin_Bridge_Light1, class(be_class_Matter_Plugin_Bridge_Light1) // HTTP Dimmer Light
Plugin_Bridge_Light2, class(be_class_Matter_Plugin_Bridge_Light2) // HTTP CT Light
Plugin_Bridge_Light3, class(be_class_Matter_Plugin_Bridge_Light3) // HTTP RGB Light
Plugin_Bridge_Sensor, class(be_class_Matter_Plugin_Bridge_Sensor) // HTTP generic sensor
Plugin_Bridge_Sensor_Pressure, class(be_class_Matter_Plugin_Bridge_Sensor_Pressure) // HTTP Pressure sensor
Plugin_Bridge_Sensor_Temp, class(be_class_Matter_Plugin_Bridge_Sensor_Temp) // HTTP Temperature sensor
Plugin_Bridge_Sensor_Illuminance, class(be_class_Matter_Plugin_Bridge_Sensor_Illuminance) // HTTP Illuminance sensor
Plugin_Bridge_Sensor_Humidity, class(be_class_Matter_Plugin_Bridge_Sensor_Humidity) // HTTP Humidity sensor
Plugin_Bridge_Sensor_Occupancy, class(be_class_Matter_Plugin_Bridge_Sensor_Occupancy) // HTTP Occupancy sensor
Plugin_Bridge_Sensor_Contact, class(be_class_Matter_Plugin_Bridge_Sensor_Contact) // HTTP Contact sensor
}
@const_object_info_end */

View File

@ -1,161 +0,0 @@
#
# Matter_Plugin_Light0.be - implements the behavior for a generic Lighting (OnOff only)
#
# Copyright (C) 2023 Stephan Hadinger & Theo Arends
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
import matter
# Matter plug-in for core behavior
#@ solidify:Matter_Plugin_Light0,weak
class Matter_Plugin_Light0 : Matter_Plugin_Device
static var TYPE = "light0" # name of the plug-in in json
static var DISPLAY_NAME = "Light 0 On" # display name of the plug-in
static var UPDATE_TIME = 250 # update every 250ms
static var CLUSTERS = matter.consolidate_clusters(_class,
{
# 0x001D: inherited # Descriptor Cluster 9.5 p.453
# 0x0003: inherited # Identify 1.2 p.16
# 0x0004: inherited # Groups 1.3 p.21
# 0x0005: inherited # Scenes 1.4 p.30 - no writable
0x0006: [0,0xFFFC,0xFFFD], # On/Off 1.5 p.48
})
static var UPDATE_COMMANDS = matter.UC_LIST(_class, "Power")
static var TYPES = { 0x0100: 2 } # OnOff Light, but not actually used because Relay is managed by OnOff
# Inherited
# var device # reference to the `device` global object
# var endpoint # current endpoint
# var clusters # map from cluster to list of attributes, typically constructed from CLUSTERS hierachy
# var tick # tick value when it was last updated
# var node_label # name of the endpoint, used only in bridge mode, "" if none
var shadow_onoff # (bool) status of the light power on/off
#############################################################
# Constructor
def init(device, endpoint, config)
super(self).init(device, endpoint, config)
self.shadow_onoff = false
end
#############################################################
# Update shadow
#
def update_shadow()
if !self.VIRTUAL
import light
var light_status = light.get()
if light_status != nil
var pow = light_status.find('power', nil)
if pow != self.shadow_onoff
self.attribute_updated(0x0006, 0x0000)
self.shadow_onoff = pow
end
end
end
super(self).update_shadow()
end
def set_onoff(pow)
if !self.VIRTUAL
import light
light.set({'power':pow})
self.update_shadow()
else
if pow != self.shadow_onoff
self.attribute_updated(0x0006, 0x0000)
self.shadow_onoff = pow
end
end
end
#############################################################
# read an attribute
#
def read_attribute(session, ctx, tlv_solo)
var TLV = matter.TLV
var cluster = ctx.cluster
var attribute = ctx.attribute
# ====================================================================================================
if cluster == 0x0006 # ========== On/Off 1.5 p.48 ==========
self.update_shadow_lazy()
if attribute == 0x0000 # ---------- OnOff / bool ----------
return tlv_solo.set(TLV.BOOL, self.shadow_onoff)
elif attribute == 0xFFFC # ---------- FeatureMap / map32 ----------
return tlv_solo.set(TLV.U4, 0) # 0 = no Level Control for Lighting
elif attribute == 0xFFFD # ---------- ClusterRevision / u2 ----------
return tlv_solo.set(TLV.U4, 4) # 0 = no Level Control for Lighting
end
else
return super(self).read_attribute(session, ctx, tlv_solo)
end
end
#############################################################
# Invoke a command
#
# returns a TLV object if successful, contains the response
# or an `int` to indicate a status
def invoke_request(session, val, ctx)
import light
var TLV = matter.TLV
var cluster = ctx.cluster
var command = ctx.command
# ====================================================================================================
if cluster == 0x0006 # ========== On/Off 1.5 p.48 ==========
self.update_shadow_lazy()
if command == 0x0000 # ---------- Off ----------
self.set_onoff(false)
self.publish_command('Power', 0)
return true
elif command == 0x0001 # ---------- On ----------
self.set_onoff(true)
self.publish_command('Power', 1)
return true
elif command == 0x0002 # ---------- Toggle ----------
self.set_onoff(!self.shadow_onoff)
self.publish_command('Power', self.shadow_onoff ? 1 : 0)
return true
end
end
end
#############################################################
# find_val_i - get value of map case insensitive
static def find_val_i(m, k)
var key_i = tasmota.find_key_i(m, k)
return m.find(key_i)
end
#############################################################
# update_virtual
#
# Update internal state for virtual devices
def update_virtual(payload_json)
var val_onoff = payload_json.find("Power")
if val_onoff != nil
self.set_onoff(bool(val_onoff))
end
super(self).update_virtual(payload_json)
end
end
matter.Plugin_Light0 = Matter_Plugin_Light0

View File

@ -23,18 +23,19 @@ import matter
#@ solidify:Matter_Plugin_Light1,weak
class Matter_Plugin_Light1 : Matter_Plugin_Light0
class Matter_Plugin_Light1 : Matter_Plugin_Device
static var TYPE = "light1" # name of the plug-in in json
static var DISPLAY_NAME = "Light 1 Dimmer" # display name of the plug-in
static var UPDATE_TIME = 250 # update every 250ms
static var CLUSTERS = matter.consolidate_clusters(_class, {
# 0x001D: inherited # Descriptor Cluster 9.5 p.453
# 0x0003: inherited # Identify 1.2 p.16
# 0x0004: inherited # Groups 1.3 p.21
# 0x0005: inherited # Scenes 1.4 p.30 - no writable
# 0x0006: inherited # On/Off 1.5 p.48
0x0006: [0,0xFFFC,0xFFFD], # On/Off 1.5 p.48
0x0008: [0,2,3,0x0F,0x11,0xFFFC,0xFFFD], # Level Control 1.6 p.57
})
static var UPDATE_COMMANDS = matter.UC_LIST(_class, "Bri")
static var UPDATE_COMMANDS = matter.UC_LIST(_class, "Power", "Bri")
static var TYPES = { 0x0101: 2 } # Dimmable Light
# Inherited
@ -43,13 +44,14 @@ class Matter_Plugin_Light1 : Matter_Plugin_Light0
# var clusters # map from cluster to list of attributes, typically constructed from CLUSTERS hierachy
# var tick # tick value when it was last updated
# var node_label # name of the endpoint, used only in bridge mode, "" if none
# var shadow_onoff # (bool) status of the light power on/off
var shadow_onoff # (bool) status of the light power on/off
var shadow_bri # (int 0..254) brightness before Gamma correction - as per Matter 255 is not allowed
#############################################################
# Constructor
def init(device, endpoint, arguments)
super(self).init(device, endpoint, arguments)
self.shadow_onoff = false
self.shadow_bri = 0
end
@ -61,6 +63,11 @@ class Matter_Plugin_Light1 : Matter_Plugin_Light0
import light
var light_status = light.get()
if light_status != nil
var pow = light_status.find('power', nil)
if pow != self.shadow_onoff
self.attribute_updated(0x0006, 0x0000)
self.shadow_onoff = pow
end
var bri = light_status.find('bri', nil)
if bri != nil
bri = tasmota.scale_uint(bri, 0, 255, 0, 254)
@ -74,6 +81,19 @@ class Matter_Plugin_Light1 : Matter_Plugin_Light0
super(self).update_shadow() # superclass manages 'power'
end
def set_onoff(pow)
if !self.VIRTUAL
import light
light.set({'power':pow})
self.update_shadow()
else
if pow != self.shadow_onoff
self.attribute_updated(0x0006, 0x0000)
self.shadow_onoff = pow
end
end
end
#############################################################
# Set Bri
#
@ -113,7 +133,18 @@ class Matter_Plugin_Light1 : Matter_Plugin_Light0
var attribute = ctx.attribute
# ====================================================================================================
if cluster == 0x0008 # ========== Level Control 1.6 p.57 ==========
if cluster == 0x0006 # ========== On/Off 1.5 p.48 ==========
self.update_shadow_lazy()
if attribute == 0x0000 # ---------- OnOff / bool ----------
return tlv_solo.set(TLV.BOOL, self.shadow_onoff)
elif attribute == 0xFFFC # ---------- FeatureMap / map32 ----------
return tlv_solo.set(TLV.U4, 0) # 0 = no Level Control for Lighting
elif attribute == 0xFFFD # ---------- ClusterRevision / u2 ----------
return tlv_solo.set(TLV.U4, 4) # 0 = no Level Control for Lighting
end
# ====================================================================================================
elif cluster == 0x0008 # ========== Level Control 1.6 p.57 ==========
self.update_shadow_lazy()
if attribute == 0x0000 # ---------- CurrentLevel / u1 ----------
return tlv_solo.set(TLV.U1, self.shadow_bri)
@ -148,7 +179,23 @@ class Matter_Plugin_Light1 : Matter_Plugin_Light0
var command = ctx.command
# ====================================================================================================
if cluster == 0x0008 # ========== Level Control 1.6 p.57 ==========
if cluster == 0x0006 # ========== On/Off 1.5 p.48 ==========
self.update_shadow_lazy()
if command == 0x0000 # ---------- Off ----------
self.set_onoff(false)
self.publish_command('Power', 0)
return true
elif command == 0x0001 # ---------- On ----------
self.set_onoff(true)
self.publish_command('Power', 1)
return true
elif command == 0x0002 # ---------- Toggle ----------
self.set_onoff(!self.shadow_onoff)
self.publish_command('Power', self.shadow_onoff ? 1 : 0)
return true
end
# ====================================================================================================
elif cluster == 0x0008 # ========== Level Control 1.6 p.57 ==========
self.update_shadow_lazy()
if command == 0x0000 # ---------- MoveToLevel ----------
var bri_254 = val.findsubval(0) # Hue 0..254
@ -198,6 +245,8 @@ class Matter_Plugin_Light1 : Matter_Plugin_Light0
if val_bri != nil
self.set_bri(int(val_bri), val_onoff)
return # don't call super() because we already handeld 'Power'
elif val_onoff != nil
self.set_onoff(bool(val_onoff))
end
super(self).update_virtual(payload_json)
end

View File

@ -49,7 +49,7 @@ class Matter_Plugin_Sensor : Matter_Plugin_Device
# The device calls regularly `tasmota.read_sensors()` and converts
# it to json.
def parse_sensors(payload)
if self.tasmota_sensor_matcher
if !self.VIRTUAL && self.tasmota_sensor_matcher
var val = self.pre_value(real(self.tasmota_sensor_matcher.match(payload)))
if val != nil
if val != self.shadow_value

View File

@ -60,18 +60,19 @@ class Matter_Plugin_Sensor_Contact : Matter_Plugin_Device
#
def update_shadow()
super(self).update_shadow()
if !self.VIRTUAL
import json
var ret = tasmota.cmd("Status 8", true)
if ret != nil
var j = json.load(ret)
if j != nil
var state = false
state = (j.find("Switch" + str(self.tasmota_switch_index)) == "ON")
import json
var ret = tasmota.cmd("Status 8", true)
if ret != nil
var j = json.load(ret)
if j != nil
var state = false
state = (j.find("Switch" + str(self.tasmota_switch_index)) == "ON")
if self.shadow_contact != state
self.attribute_updated(0x0045, 0x0000)
self.shadow_contact = state
if self.shadow_contact != state
self.attribute_updated(0x0045, 0x0000)
self.shadow_contact = state
end
end
end
end

View File

@ -60,17 +60,19 @@ class Matter_Plugin_Sensor_Occupancy : Matter_Plugin_Device
#
def update_shadow()
super(self).update_shadow()
var switch_str = "Switch" + str(self.tasmota_switch_index)
if !self.VIRTUAL
var switch_str = "Switch" + str(self.tasmota_switch_index)
var j = tasmota.cmd("Status 8", true)
if j != nil j = j.find("StatusSNS") end
if j != nil && j.contains(switch_str)
var state = (j.find(switch_str) == "ON")
var j = tasmota.cmd("Status 8", true)
if j != nil j = j.find("StatusSNS") end
if j != nil && j.contains(switch_str)
var state = (j.find(switch_str) == "ON")
if (self.shadow_occupancy != state)
self.attribute_updated(0x0406, 0x0000)
if (self.shadow_occupancy != state)
self.attribute_updated(0x0406, 0x0000)
end
self.shadow_occupancy = state
end
self.shadow_occupancy = state
end
end

View File

@ -50,17 +50,19 @@ class Matter_Plugin_Sensor_OnOff : Matter_Plugin_Device
#
def update_shadow()
super(self).update_shadow()
var switch_str = "Switch" + str(self.tasmota_switch_index)
if !self.VIRTUAL
var switch_str = "Switch" + str(self.tasmota_switch_index)
var j = tasmota.cmd("Status 8", true)
if j != nil j = j.find("StatusSNS") end
if j != nil && j.contains(switch_str)
var state = (j.find(switch_str) == "ON")
var j = tasmota.cmd("Status 8", true)
if j != nil j = j.find("StatusSNS") end
if j != nil && j.contains(switch_str)
var state = (j.find(switch_str) == "ON")
if (self.shadow_onoff != state)
self.attribute_updated(0x0006, 0x0000)
if (self.shadow_onoff != state)
self.attribute_updated(0x0006, 0x0000)
end
self.shadow_onoff = state
end
self.shadow_onoff = state
end
end

View File

@ -78,10 +78,12 @@ class Matter_Plugin_Shutter : Matter_Plugin_Device
# Update shadow
#
def update_shadow()
self.update_inverted()
var sp = tasmota.cmd("ShutterPosition" + str(self.tasmota_shutter_index + 1), true)
if sp
self.parse_sensors(sp)
if !self.VIRTUAL
self.update_inverted()
var sp = tasmota.cmd("ShutterPosition" + str(self.tasmota_shutter_index + 1), true)
if sp
self.parse_sensors(sp)
end
end
super(self).update_shadow()
end

View File

@ -0,0 +1,40 @@
#
# Matter_Plugin_Light0.be - implements the behavior for a generic Lighting (OnOff only)
#
# Copyright (C) 2023 Stephan Hadinger & Theo Arends
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
import matter
# Matter plug-in for core behavior
#@ solidify:Matter_Plugin_Light0,weak
class Matter_Plugin_Light0 : Matter_Plugin_OnOff
static var TYPE = "light0" # name of the plug-in in json
static var DISPLAY_NAME = "Light 0 On" # display name of the plug-in
static var TYPES = { 0x0100: 2 } # OnOff Light, but not actually used because Relay is managed by OnOff
# Inherited
# var device # reference to the `device` global object
# var endpoint # current endpoint
# var clusters # map from cluster to list of attributes, typically constructed from CLUSTERS hierachy
# var tick # tick value when it was last updated
# var node_label # name of the endpoint, used only in bridge mode, "" if none
# var shadow_onoff # (bool) status of the light power on/off
end
matter.Plugin_Light0 = Matter_Plugin_Light0

View File

@ -61,17 +61,21 @@ class Matter_Plugin_Light2 : Matter_Plugin_Light1
# Update shadow
#
def update_shadow()
import light
self.update_ct_minmax()
super(self).update_shadow()
var light_status = light.get()
if light_status != nil
var ct = light_status.find('ct', nil)
if ct == nil ct = self.shadow_ct end
if ct != self.shadow_ct
self.attribute_updated(0x0300, 0x0007)
self.shadow_ct = ct
if !self.VIRTUAL
import light
self.update_ct_minmax()
super(self).update_shadow()
var light_status = light.get()
if light_status != nil
var ct = light_status.find('ct', nil)
if ct == nil ct = self.shadow_ct end
if ct != self.shadow_ct
self.attribute_updated(0x0300, 0x0007)
self.shadow_ct = ct
end
end
else
super(self).update_shadow()
end
end

View File

@ -0,0 +1,86 @@
#
# Matter_Plugin_Sensor_Flow.be - implements the behavior for a Flow Sensor
#
# Copyright (C) 2023 Stephan Hadinger & Theo Arends
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
import matter
# Matter plug-in for core behavior
#@ solidify:Matter_Plugin_Sensor_Flow,weak
class Matter_Plugin_Sensor_Flow : Matter_Plugin_Sensor
static var TYPE = "flow" # name of the plug-in in json
static var DISPLAY_NAME = "Flow" # display name of the plug-in
static var JSON_NAME = "Flow" # Name of the sensor attribute in JSON payloads
static var UPDATE_COMMANDS = matter.UC_LIST(_class, "Flow")
static var CLUSTERS = matter.consolidate_clusters(_class, {
0x0404: [0,1,2,0xFFFC,0xFFFD], # Flow Measurement
})
static var TYPES = { 0x0306: 1 } # Flow Sensor, rev 1
#############################################################
# Pre-process value
#
# This must be overriden.
# This allows to convert the raw sensor value to the target one, typically int
def pre_value(val)
return val != nil ? int(val * 10) : nil # MeasuredValue represents 10 x flow in m3/h
end
#############################################################
# Called when the value changed compared to shadow value
#
# This must be overriden.
# This is where you call `self.attribute_updated(<cluster>, <attribute>)`
def value_changed()
self.attribute_updated(0x0404, 0x0000)
end
#############################################################
# read an attribute
#
def read_attribute(session, ctx, tlv_solo)
var TLV = matter.TLV
var cluster = ctx.cluster
var attribute = ctx.attribute
# ====================================================================================================
if cluster == 0x0404 # ========== Flow Measurement 2.4 p.98 ==========
if attribute == 0x0000 # ---------- MeasuredValue / i16 ----------
if self.shadow_value != nil
return tlv_solo.set(TLV.U2, int(self.shadow_value)) # MeasuredValue represents 10 x flow in m3/h.
else
return tlv_solo.set(TLV.NULL, nil)
end
elif attribute == 0x0001 # ---------- MinMeasuredValue / i16 ----------
return tlv_solo.set(TLV.U2, 0) # 0 m3/h
elif attribute == 0x0002 # ---------- MaxMeasuredValue / i16 ----------
return tlv_solo.set(TLV.U2, 65534) # 65534 m3/h
elif attribute == 0xFFFC # ---------- FeatureMap / map32 ----------
return tlv_solo.set(TLV.U4, 0) # 0 = no Extended Range
elif attribute == 0xFFFD # ---------- ClusterRevision / u2 ----------
return tlv_solo.set(TLV.U4, 3) # 3 = New data model format and notation
end
else
return super(self).read_attribute(session, ctx, tlv_solo)
end
end
end
matter.Plugin_Sensor_Flow = Matter_Plugin_Sensor_Flow

View File

@ -0,0 +1,96 @@
#
# Matter_Plugin_Bridge_Sensor_Flow.be - implements base class for a Flow Sensor via HTTP to Tasmota
#
# Copyright (C) 2023 Stephan Hadinger & Theo Arends
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
import matter
# Matter plug-in for core behavior
#@ solidify:Matter_Plugin_Bridge_Sensor_Flow,weak
class Matter_Plugin_Bridge_Sensor_Flow : Matter_Plugin_Bridge_Sensor
static var TYPE = "http_flow" # name of the plug-in in json
static var DISPLAY_NAME = "Flow" # display name of the plug-in
static var CLUSTERS = matter.consolidate_clusters(_class, {
0x0404: [0,1,2,0xFFFC,0xFFFD], # Flow Measurement
})
static var TYPES = { 0x0306: 1 } # Flow Sensor, rev 1
#############################################################
# Called when the value changed compared to shadow value
#
# This must be overriden.
# This is where you call `self.attribute_updated(<cluster>, <attribute>)`
def value_changed()
self.attribute_updated(0x0404, 0x0000)
end
#############################################################
# Pre-process value
#
# This must be overriden.
# This allows to convert the raw sensor value to the target one, typically int
def pre_value(val)
return val != nil ? int(val * 10) : nil # MeasuredValue represents 10 x flow in m3/h
end
#############################################################
# read an attribute
#
def read_attribute(session, ctx, tlv_solo)
var TLV = matter.TLV
var cluster = ctx.cluster
var attribute = ctx.attribute
# ====================================================================================================
if cluster == 0x0404 # ========== Flow Measurement 2.1.2 p.127 ==========
if attribute == 0x0000 # ---------- MeasuredValue / i16 ----------
if self.shadow_value != nil
return tlv_solo.set(TLV.U2, int(self.shadow_value)) # MeasuredValue represents 10 x flow in m3/h.
else
return tlv_solo.set(TLV.NULL, nil)
end
elif attribute == 0x0001 # ---------- MinMeasuredValue / i16 ----------
return tlv_solo.set(TLV.U2, 0) # 0 m3/h
elif attribute == 0x0002 # ---------- MaxMeasuredValue / i16 ----------
return tlv_solo.set(TLV.U2, 65534) # 65534 m3/h
elif attribute == 0xFFFC # ---------- FeatureMap / map32 ----------
return tlv_solo.set(TLV.U4, 0) # 0 = no Extended Range
elif attribute == 0xFFFD # ---------- ClusterRevision / u2 ----------
return tlv_solo.set(TLV.U4, 3) # 3 = New data model format and notation
end
else
return super(self).read_attribute(session, ctx, tlv_solo)
end
end
#############################################################
# web_values
#
# Show values of the remote device as HTML
def web_values()
import webserver
self.web_values_prefix() # display '| ' and name if present
webserver.content_send(format("&#x26C5; %i m3/h",
int(self.shadow_value)))
end
end
matter.Plugin_Bridge_Sensor_Flow = Matter_Plugin_Bridge_Sensor_Flow

View File

@ -0,0 +1,34 @@
#
# Matter_Plugin_9_Virt_Sensor_Flow.be - implements the behavior for a Flow Sensor
#
# Copyright (C) 2023 Stephan Hadinger & Theo Arends
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
import matter
# Matter plug-in for core behavior
#@ solidify:Matter_Plugin_Virt_Sensor_Flow,weak
class Matter_Plugin_Virt_Sensor_Flow : Matter_Plugin_Sensor_Flow
static var TYPE = "v_flow" # name of the plug-in in json
static var DISPLAY_NAME = "v.Flow" # display name of the plug-in
static var ARG = "" # no arg for virtual device
static var ARG_HINT = "_Not used_" # Hint for entering the Argument (inside 'placeholder')
static var VIRTUAL = true # virtual device
end
matter.Plugin_Virt_Sensor_Flow = Matter_Plugin_Virt_Sensor_Flow

View File

@ -0,0 +1,34 @@
#
# Matter_Plugin_9_Virt_Sensor_Occupancy.be - implements the behavior for a Virtual Occupancy Sensor
#
# Copyright (C) 2023 Stephan Hadinger & Theo Arends
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
import matter
# Matter plug-in for core behavior
#@ solidify:Matter_Plugin_Virt_Sensor_Occupancy,weak
class Matter_Plugin_Virt_Sensor_Occupancy : Matter_Plugin_Sensor_Occupancy
static var TYPE = "v_occupancy" # name of the plug-in in json
static var DISPLAY_NAME = "v.Occupancy" # display name of the plug-in
static var ARG = "" # no arg for virtual device
static var ARG_HINT = "_Not used_" # Hint for entering the Argument (inside 'placeholder')
static var VIRTUAL = true # virtual device
end
matter.Plugin_Virt_Sensor_Occupancy = Matter_Plugin_Virt_Sensor_Occupancy

View File

@ -0,0 +1,43 @@
#
# Matter_Plugin_z_All.be - list all plugin classes in a solidified map
#
# Copyright (C) 2023 Stephan Hadinger & Theo Arends
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
import matter
# this is used to solidify plugins list in Matter_Device
def register_native_classes()
var plugins_classes = {}
# try to register any class that starts with 'Plugin_'
import introspect
import string
for k: introspect.members(matter)
var v = introspect.get(matter, k)
if type(v) == 'class' && string.find(k, "Plugin_") == 0
var typ = introspect.get(v, 'TYPE') # make sure we don't crash if TYPE does not exist
if typ
plugins_classes[typ] = v
end
end
end
return plugins_classes
end
plugins_classes = register_native_classes()
matter.plugins_classes = plugins_classes

View File

@ -33,13 +33,13 @@ import matter
#################################################################################
class Matter_UI
static var _CLASSES_TYPES = "|relay|light0|light1|light2|light3|shutter|shutter+tilt"
"|temperature|pressure|illuminance|humidity|occupancy|onoff|contact"
"|temperature|pressure|illuminance|humidity|occupancy|onoff|contact|flow"
"|-virtual|v_relay|v_light0|v_light1|v_light2|v_light3"
"|v_temp|v_pressure|v_illuminance|v_humidity|v_contact"
"|v_temp|v_pressure|v_illuminance|v_humidity|v_occupancy|v_contact|v_flow"
# static var _CLASSES_HTTP = "-http"
static var _CLASSES_TYPES2= "|http_relay|http_light0|http_light1|http_light2|http_light3"
"|http_temperature|http_pressure|http_illuminance|http_humidity"
"|http_occupancy|http_contact"
"|http_occupancy|http_contact|http_flow"
var device
# ####################################################################################################

View File

@ -1,5 +1,5 @@
#
# Matter_Device.be - implements a generic Matter device (commissionee)
# Matter_zz_Device.be - implements a generic Matter device (commissionee)
#
# Copyright (C) 2023 Stephan Hadinger & Theo Arends
#
@ -31,7 +31,7 @@ class Matter_Device
var started # is the Matter Device started (configured, mDNS and UDPServer started)
var plugins # list of plugins instances
var plugins_persist # true if plugins configuration needs to be saved
var plugins_classes # map of registered classes by type name
static var plugins_classes = matter.plugins_classes # map of registered classes by type name
var plugins_config # map of JSON configuration for plugins
var plugins_config_remotes # map of information on each remote under "remotes" key, '{}' when empty
var udp_server # `matter.UDPServer()` object
@ -86,9 +86,7 @@ class Matter_Device
self.tick = 0
self.plugins = []
self.plugins_persist = false # plugins need to saved only when the first fabric is associated
self.plugins_classes = {}
self.plugins_config_remotes = {}
self.register_native_classes() # register all native classes
self.vendorid = self.VENDOR_ID
self.productid = self.PRODUCT_ID
self.root_iterations = self.PBKDF_ITERATIONS
@ -1270,18 +1268,6 @@ class Matter_Device
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
#############################################################
# register_plugin_class
#
# Adds a class by name
def register_plugin_class(cl)
import introspect
var typ = introspect.get(cl, 'TYPE') # make sure we don't crash if TYPE does not exist
if typ
self.plugins_classes[typ] = cl
end
end
#############################################################
# get_plugin_class_displayname
#
@ -1300,23 +1286,6 @@ class Matter_Device
return cl ? cl.ARG : ""
end
#############################################################
# register_native_classes
#
# Adds a class by name
def register_native_classes(name, cl)
# try to register any class that starts with 'Plugin_'
import introspect
import string
for k: introspect.members(matter)
var v = introspect.get(matter, k)
if type(v) == 'class' && string.find(k, "Plugin_") == 0
self.register_plugin_class(v)
end
end
# tasmota.log("MTR: registered classes "+str(self.k2l(self.plugins_classes)), 3)
end
#############################################################
# Dynamic adding and removal of endpoints (bridge mode)
#############################################################

View File

@ -2455,19 +2455,19 @@ be_local_closure(Matter_IM__inner_process_read_request, /* name */
0x882C0121, // 00C6 GETMBR R11 R0 K33
0x5431FFFE, // 00C7 LDINT R12 -1
0x942C160C, // 00C8 GETIDX R11 R11 R12
0x6034000C, // 00C9 GETGBL R13 G12
0x5C381600, // 00CA MOVE R14 R11
0x7C340200, // 00CB CALL R13 1
0x6038000C, // 00CC GETGBL R14 G12
0x5C3C1400, // 00CD MOVE R15 R10
0x7C380200, // 00CE CALL R14 1
0x00341A0E, // 00CF ADD R13 R13 R14
0xB83A0000, // 00D0 GETNGBL R14 K0
0x88381D0E, // 00D1 GETMBR R14 R14 K14
0x88381D0F, // 00D2 GETMBR R14 R14 K15
0x18341A0E, // 00D3 LE R13 R13 R14
0x78360001, // 00D4 JMPF R13 #00D7
0x4034160A, // 00D5 CONNECT R13 R11 R10
0x6030000C, // 00C9 GETGBL R12 G12
0x5C341600, // 00CA MOVE R13 R11
0x7C300200, // 00CB CALL R12 1
0x6034000C, // 00CC GETGBL R13 G12
0x5C381400, // 00CD MOVE R14 R10
0x7C340200, // 00CE CALL R13 1
0x0030180D, // 00CF ADD R12 R12 R13
0xB8360000, // 00D0 GETNGBL R13 K0
0x88341B0E, // 00D1 GETMBR R13 R13 K14
0x88341B0F, // 00D2 GETMBR R13 R13 K15
0x1830180D, // 00D3 LE R12 R12 R13
0x78320001, // 00D4 JMPF R12 #00D7
0x4030160A, // 00D5 CONNECT R12 R11 R10
0x70020003, // 00D6 JMP #00DB
0x88300121, // 00D7 GETMBR R12 R0 K33
0x8C301912, // 00D8 GETMET R12 R12 K18

View File

@ -1,4 +1,4 @@
/* Solidification of Matter_Plugin_2_Aggregator.h */
/* Solidification of Matter_Plugin_1_Aggregator.h */
/********************************************************************\
* Generated code, don't edit *
\********************************************************************/

View File

@ -1341,7 +1341,7 @@ be_local_closure(Matter_Plugin_Root_invoke_request, /* name */
}),
be_str_weak(invoke_request),
&be_const_str_solidified,
( &(const binstruction[713]) { /* code */
( &(const binstruction[712]) { /* code */
0xA4120000, // 0000 IMPORT R4 K0
0xB8160200, // 0001 GETNGBL R5 K1
0x88140B02, // 0002 GETMBR R5 R5 K2
@ -1442,10 +1442,10 @@ be_local_closure(Matter_Plugin_Root_invoke_request, /* name */
0x80041000, // 0061 RET 1 R8
0x70020000, // 0062 JMP #0064
0xB0063119, // 0063 RAISE 1 K24 K25
0x70020261, // 0064 JMP #02C7
0x70020260, // 0064 JMP #02C6
0x5422003D, // 0065 LDINT R8 62
0x1C200C08, // 0066 EQ R8 R6 R8
0x782201C2, // 0067 JMPF R8 #022B
0x782201C1, // 0067 JMPF R8 #022A
0x1C200F0E, // 0068 EQ R8 R7 K14
0x7822001D, // 0069 JMPF R8 #0088
0x8C200506, // 006A GETMET R8 R2 K6
@ -1477,7 +1477,7 @@ be_local_closure(Matter_Plugin_Root_invoke_request, /* name */
0x7C280800, // 0084 CALL R10 4
0x900E0910, // 0085 SETMBR R3 K4 K16
0x80041200, // 0086 RET 1 R9
0x700201A1, // 0087 JMP #022A
0x700201A0, // 0087 JMP #0229
0x1C200F05, // 0088 EQ R8 R7 K5
0x7822003C, // 0089 JMPF R8 #00C7
0x8C200506, // 008A GETMET R8 R2 K6
@ -1540,7 +1540,7 @@ be_local_closure(Matter_Plugin_Root_invoke_request, /* name */
0x7C3C0800, // 00C3 CALL R15 4
0x900E0907, // 00C4 SETMBR R3 K4 K7
0x80041C00, // 00C5 RET 1 R14
0x70020162, // 00C6 JMP #022A
0x70020161, // 00C6 JMP #0229
0x54220003, // 00C7 LDINT R8 4
0x1C200E08, // 00C8 EQ R8 R7 R8
0x7822003C, // 00C9 JMPF R8 #0107
@ -1604,7 +1604,7 @@ be_local_closure(Matter_Plugin_Root_invoke_request, /* name */
0x54420004, // 0103 LDINT R16 5
0x900E0810, // 0104 SETMBR R3 K4 R16
0x80041E00, // 0105 RET 1 R15
0x70020122, // 0106 JMP #022A
0x70020121, // 0106 JMP #0229
0x5422000A, // 0107 LDINT R8 11
0x1C200E08, // 0108 EQ R8 R7 R8
0x7822000B, // 0109 JMPF R8 #0116
@ -1619,10 +1619,10 @@ be_local_closure(Matter_Plugin_Root_invoke_request, /* name */
0x900E3409, // 0112 SETMBR R3 K26 R9
0x4C240000, // 0113 LDNIL R9
0x80041200, // 0114 RET 1 R9
0x70020113, // 0115 JMP #022A
0x70020112, // 0115 JMP #0229
0x54220005, // 0116 LDINT R8 6
0x1C200E08, // 0117 EQ R8 R7 R8
0x782200B9, // 0118 JMPF R8 #01D3
0x782200B8, // 0118 JMPF R8 #01D2
0xB8224400, // 0119 GETNGBL R8 K34
0x8C20112C, // 011A GETMET R8 R8 K44
0x60280008, // 011B GETGBL R10 G8
@ -1748,313 +1748,312 @@ be_local_closure(Matter_Plugin_Root_invoke_request, /* name */
0x7C480200, // 0193 CALL R18 1
0x404E0F40, // 0194 CONNECT R19 K7 K64
0x94482413, // 0195 GETIDX R18 R18 R19
0x60500015, // 0196 GETGBL R20 G21
0x7C500000, // 0197 CALL R20 0
0x8C502941, // 0198 GETMET R20 R20 K65
0x58580042, // 0199 LDCONST R22 K66
0x7C500400, // 019A CALL R20 2
0x5C4C2800, // 019B MOVE R19 R20
0x8C500943, // 019C GETMET R20 R4 K67
0x7C500200, // 019D CALL R20 1
0x8C542144, // 019E GETMET R21 R16 K68
0x7C540200, // 019F CALL R21 1
0x8C542B45, // 01A0 GETMET R21 R21 K69
0x7C540200, // 01A1 CALL R21 1
0x8C582946, // 01A2 GETMET R22 R20 K70
0x5C602400, // 01A3 MOVE R24 R18
0x5C642A00, // 01A4 MOVE R25 R21
0x5C682600, // 01A5 MOVE R26 R19
0x546E0007, // 01A6 LDINT R27 8
0x7C580A00, // 01A7 CALL R22 5
0x885C0312, // 01A8 GETMBR R23 R1 K18
0x785E0001, // 01A9 JMPF R23 #01AC
0x885C0312, // 01AA GETMBR R23 R1 K18
0x70020001, // 01AB JMP #01AE
0x885C0116, // 01AC GETMBR R23 R0 K22
0x885C2F47, // 01AD GETMBR R23 R23 K71
0x8C601B48, // 01AE GETMET R24 R13 K72
0x5C682000, // 01AF MOVE R26 R16
0x5C6C2200, // 01B0 MOVE R27 R17
0x5C702C00, // 01B1 MOVE R28 R22
0x5C742E00, // 01B2 MOVE R29 R23
0x7C600A00, // 01B3 CALL R24 5
0x8C601B49, // 01B4 GETMET R24 R13 K73
0x7C600200, // 01B5 CALL R24 1
0x88600116, // 01B6 GETMBR R24 R0 K22
0x8C60314A, // 01B7 GETMET R24 R24 K74
0x5C681A00, // 01B8 MOVE R26 R13
0x7C600400, // 01B9 CALL R24 2
0x8C60034B, // 01BA GETMET R24 R1 K75
0x7C600200, // 01BB CALL R24 1
0x78620002, // 01BC JMPF R24 #01C0
0x8C60034C, // 01BD GETMET R24 R1 K76
0x546A003B, // 01BE LDINT R26 60
0x7C600400, // 01BF CALL R24 2
0x8C601B4D, // 01C0 GETMET R24 R13 K77
0x7C600200, // 01C1 CALL R24 1
0x8C600B09, // 01C2 GETMET R24 R5 K9
0x7C600200, // 01C3 CALL R24 1
0x8C64310A, // 01C4 GETMET R25 R24 K10
0x586C0005, // 01C5 LDCONST R27 K5
0x88700B0B, // 01C6 GETMBR R28 R5 K11
0xB8760200, // 01C7 GETNGBL R29 K1
0x88743B2B, // 01C8 GETMBR R29 R29 K43
0x7C640800, // 01C9 CALL R25 4
0x8C64310A, // 01CA GETMET R25 R24 K10
0x586C0007, // 01CB LDCONST R27 K7
0x88700B0B, // 01CC GETMBR R28 R5 K11
0x58740007, // 01CD LDCONST R29 K7
0x7C640800, // 01CE CALL R25 4
0x54660007, // 01CF LDINT R25 8
0x900E0819, // 01D0 SETMBR R3 K4 R25
0x80043000, // 01D1 RET 1 R24
0x70020056, // 01D2 JMP #022A
0x54220008, // 01D3 LDINT R8 9
0x1C200E08, // 01D4 EQ R8 R7 R8
0x7822001E, // 01D5 JMPF R8 #01F5
0x8C200506, // 01D6 GETMET R8 R2 K6
0x58280005, // 01D7 LDCONST R10 K5
0x7C200400, // 01D8 CALL R8 2
0x8C24034E, // 01D9 GETMET R9 R1 K78
0x5C2C1000, // 01DA MOVE R11 R8
0x7C240400, // 01DB CALL R9 2
0xB8264400, // 01DC GETNGBL R9 K34
0x8C24132C, // 01DD GETMET R9 R9 K44
0x602C0018, // 01DE GETGBL R11 G24
0x5830004F, // 01DF LDCONST R12 K79
0x88340312, // 01E0 GETMBR R13 R1 K18
0x8C341B50, // 01E1 GETMET R13 R13 K80
0x7C340200, // 01E2 CALL R13 1
0x8C341B44, // 01E3 GETMET R13 R13 K68
0x7C340200, // 01E4 CALL R13 1
0x8C341B45, // 01E5 GETMET R13 R13 K69
0x7C340200, // 01E6 CALL R13 1
0x8C341B51, // 01E7 GETMET R13 R13 K81
0x7C340200, // 01E8 CALL R13 1
0x60380008, // 01E9 GETGBL R14 G8
0x5C3C1000, // 01EA MOVE R15 R8
0x7C380200, // 01EB CALL R14 1
0x7C2C0600, // 01EC CALL R11 3
0x58300010, // 01ED LDCONST R12 K16
0x7C240600, // 01EE CALL R9 3
0xB8260200, // 01EF GETNGBL R9 K1
0x8824132B, // 01F0 GETMBR R9 R9 K43
0x900E3409, // 01F1 SETMBR R3 K26 R9
0x4C240000, // 01F2 LDNIL R9
0x80041200, // 01F3 RET 1 R9
0x70020034, // 01F4 JMP #022A
0x54220009, // 01F5 LDINT R8 10
0x1C200E08, // 01F6 EQ R8 R7 R8
0x78220031, // 01F7 JMPF R8 #022A
0x8C200506, // 01F8 GETMET R8 R2 K6
0x58280005, // 01F9 LDCONST R10 K5
0x7C200400, // 01FA CALL R8 2
0x60240008, // 01FB GETGBL R9 G8
0x5C281000, // 01FC MOVE R10 R8
0x7C240200, // 01FD CALL R9 1
0x0026A409, // 01FE ADD R9 K82 R9
0x900E5809, // 01FF SETMBR R3 K44 R9
0x60240010, // 0200 GETGBL R9 G16
0x88280116, // 0201 GETMBR R10 R0 K22
0x88281530, // 0202 GETMBR R10 R10 K48
0x8C281553, // 0203 GETMET R10 R10 K83
0x7C280200, // 0204 CALL R10 1
0x7C240200, // 0205 CALL R9 1
0xA8020010, // 0206 EXBLK 0 #0218
0x5C281200, // 0207 MOVE R10 R9
0x7C280000, // 0208 CALL R10 0
0x8C2C1554, // 0209 GETMET R11 R10 K84
0x7C2C0200, // 020A CALL R11 1
0x1C2C1608, // 020B EQ R11 R11 R8
0x782E0008, // 020C JMPF R11 #0216
0xB82E4400, // 020D GETNGBL R11 K34
0x8C2C1755, // 020E GETMET R11 R11 K85
0x543607CF, // 020F LDINT R13 2000
0x84380000, // 0210 CLOSURE R14 P0
0x7C2C0600, // 0211 CALL R11 3
0x502C0200, // 0212 LDBOOL R11 1 0
0xA0000000, // 0213 CLOSE R0
0xA8040001, // 0214 EXBLK 1 1
0x80041600, // 0215 RET 1 R11
0xA0240000, // 0216 CLOSE R9
0x7001FFEE, // 0217 JMP #0207
0x58240056, // 0218 LDCONST R9 K86
0xAC240200, // 0219 CATCH R9 1 0
0xB0080000, // 021A RAISE 2 R0 R0
0xB8264400, // 021B GETNGBL R9 K34
0x8C24132C, // 021C GETMET R9 R9 K44
0x602C0008, // 021D GETGBL R11 G8
0x5C301000, // 021E MOVE R12 R8
0x7C2C0200, // 021F CALL R11 1
0x002EAE0B, // 0220 ADD R11 K87 R11
0x002C1758, // 0221 ADD R11 R11 K88
0x5830000E, // 0222 LDCONST R12 K14
0x7C240600, // 0223 CALL R9 3
0xB8260200, // 0224 GETNGBL R9 K1
0x88241359, // 0225 GETMBR R9 R9 K89
0x900E3409, // 0226 SETMBR R3 K26 R9
0x4C240000, // 0227 LDNIL R9
0xA0000000, // 0228 CLOSE R0
0x80041200, // 0229 RET 1 R9
0x7002009B, // 022A JMP #02C7
0x5422003B, // 022B LDINT R8 60
0x1C200C08, // 022C EQ R8 R6 R8
0x78220085, // 022D JMPF R8 #02B4
0x1C200F05, // 022E EQ R8 R7 K5
0x78220065, // 022F JMPF R8 #0296
0x8C200506, // 0230 GETMET R8 R2 K6
0x58280005, // 0231 LDCONST R10 K5
0x7C200400, // 0232 CALL R8 2
0x8C240506, // 0233 GETMET R9 R2 K6
0x582C0007, // 0234 LDCONST R11 K7
0x7C240400, // 0235 CALL R9 2
0x8C280506, // 0236 GETMET R10 R2 K6
0x5830000E, // 0237 LDCONST R12 K14
0x7C280400, // 0238 CALL R10 2
0x8C2C0506, // 0239 GETMET R11 R2 K6
0x58340010, // 023A LDCONST R13 K16
0x7C2C0400, // 023B CALL R11 2
0x8C300506, // 023C GETMET R12 R2 K6
0x543A0003, // 023D LDINT R14 4
0x7C300400, // 023E CALL R12 2
0xB8364400, // 023F GETNGBL R13 K34
0x8C341B2C, // 0240 GETMET R13 R13 K44
0x603C0018, // 0241 GETGBL R15 G24
0x5840005A, // 0242 LDCONST R16 K90
0x5C441000, // 0243 MOVE R17 R8
0x8C481351, // 0244 GETMET R18 R9 K81
0x7C480200, // 0245 CALL R18 1
0x5C4C1400, // 0246 MOVE R19 R10
0x5C501600, // 0247 MOVE R20 R11
0x8C541951, // 0248 GETMET R21 R12 K81
0x7C540200, // 0249 CALL R21 1
0x7C3C0C00, // 024A CALL R15 6
0x54420003, // 024B LDINT R16 4
0x7C340600, // 024C CALL R13 3
0x4C340000, // 024D LDNIL R13
0x1C34100D, // 024E EQ R13 R8 R13
0x7436000B, // 024F JMPT R13 #025C
0x4C340000, // 0250 LDNIL R13
0x1C34120D, // 0251 EQ R13 R9 R13
0x74360008, // 0252 JMPT R13 #025C
0x4C340000, // 0253 LDNIL R13
0x1C34140D, // 0254 EQ R13 R10 R13
0x74360005, // 0255 JMPT R13 #025C
0x4C340000, // 0256 LDNIL R13
0x1C34160D, // 0257 EQ R13 R11 R13
0x74360002, // 0258 JMPT R13 #025C
0x4C340000, // 0259 LDNIL R13
0x1C34180D, // 025A EQ R13 R12 R13
0x78360005, // 025B JMPF R13 #0262
0xB8360200, // 025C GETNGBL R13 K1
0x88341B5B, // 025D GETMBR R13 R13 K91
0x900E340D, // 025E SETMBR R3 K26 R13
0x4C340000, // 025F LDNIL R13
0xA0000000, // 0260 CLOSE R0
0x80041A00, // 0261 RET 1 R13
0x6034000C, // 0262 GETGBL R13 G12
0x5C381200, // 0263 MOVE R14 R9
0x7C340200, // 0264 CALL R13 1
0x543A001F, // 0265 LDINT R14 32
0x543E0040, // 0266 LDINT R15 65
0x00381C0F, // 0267 ADD R14 R14 R15
0x20341A0E, // 0268 NE R13 R13 R14
0x7436000B, // 0269 JMPT R13 #0276
0x6034000C, // 026A GETGBL R13 G12
0x5C381800, // 026B MOVE R14 R12
0x7C340200, // 026C CALL R13 1
0x543A000F, // 026D LDINT R14 16
0x14341A0E, // 026E LT R13 R13 R14
0x74360005, // 026F JMPT R13 #0276
0x6034000C, // 0270 GETGBL R13 G12
0x5C381800, // 0271 MOVE R14 R12
0x7C340200, // 0272 CALL R13 1
0x543A001F, // 0273 LDINT R14 32
0x24341A0E, // 0274 GT R13 R13 R14
0x7836000A, // 0275 JMPF R13 #0281
0xB8364400, // 0276 GETNGBL R13 K34
0x8C341B2C, // 0277 GETMET R13 R13 K44
0x583C005C, // 0278 LDCONST R15 K92
0x5840000E, // 0279 LDCONST R16 K14
0x7C340600, // 027A CALL R13 3
0xB8360200, // 027B GETNGBL R13 K1
0x88341B5D, // 027C GETMBR R13 R13 K93
0x900E340D, // 027D SETMBR R3 K26 R13
0x4C340000, // 027E LDNIL R13
0xA0000000, // 027F CLOSE R0
0x80041A00, // 0280 RET 1 R13
0x5436001E, // 0281 LDINT R13 31
0x40360A0D, // 0282 CONNECT R13 K5 R13
0x9434120D, // 0283 GETIDX R13 R9 R13
0x543A001F, // 0284 LDINT R14 32
0x40381D40, // 0285 CONNECT R14 R14 K64
0x9438120E, // 0286 GETIDX R14 R9 R14
0x883C0116, // 0287 GETMBR R15 R0 K22
0x8C3C1F5E, // 0288 GETMET R15 R15 K94
0x5C441000, // 0289 MOVE R17 R8
0x5C481600, // 028A MOVE R18 R11
0x5C4C1400, // 028B MOVE R19 R10
0x5C501800, // 028C MOVE R20 R12
0x5C541A00, // 028D MOVE R21 R13
0x5C581C00, // 028E MOVE R22 R14
0x8C5C035F, // 028F GETMET R23 R1 K95
0x7C5C0200, // 0290 CALL R23 1
0x7C3C1000, // 0291 CALL R15 8
0x503C0200, // 0292 LDBOOL R15 1 0
0xA0000000, // 0293 CLOSE R0
0x80041E00, // 0294 RET 1 R15
0x7002001C, // 0295 JMP #02B3
0x1C200F07, // 0296 EQ R8 R7 K7
0x78220012, // 0297 JMPF R8 #02AB
0x8C200506, // 0298 GETMET R8 R2 K6
0x58280005, // 0299 LDCONST R10 K5
0x7C200400, // 029A CALL R8 2
0xB8264400, // 029B GETNGBL R9 K34
0x8C24132C, // 029C GETMET R9 R9 K44
0x602C0008, // 029D GETGBL R11 G8
0x5C301000, // 029E MOVE R12 R8
0x7C2C0200, // 029F CALL R11 1
0x002EC00B, // 02A0 ADD R11 K96 R11
0x58300010, // 02A1 LDCONST R12 K16
0x7C240600, // 02A2 CALL R9 3
0x88240116, // 02A3 GETMBR R9 R0 K22
0x8C241361, // 02A4 GETMET R9 R9 K97
0x5C2C1000, // 02A5 MOVE R11 R8
0x7C240400, // 02A6 CALL R9 2
0x50240200, // 02A7 LDBOOL R9 1 0
0xA0000000, // 02A8 CLOSE R0
0x80041200, // 02A9 RET 1 R9
0x70020007, // 02AA JMP #02B3
0x1C200F0E, // 02AB EQ R8 R7 K14
0x78220005, // 02AC JMPF R8 #02B3
0x88200116, // 02AD GETMBR R8 R0 K22
0x8C201162, // 02AE GETMET R8 R8 K98
0x7C200200, // 02AF CALL R8 1
0x50200200, // 02B0 LDBOOL R8 1 0
0xA0000000, // 02B1 CLOSE R0
0x80041000, // 02B2 RET 1 R8
0x70020012, // 02B3 JMP #02C7
0x54220029, // 02B4 LDINT R8 42
0x1C200C08, // 02B5 EQ R8 R6 R8
0x78220005, // 02B6 JMPF R8 #02BD
0x1C200F05, // 02B7 EQ R8 R7 K5
0x78220002, // 02B8 JMPF R8 #02BC
0x50200200, // 02B9 LDBOOL R8 1 0
0xA0000000, // 02BA CLOSE R0
0x80041000, // 02BB RET 1 R8
0x70020009, // 02BC JMP #02C7
0x60200003, // 02BD GETGBL R8 G3
0x5C240000, // 02BE MOVE R9 R0
0x7C200200, // 02BF CALL R8 1
0x8C201163, // 02C0 GETMET R8 R8 K99
0x5C280200, // 02C1 MOVE R10 R1
0x5C2C0400, // 02C2 MOVE R11 R2
0x5C300600, // 02C3 MOVE R12 R3
0x7C200800, // 02C4 CALL R8 4
0xA0000000, // 02C5 CLOSE R0
0x80041000, // 02C6 RET 1 R8
0xA0000000, // 02C7 CLOSE R0
0x80000000, // 02C8 RET 0
0x604C0015, // 0196 GETGBL R19 G21
0x7C4C0000, // 0197 CALL R19 0
0x8C4C2741, // 0198 GETMET R19 R19 K65
0x58540042, // 0199 LDCONST R21 K66
0x7C4C0400, // 019A CALL R19 2
0x8C500943, // 019B GETMET R20 R4 K67
0x7C500200, // 019C CALL R20 1
0x8C542144, // 019D GETMET R21 R16 K68
0x7C540200, // 019E CALL R21 1
0x8C542B45, // 019F GETMET R21 R21 K69
0x7C540200, // 01A0 CALL R21 1
0x8C582946, // 01A1 GETMET R22 R20 K70
0x5C602400, // 01A2 MOVE R24 R18
0x5C642A00, // 01A3 MOVE R25 R21
0x5C682600, // 01A4 MOVE R26 R19
0x546E0007, // 01A5 LDINT R27 8
0x7C580A00, // 01A6 CALL R22 5
0x885C0312, // 01A7 GETMBR R23 R1 K18
0x785E0001, // 01A8 JMPF R23 #01AB
0x885C0312, // 01A9 GETMBR R23 R1 K18
0x70020001, // 01AA JMP #01AD
0x885C0116, // 01AB GETMBR R23 R0 K22
0x885C2F47, // 01AC GETMBR R23 R23 K71
0x8C601B48, // 01AD GETMET R24 R13 K72
0x5C682000, // 01AE MOVE R26 R16
0x5C6C2200, // 01AF MOVE R27 R17
0x5C702C00, // 01B0 MOVE R28 R22
0x5C742E00, // 01B1 MOVE R29 R23
0x7C600A00, // 01B2 CALL R24 5
0x8C601B49, // 01B3 GETMET R24 R13 K73
0x7C600200, // 01B4 CALL R24 1
0x88600116, // 01B5 GETMBR R24 R0 K22
0x8C60314A, // 01B6 GETMET R24 R24 K74
0x5C681A00, // 01B7 MOVE R26 R13
0x7C600400, // 01B8 CALL R24 2
0x8C60034B, // 01B9 GETMET R24 R1 K75
0x7C600200, // 01BA CALL R24 1
0x78620002, // 01BB JMPF R24 #01BF
0x8C60034C, // 01BC GETMET R24 R1 K76
0x546A003B, // 01BD LDINT R26 60
0x7C600400, // 01BE CALL R24 2
0x8C601B4D, // 01BF GETMET R24 R13 K77
0x7C600200, // 01C0 CALL R24 1
0x8C600B09, // 01C1 GETMET R24 R5 K9
0x7C600200, // 01C2 CALL R24 1
0x8C64310A, // 01C3 GETMET R25 R24 K10
0x586C0005, // 01C4 LDCONST R27 K5
0x88700B0B, // 01C5 GETMBR R28 R5 K11
0xB8760200, // 01C6 GETNGBL R29 K1
0x88743B2B, // 01C7 GETMBR R29 R29 K43
0x7C640800, // 01C8 CALL R25 4
0x8C64310A, // 01C9 GETMET R25 R24 K10
0x586C0007, // 01CA LDCONST R27 K7
0x88700B0B, // 01CB GETMBR R28 R5 K11
0x58740007, // 01CC LDCONST R29 K7
0x7C640800, // 01CD CALL R25 4
0x54660007, // 01CE LDINT R25 8
0x900E0819, // 01CF SETMBR R3 K4 R25
0x80043000, // 01D0 RET 1 R24
0x70020056, // 01D1 JMP #0229
0x54220008, // 01D2 LDINT R8 9
0x1C200E08, // 01D3 EQ R8 R7 R8
0x7822001E, // 01D4 JMPF R8 #01F4
0x8C200506, // 01D5 GETMET R8 R2 K6
0x58280005, // 01D6 LDCONST R10 K5
0x7C200400, // 01D7 CALL R8 2
0x8C24034E, // 01D8 GETMET R9 R1 K78
0x5C2C1000, // 01D9 MOVE R11 R8
0x7C240400, // 01DA CALL R9 2
0xB8264400, // 01DB GETNGBL R9 K34
0x8C24132C, // 01DC GETMET R9 R9 K44
0x602C0018, // 01DD GETGBL R11 G24
0x5830004F, // 01DE LDCONST R12 K79
0x88340312, // 01DF GETMBR R13 R1 K18
0x8C341B50, // 01E0 GETMET R13 R13 K80
0x7C340200, // 01E1 CALL R13 1
0x8C341B44, // 01E2 GETMET R13 R13 K68
0x7C340200, // 01E3 CALL R13 1
0x8C341B45, // 01E4 GETMET R13 R13 K69
0x7C340200, // 01E5 CALL R13 1
0x8C341B51, // 01E6 GETMET R13 R13 K81
0x7C340200, // 01E7 CALL R13 1
0x60380008, // 01E8 GETGBL R14 G8
0x5C3C1000, // 01E9 MOVE R15 R8
0x7C380200, // 01EA CALL R14 1
0x7C2C0600, // 01EB CALL R11 3
0x58300010, // 01EC LDCONST R12 K16
0x7C240600, // 01ED CALL R9 3
0xB8260200, // 01EE GETNGBL R9 K1
0x8824132B, // 01EF GETMBR R9 R9 K43
0x900E3409, // 01F0 SETMBR R3 K26 R9
0x4C240000, // 01F1 LDNIL R9
0x80041200, // 01F2 RET 1 R9
0x70020034, // 01F3 JMP #0229
0x54220009, // 01F4 LDINT R8 10
0x1C200E08, // 01F5 EQ R8 R7 R8
0x78220031, // 01F6 JMPF R8 #0229
0x8C200506, // 01F7 GETMET R8 R2 K6
0x58280005, // 01F8 LDCONST R10 K5
0x7C200400, // 01F9 CALL R8 2
0x60240008, // 01FA GETGBL R9 G8
0x5C281000, // 01FB MOVE R10 R8
0x7C240200, // 01FC CALL R9 1
0x0026A409, // 01FD ADD R9 K82 R9
0x900E5809, // 01FE SETMBR R3 K44 R9
0x60240010, // 01FF GETGBL R9 G16
0x88280116, // 0200 GETMBR R10 R0 K22
0x88281530, // 0201 GETMBR R10 R10 K48
0x8C281553, // 0202 GETMET R10 R10 K83
0x7C280200, // 0203 CALL R10 1
0x7C240200, // 0204 CALL R9 1
0xA8020010, // 0205 EXBLK 0 #0217
0x5C281200, // 0206 MOVE R10 R9
0x7C280000, // 0207 CALL R10 0
0x8C2C1554, // 0208 GETMET R11 R10 K84
0x7C2C0200, // 0209 CALL R11 1
0x1C2C1608, // 020A EQ R11 R11 R8
0x782E0008, // 020B JMPF R11 #0215
0xB82E4400, // 020C GETNGBL R11 K34
0x8C2C1755, // 020D GETMET R11 R11 K85
0x543607CF, // 020E LDINT R13 2000
0x84380000, // 020F CLOSURE R14 P0
0x7C2C0600, // 0210 CALL R11 3
0x502C0200, // 0211 LDBOOL R11 1 0
0xA0000000, // 0212 CLOSE R0
0xA8040001, // 0213 EXBLK 1 1
0x80041600, // 0214 RET 1 R11
0xA0240000, // 0215 CLOSE R9
0x7001FFEE, // 0216 JMP #0206
0x58240056, // 0217 LDCONST R9 K86
0xAC240200, // 0218 CATCH R9 1 0
0xB0080000, // 0219 RAISE 2 R0 R0
0xB8264400, // 021A GETNGBL R9 K34
0x8C24132C, // 021B GETMET R9 R9 K44
0x602C0008, // 021C GETGBL R11 G8
0x5C301000, // 021D MOVE R12 R8
0x7C2C0200, // 021E CALL R11 1
0x002EAE0B, // 021F ADD R11 K87 R11
0x002C1758, // 0220 ADD R11 R11 K88
0x5830000E, // 0221 LDCONST R12 K14
0x7C240600, // 0222 CALL R9 3
0xB8260200, // 0223 GETNGBL R9 K1
0x88241359, // 0224 GETMBR R9 R9 K89
0x900E3409, // 0225 SETMBR R3 K26 R9
0x4C240000, // 0226 LDNIL R9
0xA0000000, // 0227 CLOSE R0
0x80041200, // 0228 RET 1 R9
0x7002009B, // 0229 JMP #02C6
0x5422003B, // 022A LDINT R8 60
0x1C200C08, // 022B EQ R8 R6 R8
0x78220085, // 022C JMPF R8 #02B3
0x1C200F05, // 022D EQ R8 R7 K5
0x78220065, // 022E JMPF R8 #0295
0x8C200506, // 022F GETMET R8 R2 K6
0x58280005, // 0230 LDCONST R10 K5
0x7C200400, // 0231 CALL R8 2
0x8C240506, // 0232 GETMET R9 R2 K6
0x582C0007, // 0233 LDCONST R11 K7
0x7C240400, // 0234 CALL R9 2
0x8C280506, // 0235 GETMET R10 R2 K6
0x5830000E, // 0236 LDCONST R12 K14
0x7C280400, // 0237 CALL R10 2
0x8C2C0506, // 0238 GETMET R11 R2 K6
0x58340010, // 0239 LDCONST R13 K16
0x7C2C0400, // 023A CALL R11 2
0x8C300506, // 023B GETMET R12 R2 K6
0x543A0003, // 023C LDINT R14 4
0x7C300400, // 023D CALL R12 2
0xB8364400, // 023E GETNGBL R13 K34
0x8C341B2C, // 023F GETMET R13 R13 K44
0x603C0018, // 0240 GETGBL R15 G24
0x5840005A, // 0241 LDCONST R16 K90
0x5C441000, // 0242 MOVE R17 R8
0x8C481351, // 0243 GETMET R18 R9 K81
0x7C480200, // 0244 CALL R18 1
0x5C4C1400, // 0245 MOVE R19 R10
0x5C501600, // 0246 MOVE R20 R11
0x8C541951, // 0247 GETMET R21 R12 K81
0x7C540200, // 0248 CALL R21 1
0x7C3C0C00, // 0249 CALL R15 6
0x54420003, // 024A LDINT R16 4
0x7C340600, // 024B CALL R13 3
0x4C340000, // 024C LDNIL R13
0x1C34100D, // 024D EQ R13 R8 R13
0x7436000B, // 024E JMPT R13 #025B
0x4C340000, // 024F LDNIL R13
0x1C34120D, // 0250 EQ R13 R9 R13
0x74360008, // 0251 JMPT R13 #025B
0x4C340000, // 0252 LDNIL R13
0x1C34140D, // 0253 EQ R13 R10 R13
0x74360005, // 0254 JMPT R13 #025B
0x4C340000, // 0255 LDNIL R13
0x1C34160D, // 0256 EQ R13 R11 R13
0x74360002, // 0257 JMPT R13 #025B
0x4C340000, // 0258 LDNIL R13
0x1C34180D, // 0259 EQ R13 R12 R13
0x78360005, // 025A JMPF R13 #0261
0xB8360200, // 025B GETNGBL R13 K1
0x88341B5B, // 025C GETMBR R13 R13 K91
0x900E340D, // 025D SETMBR R3 K26 R13
0x4C340000, // 025E LDNIL R13
0xA0000000, // 025F CLOSE R0
0x80041A00, // 0260 RET 1 R13
0x6034000C, // 0261 GETGBL R13 G12
0x5C381200, // 0262 MOVE R14 R9
0x7C340200, // 0263 CALL R13 1
0x543A001F, // 0264 LDINT R14 32
0x543E0040, // 0265 LDINT R15 65
0x00381C0F, // 0266 ADD R14 R14 R15
0x20341A0E, // 0267 NE R13 R13 R14
0x7436000B, // 0268 JMPT R13 #0275
0x6034000C, // 0269 GETGBL R13 G12
0x5C381800, // 026A MOVE R14 R12
0x7C340200, // 026B CALL R13 1
0x543A000F, // 026C LDINT R14 16
0x14341A0E, // 026D LT R13 R13 R14
0x74360005, // 026E JMPT R13 #0275
0x6034000C, // 026F GETGBL R13 G12
0x5C381800, // 0270 MOVE R14 R12
0x7C340200, // 0271 CALL R13 1
0x543A001F, // 0272 LDINT R14 32
0x24341A0E, // 0273 GT R13 R13 R14
0x7836000A, // 0274 JMPF R13 #0280
0xB8364400, // 0275 GETNGBL R13 K34
0x8C341B2C, // 0276 GETMET R13 R13 K44
0x583C005C, // 0277 LDCONST R15 K92
0x5840000E, // 0278 LDCONST R16 K14
0x7C340600, // 0279 CALL R13 3
0xB8360200, // 027A GETNGBL R13 K1
0x88341B5D, // 027B GETMBR R13 R13 K93
0x900E340D, // 027C SETMBR R3 K26 R13
0x4C340000, // 027D LDNIL R13
0xA0000000, // 027E CLOSE R0
0x80041A00, // 027F RET 1 R13
0x5436001E, // 0280 LDINT R13 31
0x40360A0D, // 0281 CONNECT R13 K5 R13
0x9434120D, // 0282 GETIDX R13 R9 R13
0x543A001F, // 0283 LDINT R14 32
0x40381D40, // 0284 CONNECT R14 R14 K64
0x9438120E, // 0285 GETIDX R14 R9 R14
0x883C0116, // 0286 GETMBR R15 R0 K22
0x8C3C1F5E, // 0287 GETMET R15 R15 K94
0x5C441000, // 0288 MOVE R17 R8
0x5C481600, // 0289 MOVE R18 R11
0x5C4C1400, // 028A MOVE R19 R10
0x5C501800, // 028B MOVE R20 R12
0x5C541A00, // 028C MOVE R21 R13
0x5C581C00, // 028D MOVE R22 R14
0x8C5C035F, // 028E GETMET R23 R1 K95
0x7C5C0200, // 028F CALL R23 1
0x7C3C1000, // 0290 CALL R15 8
0x503C0200, // 0291 LDBOOL R15 1 0
0xA0000000, // 0292 CLOSE R0
0x80041E00, // 0293 RET 1 R15
0x7002001C, // 0294 JMP #02B2
0x1C200F07, // 0295 EQ R8 R7 K7
0x78220012, // 0296 JMPF R8 #02AA
0x8C200506, // 0297 GETMET R8 R2 K6
0x58280005, // 0298 LDCONST R10 K5
0x7C200400, // 0299 CALL R8 2
0xB8264400, // 029A GETNGBL R9 K34
0x8C24132C, // 029B GETMET R9 R9 K44
0x602C0008, // 029C GETGBL R11 G8
0x5C301000, // 029D MOVE R12 R8
0x7C2C0200, // 029E CALL R11 1
0x002EC00B, // 029F ADD R11 K96 R11
0x58300010, // 02A0 LDCONST R12 K16
0x7C240600, // 02A1 CALL R9 3
0x88240116, // 02A2 GETMBR R9 R0 K22
0x8C241361, // 02A3 GETMET R9 R9 K97
0x5C2C1000, // 02A4 MOVE R11 R8
0x7C240400, // 02A5 CALL R9 2
0x50240200, // 02A6 LDBOOL R9 1 0
0xA0000000, // 02A7 CLOSE R0
0x80041200, // 02A8 RET 1 R9
0x70020007, // 02A9 JMP #02B2
0x1C200F0E, // 02AA EQ R8 R7 K14
0x78220005, // 02AB JMPF R8 #02B2
0x88200116, // 02AC GETMBR R8 R0 K22
0x8C201162, // 02AD GETMET R8 R8 K98
0x7C200200, // 02AE CALL R8 1
0x50200200, // 02AF LDBOOL R8 1 0
0xA0000000, // 02B0 CLOSE R0
0x80041000, // 02B1 RET 1 R8
0x70020012, // 02B2 JMP #02C6
0x54220029, // 02B3 LDINT R8 42
0x1C200C08, // 02B4 EQ R8 R6 R8
0x78220005, // 02B5 JMPF R8 #02BC
0x1C200F05, // 02B6 EQ R8 R7 K5
0x78220002, // 02B7 JMPF R8 #02BB
0x50200200, // 02B8 LDBOOL R8 1 0
0xA0000000, // 02B9 CLOSE R0
0x80041000, // 02BA RET 1 R8
0x70020009, // 02BB JMP #02C6
0x60200003, // 02BC GETGBL R8 G3
0x5C240000, // 02BD MOVE R9 R0
0x7C200200, // 02BE CALL R8 1
0x8C201163, // 02BF GETMET R8 R8 K99
0x5C280200, // 02C0 MOVE R10 R1
0x5C2C0400, // 02C1 MOVE R11 R2
0x5C300600, // 02C2 MOVE R12 R3
0x7C200800, // 02C3 CALL R8 4
0xA0000000, // 02C4 CLOSE R0
0x80041000, // 02C5 RET 1 R8
0xA0000000, // 02C6 CLOSE R0
0x80000000, // 02C7 RET 0
})
)
);

View File

@ -1,511 +0,0 @@
/* Solidification of Matter_Plugin_2_Light0.h */
/********************************************************************\
* Generated code, don't edit *
\********************************************************************/
#include "be_constobj.h"
extern const bclass be_class_Matter_Plugin_Light0;
/********************************************************************
** Solidified function: read_attribute
********************************************************************/
be_local_closure(Matter_Plugin_Light0_read_attribute, /* name */
be_nested_proto(
12, /* nstack */
4, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[11]) { /* constants */
/* K0 */ be_nested_str_weak(matter),
/* K1 */ be_nested_str_weak(TLV),
/* K2 */ be_nested_str_weak(cluster),
/* K3 */ be_nested_str_weak(attribute),
/* K4 */ be_nested_str_weak(update_shadow_lazy),
/* K5 */ be_const_int(0),
/* K6 */ be_nested_str_weak(set),
/* K7 */ be_nested_str_weak(BOOL),
/* K8 */ be_nested_str_weak(shadow_onoff),
/* K9 */ be_nested_str_weak(U4),
/* K10 */ be_nested_str_weak(read_attribute),
}),
be_str_weak(read_attribute),
&be_const_str_solidified,
( &(const binstruction[45]) { /* code */
0xB8120000, // 0000 GETNGBL R4 K0
0x88100901, // 0001 GETMBR R4 R4 K1
0x88140502, // 0002 GETMBR R5 R2 K2
0x88180503, // 0003 GETMBR R6 R2 K3
0x541E0005, // 0004 LDINT R7 6
0x1C1C0A07, // 0005 EQ R7 R5 R7
0x781E001B, // 0006 JMPF R7 #0023
0x8C1C0104, // 0007 GETMET R7 R0 K4
0x7C1C0200, // 0008 CALL R7 1
0x1C1C0D05, // 0009 EQ R7 R6 K5
0x781E0005, // 000A JMPF R7 #0011
0x8C1C0706, // 000B GETMET R7 R3 K6
0x88240907, // 000C GETMBR R9 R4 K7
0x88280108, // 000D GETMBR R10 R0 K8
0x7C1C0600, // 000E CALL R7 3
0x80040E00, // 000F RET 1 R7
0x70020010, // 0010 JMP #0022
0x541EFFFB, // 0011 LDINT R7 65532
0x1C1C0C07, // 0012 EQ R7 R6 R7
0x781E0005, // 0013 JMPF R7 #001A
0x8C1C0706, // 0014 GETMET R7 R3 K6
0x88240909, // 0015 GETMBR R9 R4 K9
0x58280005, // 0016 LDCONST R10 K5
0x7C1C0600, // 0017 CALL R7 3
0x80040E00, // 0018 RET 1 R7
0x70020007, // 0019 JMP #0022
0x541EFFFC, // 001A LDINT R7 65533
0x1C1C0C07, // 001B EQ R7 R6 R7
0x781E0004, // 001C JMPF R7 #0022
0x8C1C0706, // 001D GETMET R7 R3 K6
0x88240909, // 001E GETMBR R9 R4 K9
0x542A0003, // 001F LDINT R10 4
0x7C1C0600, // 0020 CALL R7 3
0x80040E00, // 0021 RET 1 R7
0x70020008, // 0022 JMP #002C
0x601C0003, // 0023 GETGBL R7 G3
0x5C200000, // 0024 MOVE R8 R0
0x7C1C0200, // 0025 CALL R7 1
0x8C1C0F0A, // 0026 GETMET R7 R7 K10
0x5C240200, // 0027 MOVE R9 R1
0x5C280400, // 0028 MOVE R10 R2
0x5C2C0600, // 0029 MOVE R11 R3
0x7C1C0800, // 002A CALL R7 4
0x80040E00, // 002B RET 1 R7
0x80000000, // 002C RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: set_onoff
********************************************************************/
be_local_closure(Matter_Plugin_Light0_set_onoff, /* name */
be_nested_proto(
6, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 8]) { /* constants */
/* K0 */ be_nested_str_weak(VIRTUAL),
/* K1 */ be_nested_str_weak(light),
/* K2 */ be_nested_str_weak(set),
/* K3 */ be_nested_str_weak(power),
/* K4 */ be_nested_str_weak(update_shadow),
/* K5 */ be_nested_str_weak(shadow_onoff),
/* K6 */ be_nested_str_weak(attribute_updated),
/* K7 */ be_const_int(0),
}),
be_str_weak(set_onoff),
&be_const_str_solidified,
( &(const binstruction[20]) { /* code */
0x88080100, // 0000 GETMBR R2 R0 K0
0x740A0008, // 0001 JMPT R2 #000B
0xA40A0200, // 0002 IMPORT R2 K1
0x8C0C0502, // 0003 GETMET R3 R2 K2
0x60140013, // 0004 GETGBL R5 G19
0x7C140000, // 0005 CALL R5 0
0x98160601, // 0006 SETIDX R5 K3 R1
0x7C0C0400, // 0007 CALL R3 2
0x8C0C0104, // 0008 GETMET R3 R0 K4
0x7C0C0200, // 0009 CALL R3 1
0x70020007, // 000A JMP #0013
0x88080105, // 000B GETMBR R2 R0 K5
0x20080202, // 000C NE R2 R1 R2
0x780A0004, // 000D JMPF R2 #0013
0x8C080106, // 000E GETMET R2 R0 K6
0x54120005, // 000F LDINT R4 6
0x58140007, // 0010 LDCONST R5 K7
0x7C080600, // 0011 CALL R2 3
0x90020A01, // 0012 SETMBR R0 K5 R1
0x80000000, // 0013 RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: update_virtual
********************************************************************/
be_local_closure(Matter_Plugin_Light0_update_virtual, /* name */
be_nested_proto(
7, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 4]) { /* constants */
/* K0 */ be_nested_str_weak(find),
/* K1 */ be_nested_str_weak(Power),
/* K2 */ be_nested_str_weak(set_onoff),
/* K3 */ be_nested_str_weak(update_virtual),
}),
be_str_weak(update_virtual),
&be_const_str_solidified,
( &(const binstruction[18]) { /* code */
0x8C080300, // 0000 GETMET R2 R1 K0
0x58100001, // 0001 LDCONST R4 K1
0x7C080400, // 0002 CALL R2 2
0x4C0C0000, // 0003 LDNIL R3
0x200C0403, // 0004 NE R3 R2 R3
0x780E0004, // 0005 JMPF R3 #000B
0x8C0C0102, // 0006 GETMET R3 R0 K2
0x60140017, // 0007 GETGBL R5 G23
0x5C180400, // 0008 MOVE R6 R2
0x7C140200, // 0009 CALL R5 1
0x7C0C0400, // 000A CALL R3 2
0x600C0003, // 000B GETGBL R3 G3
0x5C100000, // 000C MOVE R4 R0
0x7C0C0200, // 000D CALL R3 1
0x8C0C0703, // 000E GETMET R3 R3 K3
0x5C140200, // 000F MOVE R5 R1
0x7C0C0400, // 0010 CALL R3 2
0x80000000, // 0011 RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: init
********************************************************************/
be_local_closure(Matter_Plugin_Light0_init, /* name */
be_nested_proto(
9, /* nstack */
4, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 2]) { /* constants */
/* K0 */ be_nested_str_weak(init),
/* K1 */ be_nested_str_weak(shadow_onoff),
}),
be_str_weak(init),
&be_const_str_solidified,
( &(const binstruction[11]) { /* code */
0x60100003, // 0000 GETGBL R4 G3
0x5C140000, // 0001 MOVE R5 R0
0x7C100200, // 0002 CALL R4 1
0x8C100900, // 0003 GETMET R4 R4 K0
0x5C180200, // 0004 MOVE R6 R1
0x5C1C0400, // 0005 MOVE R7 R2
0x5C200600, // 0006 MOVE R8 R3
0x7C100800, // 0007 CALL R4 4
0x50100000, // 0008 LDBOOL R4 0 0
0x90020204, // 0009 SETMBR R0 K1 R4
0x80000000, // 000A RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: update_shadow
********************************************************************/
be_local_closure(Matter_Plugin_Light0_update_shadow, /* name */
be_nested_proto(
8, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 9]) { /* constants */
/* K0 */ be_nested_str_weak(VIRTUAL),
/* K1 */ be_nested_str_weak(light),
/* K2 */ be_nested_str_weak(get),
/* K3 */ be_nested_str_weak(find),
/* K4 */ be_nested_str_weak(power),
/* K5 */ be_nested_str_weak(shadow_onoff),
/* K6 */ be_nested_str_weak(attribute_updated),
/* K7 */ be_const_int(0),
/* K8 */ be_nested_str_weak(update_shadow),
}),
be_str_weak(update_shadow),
&be_const_str_solidified,
( &(const binstruction[26]) { /* code */
0x88040100, // 0000 GETMBR R1 R0 K0
0x74060011, // 0001 JMPT R1 #0014
0xA4060200, // 0002 IMPORT R1 K1
0x8C080302, // 0003 GETMET R2 R1 K2
0x7C080200, // 0004 CALL R2 1
0x4C0C0000, // 0005 LDNIL R3
0x200C0403, // 0006 NE R3 R2 R3
0x780E000B, // 0007 JMPF R3 #0014
0x8C0C0503, // 0008 GETMET R3 R2 K3
0x58140004, // 0009 LDCONST R5 K4
0x4C180000, // 000A LDNIL R6
0x7C0C0600, // 000B CALL R3 3
0x88100105, // 000C GETMBR R4 R0 K5
0x20100604, // 000D NE R4 R3 R4
0x78120004, // 000E JMPF R4 #0014
0x8C100106, // 000F GETMET R4 R0 K6
0x541A0005, // 0010 LDINT R6 6
0x581C0007, // 0011 LDCONST R7 K7
0x7C100600, // 0012 CALL R4 3
0x90020A03, // 0013 SETMBR R0 K5 R3
0x60040003, // 0014 GETGBL R1 G3
0x5C080000, // 0015 MOVE R2 R0
0x7C040200, // 0016 CALL R1 1
0x8C040308, // 0017 GETMET R1 R1 K8
0x7C040200, // 0018 CALL R1 1
0x80000000, // 0019 RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: invoke_request
********************************************************************/
be_local_closure(Matter_Plugin_Light0_invoke_request, /* name */
be_nested_proto(
12, /* nstack */
4, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[13]) { /* constants */
/* K0 */ be_nested_str_weak(light),
/* K1 */ be_nested_str_weak(matter),
/* K2 */ be_nested_str_weak(TLV),
/* K3 */ be_nested_str_weak(cluster),
/* K4 */ be_nested_str_weak(command),
/* K5 */ be_nested_str_weak(update_shadow_lazy),
/* K6 */ be_const_int(0),
/* K7 */ be_nested_str_weak(set_onoff),
/* K8 */ be_nested_str_weak(publish_command),
/* K9 */ be_nested_str_weak(Power),
/* K10 */ be_const_int(1),
/* K11 */ be_const_int(2),
/* K12 */ be_nested_str_weak(shadow_onoff),
}),
be_str_weak(invoke_request),
&be_const_str_solidified,
( &(const binstruction[53]) { /* code */
0xA4120000, // 0000 IMPORT R4 K0
0xB8160200, // 0001 GETNGBL R5 K1
0x88140B02, // 0002 GETMBR R5 R5 K2
0x88180703, // 0003 GETMBR R6 R3 K3
0x881C0704, // 0004 GETMBR R7 R3 K4
0x54220005, // 0005 LDINT R8 6
0x1C200C08, // 0006 EQ R8 R6 R8
0x7822002B, // 0007 JMPF R8 #0034
0x8C200105, // 0008 GETMET R8 R0 K5
0x7C200200, // 0009 CALL R8 1
0x1C200F06, // 000A EQ R8 R7 K6
0x78220009, // 000B JMPF R8 #0016
0x8C200107, // 000C GETMET R8 R0 K7
0x50280000, // 000D LDBOOL R10 0 0
0x7C200400, // 000E CALL R8 2
0x8C200108, // 000F GETMET R8 R0 K8
0x58280009, // 0010 LDCONST R10 K9
0x582C0006, // 0011 LDCONST R11 K6
0x7C200600, // 0012 CALL R8 3
0x50200200, // 0013 LDBOOL R8 1 0
0x80041000, // 0014 RET 1 R8
0x7002001D, // 0015 JMP #0034
0x1C200F0A, // 0016 EQ R8 R7 K10
0x78220009, // 0017 JMPF R8 #0022
0x8C200107, // 0018 GETMET R8 R0 K7
0x50280200, // 0019 LDBOOL R10 1 0
0x7C200400, // 001A CALL R8 2
0x8C200108, // 001B GETMET R8 R0 K8
0x58280009, // 001C LDCONST R10 K9
0x582C000A, // 001D LDCONST R11 K10
0x7C200600, // 001E CALL R8 3
0x50200200, // 001F LDBOOL R8 1 0
0x80041000, // 0020 RET 1 R8
0x70020011, // 0021 JMP #0034
0x1C200F0B, // 0022 EQ R8 R7 K11
0x7822000F, // 0023 JMPF R8 #0034
0x8C200107, // 0024 GETMET R8 R0 K7
0x8828010C, // 0025 GETMBR R10 R0 K12
0x782A0000, // 0026 JMPF R10 #0028
0x50280001, // 0027 LDBOOL R10 0 1
0x50280200, // 0028 LDBOOL R10 1 0
0x7C200400, // 0029 CALL R8 2
0x8C200108, // 002A GETMET R8 R0 K8
0x58280009, // 002B LDCONST R10 K9
0x882C010C, // 002C GETMBR R11 R0 K12
0x782E0001, // 002D JMPF R11 #0030
0x582C000A, // 002E LDCONST R11 K10
0x70020000, // 002F JMP #0031
0x582C0006, // 0030 LDCONST R11 K6
0x7C200600, // 0031 CALL R8 3
0x50200200, // 0032 LDBOOL R8 1 0
0x80041000, // 0033 RET 1 R8
0x80000000, // 0034 RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: find_val_i
********************************************************************/
be_local_closure(Matter_Plugin_Light0_find_val_i, /* name */
be_nested_proto(
7, /* nstack */
2, /* argc */
4, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 4]) { /* constants */
/* K0 */ be_const_class(be_class_Matter_Plugin_Light0),
/* K1 */ be_nested_str_weak(tasmota),
/* K2 */ be_nested_str_weak(find_key_i),
/* K3 */ be_nested_str_weak(find),
}),
be_str_weak(find_val_i),
&be_const_str_solidified,
( &(const binstruction[10]) { /* code */
0x58080000, // 0000 LDCONST R2 K0
0xB80E0200, // 0001 GETNGBL R3 K1
0x8C0C0702, // 0002 GETMET R3 R3 K2
0x5C140000, // 0003 MOVE R5 R0
0x5C180200, // 0004 MOVE R6 R1
0x7C0C0600, // 0005 CALL R3 3
0x8C100103, // 0006 GETMET R4 R0 K3
0x5C180600, // 0007 MOVE R6 R3
0x7C100400, // 0008 CALL R4 2
0x80040800, // 0009 RET 1 R4
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified class: Matter_Plugin_Light0
********************************************************************/
extern const bclass be_class_Matter_Plugin_Device;
be_local_class(Matter_Plugin_Light0,
1,
&be_class_Matter_Plugin_Device,
be_nested_map(14,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_weak(read_attribute, 9), be_const_closure(Matter_Plugin_Light0_read_attribute_closure) },
{ be_const_key_weak(UPDATE_TIME, 4), be_const_int(250) },
{ be_const_key_weak(update_virtual, 1), be_const_closure(Matter_Plugin_Light0_update_virtual_closure) },
{ be_const_key_weak(UPDATE_COMMANDS, 13), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(1,
( (struct bvalue*) &(const bvalue[]) {
be_nested_str_weak(Power),
})) ) } )) },
{ be_const_key_weak(find_val_i, -1), be_const_static_closure(Matter_Plugin_Light0_find_val_i_closure) },
{ be_const_key_weak(init, 11), be_const_closure(Matter_Plugin_Light0_init_closure) },
{ be_const_key_weak(set_onoff, 12), be_const_closure(Matter_Plugin_Light0_set_onoff_closure) },
{ be_const_key_weak(update_shadow, 8), be_const_closure(Matter_Plugin_Light0_update_shadow_closure) },
{ be_const_key_weak(invoke_request, -1), be_const_closure(Matter_Plugin_Light0_invoke_request_closure) },
{ be_const_key_weak(CLUSTERS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
be_const_map( * be_nested_map(6,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_int(6, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(3,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(5, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(8,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(1),
be_const_int(2),
be_const_int(3),
be_const_int(4),
be_const_int(5),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(57, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(7,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(17),
be_const_int(3),
be_const_int(5),
be_const_int(10),
be_const_int(15),
be_const_int(17),
be_const_int(18),
})) ) } )) },
{ be_const_key_int(3, 2), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(4,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(1),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(4, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(3,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(29, 1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(6,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(1),
be_const_int(2),
be_const_int(3),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
})) ) } )) },
{ be_const_key_weak(TYPES, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
be_const_map( * be_nested_map(1,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_int(256, -1), be_const_int(2) },
})) ) } )) },
{ be_const_key_weak(DISPLAY_NAME, -1), be_nested_str_weak(Light_X200_X20On) },
{ be_const_key_weak(shadow_onoff, -1), be_const_var(0) },
{ be_const_key_weak(TYPE, -1), be_nested_str_weak(light0) },
})),
be_str_weak(Matter_Plugin_Light0)
);
/*******************************************************************/
void be_load_Matter_Plugin_Light0_class(bvm *vm) {
be_pushntvclass(vm, &be_class_Matter_Plugin_Light0);
be_setglobal(vm, "Matter_Plugin_Light0");
be_pop(vm, 1);
}
/********************************************************************/
/* End of solidification */

View File

@ -0,0 +1,828 @@
/* Solidification of Matter_Plugin_2_Light1.h */
/********************************************************************\
* Generated code, don't edit *
\********************************************************************/
#include "be_constobj.h"
extern const bclass be_class_Matter_Plugin_Light1;
/********************************************************************
** Solidified function: init
********************************************************************/
be_local_closure(Matter_Plugin_Light1_init, /* name */
be_nested_proto(
9, /* nstack */
4, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 4]) { /* constants */
/* K0 */ be_nested_str_weak(init),
/* K1 */ be_nested_str_weak(shadow_onoff),
/* K2 */ be_nested_str_weak(shadow_bri),
/* K3 */ be_const_int(0),
}),
be_str_weak(init),
&be_const_str_solidified,
( &(const binstruction[12]) { /* code */
0x60100003, // 0000 GETGBL R4 G3
0x5C140000, // 0001 MOVE R5 R0
0x7C100200, // 0002 CALL R4 1
0x8C100900, // 0003 GETMET R4 R4 K0
0x5C180200, // 0004 MOVE R6 R1
0x5C1C0400, // 0005 MOVE R7 R2
0x5C200600, // 0006 MOVE R8 R3
0x7C100800, // 0007 CALL R4 4
0x50100000, // 0008 LDBOOL R4 0 0
0x90020204, // 0009 SETMBR R0 K1 R4
0x90020503, // 000A SETMBR R0 K2 K3
0x80000000, // 000B RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: invoke_request
********************************************************************/
be_local_closure(Matter_Plugin_Light1_invoke_request, /* name */
be_nested_proto(
22, /* nstack */
4, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[23]) { /* constants */
/* K0 */ be_nested_str_weak(light),
/* K1 */ be_nested_str_weak(matter),
/* K2 */ be_nested_str_weak(TLV),
/* K3 */ be_nested_str_weak(cluster),
/* K4 */ be_nested_str_weak(command),
/* K5 */ be_nested_str_weak(update_shadow_lazy),
/* K6 */ be_const_int(0),
/* K7 */ be_nested_str_weak(set_onoff),
/* K8 */ be_nested_str_weak(publish_command),
/* K9 */ be_nested_str_weak(Power),
/* K10 */ be_const_int(1),
/* K11 */ be_const_int(2),
/* K12 */ be_nested_str_weak(shadow_onoff),
/* K13 */ be_nested_str_weak(findsubval),
/* K14 */ be_nested_str_weak(set_bri),
/* K15 */ be_nested_str_weak(log),
/* K16 */ be_nested_str_weak(bri_X3A),
/* K17 */ be_nested_str_weak(Bri),
/* K18 */ be_nested_str_weak(Dimmer),
/* K19 */ be_nested_str_weak(tasmota),
/* K20 */ be_nested_str_weak(scale_uint),
/* K21 */ be_const_int(3),
/* K22 */ be_nested_str_weak(invoke_request),
}),
be_str_weak(invoke_request),
&be_const_str_solidified,
( &(const binstruction[167]) { /* code */
0xA4120000, // 0000 IMPORT R4 K0
0xB8160200, // 0001 GETNGBL R5 K1
0x88140B02, // 0002 GETMBR R5 R5 K2
0x88180703, // 0003 GETMBR R6 R3 K3
0x881C0704, // 0004 GETMBR R7 R3 K4
0x54220005, // 0005 LDINT R8 6
0x1C200C08, // 0006 EQ R8 R6 R8
0x7822002C, // 0007 JMPF R8 #0035
0x8C200105, // 0008 GETMET R8 R0 K5
0x7C200200, // 0009 CALL R8 1
0x1C200F06, // 000A EQ R8 R7 K6
0x78220009, // 000B JMPF R8 #0016
0x8C200107, // 000C GETMET R8 R0 K7
0x50280000, // 000D LDBOOL R10 0 0
0x7C200400, // 000E CALL R8 2
0x8C200108, // 000F GETMET R8 R0 K8
0x58280009, // 0010 LDCONST R10 K9
0x582C0006, // 0011 LDCONST R11 K6
0x7C200600, // 0012 CALL R8 3
0x50200200, // 0013 LDBOOL R8 1 0
0x80041000, // 0014 RET 1 R8
0x7002001D, // 0015 JMP #0034
0x1C200F0A, // 0016 EQ R8 R7 K10
0x78220009, // 0017 JMPF R8 #0022
0x8C200107, // 0018 GETMET R8 R0 K7
0x50280200, // 0019 LDBOOL R10 1 0
0x7C200400, // 001A CALL R8 2
0x8C200108, // 001B GETMET R8 R0 K8
0x58280009, // 001C LDCONST R10 K9
0x582C000A, // 001D LDCONST R11 K10
0x7C200600, // 001E CALL R8 3
0x50200200, // 001F LDBOOL R8 1 0
0x80041000, // 0020 RET 1 R8
0x70020011, // 0021 JMP #0034
0x1C200F0B, // 0022 EQ R8 R7 K11
0x7822000F, // 0023 JMPF R8 #0034
0x8C200107, // 0024 GETMET R8 R0 K7
0x8828010C, // 0025 GETMBR R10 R0 K12
0x782A0000, // 0026 JMPF R10 #0028
0x50280001, // 0027 LDBOOL R10 0 1
0x50280200, // 0028 LDBOOL R10 1 0
0x7C200400, // 0029 CALL R8 2
0x8C200108, // 002A GETMET R8 R0 K8
0x58280009, // 002B LDCONST R10 K9
0x882C010C, // 002C GETMBR R11 R0 K12
0x782E0001, // 002D JMPF R11 #0030
0x582C000A, // 002E LDCONST R11 K10
0x70020000, // 002F JMP #0031
0x582C0006, // 0030 LDCONST R11 K6
0x7C200600, // 0031 CALL R8 3
0x50200200, // 0032 LDBOOL R8 1 0
0x80041000, // 0033 RET 1 R8
0x70020070, // 0034 JMP #00A6
0x54220007, // 0035 LDINT R8 8
0x1C200C08, // 0036 EQ R8 R6 R8
0x78220064, // 0037 JMPF R8 #009D
0x8C200105, // 0038 GETMET R8 R0 K5
0x7C200200, // 0039 CALL R8 1
0x1C200F06, // 003A EQ R8 R7 K6
0x7822001A, // 003B JMPF R8 #0057
0x8C20050D, // 003C GETMET R8 R2 K13
0x58280006, // 003D LDCONST R10 K6
0x7C200400, // 003E CALL R8 2
0x8C24010E, // 003F GETMET R9 R0 K14
0x5C2C1000, // 0040 MOVE R11 R8
0x7C240400, // 0041 CALL R9 2
0x60240008, // 0042 GETGBL R9 G8
0x5C281000, // 0043 MOVE R10 R8
0x7C240200, // 0044 CALL R9 1
0x00262009, // 0045 ADD R9 K16 R9
0x900E1E09, // 0046 SETMBR R3 K15 R9
0x8C240108, // 0047 GETMET R9 R0 K8
0x582C0011, // 0048 LDCONST R11 K17
0x5C301000, // 0049 MOVE R12 R8
0x58340012, // 004A LDCONST R13 K18
0xB83A2600, // 004B GETNGBL R14 K19
0x8C381D14, // 004C GETMET R14 R14 K20
0x5C401000, // 004D MOVE R16 R8
0x58440006, // 004E LDCONST R17 K6
0x544A00FD, // 004F LDINT R18 254
0x584C0006, // 0050 LDCONST R19 K6
0x54520063, // 0051 LDINT R20 100
0x7C380C00, // 0052 CALL R14 6
0x7C240A00, // 0053 CALL R9 5
0x50240200, // 0054 LDBOOL R9 1 0
0x80041200, // 0055 RET 1 R9
0x70020044, // 0056 JMP #009C
0x1C200F0A, // 0057 EQ R8 R7 K10
0x78220002, // 0058 JMPF R8 #005C
0x50200200, // 0059 LDBOOL R8 1 0
0x80041000, // 005A RET 1 R8
0x7002003F, // 005B JMP #009C
0x1C200F0B, // 005C EQ R8 R7 K11
0x78220002, // 005D JMPF R8 #0061
0x50200200, // 005E LDBOOL R8 1 0
0x80041000, // 005F RET 1 R8
0x7002003A, // 0060 JMP #009C
0x1C200F15, // 0061 EQ R8 R7 K21
0x78220002, // 0062 JMPF R8 #0066
0x50200200, // 0063 LDBOOL R8 1 0
0x80041000, // 0064 RET 1 R8
0x70020035, // 0065 JMP #009C
0x54220003, // 0066 LDINT R8 4
0x1C200E08, // 0067 EQ R8 R7 R8
0x78220021, // 0068 JMPF R8 #008B
0x8C20050D, // 0069 GETMET R8 R2 K13
0x58280006, // 006A LDCONST R10 K6
0x7C200400, // 006B CALL R8 2
0x24241106, // 006C GT R9 R8 K6
0x8C28010E, // 006D GETMET R10 R0 K14
0x5C301000, // 006E MOVE R12 R8
0x5C341200, // 006F MOVE R13 R9
0x7C280600, // 0070 CALL R10 3
0x60280008, // 0071 GETGBL R10 G8
0x5C2C1000, // 0072 MOVE R11 R8
0x7C280200, // 0073 CALL R10 1
0x002A200A, // 0074 ADD R10 K16 R10
0x900E1E0A, // 0075 SETMBR R3 K15 R10
0x8C280108, // 0076 GETMET R10 R0 K8
0x58300011, // 0077 LDCONST R12 K17
0x5C341000, // 0078 MOVE R13 R8
0x58380012, // 0079 LDCONST R14 K18
0xB83E2600, // 007A GETNGBL R15 K19
0x8C3C1F14, // 007B GETMET R15 R15 K20
0x5C441000, // 007C MOVE R17 R8
0x58480006, // 007D LDCONST R18 K6
0x544E00FD, // 007E LDINT R19 254
0x58500006, // 007F LDCONST R20 K6
0x54560063, // 0080 LDINT R21 100
0x7C3C0C00, // 0081 CALL R15 6
0x58400009, // 0082 LDCONST R16 K9
0x78260001, // 0083 JMPF R9 #0086
0x5844000A, // 0084 LDCONST R17 K10
0x70020000, // 0085 JMP #0087
0x58440006, // 0086 LDCONST R17 K6
0x7C280E00, // 0087 CALL R10 7
0x50280200, // 0088 LDBOOL R10 1 0
0x80041400, // 0089 RET 1 R10
0x70020010, // 008A JMP #009C
0x54220004, // 008B LDINT R8 5
0x1C200E08, // 008C EQ R8 R7 R8
0x78220002, // 008D JMPF R8 #0091
0x50200200, // 008E LDBOOL R8 1 0
0x80041000, // 008F RET 1 R8
0x7002000A, // 0090 JMP #009C
0x54220005, // 0091 LDINT R8 6
0x1C200E08, // 0092 EQ R8 R7 R8
0x78220002, // 0093 JMPF R8 #0097
0x50200200, // 0094 LDBOOL R8 1 0
0x80041000, // 0095 RET 1 R8
0x70020004, // 0096 JMP #009C
0x54220006, // 0097 LDINT R8 7
0x1C200E08, // 0098 EQ R8 R7 R8
0x78220001, // 0099 JMPF R8 #009C
0x50200200, // 009A LDBOOL R8 1 0
0x80041000, // 009B RET 1 R8
0x70020008, // 009C JMP #00A6
0x60200003, // 009D GETGBL R8 G3
0x5C240000, // 009E MOVE R9 R0
0x7C200200, // 009F CALL R8 1
0x8C201116, // 00A0 GETMET R8 R8 K22
0x5C280200, // 00A1 MOVE R10 R1
0x5C2C0400, // 00A2 MOVE R11 R2
0x5C300600, // 00A3 MOVE R12 R3
0x7C200800, // 00A4 CALL R8 4
0x80041000, // 00A5 RET 1 R8
0x80000000, // 00A6 RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: set_onoff
********************************************************************/
be_local_closure(Matter_Plugin_Light1_set_onoff, /* name */
be_nested_proto(
6, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 8]) { /* constants */
/* K0 */ be_nested_str_weak(VIRTUAL),
/* K1 */ be_nested_str_weak(light),
/* K2 */ be_nested_str_weak(set),
/* K3 */ be_nested_str_weak(power),
/* K4 */ be_nested_str_weak(update_shadow),
/* K5 */ be_nested_str_weak(shadow_onoff),
/* K6 */ be_nested_str_weak(attribute_updated),
/* K7 */ be_const_int(0),
}),
be_str_weak(set_onoff),
&be_const_str_solidified,
( &(const binstruction[20]) { /* code */
0x88080100, // 0000 GETMBR R2 R0 K0
0x740A0008, // 0001 JMPT R2 #000B
0xA40A0200, // 0002 IMPORT R2 K1
0x8C0C0502, // 0003 GETMET R3 R2 K2
0x60140013, // 0004 GETGBL R5 G19
0x7C140000, // 0005 CALL R5 0
0x98160601, // 0006 SETIDX R5 K3 R1
0x7C0C0400, // 0007 CALL R3 2
0x8C0C0104, // 0008 GETMET R3 R0 K4
0x7C0C0200, // 0009 CALL R3 1
0x70020007, // 000A JMP #0013
0x88080105, // 000B GETMBR R2 R0 K5
0x20080202, // 000C NE R2 R1 R2
0x780A0004, // 000D JMPF R2 #0013
0x8C080106, // 000E GETMET R2 R0 K6
0x54120005, // 000F LDINT R4 6
0x58140007, // 0010 LDCONST R5 K7
0x7C080600, // 0011 CALL R2 3
0x90020A01, // 0012 SETMBR R0 K5 R1
0x80000000, // 0013 RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: update_shadow
********************************************************************/
be_local_closure(Matter_Plugin_Light1_update_shadow, /* name */
be_nested_proto(
12, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[13]) { /* constants */
/* K0 */ be_nested_str_weak(VIRTUAL),
/* K1 */ be_nested_str_weak(light),
/* K2 */ be_nested_str_weak(get),
/* K3 */ be_nested_str_weak(find),
/* K4 */ be_nested_str_weak(power),
/* K5 */ be_nested_str_weak(shadow_onoff),
/* K6 */ be_nested_str_weak(attribute_updated),
/* K7 */ be_const_int(0),
/* K8 */ be_nested_str_weak(bri),
/* K9 */ be_nested_str_weak(tasmota),
/* K10 */ be_nested_str_weak(scale_uint),
/* K11 */ be_nested_str_weak(shadow_bri),
/* K12 */ be_nested_str_weak(update_shadow),
}),
be_str_weak(update_shadow),
&be_const_str_solidified,
( &(const binstruction[50]) { /* code */
0x88040100, // 0000 GETMBR R1 R0 K0
0x74060029, // 0001 JMPT R1 #002C
0xA4060200, // 0002 IMPORT R1 K1
0x8C080302, // 0003 GETMET R2 R1 K2
0x7C080200, // 0004 CALL R2 1
0x4C0C0000, // 0005 LDNIL R3
0x200C0403, // 0006 NE R3 R2 R3
0x780E0023, // 0007 JMPF R3 #002C
0x8C0C0503, // 0008 GETMET R3 R2 K3
0x58140004, // 0009 LDCONST R5 K4
0x4C180000, // 000A LDNIL R6
0x7C0C0600, // 000B CALL R3 3
0x88100105, // 000C GETMBR R4 R0 K5
0x20100604, // 000D NE R4 R3 R4
0x78120004, // 000E JMPF R4 #0014
0x8C100106, // 000F GETMET R4 R0 K6
0x541A0005, // 0010 LDINT R6 6
0x581C0007, // 0011 LDCONST R7 K7
0x7C100600, // 0012 CALL R4 3
0x90020A03, // 0013 SETMBR R0 K5 R3
0x8C100503, // 0014 GETMET R4 R2 K3
0x58180008, // 0015 LDCONST R6 K8
0x4C1C0000, // 0016 LDNIL R7
0x7C100600, // 0017 CALL R4 3
0x4C140000, // 0018 LDNIL R5
0x20140805, // 0019 NE R5 R4 R5
0x78160010, // 001A JMPF R5 #002C
0xB8161200, // 001B GETNGBL R5 K9
0x8C140B0A, // 001C GETMET R5 R5 K10
0x5C1C0800, // 001D MOVE R7 R4
0x58200007, // 001E LDCONST R8 K7
0x542600FE, // 001F LDINT R9 255
0x58280007, // 0020 LDCONST R10 K7
0x542E00FD, // 0021 LDINT R11 254
0x7C140C00, // 0022 CALL R5 6
0x5C100A00, // 0023 MOVE R4 R5
0x8814010B, // 0024 GETMBR R5 R0 K11
0x20140805, // 0025 NE R5 R4 R5
0x78160004, // 0026 JMPF R5 #002C
0x8C140106, // 0027 GETMET R5 R0 K6
0x541E0007, // 0028 LDINT R7 8
0x58200007, // 0029 LDCONST R8 K7
0x7C140600, // 002A CALL R5 3
0x90021604, // 002B SETMBR R0 K11 R4
0x60040003, // 002C GETGBL R1 G3
0x5C080000, // 002D MOVE R2 R0
0x7C040200, // 002E CALL R1 1
0x8C04030C, // 002F GETMET R1 R1 K12
0x7C040200, // 0030 CALL R1 1
0x80000000, // 0031 RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: update_virtual
********************************************************************/
be_local_closure(Matter_Plugin_Light1_update_virtual, /* name */
be_nested_proto(
8, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 6]) { /* constants */
/* K0 */ be_nested_str_weak(find),
/* K1 */ be_nested_str_weak(Power),
/* K2 */ be_nested_str_weak(Bri),
/* K3 */ be_nested_str_weak(set_bri),
/* K4 */ be_nested_str_weak(set_onoff),
/* K5 */ be_nested_str_weak(update_virtual),
}),
be_str_weak(update_virtual),
&be_const_str_solidified,
( &(const binstruction[32]) { /* code */
0x8C080300, // 0000 GETMET R2 R1 K0
0x58100001, // 0001 LDCONST R4 K1
0x7C080400, // 0002 CALL R2 2
0x8C0C0300, // 0003 GETMET R3 R1 K0
0x58140002, // 0004 LDCONST R5 K2
0x7C0C0400, // 0005 CALL R3 2
0x4C100000, // 0006 LDNIL R4
0x20100604, // 0007 NE R4 R3 R4
0x78120007, // 0008 JMPF R4 #0011
0x8C100103, // 0009 GETMET R4 R0 K3
0x60180009, // 000A GETGBL R6 G9
0x5C1C0600, // 000B MOVE R7 R3
0x7C180200, // 000C CALL R6 1
0x5C1C0400, // 000D MOVE R7 R2
0x7C100600, // 000E CALL R4 3
0x80000800, // 000F RET 0
0x70020007, // 0010 JMP #0019
0x4C100000, // 0011 LDNIL R4
0x20100404, // 0012 NE R4 R2 R4
0x78120004, // 0013 JMPF R4 #0019
0x8C100104, // 0014 GETMET R4 R0 K4
0x60180017, // 0015 GETGBL R6 G23
0x5C1C0400, // 0016 MOVE R7 R2
0x7C180200, // 0017 CALL R6 1
0x7C100400, // 0018 CALL R4 2
0x60100003, // 0019 GETGBL R4 G3
0x5C140000, // 001A MOVE R5 R0
0x7C100200, // 001B CALL R4 1
0x8C100905, // 001C GETMET R4 R4 K5
0x5C180200, // 001D MOVE R6 R1
0x7C100400, // 001E CALL R4 2
0x80000000, // 001F RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: read_attribute
********************************************************************/
be_local_closure(Matter_Plugin_Light1_read_attribute, /* name */
be_nested_proto(
12, /* nstack */
4, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[16]) { /* constants */
/* K0 */ be_nested_str_weak(matter),
/* K1 */ be_nested_str_weak(TLV),
/* K2 */ be_nested_str_weak(cluster),
/* K3 */ be_nested_str_weak(attribute),
/* K4 */ be_nested_str_weak(update_shadow_lazy),
/* K5 */ be_const_int(0),
/* K6 */ be_nested_str_weak(set),
/* K7 */ be_nested_str_weak(BOOL),
/* K8 */ be_nested_str_weak(shadow_onoff),
/* K9 */ be_nested_str_weak(U4),
/* K10 */ be_nested_str_weak(U1),
/* K11 */ be_nested_str_weak(shadow_bri),
/* K12 */ be_const_int(2),
/* K13 */ be_const_int(3),
/* K14 */ be_const_int(1),
/* K15 */ be_nested_str_weak(read_attribute),
}),
be_str_weak(read_attribute),
&be_const_str_solidified,
( &(const binstruction[110]) { /* code */
0xB8120000, // 0000 GETNGBL R4 K0
0x88100901, // 0001 GETMBR R4 R4 K1
0x88140502, // 0002 GETMBR R5 R2 K2
0x88180503, // 0003 GETMBR R6 R2 K3
0x541E0005, // 0004 LDINT R7 6
0x1C1C0A07, // 0005 EQ R7 R5 R7
0x781E001B, // 0006 JMPF R7 #0023
0x8C1C0104, // 0007 GETMET R7 R0 K4
0x7C1C0200, // 0008 CALL R7 1
0x1C1C0D05, // 0009 EQ R7 R6 K5
0x781E0005, // 000A JMPF R7 #0011
0x8C1C0706, // 000B GETMET R7 R3 K6
0x88240907, // 000C GETMBR R9 R4 K7
0x88280108, // 000D GETMBR R10 R0 K8
0x7C1C0600, // 000E CALL R7 3
0x80040E00, // 000F RET 1 R7
0x70020010, // 0010 JMP #0022
0x541EFFFB, // 0011 LDINT R7 65532
0x1C1C0C07, // 0012 EQ R7 R6 R7
0x781E0005, // 0013 JMPF R7 #001A
0x8C1C0706, // 0014 GETMET R7 R3 K6
0x88240909, // 0015 GETMBR R9 R4 K9
0x58280005, // 0016 LDCONST R10 K5
0x7C1C0600, // 0017 CALL R7 3
0x80040E00, // 0018 RET 1 R7
0x70020007, // 0019 JMP #0022
0x541EFFFC, // 001A LDINT R7 65533
0x1C1C0C07, // 001B EQ R7 R6 R7
0x781E0004, // 001C JMPF R7 #0022
0x8C1C0706, // 001D GETMET R7 R3 K6
0x88240909, // 001E GETMBR R9 R4 K9
0x542A0003, // 001F LDINT R10 4
0x7C1C0600, // 0020 CALL R7 3
0x80040E00, // 0021 RET 1 R7
0x70020049, // 0022 JMP #006D
0x541E0007, // 0023 LDINT R7 8
0x1C1C0A07, // 0024 EQ R7 R5 R7
0x781E003D, // 0025 JMPF R7 #0064
0x8C1C0104, // 0026 GETMET R7 R0 K4
0x7C1C0200, // 0027 CALL R7 1
0x1C1C0D05, // 0028 EQ R7 R6 K5
0x781E0005, // 0029 JMPF R7 #0030
0x8C1C0706, // 002A GETMET R7 R3 K6
0x8824090A, // 002B GETMBR R9 R4 K10
0x8828010B, // 002C GETMBR R10 R0 K11
0x7C1C0600, // 002D CALL R7 3
0x80040E00, // 002E RET 1 R7
0x70020032, // 002F JMP #0063
0x1C1C0D0C, // 0030 EQ R7 R6 K12
0x781E0005, // 0031 JMPF R7 #0038
0x8C1C0706, // 0032 GETMET R7 R3 K6
0x8824090A, // 0033 GETMBR R9 R4 K10
0x58280005, // 0034 LDCONST R10 K5
0x7C1C0600, // 0035 CALL R7 3
0x80040E00, // 0036 RET 1 R7
0x7002002A, // 0037 JMP #0063
0x1C1C0D0D, // 0038 EQ R7 R6 K13
0x781E0005, // 0039 JMPF R7 #0040
0x8C1C0706, // 003A GETMET R7 R3 K6
0x8824090A, // 003B GETMBR R9 R4 K10
0x542A00FD, // 003C LDINT R10 254
0x7C1C0600, // 003D CALL R7 3
0x80040E00, // 003E RET 1 R7
0x70020022, // 003F JMP #0063
0x541E000E, // 0040 LDINT R7 15
0x1C1C0C07, // 0041 EQ R7 R6 R7
0x781E0005, // 0042 JMPF R7 #0049
0x8C1C0706, // 0043 GETMET R7 R3 K6
0x8824090A, // 0044 GETMBR R9 R4 K10
0x58280005, // 0045 LDCONST R10 K5
0x7C1C0600, // 0046 CALL R7 3
0x80040E00, // 0047 RET 1 R7
0x70020019, // 0048 JMP #0063
0x541E0010, // 0049 LDINT R7 17
0x1C1C0C07, // 004A EQ R7 R6 R7
0x781E0005, // 004B JMPF R7 #0052
0x8C1C0706, // 004C GETMET R7 R3 K6
0x8824090A, // 004D GETMBR R9 R4 K10
0x8828010B, // 004E GETMBR R10 R0 K11
0x7C1C0600, // 004F CALL R7 3
0x80040E00, // 0050 RET 1 R7
0x70020010, // 0051 JMP #0063
0x541EFFFB, // 0052 LDINT R7 65532
0x1C1C0C07, // 0053 EQ R7 R6 R7
0x781E0005, // 0054 JMPF R7 #005B
0x8C1C0706, // 0055 GETMET R7 R3 K6
0x88240909, // 0056 GETMBR R9 R4 K9
0x5828000E, // 0057 LDCONST R10 K14
0x7C1C0600, // 0058 CALL R7 3
0x80040E00, // 0059 RET 1 R7
0x70020007, // 005A JMP #0063
0x541EFFFC, // 005B LDINT R7 65533
0x1C1C0C07, // 005C EQ R7 R6 R7
0x781E0004, // 005D JMPF R7 #0063
0x8C1C0706, // 005E GETMET R7 R3 K6
0x88240909, // 005F GETMBR R9 R4 K9
0x542A0004, // 0060 LDINT R10 5
0x7C1C0600, // 0061 CALL R7 3
0x80040E00, // 0062 RET 1 R7
0x70020008, // 0063 JMP #006D
0x601C0003, // 0064 GETGBL R7 G3
0x5C200000, // 0065 MOVE R8 R0
0x7C1C0200, // 0066 CALL R7 1
0x8C1C0F0F, // 0067 GETMET R7 R7 K15
0x5C240200, // 0068 MOVE R9 R1
0x5C280400, // 0069 MOVE R10 R2
0x5C2C0600, // 006A MOVE R11 R3
0x7C1C0800, // 006B CALL R7 4
0x80040E00, // 006C RET 1 R7
0x80000000, // 006D RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: set_bri
********************************************************************/
be_local_closure(Matter_Plugin_Light1_set_bri, /* name */
be_nested_proto(
11, /* nstack */
3, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[12]) { /* constants */
/* K0 */ be_const_int(0),
/* K1 */ be_nested_str_weak(VIRTUAL),
/* K2 */ be_nested_str_weak(light),
/* K3 */ be_nested_str_weak(tasmota),
/* K4 */ be_nested_str_weak(scale_uint),
/* K5 */ be_nested_str_weak(set),
/* K6 */ be_nested_str_weak(bri),
/* K7 */ be_nested_str_weak(power),
/* K8 */ be_nested_str_weak(update_shadow),
/* K9 */ be_nested_str_weak(shadow_onoff),
/* K10 */ be_nested_str_weak(attribute_updated),
/* K11 */ be_nested_str_weak(shadow_bri),
}),
be_str_weak(set_bri),
&be_const_str_solidified,
( &(const binstruction[65]) { /* code */
0x140C0300, // 0000 LT R3 R1 K0
0x780E0000, // 0001 JMPF R3 #0003
0x58040000, // 0002 LDCONST R1 K0
0x540E00FD, // 0003 LDINT R3 254
0x240C0203, // 0004 GT R3 R1 R3
0x780E0000, // 0005 JMPF R3 #0007
0x540600FD, // 0006 LDINT R1 254
0x4C0C0000, // 0007 LDNIL R3
0x200C0403, // 0008 NE R3 R2 R3
0x780E0003, // 0009 JMPF R3 #000E
0x600C0017, // 000A GETGBL R3 G23
0x5C100400, // 000B MOVE R4 R2
0x7C0C0200, // 000C CALL R3 1
0x70020000, // 000D JMP #000F
0x4C0C0000, // 000E LDNIL R3
0x5C080600, // 000F MOVE R2 R3
0x880C0101, // 0010 GETMBR R3 R0 K1
0x740E001A, // 0011 JMPT R3 #002D
0xA40E0400, // 0012 IMPORT R3 K2
0xB8120600, // 0013 GETNGBL R4 K3
0x8C100904, // 0014 GETMET R4 R4 K4
0x5C180200, // 0015 MOVE R6 R1
0x581C0000, // 0016 LDCONST R7 K0
0x542200FD, // 0017 LDINT R8 254
0x58240000, // 0018 LDCONST R9 K0
0x542A00FE, // 0019 LDINT R10 255
0x7C100C00, // 001A CALL R4 6
0x4C140000, // 001B LDNIL R5
0x1C140405, // 001C EQ R5 R2 R5
0x78160005, // 001D JMPF R5 #0024
0x8C140705, // 001E GETMET R5 R3 K5
0x601C0013, // 001F GETGBL R7 G19
0x7C1C0000, // 0020 CALL R7 0
0x981E0C04, // 0021 SETIDX R7 K6 R4
0x7C140400, // 0022 CALL R5 2
0x70020005, // 0023 JMP #002A
0x8C140705, // 0024 GETMET R5 R3 K5
0x601C0013, // 0025 GETGBL R7 G19
0x7C1C0000, // 0026 CALL R7 0
0x981E0C04, // 0027 SETIDX R7 K6 R4
0x981E0E02, // 0028 SETIDX R7 K7 R2
0x7C140400, // 0029 CALL R5 2
0x8C140108, // 002A GETMET R5 R0 K8
0x7C140200, // 002B CALL R5 1
0x70020012, // 002C JMP #0040
0x4C0C0000, // 002D LDNIL R3
0x200C0403, // 002E NE R3 R2 R3
0x780E0007, // 002F JMPF R3 #0038
0x880C0109, // 0030 GETMBR R3 R0 K9
0x200C0403, // 0031 NE R3 R2 R3
0x780E0004, // 0032 JMPF R3 #0038
0x8C0C010A, // 0033 GETMET R3 R0 K10
0x54160005, // 0034 LDINT R5 6
0x58180000, // 0035 LDCONST R6 K0
0x7C0C0600, // 0036 CALL R3 3
0x90021202, // 0037 SETMBR R0 K9 R2
0x880C010B, // 0038 GETMBR R3 R0 K11
0x200C0203, // 0039 NE R3 R1 R3
0x780E0004, // 003A JMPF R3 #0040
0x8C0C010A, // 003B GETMET R3 R0 K10
0x54160007, // 003C LDINT R5 8
0x58180000, // 003D LDCONST R6 K0
0x7C0C0600, // 003E CALL R3 3
0x90021601, // 003F SETMBR R0 K11 R1
0x80000000, // 0040 RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified class: Matter_Plugin_Light1
********************************************************************/
extern const bclass be_class_Matter_Plugin_Device;
be_local_class(Matter_Plugin_Light1,
2,
&be_class_Matter_Plugin_Device,
be_nested_map(15,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_weak(init, -1), be_const_closure(Matter_Plugin_Light1_init_closure) },
{ be_const_key_weak(update_shadow, -1), be_const_closure(Matter_Plugin_Light1_update_shadow_closure) },
{ be_const_key_weak(invoke_request, -1), be_const_closure(Matter_Plugin_Light1_invoke_request_closure) },
{ be_const_key_weak(set_onoff, -1), be_const_closure(Matter_Plugin_Light1_set_onoff_closure) },
{ be_const_key_weak(TYPE, 10), be_nested_str_weak(light1) },
{ be_const_key_weak(update_virtual, 11), be_const_closure(Matter_Plugin_Light1_update_virtual_closure) },
{ be_const_key_weak(UPDATE_TIME, 8), be_const_int(250) },
{ be_const_key_weak(shadow_bri, 1), be_const_var(1) },
{ be_const_key_weak(DISPLAY_NAME, -1), be_nested_str_weak(Light_X201_X20Dimmer) },
{ be_const_key_weak(UPDATE_COMMANDS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(2,
( (struct bvalue*) &(const bvalue[]) {
be_nested_str_weak(Power),
be_nested_str_weak(Bri),
})) ) } )) },
{ be_const_key_weak(CLUSTERS, 7), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
be_const_map( * be_nested_map(7,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_int(29, 2), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(6,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(1),
be_const_int(2),
be_const_int(3),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(8, 0), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(7,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(2),
be_const_int(3),
be_const_int(15),
be_const_int(17),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(57, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(7,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(17),
be_const_int(3),
be_const_int(5),
be_const_int(10),
be_const_int(15),
be_const_int(17),
be_const_int(18),
})) ) } )) },
{ be_const_key_int(3, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(4,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(1),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(4, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(3,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(5, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(8,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(1),
be_const_int(2),
be_const_int(3),
be_const_int(4),
be_const_int(5),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(6, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(3,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
})) ) } )) },
{ be_const_key_weak(TYPES, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
be_const_map( * be_nested_map(1,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_int(257, -1), be_const_int(2) },
})) ) } )) },
{ be_const_key_weak(read_attribute, -1), be_const_closure(Matter_Plugin_Light1_read_attribute_closure) },
{ be_const_key_weak(shadow_onoff, -1), be_const_var(0) },
{ be_const_key_weak(set_bri, -1), be_const_closure(Matter_Plugin_Light1_set_bri_closure) },
})),
be_str_weak(Matter_Plugin_Light1)
);
/*******************************************************************/
void be_load_Matter_Plugin_Light1_class(bvm *vm) {
be_pushntvclass(vm, &be_class_Matter_Plugin_Light1);
be_setglobal(vm, "Matter_Plugin_Light1");
be_pop(vm, 1);
}
/********************************************************************/
/* End of solidification */

View File

@ -77,36 +77,39 @@ be_local_closure(Matter_Plugin_Sensor_parse_sensors, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 5]) { /* constants */
/* K0 */ be_nested_str_weak(tasmota_sensor_matcher),
/* K1 */ be_nested_str_weak(pre_value),
/* K2 */ be_nested_str_weak(match),
/* K3 */ be_nested_str_weak(shadow_value),
/* K4 */ be_nested_str_weak(value_changed),
( &(const bvalue[ 6]) { /* constants */
/* K0 */ be_nested_str_weak(VIRTUAL),
/* K1 */ be_nested_str_weak(tasmota_sensor_matcher),
/* K2 */ be_nested_str_weak(pre_value),
/* K3 */ be_nested_str_weak(match),
/* K4 */ be_nested_str_weak(shadow_value),
/* K5 */ be_nested_str_weak(value_changed),
}),
be_str_weak(parse_sensors),
&be_const_str_solidified,
( &(const binstruction[20]) { /* code */
( &(const binstruction[22]) { /* code */
0x88080100, // 0000 GETMBR R2 R0 K0
0x780A0010, // 0001 JMPF R2 #0013
0x8C080101, // 0002 GETMET R2 R0 K1
0x6010000A, // 0003 GETGBL R4 G10
0x88140100, // 0004 GETMBR R5 R0 K0
0x8C140B02, // 0005 GETMET R5 R5 K2
0x5C1C0200, // 0006 MOVE R7 R1
0x7C140400, // 0007 CALL R5 2
0x7C100200, // 0008 CALL R4 1
0x7C080400, // 0009 CALL R2 2
0x4C0C0000, // 000A LDNIL R3
0x200C0403, // 000B NE R3 R2 R3
0x780E0005, // 000C JMPF R3 #0013
0x880C0103, // 000D GETMBR R3 R0 K3
0x200C0403, // 000E NE R3 R2 R3
0x780E0002, // 000F JMPF R3 #0013
0x8C0C0104, // 0010 GETMET R3 R0 K4
0x7C0C0200, // 0011 CALL R3 1
0x90020602, // 0012 SETMBR R0 K3 R2
0x80000000, // 0013 RET 0
0x740A0012, // 0001 JMPT R2 #0015
0x88080101, // 0002 GETMBR R2 R0 K1
0x780A0010, // 0003 JMPF R2 #0015
0x8C080102, // 0004 GETMET R2 R0 K2
0x6010000A, // 0005 GETGBL R4 G10
0x88140101, // 0006 GETMBR R5 R0 K1
0x8C140B03, // 0007 GETMET R5 R5 K3
0x5C1C0200, // 0008 MOVE R7 R1
0x7C140400, // 0009 CALL R5 2
0x7C100200, // 000A CALL R4 1
0x7C080400, // 000B CALL R2 2
0x4C0C0000, // 000C LDNIL R3
0x200C0403, // 000D NE R3 R2 R3
0x780E0005, // 000E JMPF R3 #0015
0x880C0104, // 000F GETMBR R3 R0 K4
0x200C0403, // 0010 NE R3 R2 R3
0x780E0002, // 0011 JMPF R3 #0015
0x8C0C0105, // 0012 GETMET R3 R0 K5
0x7C0C0200, // 0013 CALL R3 1
0x90020802, // 0014 SETMBR R0 K4 R2
0x80000000, // 0015 RET 0
})
)
);

View File

@ -1,4 +1,4 @@
/* Solidification of Matter_Plugin_3_Sensor_Contact.h */
/* Solidification of Matter_Plugin_2_Sensor_Contact.h */
/********************************************************************\
* Generated code, don't edit *
\********************************************************************/
@ -93,62 +93,65 @@ be_local_closure(Matter_Plugin_Sensor_Contact_update_shadow, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[13]) { /* constants */
( &(const bvalue[14]) { /* constants */
/* K0 */ be_nested_str_weak(update_shadow),
/* K1 */ be_nested_str_weak(json),
/* K2 */ be_nested_str_weak(tasmota),
/* K3 */ be_nested_str_weak(cmd),
/* K4 */ be_nested_str_weak(Status_X208),
/* K5 */ be_nested_str_weak(load),
/* K6 */ be_nested_str_weak(find),
/* K7 */ be_nested_str_weak(Switch),
/* K8 */ be_nested_str_weak(tasmota_switch_index),
/* K9 */ be_nested_str_weak(ON),
/* K10 */ be_nested_str_weak(shadow_contact),
/* K11 */ be_nested_str_weak(attribute_updated),
/* K12 */ be_const_int(0),
/* K1 */ be_nested_str_weak(VIRTUAL),
/* K2 */ be_nested_str_weak(json),
/* K3 */ be_nested_str_weak(tasmota),
/* K4 */ be_nested_str_weak(cmd),
/* K5 */ be_nested_str_weak(Status_X208),
/* K6 */ be_nested_str_weak(load),
/* K7 */ be_nested_str_weak(find),
/* K8 */ be_nested_str_weak(Switch),
/* K9 */ be_nested_str_weak(tasmota_switch_index),
/* K10 */ be_nested_str_weak(ON),
/* K11 */ be_nested_str_weak(shadow_contact),
/* K12 */ be_nested_str_weak(attribute_updated),
/* K13 */ be_const_int(0),
}),
be_str_weak(update_shadow),
&be_const_str_solidified,
( &(const binstruction[38]) { /* code */
( &(const binstruction[40]) { /* code */
0x60040003, // 0000 GETGBL R1 G3
0x5C080000, // 0001 MOVE R2 R0
0x7C040200, // 0002 CALL R1 1
0x8C040300, // 0003 GETMET R1 R1 K0
0x7C040200, // 0004 CALL R1 1
0xA4060200, // 0005 IMPORT R1 K1
0xB80A0400, // 0006 GETNGBL R2 K2
0x8C080503, // 0007 GETMET R2 R2 K3
0x58100004, // 0008 LDCONST R4 K4
0x50140200, // 0009 LDBOOL R5 1 0
0x7C080600, // 000A CALL R2 3
0x4C0C0000, // 000B LDNIL R3
0x200C0403, // 000C NE R3 R2 R3
0x780E0016, // 000D JMPF R3 #0025
0x8C0C0305, // 000E GETMET R3 R1 K5
0x5C140400, // 000F MOVE R5 R2
0x7C0C0400, // 0010 CALL R3 2
0x4C100000, // 0011 LDNIL R4
0x20100604, // 0012 NE R4 R3 R4
0x78120010, // 0013 JMPF R4 #0025
0x50100000, // 0014 LDBOOL R4 0 0
0x8C140706, // 0015 GETMET R5 R3 K6
0x601C0008, // 0016 GETGBL R7 G8
0x88200108, // 0017 GETMBR R8 R0 K8
0x7C1C0200, // 0018 CALL R7 1
0x001E0E07, // 0019 ADD R7 K7 R7
0x7C140400, // 001A CALL R5 2
0x1C140B09, // 001B EQ R5 R5 K9
0x5C100A00, // 001C MOVE R4 R5
0x8814010A, // 001D GETMBR R5 R0 K10
0x20140A04, // 001E NE R5 R5 R4
0x78160004, // 001F JMPF R5 #0025
0x8C14010B, // 0020 GETMET R5 R0 K11
0x541E0044, // 0021 LDINT R7 69
0x5820000C, // 0022 LDCONST R8 K12
0x7C140600, // 0023 CALL R5 3
0x90021404, // 0024 SETMBR R0 K10 R4
0x80000000, // 0025 RET 0
0x88040101, // 0005 GETMBR R1 R0 K1
0x7406001F, // 0006 JMPT R1 #0027
0xA4060400, // 0007 IMPORT R1 K2
0xB80A0600, // 0008 GETNGBL R2 K3
0x8C080504, // 0009 GETMET R2 R2 K4
0x58100005, // 000A LDCONST R4 K5
0x50140200, // 000B LDBOOL R5 1 0
0x7C080600, // 000C CALL R2 3
0x4C0C0000, // 000D LDNIL R3
0x200C0403, // 000E NE R3 R2 R3
0x780E0016, // 000F JMPF R3 #0027
0x8C0C0306, // 0010 GETMET R3 R1 K6
0x5C140400, // 0011 MOVE R5 R2
0x7C0C0400, // 0012 CALL R3 2
0x4C100000, // 0013 LDNIL R4
0x20100604, // 0014 NE R4 R3 R4
0x78120010, // 0015 JMPF R4 #0027
0x50100000, // 0016 LDBOOL R4 0 0
0x8C140707, // 0017 GETMET R5 R3 K7
0x601C0008, // 0018 GETGBL R7 G8
0x88200109, // 0019 GETMBR R8 R0 K9
0x7C1C0200, // 001A CALL R7 1
0x001E1007, // 001B ADD R7 K8 R7
0x7C140400, // 001C CALL R5 2
0x1C140B0A, // 001D EQ R5 R5 K10
0x5C100A00, // 001E MOVE R4 R5
0x8814010B, // 001F GETMBR R5 R0 K11
0x20140A04, // 0020 NE R5 R5 R4
0x78160004, // 0021 JMPF R5 #0027
0x8C14010C, // 0022 GETMET R5 R0 K12
0x541E0044, // 0023 LDINT R7 69
0x5820000D, // 0024 LDCONST R8 K13
0x7C140600, // 0025 CALL R5 3
0x90021604, // 0026 SETMBR R0 K11 R4
0x80000000, // 0027 RET 0
})
)
);

View File

@ -1,4 +1,4 @@
/* Solidification of Matter_Plugin_3_Sensor_Occupancy.h */
/* Solidification of Matter_Plugin_2_Sensor_Occupancy.h */
/********************************************************************\
* Generated code, don't edit *
\********************************************************************/
@ -93,65 +93,68 @@ be_local_closure(Matter_Plugin_Sensor_Occupancy_update_shadow, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[13]) { /* constants */
( &(const bvalue[14]) { /* constants */
/* K0 */ be_nested_str_weak(update_shadow),
/* K1 */ be_nested_str_weak(Switch),
/* K2 */ be_nested_str_weak(tasmota_switch_index),
/* K3 */ be_nested_str_weak(tasmota),
/* K4 */ be_nested_str_weak(cmd),
/* K5 */ be_nested_str_weak(Status_X208),
/* K6 */ be_nested_str_weak(find),
/* K7 */ be_nested_str_weak(StatusSNS),
/* K8 */ be_nested_str_weak(contains),
/* K9 */ be_nested_str_weak(ON),
/* K10 */ be_nested_str_weak(shadow_occupancy),
/* K11 */ be_nested_str_weak(attribute_updated),
/* K12 */ be_const_int(0),
/* K1 */ be_nested_str_weak(VIRTUAL),
/* K2 */ be_nested_str_weak(Switch),
/* K3 */ be_nested_str_weak(tasmota_switch_index),
/* K4 */ be_nested_str_weak(tasmota),
/* K5 */ be_nested_str_weak(cmd),
/* K6 */ be_nested_str_weak(Status_X208),
/* K7 */ be_nested_str_weak(find),
/* K8 */ be_nested_str_weak(StatusSNS),
/* K9 */ be_nested_str_weak(contains),
/* K10 */ be_nested_str_weak(ON),
/* K11 */ be_nested_str_weak(shadow_occupancy),
/* K12 */ be_nested_str_weak(attribute_updated),
/* K13 */ be_const_int(0),
}),
be_str_weak(update_shadow),
&be_const_str_solidified,
( &(const binstruction[41]) { /* code */
( &(const binstruction[43]) { /* code */
0x60040003, // 0000 GETGBL R1 G3
0x5C080000, // 0001 MOVE R2 R0
0x7C040200, // 0002 CALL R1 1
0x8C040300, // 0003 GETMET R1 R1 K0
0x7C040200, // 0004 CALL R1 1
0x60040008, // 0005 GETGBL R1 G8
0x88080102, // 0006 GETMBR R2 R0 K2
0x7C040200, // 0007 CALL R1 1
0x00060201, // 0008 ADD R1 K1 R1
0xB80A0600, // 0009 GETNGBL R2 K3
0x8C080504, // 000A GETMET R2 R2 K4
0x58100005, // 000B LDCONST R4 K5
0x50140200, // 000C LDBOOL R5 1 0
0x7C080600, // 000D CALL R2 3
0x4C0C0000, // 000E LDNIL R3
0x200C0403, // 000F NE R3 R2 R3
0x780E0003, // 0010 JMPF R3 #0015
0x8C0C0506, // 0011 GETMET R3 R2 K6
0x58140007, // 0012 LDCONST R5 K7
0x7C0C0400, // 0013 CALL R3 2
0x5C080600, // 0014 MOVE R2 R3
0x4C0C0000, // 0015 LDNIL R3
0x200C0403, // 0016 NE R3 R2 R3
0x780E000F, // 0017 JMPF R3 #0028
0x8C0C0508, // 0018 GETMET R3 R2 K8
0x5C140200, // 0019 MOVE R5 R1
0x7C0C0400, // 001A CALL R3 2
0x780E000B, // 001B JMPF R3 #0028
0x8C0C0506, // 001C GETMET R3 R2 K6
0x5C140200, // 001D MOVE R5 R1
0x7C0C0400, // 001E CALL R3 2
0x1C0C0709, // 001F EQ R3 R3 K9
0x8810010A, // 0020 GETMBR R4 R0 K10
0x20100803, // 0021 NE R4 R4 R3
0x78120003, // 0022 JMPF R4 #0027
0x8C10010B, // 0023 GETMET R4 R0 K11
0x541A0405, // 0024 LDINT R6 1030
0x581C000C, // 0025 LDCONST R7 K12
0x7C100600, // 0026 CALL R4 3
0x90021403, // 0027 SETMBR R0 K10 R3
0x80000000, // 0028 RET 0
0x88040101, // 0005 GETMBR R1 R0 K1
0x74060022, // 0006 JMPT R1 #002A
0x60040008, // 0007 GETGBL R1 G8
0x88080103, // 0008 GETMBR R2 R0 K3
0x7C040200, // 0009 CALL R1 1
0x00060401, // 000A ADD R1 K2 R1
0xB80A0800, // 000B GETNGBL R2 K4
0x8C080505, // 000C GETMET R2 R2 K5
0x58100006, // 000D LDCONST R4 K6
0x50140200, // 000E LDBOOL R5 1 0
0x7C080600, // 000F CALL R2 3
0x4C0C0000, // 0010 LDNIL R3
0x200C0403, // 0011 NE R3 R2 R3
0x780E0003, // 0012 JMPF R3 #0017
0x8C0C0507, // 0013 GETMET R3 R2 K7
0x58140008, // 0014 LDCONST R5 K8
0x7C0C0400, // 0015 CALL R3 2
0x5C080600, // 0016 MOVE R2 R3
0x4C0C0000, // 0017 LDNIL R3
0x200C0403, // 0018 NE R3 R2 R3
0x780E000F, // 0019 JMPF R3 #002A
0x8C0C0509, // 001A GETMET R3 R2 K9
0x5C140200, // 001B MOVE R5 R1
0x7C0C0400, // 001C CALL R3 2
0x780E000B, // 001D JMPF R3 #002A
0x8C0C0507, // 001E GETMET R3 R2 K7
0x5C140200, // 001F MOVE R5 R1
0x7C0C0400, // 0020 CALL R3 2
0x1C0C070A, // 0021 EQ R3 R3 K10
0x8810010B, // 0022 GETMBR R4 R0 K11
0x20100803, // 0023 NE R4 R4 R3
0x78120003, // 0024 JMPF R4 #0029
0x8C10010C, // 0025 GETMET R4 R0 K12
0x541A0405, // 0026 LDINT R6 1030
0x581C000D, // 0027 LDCONST R7 K13
0x7C100600, // 0028 CALL R4 3
0x90021603, // 0029 SETMBR R0 K11 R3
0x80000000, // 002A RET 0
})
)
);

View File

@ -1,4 +1,4 @@
/* Solidification of Matter_Plugin_3_Sensor_OnOff.h */
/* Solidification of Matter_Plugin_2_Sensor_OnOff.h */
/********************************************************************\
* Generated code, don't edit *
\********************************************************************/
@ -46,65 +46,68 @@ be_local_closure(Matter_Plugin_Sensor_OnOff_update_shadow, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[13]) { /* constants */
( &(const bvalue[14]) { /* constants */
/* K0 */ be_nested_str_weak(update_shadow),
/* K1 */ be_nested_str_weak(Switch),
/* K2 */ be_nested_str_weak(tasmota_switch_index),
/* K3 */ be_nested_str_weak(tasmota),
/* K4 */ be_nested_str_weak(cmd),
/* K5 */ be_nested_str_weak(Status_X208),
/* K6 */ be_nested_str_weak(find),
/* K7 */ be_nested_str_weak(StatusSNS),
/* K8 */ be_nested_str_weak(contains),
/* K9 */ be_nested_str_weak(ON),
/* K10 */ be_nested_str_weak(shadow_onoff),
/* K11 */ be_nested_str_weak(attribute_updated),
/* K12 */ be_const_int(0),
/* K1 */ be_nested_str_weak(VIRTUAL),
/* K2 */ be_nested_str_weak(Switch),
/* K3 */ be_nested_str_weak(tasmota_switch_index),
/* K4 */ be_nested_str_weak(tasmota),
/* K5 */ be_nested_str_weak(cmd),
/* K6 */ be_nested_str_weak(Status_X208),
/* K7 */ be_nested_str_weak(find),
/* K8 */ be_nested_str_weak(StatusSNS),
/* K9 */ be_nested_str_weak(contains),
/* K10 */ be_nested_str_weak(ON),
/* K11 */ be_nested_str_weak(shadow_onoff),
/* K12 */ be_nested_str_weak(attribute_updated),
/* K13 */ be_const_int(0),
}),
be_str_weak(update_shadow),
&be_const_str_solidified,
( &(const binstruction[41]) { /* code */
( &(const binstruction[43]) { /* code */
0x60040003, // 0000 GETGBL R1 G3
0x5C080000, // 0001 MOVE R2 R0
0x7C040200, // 0002 CALL R1 1
0x8C040300, // 0003 GETMET R1 R1 K0
0x7C040200, // 0004 CALL R1 1
0x60040008, // 0005 GETGBL R1 G8
0x88080102, // 0006 GETMBR R2 R0 K2
0x7C040200, // 0007 CALL R1 1
0x00060201, // 0008 ADD R1 K1 R1
0xB80A0600, // 0009 GETNGBL R2 K3
0x8C080504, // 000A GETMET R2 R2 K4
0x58100005, // 000B LDCONST R4 K5
0x50140200, // 000C LDBOOL R5 1 0
0x7C080600, // 000D CALL R2 3
0x4C0C0000, // 000E LDNIL R3
0x200C0403, // 000F NE R3 R2 R3
0x780E0003, // 0010 JMPF R3 #0015
0x8C0C0506, // 0011 GETMET R3 R2 K6
0x58140007, // 0012 LDCONST R5 K7
0x7C0C0400, // 0013 CALL R3 2
0x5C080600, // 0014 MOVE R2 R3
0x4C0C0000, // 0015 LDNIL R3
0x200C0403, // 0016 NE R3 R2 R3
0x780E000F, // 0017 JMPF R3 #0028
0x8C0C0508, // 0018 GETMET R3 R2 K8
0x5C140200, // 0019 MOVE R5 R1
0x7C0C0400, // 001A CALL R3 2
0x780E000B, // 001B JMPF R3 #0028
0x8C0C0506, // 001C GETMET R3 R2 K6
0x5C140200, // 001D MOVE R5 R1
0x7C0C0400, // 001E CALL R3 2
0x1C0C0709, // 001F EQ R3 R3 K9
0x8810010A, // 0020 GETMBR R4 R0 K10
0x20100803, // 0021 NE R4 R4 R3
0x78120003, // 0022 JMPF R4 #0027
0x8C10010B, // 0023 GETMET R4 R0 K11
0x541A0005, // 0024 LDINT R6 6
0x581C000C, // 0025 LDCONST R7 K12
0x7C100600, // 0026 CALL R4 3
0x90021403, // 0027 SETMBR R0 K10 R3
0x80000000, // 0028 RET 0
0x88040101, // 0005 GETMBR R1 R0 K1
0x74060022, // 0006 JMPT R1 #002A
0x60040008, // 0007 GETGBL R1 G8
0x88080103, // 0008 GETMBR R2 R0 K3
0x7C040200, // 0009 CALL R1 1
0x00060401, // 000A ADD R1 K2 R1
0xB80A0800, // 000B GETNGBL R2 K4
0x8C080505, // 000C GETMET R2 R2 K5
0x58100006, // 000D LDCONST R4 K6
0x50140200, // 000E LDBOOL R5 1 0
0x7C080600, // 000F CALL R2 3
0x4C0C0000, // 0010 LDNIL R3
0x200C0403, // 0011 NE R3 R2 R3
0x780E0003, // 0012 JMPF R3 #0017
0x8C0C0507, // 0013 GETMET R3 R2 K7
0x58140008, // 0014 LDCONST R5 K8
0x7C0C0400, // 0015 CALL R3 2
0x5C080600, // 0016 MOVE R2 R3
0x4C0C0000, // 0017 LDNIL R3
0x200C0403, // 0018 NE R3 R2 R3
0x780E000F, // 0019 JMPF R3 #002A
0x8C0C0509, // 001A GETMET R3 R2 K9
0x5C140200, // 001B MOVE R5 R1
0x7C0C0400, // 001C CALL R3 2
0x780E000B, // 001D JMPF R3 #002A
0x8C0C0507, // 001E GETMET R3 R2 K7
0x5C140200, // 001F MOVE R5 R1
0x7C0C0400, // 0020 CALL R3 2
0x1C0C070A, // 0021 EQ R3 R3 K10
0x8810010B, // 0022 GETMBR R4 R0 K11
0x20100803, // 0023 NE R4 R4 R3
0x78120003, // 0024 JMPF R4 #0029
0x8C10010C, // 0025 GETMET R4 R0 K12
0x541A0005, // 0026 LDINT R6 6
0x581C000D, // 0027 LDCONST R7 K13
0x7C100600, // 0028 CALL R4 3
0x90021603, // 0029 SETMBR R0 K11 R3
0x80000000, // 002A RET 0
})
)
);

View File

@ -606,40 +606,43 @@ be_local_closure(Matter_Plugin_Shutter_update_shadow, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 8]) { /* constants */
/* K0 */ be_nested_str_weak(update_inverted),
/* K1 */ be_nested_str_weak(tasmota),
/* K2 */ be_nested_str_weak(cmd),
/* K3 */ be_nested_str_weak(ShutterPosition),
/* K4 */ be_nested_str_weak(tasmota_shutter_index),
/* K5 */ be_const_int(1),
/* K6 */ be_nested_str_weak(parse_sensors),
/* K7 */ be_nested_str_weak(update_shadow),
( &(const bvalue[ 9]) { /* constants */
/* K0 */ be_nested_str_weak(VIRTUAL),
/* K1 */ be_nested_str_weak(update_inverted),
/* K2 */ be_nested_str_weak(tasmota),
/* K3 */ be_nested_str_weak(cmd),
/* K4 */ be_nested_str_weak(ShutterPosition),
/* K5 */ be_nested_str_weak(tasmota_shutter_index),
/* K6 */ be_const_int(1),
/* K7 */ be_nested_str_weak(parse_sensors),
/* K8 */ be_nested_str_weak(update_shadow),
}),
be_str_weak(update_shadow),
&be_const_str_solidified,
( &(const binstruction[21]) { /* code */
0x8C040100, // 0000 GETMET R1 R0 K0
0x7C040200, // 0001 CALL R1 1
0xB8060200, // 0002 GETNGBL R1 K1
0x8C040302, // 0003 GETMET R1 R1 K2
0x600C0008, // 0004 GETGBL R3 G8
0x88100104, // 0005 GETMBR R4 R0 K4
0x00100905, // 0006 ADD R4 R4 K5
0x7C0C0200, // 0007 CALL R3 1
0x000E0603, // 0008 ADD R3 K3 R3
0x50100200, // 0009 LDBOOL R4 1 0
0x7C040600, // 000A CALL R1 3
0x78060002, // 000B JMPF R1 #000F
0x8C080106, // 000C GETMET R2 R0 K6
0x5C100200, // 000D MOVE R4 R1
0x7C080400, // 000E CALL R2 2
0x60080003, // 000F GETGBL R2 G3
0x5C0C0000, // 0010 MOVE R3 R0
0x7C080200, // 0011 CALL R2 1
0x8C080507, // 0012 GETMET R2 R2 K7
0x7C080200, // 0013 CALL R2 1
0x80000000, // 0014 RET 0
( &(const binstruction[23]) { /* code */
0x88040100, // 0000 GETMBR R1 R0 K0
0x7406000E, // 0001 JMPT R1 #0011
0x8C040101, // 0002 GETMET R1 R0 K1
0x7C040200, // 0003 CALL R1 1
0xB8060400, // 0004 GETNGBL R1 K2
0x8C040303, // 0005 GETMET R1 R1 K3
0x600C0008, // 0006 GETGBL R3 G8
0x88100105, // 0007 GETMBR R4 R0 K5
0x00100906, // 0008 ADD R4 R4 K6
0x7C0C0200, // 0009 CALL R3 1
0x000E0803, // 000A ADD R3 K4 R3
0x50100200, // 000B LDBOOL R4 1 0
0x7C040600, // 000C CALL R1 3
0x78060002, // 000D JMPF R1 #0011
0x8C080107, // 000E GETMET R2 R0 K7
0x5C100200, // 000F MOVE R4 R1
0x7C080400, // 0010 CALL R2 2
0x60040003, // 0011 GETGBL R1 G3
0x5C080000, // 0012 MOVE R2 R0
0x7C040200, // 0013 CALL R1 1
0x8C040308, // 0014 GETMET R1 R1 K8
0x7C040200, // 0015 CALL R1 1
0x80000000, // 0016 RET 0
})
)
);

View File

@ -1,4 +1,4 @@
/* Solidification of Matter_Plugin_4_Bridge_Sensor_Contact.h */
/* Solidification of Matter_Plugin_3_Bridge_Sensor_Contact.h */
/********************************************************************\
* Generated code, don't edit *
\********************************************************************/

View File

@ -1,4 +1,4 @@
/* Solidification of Matter_Plugin_4_Bridge_Sensor_Occupancy.h */
/* Solidification of Matter_Plugin_3_Bridge_Sensor_Occupancy.h */
/********************************************************************\
* Generated code, don't edit *
\********************************************************************/

View File

@ -0,0 +1,36 @@
/* Solidification of Matter_Plugin_3_Light0.h */
/********************************************************************\
* Generated code, don't edit *
\********************************************************************/
#include "be_constobj.h"
extern const bclass be_class_Matter_Plugin_Light0;
/********************************************************************
** Solidified class: Matter_Plugin_Light0
********************************************************************/
extern const bclass be_class_Matter_Plugin_OnOff;
be_local_class(Matter_Plugin_Light0,
0,
&be_class_Matter_Plugin_OnOff,
be_nested_map(3,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_weak(DISPLAY_NAME, -1), be_nested_str_weak(Light_X200_X20On) },
{ be_const_key_weak(TYPE, -1), be_nested_str_weak(light0) },
{ be_const_key_weak(TYPES, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
be_const_map( * be_nested_map(1,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_int(256, -1), be_const_int(2) },
})) ) } )) },
})),
be_str_weak(Matter_Plugin_Light0)
);
/*******************************************************************/
void be_load_Matter_Plugin_Light0_class(bvm *vm) {
be_pushntvclass(vm, &be_class_Matter_Plugin_Light0);
be_setglobal(vm, "Matter_Plugin_Light0");
be_pop(vm, 1);
}
/********************************************************************/
/* End of solidification */

View File

@ -1,663 +0,0 @@
/* Solidification of Matter_Plugin_3_Light1.h */
/********************************************************************\
* Generated code, don't edit *
\********************************************************************/
#include "be_constobj.h"
extern const bclass be_class_Matter_Plugin_Light1;
/********************************************************************
** Solidified function: set_bri
********************************************************************/
be_local_closure(Matter_Plugin_Light1_set_bri, /* name */
be_nested_proto(
11, /* nstack */
3, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[12]) { /* constants */
/* K0 */ be_const_int(0),
/* K1 */ be_nested_str_weak(VIRTUAL),
/* K2 */ be_nested_str_weak(light),
/* K3 */ be_nested_str_weak(tasmota),
/* K4 */ be_nested_str_weak(scale_uint),
/* K5 */ be_nested_str_weak(set),
/* K6 */ be_nested_str_weak(bri),
/* K7 */ be_nested_str_weak(power),
/* K8 */ be_nested_str_weak(update_shadow),
/* K9 */ be_nested_str_weak(shadow_onoff),
/* K10 */ be_nested_str_weak(attribute_updated),
/* K11 */ be_nested_str_weak(shadow_bri),
}),
be_str_weak(set_bri),
&be_const_str_solidified,
( &(const binstruction[65]) { /* code */
0x140C0300, // 0000 LT R3 R1 K0
0x780E0000, // 0001 JMPF R3 #0003
0x58040000, // 0002 LDCONST R1 K0
0x540E00FD, // 0003 LDINT R3 254
0x240C0203, // 0004 GT R3 R1 R3
0x780E0000, // 0005 JMPF R3 #0007
0x540600FD, // 0006 LDINT R1 254
0x4C0C0000, // 0007 LDNIL R3
0x200C0403, // 0008 NE R3 R2 R3
0x780E0003, // 0009 JMPF R3 #000E
0x600C0017, // 000A GETGBL R3 G23
0x5C100400, // 000B MOVE R4 R2
0x7C0C0200, // 000C CALL R3 1
0x70020000, // 000D JMP #000F
0x4C0C0000, // 000E LDNIL R3
0x5C080600, // 000F MOVE R2 R3
0x880C0101, // 0010 GETMBR R3 R0 K1
0x740E001A, // 0011 JMPT R3 #002D
0xA40E0400, // 0012 IMPORT R3 K2
0xB8120600, // 0013 GETNGBL R4 K3
0x8C100904, // 0014 GETMET R4 R4 K4
0x5C180200, // 0015 MOVE R6 R1
0x581C0000, // 0016 LDCONST R7 K0
0x542200FD, // 0017 LDINT R8 254
0x58240000, // 0018 LDCONST R9 K0
0x542A00FE, // 0019 LDINT R10 255
0x7C100C00, // 001A CALL R4 6
0x4C140000, // 001B LDNIL R5
0x1C140405, // 001C EQ R5 R2 R5
0x78160005, // 001D JMPF R5 #0024
0x8C140705, // 001E GETMET R5 R3 K5
0x601C0013, // 001F GETGBL R7 G19
0x7C1C0000, // 0020 CALL R7 0
0x981E0C04, // 0021 SETIDX R7 K6 R4
0x7C140400, // 0022 CALL R5 2
0x70020005, // 0023 JMP #002A
0x8C140705, // 0024 GETMET R5 R3 K5
0x601C0013, // 0025 GETGBL R7 G19
0x7C1C0000, // 0026 CALL R7 0
0x981E0C04, // 0027 SETIDX R7 K6 R4
0x981E0E02, // 0028 SETIDX R7 K7 R2
0x7C140400, // 0029 CALL R5 2
0x8C140108, // 002A GETMET R5 R0 K8
0x7C140200, // 002B CALL R5 1
0x70020012, // 002C JMP #0040
0x4C0C0000, // 002D LDNIL R3
0x200C0403, // 002E NE R3 R2 R3
0x780E0007, // 002F JMPF R3 #0038
0x880C0109, // 0030 GETMBR R3 R0 K9
0x200C0403, // 0031 NE R3 R2 R3
0x780E0004, // 0032 JMPF R3 #0038
0x8C0C010A, // 0033 GETMET R3 R0 K10
0x54160005, // 0034 LDINT R5 6
0x58180000, // 0035 LDCONST R6 K0
0x7C0C0600, // 0036 CALL R3 3
0x90021202, // 0037 SETMBR R0 K9 R2
0x880C010B, // 0038 GETMBR R3 R0 K11
0x200C0203, // 0039 NE R3 R1 R3
0x780E0004, // 003A JMPF R3 #0040
0x8C0C010A, // 003B GETMET R3 R0 K10
0x54160007, // 003C LDINT R5 8
0x58180000, // 003D LDCONST R6 K0
0x7C0C0600, // 003E CALL R3 3
0x90021601, // 003F SETMBR R0 K11 R1
0x80000000, // 0040 RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: init
********************************************************************/
be_local_closure(Matter_Plugin_Light1_init, /* name */
be_nested_proto(
9, /* nstack */
4, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 3]) { /* constants */
/* K0 */ be_nested_str_weak(init),
/* K1 */ be_nested_str_weak(shadow_bri),
/* K2 */ be_const_int(0),
}),
be_str_weak(init),
&be_const_str_solidified,
( &(const binstruction[10]) { /* code */
0x60100003, // 0000 GETGBL R4 G3
0x5C140000, // 0001 MOVE R5 R0
0x7C100200, // 0002 CALL R4 1
0x8C100900, // 0003 GETMET R4 R4 K0
0x5C180200, // 0004 MOVE R6 R1
0x5C1C0400, // 0005 MOVE R7 R2
0x5C200600, // 0006 MOVE R8 R3
0x7C100800, // 0007 CALL R4 4
0x90020302, // 0008 SETMBR R0 K1 K2
0x80000000, // 0009 RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: update_shadow
********************************************************************/
be_local_closure(Matter_Plugin_Light1_update_shadow, /* name */
be_nested_proto(
11, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[11]) { /* constants */
/* K0 */ be_nested_str_weak(VIRTUAL),
/* K1 */ be_nested_str_weak(light),
/* K2 */ be_nested_str_weak(get),
/* K3 */ be_nested_str_weak(find),
/* K4 */ be_nested_str_weak(bri),
/* K5 */ be_nested_str_weak(tasmota),
/* K6 */ be_nested_str_weak(scale_uint),
/* K7 */ be_const_int(0),
/* K8 */ be_nested_str_weak(shadow_bri),
/* K9 */ be_nested_str_weak(attribute_updated),
/* K10 */ be_nested_str_weak(update_shadow),
}),
be_str_weak(update_shadow),
&be_const_str_solidified,
( &(const binstruction[38]) { /* code */
0x88040100, // 0000 GETMBR R1 R0 K0
0x7406001D, // 0001 JMPT R1 #0020
0xA4060200, // 0002 IMPORT R1 K1
0x8C080302, // 0003 GETMET R2 R1 K2
0x7C080200, // 0004 CALL R2 1
0x4C0C0000, // 0005 LDNIL R3
0x200C0403, // 0006 NE R3 R2 R3
0x780E0017, // 0007 JMPF R3 #0020
0x8C0C0503, // 0008 GETMET R3 R2 K3
0x58140004, // 0009 LDCONST R5 K4
0x4C180000, // 000A LDNIL R6
0x7C0C0600, // 000B CALL R3 3
0x4C100000, // 000C LDNIL R4
0x20100604, // 000D NE R4 R3 R4
0x78120010, // 000E JMPF R4 #0020
0xB8120A00, // 000F GETNGBL R4 K5
0x8C100906, // 0010 GETMET R4 R4 K6
0x5C180600, // 0011 MOVE R6 R3
0x581C0007, // 0012 LDCONST R7 K7
0x542200FE, // 0013 LDINT R8 255
0x58240007, // 0014 LDCONST R9 K7
0x542A00FD, // 0015 LDINT R10 254
0x7C100C00, // 0016 CALL R4 6
0x5C0C0800, // 0017 MOVE R3 R4
0x88100108, // 0018 GETMBR R4 R0 K8
0x20100604, // 0019 NE R4 R3 R4
0x78120004, // 001A JMPF R4 #0020
0x8C100109, // 001B GETMET R4 R0 K9
0x541A0007, // 001C LDINT R6 8
0x581C0007, // 001D LDCONST R7 K7
0x7C100600, // 001E CALL R4 3
0x90021003, // 001F SETMBR R0 K8 R3
0x60040003, // 0020 GETGBL R1 G3
0x5C080000, // 0021 MOVE R2 R0
0x7C040200, // 0022 CALL R1 1
0x8C04030A, // 0023 GETMET R1 R1 K10
0x7C040200, // 0024 CALL R1 1
0x80000000, // 0025 RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: read_attribute
********************************************************************/
be_local_closure(Matter_Plugin_Light1_read_attribute, /* name */
be_nested_proto(
12, /* nstack */
4, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[14]) { /* constants */
/* K0 */ be_nested_str_weak(matter),
/* K1 */ be_nested_str_weak(TLV),
/* K2 */ be_nested_str_weak(cluster),
/* K3 */ be_nested_str_weak(attribute),
/* K4 */ be_nested_str_weak(update_shadow_lazy),
/* K5 */ be_const_int(0),
/* K6 */ be_nested_str_weak(set),
/* K7 */ be_nested_str_weak(U1),
/* K8 */ be_nested_str_weak(shadow_bri),
/* K9 */ be_const_int(2),
/* K10 */ be_const_int(3),
/* K11 */ be_nested_str_weak(U4),
/* K12 */ be_const_int(1),
/* K13 */ be_nested_str_weak(read_attribute),
}),
be_str_weak(read_attribute),
&be_const_str_solidified,
( &(const binstruction[79]) { /* code */
0xB8120000, // 0000 GETNGBL R4 K0
0x88100901, // 0001 GETMBR R4 R4 K1
0x88140502, // 0002 GETMBR R5 R2 K2
0x88180503, // 0003 GETMBR R6 R2 K3
0x541E0007, // 0004 LDINT R7 8
0x1C1C0A07, // 0005 EQ R7 R5 R7
0x781E003D, // 0006 JMPF R7 #0045
0x8C1C0104, // 0007 GETMET R7 R0 K4
0x7C1C0200, // 0008 CALL R7 1
0x1C1C0D05, // 0009 EQ R7 R6 K5
0x781E0005, // 000A JMPF R7 #0011
0x8C1C0706, // 000B GETMET R7 R3 K6
0x88240907, // 000C GETMBR R9 R4 K7
0x88280108, // 000D GETMBR R10 R0 K8
0x7C1C0600, // 000E CALL R7 3
0x80040E00, // 000F RET 1 R7
0x70020032, // 0010 JMP #0044
0x1C1C0D09, // 0011 EQ R7 R6 K9
0x781E0005, // 0012 JMPF R7 #0019
0x8C1C0706, // 0013 GETMET R7 R3 K6
0x88240907, // 0014 GETMBR R9 R4 K7
0x58280005, // 0015 LDCONST R10 K5
0x7C1C0600, // 0016 CALL R7 3
0x80040E00, // 0017 RET 1 R7
0x7002002A, // 0018 JMP #0044
0x1C1C0D0A, // 0019 EQ R7 R6 K10
0x781E0005, // 001A JMPF R7 #0021
0x8C1C0706, // 001B GETMET R7 R3 K6
0x88240907, // 001C GETMBR R9 R4 K7
0x542A00FD, // 001D LDINT R10 254
0x7C1C0600, // 001E CALL R7 3
0x80040E00, // 001F RET 1 R7
0x70020022, // 0020 JMP #0044
0x541E000E, // 0021 LDINT R7 15
0x1C1C0C07, // 0022 EQ R7 R6 R7
0x781E0005, // 0023 JMPF R7 #002A
0x8C1C0706, // 0024 GETMET R7 R3 K6
0x88240907, // 0025 GETMBR R9 R4 K7
0x58280005, // 0026 LDCONST R10 K5
0x7C1C0600, // 0027 CALL R7 3
0x80040E00, // 0028 RET 1 R7
0x70020019, // 0029 JMP #0044
0x541E0010, // 002A LDINT R7 17
0x1C1C0C07, // 002B EQ R7 R6 R7
0x781E0005, // 002C JMPF R7 #0033
0x8C1C0706, // 002D GETMET R7 R3 K6
0x88240907, // 002E GETMBR R9 R4 K7
0x88280108, // 002F GETMBR R10 R0 K8
0x7C1C0600, // 0030 CALL R7 3
0x80040E00, // 0031 RET 1 R7
0x70020010, // 0032 JMP #0044
0x541EFFFB, // 0033 LDINT R7 65532
0x1C1C0C07, // 0034 EQ R7 R6 R7
0x781E0005, // 0035 JMPF R7 #003C
0x8C1C0706, // 0036 GETMET R7 R3 K6
0x8824090B, // 0037 GETMBR R9 R4 K11
0x5828000C, // 0038 LDCONST R10 K12
0x7C1C0600, // 0039 CALL R7 3
0x80040E00, // 003A RET 1 R7
0x70020007, // 003B JMP #0044
0x541EFFFC, // 003C LDINT R7 65533
0x1C1C0C07, // 003D EQ R7 R6 R7
0x781E0004, // 003E JMPF R7 #0044
0x8C1C0706, // 003F GETMET R7 R3 K6
0x8824090B, // 0040 GETMBR R9 R4 K11
0x542A0004, // 0041 LDINT R10 5
0x7C1C0600, // 0042 CALL R7 3
0x80040E00, // 0043 RET 1 R7
0x70020008, // 0044 JMP #004E
0x601C0003, // 0045 GETGBL R7 G3
0x5C200000, // 0046 MOVE R8 R0
0x7C1C0200, // 0047 CALL R7 1
0x8C1C0F0D, // 0048 GETMET R7 R7 K13
0x5C240200, // 0049 MOVE R9 R1
0x5C280400, // 004A MOVE R10 R2
0x5C2C0600, // 004B MOVE R11 R3
0x7C1C0800, // 004C CALL R7 4
0x80040E00, // 004D RET 1 R7
0x80000000, // 004E RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: update_virtual
********************************************************************/
be_local_closure(Matter_Plugin_Light1_update_virtual, /* name */
be_nested_proto(
8, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 5]) { /* constants */
/* K0 */ be_nested_str_weak(find),
/* K1 */ be_nested_str_weak(Power),
/* K2 */ be_nested_str_weak(Bri),
/* K3 */ be_nested_str_weak(set_bri),
/* K4 */ be_nested_str_weak(update_virtual),
}),
be_str_weak(update_virtual),
&be_const_str_solidified,
( &(const binstruction[23]) { /* code */
0x8C080300, // 0000 GETMET R2 R1 K0
0x58100001, // 0001 LDCONST R4 K1
0x7C080400, // 0002 CALL R2 2
0x8C0C0300, // 0003 GETMET R3 R1 K0
0x58140002, // 0004 LDCONST R5 K2
0x7C0C0400, // 0005 CALL R3 2
0x4C100000, // 0006 LDNIL R4
0x20100604, // 0007 NE R4 R3 R4
0x78120006, // 0008 JMPF R4 #0010
0x8C100103, // 0009 GETMET R4 R0 K3
0x60180009, // 000A GETGBL R6 G9
0x5C1C0600, // 000B MOVE R7 R3
0x7C180200, // 000C CALL R6 1
0x5C1C0400, // 000D MOVE R7 R2
0x7C100600, // 000E CALL R4 3
0x80000800, // 000F RET 0
0x60100003, // 0010 GETGBL R4 G3
0x5C140000, // 0011 MOVE R5 R0
0x7C100200, // 0012 CALL R4 1
0x8C100904, // 0013 GETMET R4 R4 K4
0x5C180200, // 0014 MOVE R6 R1
0x7C100400, // 0015 CALL R4 2
0x80000000, // 0016 RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: invoke_request
********************************************************************/
be_local_closure(Matter_Plugin_Light1_invoke_request, /* name */
be_nested_proto(
22, /* nstack */
4, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[21]) { /* constants */
/* K0 */ be_nested_str_weak(light),
/* K1 */ be_nested_str_weak(matter),
/* K2 */ be_nested_str_weak(TLV),
/* K3 */ be_nested_str_weak(cluster),
/* K4 */ be_nested_str_weak(command),
/* K5 */ be_nested_str_weak(update_shadow_lazy),
/* K6 */ be_const_int(0),
/* K7 */ be_nested_str_weak(findsubval),
/* K8 */ be_nested_str_weak(set_bri),
/* K9 */ be_nested_str_weak(log),
/* K10 */ be_nested_str_weak(bri_X3A),
/* K11 */ be_nested_str_weak(publish_command),
/* K12 */ be_nested_str_weak(Bri),
/* K13 */ be_nested_str_weak(Dimmer),
/* K14 */ be_nested_str_weak(tasmota),
/* K15 */ be_nested_str_weak(scale_uint),
/* K16 */ be_const_int(1),
/* K17 */ be_const_int(2),
/* K18 */ be_const_int(3),
/* K19 */ be_nested_str_weak(Power),
/* K20 */ be_nested_str_weak(invoke_request),
}),
be_str_weak(invoke_request),
&be_const_str_solidified,
( &(const binstruction[119]) { /* code */
0xA4120000, // 0000 IMPORT R4 K0
0xB8160200, // 0001 GETNGBL R5 K1
0x88140B02, // 0002 GETMBR R5 R5 K2
0x88180703, // 0003 GETMBR R6 R3 K3
0x881C0704, // 0004 GETMBR R7 R3 K4
0x54220007, // 0005 LDINT R8 8
0x1C200C08, // 0006 EQ R8 R6 R8
0x78220064, // 0007 JMPF R8 #006D
0x8C200105, // 0008 GETMET R8 R0 K5
0x7C200200, // 0009 CALL R8 1
0x1C200F06, // 000A EQ R8 R7 K6
0x7822001A, // 000B JMPF R8 #0027
0x8C200507, // 000C GETMET R8 R2 K7
0x58280006, // 000D LDCONST R10 K6
0x7C200400, // 000E CALL R8 2
0x8C240108, // 000F GETMET R9 R0 K8
0x5C2C1000, // 0010 MOVE R11 R8
0x7C240400, // 0011 CALL R9 2
0x60240008, // 0012 GETGBL R9 G8
0x5C281000, // 0013 MOVE R10 R8
0x7C240200, // 0014 CALL R9 1
0x00261409, // 0015 ADD R9 K10 R9
0x900E1209, // 0016 SETMBR R3 K9 R9
0x8C24010B, // 0017 GETMET R9 R0 K11
0x582C000C, // 0018 LDCONST R11 K12
0x5C301000, // 0019 MOVE R12 R8
0x5834000D, // 001A LDCONST R13 K13
0xB83A1C00, // 001B GETNGBL R14 K14
0x8C381D0F, // 001C GETMET R14 R14 K15
0x5C401000, // 001D MOVE R16 R8
0x58440006, // 001E LDCONST R17 K6
0x544A00FD, // 001F LDINT R18 254
0x584C0006, // 0020 LDCONST R19 K6
0x54520063, // 0021 LDINT R20 100
0x7C380C00, // 0022 CALL R14 6
0x7C240A00, // 0023 CALL R9 5
0x50240200, // 0024 LDBOOL R9 1 0
0x80041200, // 0025 RET 1 R9
0x70020044, // 0026 JMP #006C
0x1C200F10, // 0027 EQ R8 R7 K16
0x78220002, // 0028 JMPF R8 #002C
0x50200200, // 0029 LDBOOL R8 1 0
0x80041000, // 002A RET 1 R8
0x7002003F, // 002B JMP #006C
0x1C200F11, // 002C EQ R8 R7 K17
0x78220002, // 002D JMPF R8 #0031
0x50200200, // 002E LDBOOL R8 1 0
0x80041000, // 002F RET 1 R8
0x7002003A, // 0030 JMP #006C
0x1C200F12, // 0031 EQ R8 R7 K18
0x78220002, // 0032 JMPF R8 #0036
0x50200200, // 0033 LDBOOL R8 1 0
0x80041000, // 0034 RET 1 R8
0x70020035, // 0035 JMP #006C
0x54220003, // 0036 LDINT R8 4
0x1C200E08, // 0037 EQ R8 R7 R8
0x78220021, // 0038 JMPF R8 #005B
0x8C200507, // 0039 GETMET R8 R2 K7
0x58280006, // 003A LDCONST R10 K6
0x7C200400, // 003B CALL R8 2
0x24241106, // 003C GT R9 R8 K6
0x8C280108, // 003D GETMET R10 R0 K8
0x5C301000, // 003E MOVE R12 R8
0x5C341200, // 003F MOVE R13 R9
0x7C280600, // 0040 CALL R10 3
0x60280008, // 0041 GETGBL R10 G8
0x5C2C1000, // 0042 MOVE R11 R8
0x7C280200, // 0043 CALL R10 1
0x002A140A, // 0044 ADD R10 K10 R10
0x900E120A, // 0045 SETMBR R3 K9 R10
0x8C28010B, // 0046 GETMET R10 R0 K11
0x5830000C, // 0047 LDCONST R12 K12
0x5C341000, // 0048 MOVE R13 R8
0x5838000D, // 0049 LDCONST R14 K13
0xB83E1C00, // 004A GETNGBL R15 K14
0x8C3C1F0F, // 004B GETMET R15 R15 K15
0x5C441000, // 004C MOVE R17 R8
0x58480006, // 004D LDCONST R18 K6
0x544E00FD, // 004E LDINT R19 254
0x58500006, // 004F LDCONST R20 K6
0x54560063, // 0050 LDINT R21 100
0x7C3C0C00, // 0051 CALL R15 6
0x58400013, // 0052 LDCONST R16 K19
0x78260001, // 0053 JMPF R9 #0056
0x58440010, // 0054 LDCONST R17 K16
0x70020000, // 0055 JMP #0057
0x58440006, // 0056 LDCONST R17 K6
0x7C280E00, // 0057 CALL R10 7
0x50280200, // 0058 LDBOOL R10 1 0
0x80041400, // 0059 RET 1 R10
0x70020010, // 005A JMP #006C
0x54220004, // 005B LDINT R8 5
0x1C200E08, // 005C EQ R8 R7 R8
0x78220002, // 005D JMPF R8 #0061
0x50200200, // 005E LDBOOL R8 1 0
0x80041000, // 005F RET 1 R8
0x7002000A, // 0060 JMP #006C
0x54220005, // 0061 LDINT R8 6
0x1C200E08, // 0062 EQ R8 R7 R8
0x78220002, // 0063 JMPF R8 #0067
0x50200200, // 0064 LDBOOL R8 1 0
0x80041000, // 0065 RET 1 R8
0x70020004, // 0066 JMP #006C
0x54220006, // 0067 LDINT R8 7
0x1C200E08, // 0068 EQ R8 R7 R8
0x78220001, // 0069 JMPF R8 #006C
0x50200200, // 006A LDBOOL R8 1 0
0x80041000, // 006B RET 1 R8
0x70020008, // 006C JMP #0076
0x60200003, // 006D GETGBL R8 G3
0x5C240000, // 006E MOVE R9 R0
0x7C200200, // 006F CALL R8 1
0x8C201114, // 0070 GETMET R8 R8 K20
0x5C280200, // 0071 MOVE R10 R1
0x5C2C0400, // 0072 MOVE R11 R2
0x5C300600, // 0073 MOVE R12 R3
0x7C200800, // 0074 CALL R8 4
0x80041000, // 0075 RET 1 R8
0x80000000, // 0076 RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified class: Matter_Plugin_Light1
********************************************************************/
extern const bclass be_class_Matter_Plugin_Light0;
be_local_class(Matter_Plugin_Light1,
1,
&be_class_Matter_Plugin_Light0,
be_nested_map(12,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_weak(invoke_request, -1), be_const_closure(Matter_Plugin_Light1_invoke_request_closure) },
{ be_const_key_weak(shadow_bri, 7), be_const_var(0) },
{ be_const_key_weak(TYPES, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
be_const_map( * be_nested_map(1,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_int(257, -1), be_const_int(2) },
})) ) } )) },
{ be_const_key_weak(UPDATE_COMMANDS, 4), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(2,
( (struct bvalue*) &(const bvalue[]) {
be_nested_str_weak(Power),
be_nested_str_weak(Bri),
})) ) } )) },
{ be_const_key_weak(init, -1), be_const_closure(Matter_Plugin_Light1_init_closure) },
{ be_const_key_weak(update_shadow, -1), be_const_closure(Matter_Plugin_Light1_update_shadow_closure) },
{ be_const_key_weak(read_attribute, -1), be_const_closure(Matter_Plugin_Light1_read_attribute_closure) },
{ be_const_key_weak(TYPE, 5), be_nested_str_weak(light1) },
{ be_const_key_weak(update_virtual, -1), be_const_closure(Matter_Plugin_Light1_update_virtual_closure) },
{ be_const_key_weak(DISPLAY_NAME, -1), be_nested_str_weak(Light_X201_X20Dimmer) },
{ be_const_key_weak(CLUSTERS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
be_const_map( * be_nested_map(7,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_int(29, 2), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(6,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(1),
be_const_int(2),
be_const_int(3),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(8, 0), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(7,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(2),
be_const_int(3),
be_const_int(15),
be_const_int(17),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(57, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(7,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(17),
be_const_int(3),
be_const_int(5),
be_const_int(10),
be_const_int(15),
be_const_int(17),
be_const_int(18),
})) ) } )) },
{ be_const_key_int(3, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(4,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(1),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(4, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(3,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(5, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(8,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(1),
be_const_int(2),
be_const_int(3),
be_const_int(4),
be_const_int(5),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(6, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(3,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
})) ) } )) },
{ be_const_key_weak(set_bri, 0), be_const_closure(Matter_Plugin_Light1_set_bri_closure) },
})),
be_str_weak(Matter_Plugin_Light1)
);
/*******************************************************************/
void be_load_Matter_Plugin_Light1_class(bvm *vm) {
be_pushntvclass(vm, &be_class_Matter_Plugin_Light1);
be_setglobal(vm, "Matter_Plugin_Light1");
be_pop(vm, 1);
}
/********************************************************************/
/* End of solidification */

View File

@ -1,4 +1,4 @@
/* Solidification of Matter_Plugin_4_Light2.h */
/* Solidification of Matter_Plugin_3_Light2.h */
/********************************************************************\
* Generated code, don't edit *
\********************************************************************/
@ -156,49 +156,58 @@ be_local_closure(Matter_Plugin_Light2_update_shadow, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 8]) { /* constants */
/* K0 */ be_nested_str_weak(light),
/* K1 */ be_nested_str_weak(update_ct_minmax),
/* K2 */ be_nested_str_weak(update_shadow),
/* K3 */ be_nested_str_weak(get),
/* K4 */ be_nested_str_weak(find),
/* K5 */ be_nested_str_weak(ct),
/* K6 */ be_nested_str_weak(shadow_ct),
/* K7 */ be_nested_str_weak(attribute_updated),
( &(const bvalue[ 9]) { /* constants */
/* K0 */ be_nested_str_weak(VIRTUAL),
/* K1 */ be_nested_str_weak(light),
/* K2 */ be_nested_str_weak(update_ct_minmax),
/* K3 */ be_nested_str_weak(update_shadow),
/* K4 */ be_nested_str_weak(get),
/* K5 */ be_nested_str_weak(find),
/* K6 */ be_nested_str_weak(ct),
/* K7 */ be_nested_str_weak(shadow_ct),
/* K8 */ be_nested_str_weak(attribute_updated),
}),
be_str_weak(update_shadow),
&be_const_str_solidified,
( &(const binstruction[30]) { /* code */
0xA4060000, // 0000 IMPORT R1 K0
0x8C080101, // 0001 GETMET R2 R0 K1
0x7C080200, // 0002 CALL R2 1
0x60080003, // 0003 GETGBL R2 G3
0x5C0C0000, // 0004 MOVE R3 R0
0x7C080200, // 0005 CALL R2 1
0x8C080502, // 0006 GETMET R2 R2 K2
( &(const binstruction[38]) { /* code */
0x88040100, // 0000 GETMBR R1 R0 K0
0x7406001D, // 0001 JMPT R1 #0020
0xA4060200, // 0002 IMPORT R1 K1
0x8C080102, // 0003 GETMET R2 R0 K2
0x7C080200, // 0004 CALL R2 1
0x60080003, // 0005 GETGBL R2 G3
0x5C0C0000, // 0006 MOVE R3 R0
0x7C080200, // 0007 CALL R2 1
0x8C080303, // 0008 GETMET R2 R1 K3
0x8C080503, // 0008 GETMET R2 R2 K3
0x7C080200, // 0009 CALL R2 1
0x4C0C0000, // 000A LDNIL R3
0x200C0403, // 000B NE R3 R2 R3
0x780E000F, // 000C JMPF R3 #001D
0x8C0C0504, // 000D GETMET R3 R2 K4
0x58140005, // 000E LDCONST R5 K5
0x4C180000, // 000F LDNIL R6
0x7C0C0600, // 0010 CALL R3 3
0x4C100000, // 0011 LDNIL R4
0x1C100604, // 0012 EQ R4 R3 R4
0x78120000, // 0013 JMPF R4 #0015
0x880C0106, // 0014 GETMBR R3 R0 K6
0x88100106, // 0015 GETMBR R4 R0 K6
0x20100604, // 0016 NE R4 R3 R4
0x78120004, // 0017 JMPF R4 #001D
0x8C100107, // 0018 GETMET R4 R0 K7
0x541A02FF, // 0019 LDINT R6 768
0x541E0006, // 001A LDINT R7 7
0x7C100600, // 001B CALL R4 3
0x90020C03, // 001C SETMBR R0 K6 R3
0x80000000, // 001D RET 0
0x8C080304, // 000A GETMET R2 R1 K4
0x7C080200, // 000B CALL R2 1
0x4C0C0000, // 000C LDNIL R3
0x200C0403, // 000D NE R3 R2 R3
0x780E000F, // 000E JMPF R3 #001F
0x8C0C0505, // 000F GETMET R3 R2 K5
0x58140006, // 0010 LDCONST R5 K6
0x4C180000, // 0011 LDNIL R6
0x7C0C0600, // 0012 CALL R3 3
0x4C100000, // 0013 LDNIL R4
0x1C100604, // 0014 EQ R4 R3 R4
0x78120000, // 0015 JMPF R4 #0017
0x880C0107, // 0016 GETMBR R3 R0 K7
0x88100107, // 0017 GETMBR R4 R0 K7
0x20100604, // 0018 NE R4 R3 R4
0x78120004, // 0019 JMPF R4 #001F
0x8C100108, // 001A GETMET R4 R0 K8
0x541A02FF, // 001B LDINT R6 768
0x541E0006, // 001C LDINT R7 7
0x7C100600, // 001D CALL R4 3
0x90020E03, // 001E SETMBR R0 K7 R3
0x70020004, // 001F JMP #0025
0x60040003, // 0020 GETGBL R1 G3
0x5C080000, // 0021 MOVE R2 R0
0x7C040200, // 0022 CALL R1 1
0x8C040303, // 0023 GETMET R1 R1 K3
0x7C040200, // 0024 CALL R1 1
0x80000000, // 0025 RET 0
})
)
);

View File

@ -1,4 +1,4 @@
/* Solidification of Matter_Plugin_4_Light3.h */
/* Solidification of Matter_Plugin_3_Light3.h */
/********************************************************************\
* Generated code, don't edit *
\********************************************************************/

View File

@ -0,0 +1,279 @@
/* Solidification of Matter_Plugin_3_Sensor_Flow.h */
/********************************************************************\
* Generated code, don't edit *
\********************************************************************/
#include "be_constobj.h"
extern const bclass be_class_Matter_Plugin_Sensor_Flow;
/********************************************************************
** Solidified function: value_changed
********************************************************************/
be_local_closure(Matter_Plugin_Sensor_Flow_value_changed, /* name */
be_nested_proto(
5, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 2]) { /* constants */
/* K0 */ be_nested_str_weak(attribute_updated),
/* K1 */ be_const_int(0),
}),
be_str_weak(value_changed),
&be_const_str_solidified,
( &(const binstruction[ 5]) { /* code */
0x8C040100, // 0000 GETMET R1 R0 K0
0x540E0403, // 0001 LDINT R3 1028
0x58100001, // 0002 LDCONST R4 K1
0x7C040600, // 0003 CALL R1 3
0x80000000, // 0004 RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: read_attribute
********************************************************************/
be_local_closure(Matter_Plugin_Sensor_Flow_read_attribute, /* name */
be_nested_proto(
12, /* nstack */
4, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[14]) { /* constants */
/* K0 */ be_nested_str_weak(matter),
/* K1 */ be_nested_str_weak(TLV),
/* K2 */ be_nested_str_weak(cluster),
/* K3 */ be_nested_str_weak(attribute),
/* K4 */ be_const_int(0),
/* K5 */ be_nested_str_weak(shadow_value),
/* K6 */ be_nested_str_weak(set),
/* K7 */ be_nested_str_weak(U2),
/* K8 */ be_nested_str_weak(NULL),
/* K9 */ be_const_int(1),
/* K10 */ be_const_int(2),
/* K11 */ be_nested_str_weak(U4),
/* K12 */ be_const_int(3),
/* K13 */ be_nested_str_weak(read_attribute),
}),
be_str_weak(read_attribute),
&be_const_str_solidified,
( &(const binstruction[71]) { /* code */
0xB8120000, // 0000 GETNGBL R4 K0
0x88100901, // 0001 GETMBR R4 R4 K1
0x88140502, // 0002 GETMBR R5 R2 K2
0x88180503, // 0003 GETMBR R6 R2 K3
0x541E0403, // 0004 LDINT R7 1028
0x1C1C0A07, // 0005 EQ R7 R5 R7
0x781E0035, // 0006 JMPF R7 #003D
0x1C1C0D04, // 0007 EQ R7 R6 K4
0x781E0011, // 0008 JMPF R7 #001B
0x881C0105, // 0009 GETMBR R7 R0 K5
0x4C200000, // 000A LDNIL R8
0x201C0E08, // 000B NE R7 R7 R8
0x781E0007, // 000C JMPF R7 #0015
0x8C1C0706, // 000D GETMET R7 R3 K6
0x88240907, // 000E GETMBR R9 R4 K7
0x60280009, // 000F GETGBL R10 G9
0x882C0105, // 0010 GETMBR R11 R0 K5
0x7C280200, // 0011 CALL R10 1
0x7C1C0600, // 0012 CALL R7 3
0x80040E00, // 0013 RET 1 R7
0x70020004, // 0014 JMP #001A
0x8C1C0706, // 0015 GETMET R7 R3 K6
0x88240908, // 0016 GETMBR R9 R4 K8
0x4C280000, // 0017 LDNIL R10
0x7C1C0600, // 0018 CALL R7 3
0x80040E00, // 0019 RET 1 R7
0x70020020, // 001A JMP #003C
0x1C1C0D09, // 001B EQ R7 R6 K9
0x781E0005, // 001C JMPF R7 #0023
0x8C1C0706, // 001D GETMET R7 R3 K6
0x88240907, // 001E GETMBR R9 R4 K7
0x58280004, // 001F LDCONST R10 K4
0x7C1C0600, // 0020 CALL R7 3
0x80040E00, // 0021 RET 1 R7
0x70020018, // 0022 JMP #003C
0x1C1C0D0A, // 0023 EQ R7 R6 K10
0x781E0005, // 0024 JMPF R7 #002B
0x8C1C0706, // 0025 GETMET R7 R3 K6
0x88240907, // 0026 GETMBR R9 R4 K7
0x542AFFFD, // 0027 LDINT R10 65534
0x7C1C0600, // 0028 CALL R7 3
0x80040E00, // 0029 RET 1 R7
0x70020010, // 002A JMP #003C
0x541EFFFB, // 002B LDINT R7 65532
0x1C1C0C07, // 002C EQ R7 R6 R7
0x781E0005, // 002D JMPF R7 #0034
0x8C1C0706, // 002E GETMET R7 R3 K6
0x8824090B, // 002F GETMBR R9 R4 K11
0x58280004, // 0030 LDCONST R10 K4
0x7C1C0600, // 0031 CALL R7 3
0x80040E00, // 0032 RET 1 R7
0x70020007, // 0033 JMP #003C
0x541EFFFC, // 0034 LDINT R7 65533
0x1C1C0C07, // 0035 EQ R7 R6 R7
0x781E0004, // 0036 JMPF R7 #003C
0x8C1C0706, // 0037 GETMET R7 R3 K6
0x8824090B, // 0038 GETMBR R9 R4 K11
0x5828000C, // 0039 LDCONST R10 K12
0x7C1C0600, // 003A CALL R7 3
0x80040E00, // 003B RET 1 R7
0x70020008, // 003C JMP #0046
0x601C0003, // 003D GETGBL R7 G3
0x5C200000, // 003E MOVE R8 R0
0x7C1C0200, // 003F CALL R7 1
0x8C1C0F0D, // 0040 GETMET R7 R7 K13
0x5C240200, // 0041 MOVE R9 R1
0x5C280400, // 0042 MOVE R10 R2
0x5C2C0600, // 0043 MOVE R11 R3
0x7C1C0800, // 0044 CALL R7 4
0x80040E00, // 0045 RET 1 R7
0x80000000, // 0046 RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: pre_value
********************************************************************/
be_local_closure(Matter_Plugin_Sensor_Flow_pre_value, /* name */
be_nested_proto(
4, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
0, /* has constants */
NULL, /* no const */
be_str_weak(pre_value),
&be_const_str_solidified,
( &(const binstruction[10]) { /* code */
0x4C080000, // 0000 LDNIL R2
0x20080202, // 0001 NE R2 R1 R2
0x780A0004, // 0002 JMPF R2 #0008
0x60080009, // 0003 GETGBL R2 G9
0x540E0009, // 0004 LDINT R3 10
0x080C0203, // 0005 MUL R3 R1 R3
0x7C080200, // 0006 CALL R2 1
0x70020000, // 0007 JMP #0009
0x4C080000, // 0008 LDNIL R2
0x80040400, // 0009 RET 1 R2
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified class: Matter_Plugin_Sensor_Flow
********************************************************************/
extern const bclass be_class_Matter_Plugin_Sensor;
be_local_class(Matter_Plugin_Sensor_Flow,
0,
&be_class_Matter_Plugin_Sensor,
be_nested_map(9,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_weak(DISPLAY_NAME, -1), be_nested_str_weak(Flow) },
{ be_const_key_weak(TYPE, -1), be_nested_str_weak(flow) },
{ be_const_key_weak(TYPES, 8), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
be_const_map( * be_nested_map(1,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_int(774, -1), be_const_int(1) },
})) ) } )) },
{ be_const_key_weak(UPDATE_COMMANDS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(1,
( (struct bvalue*) &(const bvalue[]) {
be_nested_str_weak(Flow),
})) ) } )) },
{ be_const_key_weak(value_changed, 7), be_const_closure(Matter_Plugin_Sensor_Flow_value_changed_closure) },
{ be_const_key_weak(JSON_NAME, -1), be_nested_str_weak(Flow) },
{ be_const_key_weak(read_attribute, -1), be_const_closure(Matter_Plugin_Sensor_Flow_read_attribute_closure) },
{ be_const_key_weak(CLUSTERS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
be_const_map( * be_nested_map(6,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_int(5, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(8,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(1),
be_const_int(2),
be_const_int(3),
be_const_int(4),
be_const_int(5),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(57, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(7,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(17),
be_const_int(3),
be_const_int(5),
be_const_int(10),
be_const_int(15),
be_const_int(17),
be_const_int(18),
})) ) } )) },
{ be_const_key_int(1028, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(5,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(1),
be_const_int(2),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(3, 1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(4,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(1),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(4, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(3,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(29, 0), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(6,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(1),
be_const_int(2),
be_const_int(3),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
})) ) } )) },
{ be_const_key_weak(pre_value, -1), be_const_closure(Matter_Plugin_Sensor_Flow_pre_value_closure) },
})),
be_str_weak(Matter_Plugin_Sensor_Flow)
);
/*******************************************************************/
void be_load_Matter_Plugin_Sensor_Flow_class(bvm *vm) {
be_pushntvclass(vm, &be_class_Matter_Plugin_Sensor_Flow);
be_setglobal(vm, "Matter_Plugin_Sensor_Flow");
be_pop(vm, 1);
}
/********************************************************************/
/* End of solidification */

View File

@ -0,0 +1,315 @@
/* Solidification of Matter_Plugin_4_Bridge_Sensor_Flow.h */
/********************************************************************\
* Generated code, don't edit *
\********************************************************************/
#include "be_constobj.h"
extern const bclass be_class_Matter_Plugin_Bridge_Sensor_Flow;
/********************************************************************
** Solidified function: pre_value
********************************************************************/
be_local_closure(Matter_Plugin_Bridge_Sensor_Flow_pre_value, /* name */
be_nested_proto(
4, /* nstack */
2, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
0, /* has constants */
NULL, /* no const */
be_str_weak(pre_value),
&be_const_str_solidified,
( &(const binstruction[10]) { /* code */
0x4C080000, // 0000 LDNIL R2
0x20080202, // 0001 NE R2 R1 R2
0x780A0004, // 0002 JMPF R2 #0008
0x60080009, // 0003 GETGBL R2 G9
0x540E0009, // 0004 LDINT R3 10
0x080C0203, // 0005 MUL R3 R1 R3
0x7C080200, // 0006 CALL R2 1
0x70020000, // 0007 JMP #0009
0x4C080000, // 0008 LDNIL R2
0x80040400, // 0009 RET 1 R2
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: value_changed
********************************************************************/
be_local_closure(Matter_Plugin_Bridge_Sensor_Flow_value_changed, /* name */
be_nested_proto(
5, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 2]) { /* constants */
/* K0 */ be_nested_str_weak(attribute_updated),
/* K1 */ be_const_int(0),
}),
be_str_weak(value_changed),
&be_const_str_solidified,
( &(const binstruction[ 5]) { /* code */
0x8C040100, // 0000 GETMET R1 R0 K0
0x540E0403, // 0001 LDINT R3 1028
0x58100001, // 0002 LDCONST R4 K1
0x7C040600, // 0003 CALL R1 3
0x80000000, // 0004 RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: read_attribute
********************************************************************/
be_local_closure(Matter_Plugin_Bridge_Sensor_Flow_read_attribute, /* name */
be_nested_proto(
12, /* nstack */
4, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[14]) { /* constants */
/* K0 */ be_nested_str_weak(matter),
/* K1 */ be_nested_str_weak(TLV),
/* K2 */ be_nested_str_weak(cluster),
/* K3 */ be_nested_str_weak(attribute),
/* K4 */ be_const_int(0),
/* K5 */ be_nested_str_weak(shadow_value),
/* K6 */ be_nested_str_weak(set),
/* K7 */ be_nested_str_weak(U2),
/* K8 */ be_nested_str_weak(NULL),
/* K9 */ be_const_int(1),
/* K10 */ be_const_int(2),
/* K11 */ be_nested_str_weak(U4),
/* K12 */ be_const_int(3),
/* K13 */ be_nested_str_weak(read_attribute),
}),
be_str_weak(read_attribute),
&be_const_str_solidified,
( &(const binstruction[71]) { /* code */
0xB8120000, // 0000 GETNGBL R4 K0
0x88100901, // 0001 GETMBR R4 R4 K1
0x88140502, // 0002 GETMBR R5 R2 K2
0x88180503, // 0003 GETMBR R6 R2 K3
0x541E0403, // 0004 LDINT R7 1028
0x1C1C0A07, // 0005 EQ R7 R5 R7
0x781E0035, // 0006 JMPF R7 #003D
0x1C1C0D04, // 0007 EQ R7 R6 K4
0x781E0011, // 0008 JMPF R7 #001B
0x881C0105, // 0009 GETMBR R7 R0 K5
0x4C200000, // 000A LDNIL R8
0x201C0E08, // 000B NE R7 R7 R8
0x781E0007, // 000C JMPF R7 #0015
0x8C1C0706, // 000D GETMET R7 R3 K6
0x88240907, // 000E GETMBR R9 R4 K7
0x60280009, // 000F GETGBL R10 G9
0x882C0105, // 0010 GETMBR R11 R0 K5
0x7C280200, // 0011 CALL R10 1
0x7C1C0600, // 0012 CALL R7 3
0x80040E00, // 0013 RET 1 R7
0x70020004, // 0014 JMP #001A
0x8C1C0706, // 0015 GETMET R7 R3 K6
0x88240908, // 0016 GETMBR R9 R4 K8
0x4C280000, // 0017 LDNIL R10
0x7C1C0600, // 0018 CALL R7 3
0x80040E00, // 0019 RET 1 R7
0x70020020, // 001A JMP #003C
0x1C1C0D09, // 001B EQ R7 R6 K9
0x781E0005, // 001C JMPF R7 #0023
0x8C1C0706, // 001D GETMET R7 R3 K6
0x88240907, // 001E GETMBR R9 R4 K7
0x58280004, // 001F LDCONST R10 K4
0x7C1C0600, // 0020 CALL R7 3
0x80040E00, // 0021 RET 1 R7
0x70020018, // 0022 JMP #003C
0x1C1C0D0A, // 0023 EQ R7 R6 K10
0x781E0005, // 0024 JMPF R7 #002B
0x8C1C0706, // 0025 GETMET R7 R3 K6
0x88240907, // 0026 GETMBR R9 R4 K7
0x542AFFFD, // 0027 LDINT R10 65534
0x7C1C0600, // 0028 CALL R7 3
0x80040E00, // 0029 RET 1 R7
0x70020010, // 002A JMP #003C
0x541EFFFB, // 002B LDINT R7 65532
0x1C1C0C07, // 002C EQ R7 R6 R7
0x781E0005, // 002D JMPF R7 #0034
0x8C1C0706, // 002E GETMET R7 R3 K6
0x8824090B, // 002F GETMBR R9 R4 K11
0x58280004, // 0030 LDCONST R10 K4
0x7C1C0600, // 0031 CALL R7 3
0x80040E00, // 0032 RET 1 R7
0x70020007, // 0033 JMP #003C
0x541EFFFC, // 0034 LDINT R7 65533
0x1C1C0C07, // 0035 EQ R7 R6 R7
0x781E0004, // 0036 JMPF R7 #003C
0x8C1C0706, // 0037 GETMET R7 R3 K6
0x8824090B, // 0038 GETMBR R9 R4 K11
0x5828000C, // 0039 LDCONST R10 K12
0x7C1C0600, // 003A CALL R7 3
0x80040E00, // 003B RET 1 R7
0x70020008, // 003C JMP #0046
0x601C0003, // 003D GETGBL R7 G3
0x5C200000, // 003E MOVE R8 R0
0x7C1C0200, // 003F CALL R7 1
0x8C1C0F0D, // 0040 GETMET R7 R7 K13
0x5C240200, // 0041 MOVE R9 R1
0x5C280400, // 0042 MOVE R10 R2
0x5C2C0600, // 0043 MOVE R11 R3
0x7C1C0800, // 0044 CALL R7 4
0x80040E00, // 0045 RET 1 R7
0x80000000, // 0046 RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified function: web_values
********************************************************************/
be_local_closure(Matter_Plugin_Bridge_Sensor_Flow_web_values, /* name */
be_nested_proto(
8, /* nstack */
1, /* argc */
2, /* varg */
0, /* has upvals */
NULL, /* no upvals */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[ 5]) { /* constants */
/* K0 */ be_nested_str_weak(webserver),
/* K1 */ be_nested_str_weak(web_values_prefix),
/* K2 */ be_nested_str_weak(content_send),
/* K3 */ be_nested_str_weak(_X26_X23x26C5_X3B_X20_X25i_X20m3_X2Fh),
/* K4 */ be_nested_str_weak(shadow_value),
}),
be_str_weak(web_values),
&be_const_str_solidified,
( &(const binstruction[12]) { /* code */
0xA4060000, // 0000 IMPORT R1 K0
0x8C080101, // 0001 GETMET R2 R0 K1
0x7C080200, // 0002 CALL R2 1
0x8C080302, // 0003 GETMET R2 R1 K2
0x60100018, // 0004 GETGBL R4 G24
0x58140003, // 0005 LDCONST R5 K3
0x60180009, // 0006 GETGBL R6 G9
0x881C0104, // 0007 GETMBR R7 R0 K4
0x7C180200, // 0008 CALL R6 1
0x7C100400, // 0009 CALL R4 2
0x7C080400, // 000A CALL R2 2
0x80000000, // 000B RET 0
})
)
);
/*******************************************************************/
/********************************************************************
** Solidified class: Matter_Plugin_Bridge_Sensor_Flow
********************************************************************/
extern const bclass be_class_Matter_Plugin_Bridge_Sensor;
be_local_class(Matter_Plugin_Bridge_Sensor_Flow,
0,
&be_class_Matter_Plugin_Bridge_Sensor,
be_nested_map(8,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_weak(pre_value, 1), be_const_closure(Matter_Plugin_Bridge_Sensor_Flow_pre_value_closure) },
{ be_const_key_weak(web_values, -1), be_const_closure(Matter_Plugin_Bridge_Sensor_Flow_web_values_closure) },
{ be_const_key_weak(TYPES, 3), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
be_const_map( * be_nested_map(1,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_int(774, -1), be_const_int(1) },
})) ) } )) },
{ be_const_key_weak(read_attribute, 7), be_const_closure(Matter_Plugin_Bridge_Sensor_Flow_read_attribute_closure) },
{ be_const_key_weak(value_changed, 6), be_const_closure(Matter_Plugin_Bridge_Sensor_Flow_value_changed_closure) },
{ be_const_key_weak(DISPLAY_NAME, 4), be_nested_str_weak(Flow) },
{ be_const_key_weak(TYPE, -1), be_nested_str_weak(http_flow) },
{ be_const_key_weak(CLUSTERS, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_map, {
be_const_map( * be_nested_map(6,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_int(5, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(8,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(1),
be_const_int(2),
be_const_int(3),
be_const_int(4),
be_const_int(5),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(57, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(7,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(17),
be_const_int(3),
be_const_int(5),
be_const_int(10),
be_const_int(15),
be_const_int(17),
be_const_int(18),
})) ) } )) },
{ be_const_key_int(1028, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(5,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(1),
be_const_int(2),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(3, 1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(4,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(1),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(4, -1), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(3,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
{ be_const_key_int(29, 0), be_const_simple_instance(be_nested_simple_instance(&be_class_list, {
be_const_list( * be_nested_list(6,
( (struct bvalue*) &(const bvalue[]) {
be_const_int(0),
be_const_int(1),
be_const_int(2),
be_const_int(3),
be_const_int(65532),
be_const_int(65533),
})) ) } )) },
})) ) } )) },
})),
be_str_weak(Matter_Plugin_Bridge_Sensor_Flow)
);
/*******************************************************************/
void be_load_Matter_Plugin_Bridge_Sensor_Flow_class(bvm *vm) {
be_pushntvclass(vm, &be_class_Matter_Plugin_Bridge_Sensor_Flow);
be_setglobal(vm, "Matter_Plugin_Bridge_Sensor_Flow");
be_pop(vm, 1);
}
/********************************************************************/
/* End of solidification */

View File

@ -0,0 +1,34 @@
/* Solidification of Matter_Plugin_9_Virt_Sensor_Flow.h */
/********************************************************************\
* Generated code, don't edit *
\********************************************************************/
#include "be_constobj.h"
extern const bclass be_class_Matter_Plugin_Virt_Sensor_Flow;
/********************************************************************
** Solidified class: Matter_Plugin_Virt_Sensor_Flow
********************************************************************/
extern const bclass be_class_Matter_Plugin_Sensor_Flow;
be_local_class(Matter_Plugin_Virt_Sensor_Flow,
0,
&be_class_Matter_Plugin_Sensor_Flow,
be_nested_map(5,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_weak(VIRTUAL, 3), be_const_bool(1) },
{ be_const_key_weak(DISPLAY_NAME, -1), be_nested_str_weak(v_X2EFlow) },
{ be_const_key_weak(TYPE, -1), be_nested_str_weak(v_flow) },
{ be_const_key_weak(ARG_HINT, -1), be_nested_str_weak(_Not_X20used_) },
{ be_const_key_weak(ARG, 2), be_nested_str_weak() },
})),
be_str_weak(Matter_Plugin_Virt_Sensor_Flow)
);
/*******************************************************************/
void be_load_Matter_Plugin_Virt_Sensor_Flow_class(bvm *vm) {
be_pushntvclass(vm, &be_class_Matter_Plugin_Virt_Sensor_Flow);
be_setglobal(vm, "Matter_Plugin_Virt_Sensor_Flow");
be_pop(vm, 1);
}
/********************************************************************/
/* End of solidification */

View File

@ -0,0 +1,34 @@
/* Solidification of Matter_Plugin_9_Virt_Sensor_Occupancy.h */
/********************************************************************\
* Generated code, don't edit *
\********************************************************************/
#include "be_constobj.h"
extern const bclass be_class_Matter_Plugin_Virt_Sensor_Occupancy;
/********************************************************************
** Solidified class: Matter_Plugin_Virt_Sensor_Occupancy
********************************************************************/
extern const bclass be_class_Matter_Plugin_Sensor_Occupancy;
be_local_class(Matter_Plugin_Virt_Sensor_Occupancy,
0,
&be_class_Matter_Plugin_Sensor_Occupancy,
be_nested_map(5,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_weak(VIRTUAL, 3), be_const_bool(1) },
{ be_const_key_weak(DISPLAY_NAME, -1), be_nested_str_weak(v_X2EOccupancy) },
{ be_const_key_weak(TYPE, -1), be_nested_str_weak(v_occupancy) },
{ be_const_key_weak(ARG_HINT, -1), be_nested_str_weak(_Not_X20used_) },
{ be_const_key_weak(ARG, 2), be_nested_str_weak() },
})),
be_str_weak(Matter_Plugin_Virt_Sensor_Occupancy)
);
/*******************************************************************/
void be_load_Matter_Plugin_Virt_Sensor_Occupancy_class(bvm *vm) {
be_pushntvclass(vm, &be_class_Matter_Plugin_Virt_Sensor_Occupancy);
be_setglobal(vm, "Matter_Plugin_Virt_Sensor_Occupancy");
be_pop(vm, 1);
}
/********************************************************************/
/* End of solidification */

View File

@ -0,0 +1,7 @@
/* Solidification of Matter_Plugin_z_All.h */
/********************************************************************\
* Generated code, don't edit *
\********************************************************************/
#include "be_constobj.h"
/********************************************************************/
/* End of solidification */

View File

@ -3360,7 +3360,7 @@ be_local_class(Matter_UI,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key_weak(equal_map, -1), be_const_static_closure(Matter_UI_equal_map_closure) },
{ be_const_key_weak(page_part_mgr_adv, -1), be_const_closure(Matter_UI_page_part_mgr_adv_closure) },
{ be_const_key_weak(_CLASSES_TYPES2, -1), be_nested_str_weak(_X7Chttp_relay_X7Chttp_light0_X7Chttp_light1_X7Chttp_light2_X7Chttp_light3_X7Chttp_temperature_X7Chttp_pressure_X7Chttp_illuminance_X7Chttp_humidity_X7Chttp_occupancy_X7Chttp_contact) },
{ be_const_key_weak(_CLASSES_TYPES2, -1), be_nested_str_weak(_X7Chttp_relay_X7Chttp_light0_X7Chttp_light1_X7Chttp_light2_X7Chttp_light3_X7Chttp_temperature_X7Chttp_pressure_X7Chttp_illuminance_X7Chttp_humidity_X7Chttp_occupancy_X7Chttp_contact_X7Chttp_flow) },
{ be_const_key_weak(page_part_mgr, 25), be_const_closure(Matter_UI_page_part_mgr_closure) },
{ be_const_key_weak(show_plugins_hints_js, -1), be_const_closure(Matter_UI_show_plugins_hints_js_closure) },
{ be_const_key_weak(show_enable, -1), be_const_closure(Matter_UI_show_enable_closure) },
@ -3372,7 +3372,7 @@ be_local_class(Matter_UI,
{ be_const_key_weak(show_commissioning_info, -1), be_const_closure(Matter_UI_show_commissioning_info_closure) },
{ be_const_key_weak(page_part_ctl, 18), be_const_closure(Matter_UI_page_part_ctl_closure) },
{ be_const_key_weak(show_fabric_info, -1), be_const_closure(Matter_UI_show_fabric_info_closure) },
{ be_const_key_weak(_CLASSES_TYPES, 4), be_nested_str_weak(_X7Crelay_X7Clight0_X7Clight1_X7Clight2_X7Clight3_X7Cshutter_X7Cshutter_X2Btilt_X7Ctemperature_X7Cpressure_X7Cilluminance_X7Chumidity_X7Coccupancy_X7Conoff_X7Ccontact_X7C_X2Dvirtual_X7Cv_relay_X7Cv_light0_X7Cv_light1_X7Cv_light2_X7Cv_light3_X7Cv_temp_X7Cv_pressure_X7Cv_illuminance_X7Cv_humidity_X7Cv_contact) },
{ be_const_key_weak(_CLASSES_TYPES, 4), be_nested_str_weak(_X7Crelay_X7Clight0_X7Clight1_X7Clight2_X7Clight3_X7Cshutter_X7Cshutter_X2Btilt_X7Ctemperature_X7Cpressure_X7Cilluminance_X7Chumidity_X7Coccupancy_X7Conoff_X7Ccontact_X7Cflow_X7C_X2Dvirtual_X7Cv_relay_X7Cv_light0_X7Cv_light1_X7Cv_light2_X7Cv_light3_X7Cv_temp_X7Cv_pressure_X7Cv_illuminance_X7Cv_humidity_X7Cv_occupancy_X7Cv_contact_X7Cv_flow) },
{ be_const_key_weak(web_get_arg, -1), be_const_closure(Matter_UI_web_get_arg_closure) },
{ be_const_key_weak(plugin_option, 5), be_const_closure(Matter_UI_plugin_option_closure) },
{ be_const_key_weak(web_add_config_button, -1), be_const_closure(Matter_UI_web_add_config_button_closure) },

View File

@ -5,7 +5,7 @@
import os
import global
import solidify
import string
import string as string2
import re
import sys
@ -18,13 +18,27 @@ var globs = "path,ctypes_bytes_dyn,tasmota,ccronexpr,gpio,light,webclient,load,M
"_lvgl,"
"int64"
for g:string.split(globs, ",")
for g:string2.split(globs, ",")
global.(g) = nil
end
var prefix_dir = "src/embedded/"
var prefix_out = "src/solidify/"
def sort(l)
# insertion sort
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
def clean_directory(dir)
var file_list = os.listdir(dir)
for f : file_list
@ -44,9 +58,9 @@ def parse_file(fname, prefix_out)
var compiled = compile(src)
compiled() # run the compile code to instanciate the classes and modules
# output solidified
var fname_h = string.split(fname, '.be')[0] + '.h' # take whatever is before the first '.be'
var fname_h = string2.split(fname, '.be')[0] + '.h' # take whatever is before the first '.be'
var fout = open(prefix_out + "solidified_" + fname_h, "w")
fout.write(format("/* Solidification of %s */\n", fname_h))
fout.write(f"/* Solidification of {fname_h} */\n")
fout.write("/********************************************************************\\\n")
fout.write("* Generated code, don't edit *\n")
fout.write("\\********************************************************************/\n")
@ -56,13 +70,13 @@ def parse_file(fname, prefix_out)
# print(directives)
for directive : directives
var object_list = string.split(directive[1], ',')
var object_list = string2.split(directive[1], ',')
var object_name = object_list[0]
var weak = (object_list.find('weak') != nil) # do we solidify with weak strings?
var o = global
var cl_name = nil
var obj_name = nil
for subname : string.split(object_name, '.')
for subname : string2.split(object_name, '.')
o = o.(subname)
cl_name = obj_name
obj_name = subname
@ -78,6 +92,7 @@ end
clean_directory(prefix_out)
var src_file_list = os.listdir(prefix_dir)
src_file_list = sort(src_file_list)
for src_file : src_file_list
if src_file[0] == '.' continue end
parse_file(src_file, prefix_out)

View File

@ -8,11 +8,6 @@
#if defined(USE_BERRY_ULP) && (defined(CONFIG_IDF_TARGET_ESP32) || defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32S3))
// #include "esp32/ulp.h"
#include "driver/rtc_io.h"
#include "driver/gpio.h"
#include "driver/adc.h"
extern void be_ULP_run(int32_t entry);
BE_FUNC_CTYPE_DECLARE(be_ULP_run, "", "[i]");
@ -25,10 +20,10 @@ BE_FUNC_CTYPE_DECLARE(be_ULP_set_mem, "i", "ii");
extern int32_t be_ULP_get_mem(int32_t pos);
BE_FUNC_CTYPE_DECLARE(be_ULP_get_mem, "i", "i");
extern int32_t be_ULP_gpio_init(gpio_num_t pin, rtc_gpio_mode_t mode);
extern int32_t be_ULP_gpio_init(int32_t pin, int32_t mode);
BE_FUNC_CTYPE_DECLARE(be_ULP_gpio_init, "i", "ii");
extern void be_ULP_adc_config(struct bvm *vm, adc1_channel_t channel, adc_atten_t attenuation, adc_bits_width_t width);
extern void be_ULP_adc_config(struct bvm *vm, int32_t channel, int32_t attenuation, int32_t width);
BE_FUNC_CTYPE_DECLARE(be_ULP_adc_config, "", "@iii");
extern void be_ULP_sleep(int32_t wake_up_s);

View File

@ -1,9 +1,9 @@
/********************************************************************
* Berry module `webserver`
* Berry module `crypto`
*
* To use: `import webserver`
* To use: `import crypto`
*
* Allows to respond to HTTP request
* Allows to use crypto functions
*******************************************************************/
#include "be_constobj.h"
#include "be_mapping.h"
@ -29,6 +29,9 @@ extern int m_aes_ctr_init(bvm *vm);
extern int m_aes_ctr_run(bvm *vm);
extern int m_aes_ctr_tag(bvm *vm);
extern int m_aes_cbc_encrypt1(bvm *vm);
extern int m_aes_cbc_decrypt1(bvm *vm);
extern int m_ec_p256_pubkey(bvm *vm);
extern int m_ec_p256_sharedkey(bvm *vm);
extern int m_ec_p256_ecdsa_sign_sha256(bvm *vm);
@ -64,6 +67,7 @@ extern const bclass be_class_md5;
#include "be_fixed_be_class_aes_ccm.h"
#include "be_fixed_be_class_aes_gcm.h"
#include "be_fixed_be_class_aes_ctr.h"
#include "be_fixed_be_class_aes_cbc.h"
#include "be_fixed_be_class_ec_p256.h"
#include "be_fixed_be_class_ec_c25519.h"
#include "be_fixed_be_class_sha256.h"
@ -75,6 +79,10 @@ extern const bclass be_class_md5;
const be_const_member_t be_crypto_members[] = {
// name with prefix '/' indicates a Berry class
// entries need to be sorted (ignoring the prefix char)
#ifdef USE_BERRY_CRYPTO_AES_CBC
{ "/AES_CBC", (intptr_t) &be_class_aes_cbc },
#endif // USE_BERRY_CRYPTO_AES_CBC
#ifdef USE_BERRY_CRYPTO_AES_CCM
{ "/AES_CCM", (intptr_t) &be_class_aes_ccm },
#endif // USE_BERRY_CRYPTO_AES_CTR
@ -162,6 +170,11 @@ class be_class_aes_ctr (scope: global, name: AES_CTR) {
decrypt, func(m_aes_ctr_run)
}
class be_class_aes_cbc (scope: global, name: AES_CBC) {
decrypt1, static_func(m_aes_cbc_decrypt1)
encrypt1, static_func(m_aes_cbc_encrypt1)
}
class be_class_ec_p256 (scope: global, name: EC_P256) {
public_key, static_func(m_ec_p256_pubkey)
shared_key, static_func(m_ec_p256_sharedkey)
@ -211,4 +224,4 @@ module crypto (scope: global) {
random, func(m_crypto_random)
}
@const_object_info_end */
@const_object_info_end */

View File

@ -4,6 +4,6 @@
*******************************************************************/
#ifdef USE_WS2812
#include "solidify/solidified_leds_animator.h"
#include "solidify/solidified_leds_0_animator.h"
#endif // USE_WS2812

View File

@ -0,0 +1,39 @@
/********************************************************************
* Berry class `neopixelbus_ntv`
*
*******************************************************************/
#include "be_constobj.h"
#ifdef USE_WS2812
extern int be_leds_blend(bvm *vm);
extern int be_leds_blend_pixels(bvm *vm);
extern int be_leds_fill_pixels(bvm *vm);
extern int be_leds_paste_pixels(bvm *vm);
BE_EXPORT_VARIABLE extern const bclass be_class_bytes;
#include "solidify/solidified_leds_frame_be_methods.h"
/* @const_object_info_begin
class be_class_Leds_frame (scope: global, name: Leds_frame, super:be_class_bytes, strings: weak) {
pixel_size, var
init, closure(Leds_frame_be_init_closure)
item, closure(Leds_frame_be_item_closure)
setitem, closure(Leds_frame_be_setitem_closure)
set_pixel, closure(Leds_frame_be_set_pixel_closure)
// the following are on buffers
blend, static_func(be_leds_blend)
fill_pixels, func(be_leds_fill_pixels)
blend_pixels, func(be_leds_blend_pixels)
paste_pixels, func(be_leds_paste_pixels)
}
@const_object_info_end */
#include "be_fixed_be_class_Leds_frame.h"
#endif // USE_WS2812

View File

@ -1,50 +1,31 @@
/********************************************************************
* Berry class `neopixelbus_ntv`
* Berry class `Leds_ntv`
*
*******************************************************************/
/*
class Leds_ntv
var _p # pointer to internal object of type `NeoPixelBus<FEATURE, METHOD>(uint16_t countPixels, uint8_t pin)`
var _t # type of led strip
static WS2812_GRB = 1
static SK6812_GRBW = 2
# skeleton for native call
def call_native() end
end
*/
#include "be_constobj.h"
#ifdef USE_WS2812
extern int be_neopixelbus_call_native(bvm *vm);
extern int be_leds_blend_color(bvm *vm);
extern int be_leds_apply_bri_gamma(bvm *vm);
/* @const_object_info_begin
class be_class_Leds_ntv (scope: global, name: Leds_ntv, strings: weak) {
_p, var
_t, var
/********************************************************************
** Solidified class: Leds_ntv
********************************************************************/
be_local_class(Leds_ntv,
2,
NULL,
be_nested_map(5,
( (struct bmapnode*) &(const bmapnode[]) {
{ be_const_key(call_native, -1), be_const_func(be_neopixelbus_call_native) },
{ be_const_key(_t, -1), be_const_var(1) },
{ be_const_key(_p, 3), be_const_var(0) },
{ be_const_key(SK6812_GRBW, 4), be_const_int(2) },
{ be_const_key(WS2812_GRB, -1), be_const_int(1) },
})),
be_str_weak(Leds_ntv)
);
/*******************************************************************/
WS2812_GRB, int(1)
SK6812_GRBW, int(2)
void be_load_Leds_ntv_class(bvm *vm) {
be_pushntvclass(vm, &be_class_Leds_ntv);
be_setglobal(vm, "Leds_ntv");
be_pop(vm, 1);
call_native, func(be_neopixelbus_call_native)
blend_color, static_func(be_leds_blend_color)
apply_bri_gamma, static_func(be_leds_apply_bri_gamma)
}
@const_object_info_end */
#include "be_fixed_be_class_Leds_ntv.h"
// be_const_func(be_neopixelbus_call_native)
#endif // USE_WS2812

Some files were not shown because too many files have changed in this diff Show More