Comments (7)
Oh, that's a problem... So yes, this should be configurable. What about an event system?
#include <Homie.h>
void onHomieEvent(HomieEvent event) {
switch(event) {
case HOMIE_CONFIGURATION_MODE:
// Do whatever you want when configuration mode is started
break;
case HOMIE_NORMAL_MODE:
// Do whatever you want when normal mode is started
break;
case HOMIE_OTA_MODE:
// Do whatever you want when OTA mode is started
break;
case HOMIE_ABOUT_TO_RESET:
// Do whatever you want when the device is about to reset
break;
case HOMIE_WIFI_CONNECTED:
// Do whatever you want when Wi-Fi is connected in normal mode
break;
case HOMIE_WIFI_DISCONNECTED:
// Do whatever you want when Wi-Fi is disconnected in normal mode
break;
case HOMIE_MQTT_CONNECTED:
// Do whatever you want when MQTT is connected in normal mode
break;
case HOMIE_MQTT_DISCONNECTED:
// Do whatever you want when MQTT is disconnected in normal mode
break;
}
}
void setup() {
Homie.enableBuiltinLedIndicator(false);
Homie.onEvent(onHomieEvent);
}
This would remove the need for Homie.setResetHook()
, as this would allow to hook to every valuable Homie events.
I like the idea of an event system because of what it allows. Thinking about the NeoPixel
, I told myself that you would also like to change the color of a LED on the strip depending on the mode the device is on.
from homie-esp8266.
Event system could be nice !
However not straightforward if you want to make a led/pixel to blink in some cases. Maybe with ticker and some global state variables...
from homie-esp8266.
Btw for NeoPixel
devices I'm thinking on MQTT convention to use, I'll start an issue for that.
from homie-esp8266.
Not straightforward?
#include <Homie.h>
#include <Ticker.h>
Ticker led_ticker;
void blinkTick() {
digitalWrite(CUSTOM_LED, !digitalRead(CUSTOM_LED));
}
void blink(bool start) {
if (start) {
digitalWrite(CUSTOM_LED, HIGH);
led_ticker.attach(1000, blinkTick);
} else {
led_ticker.detach();
digitalWrite(CUSTOM_LED, LOW);
}
}
void onHomieEvent(HomieEvent event) {
switch(event) {
case HOMIE_WIFI_CONNECTED:
blink(true);
break;
case HOMIE_WIFI_DISCONNECTED:
blink(false);
break;
}
}
void setup() {
Homie.enableBuiltinLedIndicator(false);
Homie.onEvent(onHomieEvent);
}
The problem is if I want to make it more straightfoward, I would have to provide setLedPin
, setLedState
, setWifiLedPace
... that's too much noise.
from homie-esp8266.
Sounds great (and yes straightforward) !
I never used ticker for now.
from homie-esp8266.
great ! thanks !
from homie-esp8266.
The advanced usage page in the Wiki is updated, also. ;)
from homie-esp8266.
Related Issues (20)
- lint: fix warning "Using C-style cast" HOT 1
- Wemos D1 mini Pro crashes on boot up with debug flag enabled HOT 3
- Home Assistant integration
- Question: Delay between MQTT messages HOT 16
- [Request] Add support to save configure as json in web configurator
- Can't build with arduino-esp32 v2.0.2 (latest stable) HOT 4
- Public variables in PropertyInputHandler are undefined. HOT 2
- compilation failure on ESP32 HOT 3
- Get node property without intermediate variable HOT 1
- Compilation failure on ESP8266 HOT 2
- MQTT reconnect fails after Wifi-disconnect HOT 10
- Wrong MQTT topic used when advertising $unit HOT 1
- using ESP32 Serial1 interface triggers homie reset HOT 1
- Connection to HiveMQ Cloud not working
- 'HTTPClient::begin' declared with attribute error: obsolete API, use ::begin(WiFiClient, url) HOT 3
- version 4 HOT 1
- Issue with ArduinoIDE and manually installed libraries
- PlatformIO [email protected] linker error HOT 2
- HomieSetting.setDefaultValue("") might be freed crashing the mcu HOT 3
- Range index control is not valid
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from homie-esp8266.