From f4297e6fce37e2bf5c10f97da6f68169f9e0c450 Mon Sep 17 00:00:00 2001 From: David Date: Mon, 28 Sep 2026 22:57:22 +0000 Subject: [PATCH] 2.0.0 Directives and answers travel over MQTT alone, the session is reopened with a wait of 1 to 60 s, interfaces are rows in program memory, a device has capabilities with instances, names and semantics, one handler takes the directive with the device in hand, and the messages beside a Response are there: ErrorResponse, DeferredResponse, ChangeReport, scene and doorbell events. A 1.x sketch compiles as it is; the readme says what changes for it. Light on a D1 mini: static RAM 30,616 B (1.1.0: 52,768), flash 332,705 B (1.1.0: 350,885). 148 host tests, 17 sketches build without a warning. On 2026-09-28, with a board and a real Alexa account: nine interfaces driven, a deferred answer, an ErrorResponse, a ChangeReport and a doorbell press; the session scenarios on a scripted broker, loss of Wi-Fi included. Voice commands were not tested yet. Co-Authored-By: Claude Fable 5.1 --- CHANGELOG.md | 5 ++--- examples/README.md | 8 ++++---- library.json | 2 +- library.properties | 2 +- readme.md | 10 +++++----- src/AlexaUtils.h | 2 +- src/AlexaVersion.h | 2 +- 7 files changed, 15 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b22dc11..6cd6c39 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,13 +4,12 @@ All notable changes to this library are written down here. The format is that of [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), the version numbers follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [2.0.0] - unreleased +## [2.0.0] - 2026-09-28 The library talks MQTT only, describes 28 interfaces and takes 22 KB less static RAM. The sketches of 1.x compile as they are; the readme says what changes for them (Migrating from 1.x). -While it was written this version was numbered 1.2.0, which was never released. `library.json`, -`library.properties` and `ALEX2ESP_VERSION` say 1.2.0 until the release. +While it was written this version was numbered 1.2.0, which was never released. ### Added diff --git a/examples/README.md b/examples/README.md index a644eec..cb659ad 100644 --- a/examples/README.md +++ b/examples/README.md @@ -98,10 +98,10 @@ Arduino IDE and have not run on a board yet. What each announces in discovery is checked by the host tests in `test/test_examples`. With this library on a Wemos D1 mini, a real Alexa account and other sketches (2026-09-28), Alexa discovered and -drove PowerController, BrightnessController, ColorTemperatureController and one instance each of ToggleController, -RangeController and ModeController. Not tried with Alexa from this library: ColorController, ThermostatController, -LockController and the deferred answer, SceneController, the ChangeReports and DoorbellPress. Voice commands have -not been tried. +drove PowerController, BrightnessController, ColorTemperatureController, one instance each of ToggleController, +RangeController and ModeController, a lock with its deferred answer and a scene, and took a ChangeReport, an +ErrorResponse and the press of a doorbell. Not tried with Alexa from this library: ColorController, +ThermostatController and the sensors. Voice commands have not been tried. ## Limits diff --git a/library.json b/library.json index 68451a2..106f1db 100644 --- a/library.json +++ b/library.json @@ -1,6 +1,6 @@ { "name": "Alex2ESP", - "version": "1.2.0", + "version": "2.0.0", "description": "Companion library for the Alex2MQTT Alexa skill: exposes ESP8266 devices to Alexa through alex2mqtt.stormysdream.club over MQTT (discovery, directives, state reports).", "keywords": [ "alexa", diff --git a/library.properties b/library.properties index 3fafd52..6957f8b 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=Alex2ESP -version=1.2.0 +version=2.0.0 author=David maintainer=David sentence=A companion library for the Alex2MQTT Alexa Skill (ESP8266). diff --git a/readme.md b/readme.md index f6462e6..3888346 100644 --- a/readme.md +++ b/readme.md @@ -411,7 +411,7 @@ The last column says whether Alexa discovered and drove the interface **from thi | `ThermostatController` | 3.2 | targetSetpoint, lowerSetpoint, upperSetpoint, thermostatMode | `addThermostatSetpointProp`, `addThermostatLowerSetpointProp`, `addThermostatUpperSetpointProp` (both: `addThermostatDualSetpointProp(lower, upper)`), `addThermostatModeProp` | Thermostat | no | | `TemperatureSensor` | 3 | temperature | `addTemperatureSensorProp(value, scale)` | TemperatureSensor | no | | `HumiditySensor` | 3 | relativeHumidity | `addHumiditySensorProp` | | no | -| `LockController` | 3 | lockState | `addLockControllerProp` | Lock | no | +| `LockController` | 3 | lockState | `addLockControllerProp` | Lock | yes | | `ContactSensor` | 3 | detectionState | `addContactSensorProp` | ContactSensor | no | | `MotionSensor` | 3 | detectionState | `addMotionSensorProp` | | no | | `TimeHoldController` | 3 | holdStartTime, holdEndTime | `addProperty` | | no | @@ -422,12 +422,12 @@ The last column says whether Alexa discovered and drove the interface **from thi | `InventoryLevelSensor` | 3 | level | `addProperty` | | no | | `PlaybackController` | 3 | `"properties": {}` | | | no | | `WakeOnLANController` | 3 | `"properties": {}` | | | no | -| `SceneController` | 3 | no `properties` object | | Scene | no | -| `DoorbellEventSource` | 3 | no `properties` object | | Doorbell | no | +| `SceneController` | 3 | no `properties` object | | Scene | yes | +| `DoorbellEventSource` | 3 | no `properties` object | | Doorbell | yes | | `StepSpeaker` | 3 | no `properties` object | | | no | | `SimpleEventSource` | 1.0 | no `properties` object | | | no | -The six interfaces with "yes" were driven with another sketch than the examples, which have not run on a board yet. The directives were answered within 0.2 to 0.4 s, and a directive that was delivered twice was answered once. Voice commands have not been tried. +The interfaces with "yes" were driven on a Wemos D1 mini with other sketches than the examples, which have not run on a board yet. The directives were answered within 0.2 to 0.4 s, and a directive that was delivered twice was answered once. The lock answered after a DeferredResponse, nine seconds after the directive; the scene was started and stopped; the press of the doorbell was accepted by Alexa. A ChangeReport of a lamp and an ErrorResponse reached Alexa as well. Voice commands have not been tried. The Alex2MQTT service itself has carried more than that. With its Node.js client, alex2node 1.5.2, on the same day: Power, Brightness, Color, ColorTemperature, Percentage, PowerLevel, Thermostat, Range, Mode, Toggle, Lock and Scene, deferred responses, ErrorResponse, ReportState, and ChangeReports for contact, motion, lock, temperature and power. So the way from the broker to Alexa is tried for these; what this library sends for them is checked by the host tests only. @@ -683,7 +683,7 @@ What changes for a 1.x sketch that is compiled against 2.0: - ESP8266 only. The library has never been compiled for an ESP32. - The session is MQTT over TCP on port 1883, without TLS. - Reports are published with QoS 0 and sent once. An event or a change while there is no session with the broker is not sent later; `send()` returns `false` and the sketch decides. -- Tried with Alexa from this library: the six interfaces marked in [Interface Types](#interface-types). Not tried from this library: `ColorController`, `ThermostatController`, `LockController` and the deferred answer, `SceneController`, the ErrorResponse, the ChangeReports, `DoorbellPress` and every interface without an example. Voice commands have not been tried. +- Tried with Alexa from this library: the nine interfaces marked in [Interface Types](#interface-types), the deferred answer, the ErrorResponse, a ChangeReport and `DoorbellPress`. Not tried from this library: `ColorController`, `ThermostatController`, the sensors and every interface without an example. Voice commands have not been tried. - The examples are compiled, with 0 warnings, and what each announces in discovery is checked by the host tests. They have not run on a board and have not been built with the Arduino IDE. - The library keeps no state of the devices. What a device is set to is a variable of the sketch and starts from its initial value after a reset. - 28 of the interfaces of Alexa have a row. The others cannot be announced. diff --git a/src/AlexaUtils.h b/src/AlexaUtils.h index 60bcbbc..08522b5 100644 --- a/src/AlexaUtils.h +++ b/src/AlexaUtils.h @@ -4,7 +4,7 @@ #include // A 1.x name, kept for sketches that print the memory figures. The send and receive queues that lived here -// belonged to the HTTP fallback and went with it in 1.2.0; the library's own diagnostics are in AlexaLog.h. +// belonged to the HTTP fallback and went with it in 2.0.0; the library's own diagnostics are in AlexaLog.h. // printMemoryInfo() is a utility of the sketch and not a line of the log: the library never calls it, and it // prints on Serial whatever the log level and ALEX2ESP_LOG_MAX are, because the sketch asked for the figures. class AlexaUtils diff --git a/src/AlexaVersion.h b/src/AlexaVersion.h index 0788600..63d1ef2 100644 --- a/src/AlexaVersion.h +++ b/src/AlexaVersion.h @@ -3,6 +3,6 @@ #ifndef ALEXA_VERSION_H #define ALEXA_VERSION_H -#define ALEX2ESP_VERSION "1.2.0" +#define ALEX2ESP_VERSION "2.0.0" #endif // ALEXA_VERSION_H