Fork of the espurna firmware for `mhsw` switches
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

218 lines
7.5 KiB

providers: relays, lights and buttons refactoring (#2414) - gpio module now tracks the known providers (right now, hardware and mcp expander) - refactored relay struct to use 'Provider' implementing setup,notify,change,boot instead of just BasePin actions - refactored button module to use gpio provider instead of referencing types itself - removed dual & stm code from buttons, migrate both to relay module - added status notify and change callbacks for relayStatus (i.e. 'notify' when relay status was called, but not changed. and 'changed' when it did) - relays runtime configuration keys - relay command now shows configured relays and current & target statuses - refactor the code using relayStatus(0, blah) under LIGHT_PROVIDER check to use lightState instead - remove rfbridge code form relay module. implement through a basic state listener in the rfbridge module, depend on RELAY_SUPPORT - allow to bind rf codes to real relays - drop tuya-specific lights provider, remove tuya code from relays and lights modules - integrate tuya via relay listeners and providers, use lights custom provider - implement channel transitions for tuya. disabled by default, and transition time and step are overridden to 2000 + 100. needs to be set to some value below the total time (i.e. `total transition time / step time == number of steps`, we need to figure out a correct time that serial comms could handle) - lights custom provider (global, not per-pin) and state listeners - remove lights code from relay module. implement through providers & listeners in the lights module, depend on RELAY_SUPPORT - lights per-channel relay provider (unused atm), depend on RELAY_SUPPORT - refactored channel transition - calculate step only once, make sure time + step values are sane, generate quick transitions with very small delay (10ms hardcoded) for transitions during OFF state i.e. we no longer waste 500ms (or whatever transition time is set to) on boot doing nothing - transition time + step parameter for the lightUpdate - report mask parameter for the lightUpdate - minor fixes across the board resolve #2222
3 years ago
providers: relays, lights and buttons refactoring (#2414) - gpio module now tracks the known providers (right now, hardware and mcp expander) - refactored relay struct to use 'Provider' implementing setup,notify,change,boot instead of just BasePin actions - refactored button module to use gpio provider instead of referencing types itself - removed dual & stm code from buttons, migrate both to relay module - added status notify and change callbacks for relayStatus (i.e. 'notify' when relay status was called, but not changed. and 'changed' when it did) - relays runtime configuration keys - relay command now shows configured relays and current & target statuses - refactor the code using relayStatus(0, blah) under LIGHT_PROVIDER check to use lightState instead - remove rfbridge code form relay module. implement through a basic state listener in the rfbridge module, depend on RELAY_SUPPORT - allow to bind rf codes to real relays - drop tuya-specific lights provider, remove tuya code from relays and lights modules - integrate tuya via relay listeners and providers, use lights custom provider - implement channel transitions for tuya. disabled by default, and transition time and step are overridden to 2000 + 100. needs to be set to some value below the total time (i.e. `total transition time / step time == number of steps`, we need to figure out a correct time that serial comms could handle) - lights custom provider (global, not per-pin) and state listeners - remove lights code from relay module. implement through providers & listeners in the lights module, depend on RELAY_SUPPORT - lights per-channel relay provider (unused atm), depend on RELAY_SUPPORT - refactored channel transition - calculate step only once, make sure time + step values are sane, generate quick transitions with very small delay (10ms hardcoded) for transitions during OFF state i.e. we no longer waste 500ms (or whatever transition time is set to) on boot doing nothing - transition time + step parameter for the lightUpdate - report mask parameter for the lightUpdate - minor fixes across the board resolve #2222
3 years ago
Terminal: change command-line parser (#2247) Change the underlying command line handling: - switch to a custom parser, inspired by redis / sds - update terminalRegisterCommand signature, pass only bare minimum - clean-up `help` & `commands`. update settings `set`, `get` and `del` - allow our custom test suite to run command-line tests - clean-up Stream IO to allow us to print large things into debug stream (for example, `eeprom.dump`) - send parsing errors to the debug log As a proof of concept, introduce `TERMINAL_MQTT_SUPPORT` and `TERMINAL_WEB_API_SUPPORT` - MQTT subscribes to the `<root>/cmd/set` and sends response to the `<root>/cmd`. We can't output too much, as we don't have any large-send API. - Web API listens to the `/api/cmd?apikey=...&line=...` (or PUT, params inside the body). This one is intended as a possible replacement of the `API_SUPPORT`. Internals introduce a 'task' around the AsyncWebServerRequest object that will simulate what WiFiClient does and push data into it continuously, switching between CONT and SYS. Both are experimental. We only accept a single command and not every command is updated to use Print `ctx.output` object. We are also somewhat limited by the Print / Stream overall, perhaps I am overestimating the usefulness of Arduino compatibility to such an extent :) Web API handler can also sometimes show only part of the result, whenever the command tries to yield() by itself waiting for something. Perhaps we would need to create a custom request handler for that specific use-case.
4 years ago
  1. //------------------------------------------------------------------------------
  2. // Do not change this file unless you know what you are doing
  3. // Configuration settings are in the general.h file
  4. //------------------------------------------------------------------------------
  5. #pragma once
  6. //------------------------------------------------------------------------------
  7. // Various modules configuration
  8. #if DEBUG_TELNET_SUPPORT
  9. #undef TELNET_SUPPORT
  10. #define TELNET_SUPPORT 1
  11. #endif
  12. #if not WEB_SUPPORT
  13. #undef DEBUG_WEB_SUPPORT
  14. #define DEBUG_WEB_SUPPORT 0
  15. #endif
  16. #if not WEB_SUPPORT
  17. #undef API_SUPPORT
  18. #define API_SUPPORT 0 // API support requires web support
  19. #endif
  20. #if not WEB_SUPPORT
  21. #undef SSDP_SUPPORT
  22. #define SSDP_SUPPORT 0 // SSDP support requires web support
  23. #endif
  24. #if UART_MQTT_SUPPORT
  25. #undef MQTT_SUPPORT
  26. #define MQTT_SUPPORT 1 // UART<->MQTT requires MQTT and no serial debug
  27. #undef DEBUG_SERIAL_SUPPORT
  28. #define DEBUG_SERIAL_SUPPORT 0 // TODO: compare UART_MQTT_PORT with DEBUG_PORT? (as strings)
  29. #endif
  30. #if ALEXA_SUPPORT
  31. #undef BROKER_SUPPORT
  32. #define BROKER_SUPPORT 1 // If Alexa enabled enable BROKER
  33. #undef RELAY_SUPPORT
  34. #define RELAY_SUPPORT 1 // and switches
  35. #endif
  36. #if RPN_RULES_SUPPORT
  37. #undef BROKER_SUPPORT
  38. #define BROKER_SUPPORT 1 // If RPN Rules enabled enable BROKER
  39. #undef MQTT_SUPPORT
  40. #define MQTT_SUPPORT 1
  41. #endif
  42. #if LED_SUPPORT
  43. #undef BROKER_SUPPORT
  44. #define BROKER_SUPPORT 1 // If LED is enabled enable BROKER to supply status changes
  45. #endif
  46. #if INFLUXDB_SUPPORT
  47. #undef BROKER_SUPPORT
  48. #define BROKER_SUPPORT 1 // If InfluxDB enabled enable BROKER
  49. #endif
  50. #if DOMOTICZ_SUPPORT
  51. #undef BROKER_SUPPORT
  52. #define BROKER_SUPPORT 1 // If Domoticz enabled enable BROKER
  53. #undef MQTT_SUPPORT
  54. #define MQTT_SUPPORT 1 // If Domoticz enabled enable MQTT
  55. #endif
  56. #if HOMEASSISTANT_SUPPORT
  57. #undef MQTT_SUPPORT
  58. #define MQTT_SUPPORT 1 // If Home Assistant enabled enable MQTT
  59. #endif
  60. #if THINGSPEAK_SUPPORT
  61. #undef BROKER_SUPPORT
  62. #define BROKER_SUPPORT 1 // If Thingspeak enabled enable BROKER
  63. #endif
  64. #if THERMOSTAT_SUPPORT
  65. #undef MQTT_USE_JSON
  66. #define MQTT_USE_JSON 1 // Thermostat depends on group messages in a JSON body
  67. #undef RELAY_SUPPORT
  68. #define RELAY_SUPPORT 1 // Thermostat depends on switches
  69. #endif
  70. #if SCHEDULER_SUPPORT
  71. #undef NTP_SUPPORT
  72. #define NTP_SUPPORT 1 // Scheduler needs NTP to work
  73. #undef BROKER_SUPPORT
  74. #define BROKER_SUPPORT 1 // Scheduler needs Broker to trigger every minute
  75. #undef RELAY_SUPPORT
  76. #define RELAY_SUPPORT 1 // Scheduler needs relays
  77. #endif
  78. #if TUYA_SUPPORT
  79. #undef LIGHT_TRANSITION_TIME
  80. #define LIGHT_TRANSITION_TIME 1600 // longer transition than the default
  81. #undef LIGHT_TRANSITION_STEP
  82. #define LIGHT_TRANSITION_STEP 200 // step can't be 10ms since most tuya serial connections are not fast
  83. #undef LIGHT_USE_TRANSITIONS
  84. #define LIGHT_USE_TRANSITIONS 0 // also, disable transitions unless set at runtime
  85. #endif
  86. #if TUYA_SUPPORT
  87. #undef BROKER_SUPPORT
  88. #define BROKER_SUPPORT 1 // Broker is required to process relay & lights events
  89. #undef RELAY_SUPPORT
  90. #define RELAY_SUPPORT 1 // Most of the time we require it
  91. #endif
  92. #if TERMINAL_WEB_API_SUPPORT
  93. #undef TERMINAL_SUPPORT
  94. #define TERMINAL_SUPPORT 1 // Need terminal command line parser and commands
  95. #undef WEB_SUPPORT
  96. #define WEB_SUPPORT 1 // Registered as web server request handler
  97. #endif
  98. #if TERMINAL_MQTT_SUPPORT
  99. #undef TERMINAL_SUPPORT
  100. #define TERMINAL_SUPPORT 1 // Need terminal command line parser and commands
  101. #undef MQTT_SUPPORT
  102. #define MQTT_SUPPORT 1 // Subscribe and publish things
  103. #endif
  104. #if IFAN_SUPPORT
  105. #undef RELAY_SUPPORT
  106. #define RELAY_SUPPORT 1 // Need relays to manage general state
  107. #endif
  108. //------------------------------------------------------------------------------
  109. // Hint about ESPAsyncTCP options and our internal one
  110. // TODO: clean-up SSL_ENABLED and USE_SSL settings for 1.15.0
  111. #if ASYNC_TCP_SSL_ENABLED && SECURE_CLIENT == SECURE_CLIENT_NONE
  112. #undef SECURE_CLIENT
  113. #define SECURE_CLIENT SECURE_CLIENT_AXTLS
  114. #endif
  115. #if THINGSPEAK_USE_SSL && THINGSPEAK_USE_ASYNC && (!ASYNC_TCP_SSL_ENABLED)
  116. #warning "Thingspeak in ASYNC mode requires a globally defined ASYNC_TCP_SSL_ENABLED=1"
  117. #undef THINGSPEAK_SUPPORT
  118. #define THINGSPEAK_SUPPORT 0 // Thingspeak in ASYNC mode requires ASYNC_TCP_SSL_ENABLED
  119. #endif
  120. #if WEB_SUPPORT && WEB_SSL_ENABLED && (!ASYNC_TCP_SSL_ENABLED)
  121. #warning "WEB_SUPPORT with SSL requires a globally defined ASYNC_TCP_SSL_ENABLED=1"
  122. #undef WEB_SSL_ENABLED
  123. #define WEB_SSL_ENABLED 0 // WEB_SUPPORT mode th SSL requires ASYNC_TCP_SSL_ENABLED
  124. #endif
  125. #if !DEBUG_SUPPORT
  126. #undef DEBUG_LOG_BUFFER_SUPPORT
  127. #define DEBUG_LOG_BUFFER_SUPPORT 0 // Can't buffer if there is no debugging enabled.
  128. // Helps to avoid checking twice for both DEBUG_SUPPORT and BUFFER_LOG_SUPPORT
  129. #endif
  130. //------------------------------------------------------------------------------
  131. // These depend on newest Core libraries
  132. #if LLMNR_SUPPORT && defined(ARDUINO_ESP8266_RELEASE_2_3_0)
  133. #undef LLMNR_SUPPORT
  134. #define LLMNR_SUPPORT 0
  135. #endif
  136. #if NETBIOS_SUPPORT && defined(ARDUINO_ESP8266_RELEASE_2_3_0)
  137. #undef NETBIOS_SUPPORT
  138. #define NETBIOS_SUPPORT 0
  139. #endif
  140. #if SSDP_SUPPORT && defined(ARDUINO_ESP8266_RELEASE_2_3_0)
  141. #undef SSDP_SUPPORT
  142. #define SSDP_SUPPORT 0
  143. #endif
  144. //------------------------------------------------------------------------------
  145. // It looks more natural that one click will enable display
  146. // and long click will switch relay
  147. #if THERMOSTAT_DISPLAY_SUPPORT
  148. #undef BUTTON1_CLICK
  149. #define BUTTON1_CLICK BUTTON_ACTION_DISPLAY_ON
  150. #undef BUTTON1_LNGCLICK
  151. #define BUTTON1_LNGCLICK BUTTON_ACTION_TOGGLE
  152. #endif
  153. //------------------------------------------------------------------------------
  154. // We should always set MQTT_MAX_PACKET_SIZE
  155. #if MQTT_LIBRARY == MQTT_LIBRARY_PUBSUBCLIENT
  156. #if not defined(MQTT_MAX_PACKET_SIZE)
  157. #warning "MQTT_MAX_PACKET_SIZE should be set in `build_flags = ...` of the environment! Default value is used instead."
  158. #endif
  159. #endif
  160. //------------------------------------------------------------------------------
  161. // Disable BME680 support if using Core version 2.3.0 due to memory constraints.
  162. #if BME680_SUPPORT && defined(ARDUINO_ESP8266_RELEASE_2_3_0)
  163. #warning "BME680_SUPPORT is not available when using Arduino Core 2.3.0 due to memory constraints. Please use Arduino Core 2.6.3+ instead (or set `platform = ${common.platform_latest}` for the latest version)."
  164. #undef BME680_SUPPORT
  165. #define BME680_SUPPORT 0
  166. #endif
  167. //------------------------------------------------------------------------------
  168. // Prometheus needs web server + request handler API
  169. #if PROMETHEUS_SUPPORT
  170. #undef WEB_SUPPORT
  171. #define WEB_SUPPORT 1
  172. #endif
  173. //------------------------------------------------------------------------------
  174. // Analog pin needs ADC_TOUT mode set up at compile time
  175. #if BUTTON_PROVIDER_ANALOG_SUPPORT
  176. #undef ADC_MODE_VALUE
  177. #define ADC_MODE_VALUE ADC_TOUT
  178. #endif