Giter VIP home page Giter VIP logo

Comments (7)

marvinroger avatar marvinroger commented on May 24, 2024

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.

enavarro222 avatar enavarro222 commented on May 24, 2024

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.

enavarro222 avatar enavarro222 commented on May 24, 2024

Btw for NeoPixel devices I'm thinking on MQTT convention to use, I'll start an issue for that.

from homie-esp8266.

marvinroger avatar marvinroger commented on May 24, 2024

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.

enavarro222 avatar enavarro222 commented on May 24, 2024

Sounds great (and yes straightforward) !
I never used ticker for now.

from homie-esp8266.

enavarro222 avatar enavarro222 commented on May 24, 2024

great ! thanks !

from homie-esp8266.

marvinroger avatar marvinroger commented on May 24, 2024

The advanced usage page in the Wiki is updated, also. ;)

from homie-esp8266.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.