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.

232 lines
7.9 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 LWIP_VERSION_MAJOR != 1
  79. #undef MDNS_CLIENT_SUPPORT
  80. #define MDNS_CLIENT_SUPPORT 0 // default resolver already handles this
  81. #endif
  82. #if not defined(ARDUINO_ESP8266_RELEASE_2_3_0)
  83. #undef TELNET_SERVER_ASYNC_BUFFERED
  84. #define TELNET_SERVER_ASYNC_BUFFERED 1 // enable buffered telnet by default on latest Cores
  85. #endif
  86. #if TUYA_SUPPORT
  87. #undef LIGHT_TRANSITION_TIME
  88. #define LIGHT_TRANSITION_TIME 1600 // longer transition than the default
  89. #undef LIGHT_TRANSITION_STEP
  90. #define LIGHT_TRANSITION_STEP 200 // step can't be 10ms since most tuya serial connections are not fast
  91. #undef LIGHT_USE_TRANSITIONS
  92. #define LIGHT_USE_TRANSITIONS 0 // also, disable transitions unless set at runtime
  93. #endif
  94. #if TUYA_SUPPORT
  95. #undef BROKER_SUPPORT
  96. #define BROKER_SUPPORT 1 // Broker is required to process relay & lights events
  97. #undef RELAY_SUPPORT
  98. #define RELAY_SUPPORT 1 // Most of the time we require it
  99. #endif
  100. #if TERMINAL_WEB_API_SUPPORT
  101. #undef TERMINAL_SUPPORT
  102. #define TERMINAL_SUPPORT 1 // Need terminal command line parser and commands
  103. #undef WEB_SUPPORT
  104. #define WEB_SUPPORT 1 // Registered as web server request handler
  105. #endif
  106. #if TERMINAL_MQTT_SUPPORT
  107. #undef TERMINAL_SUPPORT
  108. #define TERMINAL_SUPPORT 1 // Need terminal command line parser and commands
  109. #undef MQTT_SUPPORT
  110. #define MQTT_SUPPORT 1 // Subscribe and publish things
  111. #endif
  112. //------------------------------------------------------------------------------
  113. // Hint about ESPAsyncTCP options and our internal one
  114. // TODO: clean-up SSL_ENABLED and USE_SSL settings for 1.15.0
  115. #if ASYNC_TCP_SSL_ENABLED && SECURE_CLIENT == SECURE_CLIENT_NONE
  116. #undef SECURE_CLIENT
  117. #define SECURE_CLIENT SECURE_CLIENT_AXTLS
  118. #endif
  119. #if THINGSPEAK_USE_SSL && THINGSPEAK_USE_ASYNC && (!ASYNC_TCP_SSL_ENABLED)
  120. #warning "Thingspeak in ASYNC mode requires a globally defined ASYNC_TCP_SSL_ENABLED=1"
  121. #undef THINGSPEAK_SUPPORT
  122. #define THINGSPEAK_SUPPORT 0 // Thingspeak in ASYNC mode requires ASYNC_TCP_SSL_ENABLED
  123. #endif
  124. #if WEB_SUPPORT && WEB_SSL_ENABLED && (!ASYNC_TCP_SSL_ENABLED)
  125. #warning "WEB_SUPPORT with SSL requires a globally defined ASYNC_TCP_SSL_ENABLED=1"
  126. #undef WEB_SSL_ENABLED
  127. #define WEB_SSL_ENABLED 0 // WEB_SUPPORT mode th SSL requires ASYNC_TCP_SSL_ENABLED
  128. #endif
  129. #if !DEBUG_SUPPORT
  130. #undef DEBUG_LOG_BUFFER_SUPPORT
  131. #define DEBUG_LOG_BUFFER_SUPPORT 0 // Can't buffer if there is no debugging enabled.
  132. // Helps to avoid checking twice for both DEBUG_SUPPORT and BUFFER_LOG_SUPPORT
  133. #endif
  134. //------------------------------------------------------------------------------
  135. // These depend on newest Core libraries
  136. #if LLMNR_SUPPORT && defined(ARDUINO_ESP8266_RELEASE_2_3_0)
  137. #undef LLMNR_SUPPORT
  138. #define LLMNR_SUPPORT 0
  139. #endif
  140. #if NETBIOS_SUPPORT && defined(ARDUINO_ESP8266_RELEASE_2_3_0)
  141. #undef NETBIOS_SUPPORT
  142. #define NETBIOS_SUPPORT 0
  143. #endif
  144. #if SSDP_SUPPORT && defined(ARDUINO_ESP8266_RELEASE_2_3_0)
  145. #undef SSDP_SUPPORT
  146. #define SSDP_SUPPORT 0
  147. #endif
  148. //------------------------------------------------------------------------------
  149. // Change ntp module depending on Core version
  150. #if NTP_SUPPORT && defined(ARDUINO_ESP8266_RELEASE_2_3_0)
  151. #define NTP_LEGACY_SUPPORT 1
  152. #else
  153. #define NTP_LEGACY_SUPPORT 0
  154. #endif
  155. //------------------------------------------------------------------------------
  156. // It looks more natural that one click will enable display
  157. // and long click will switch relay
  158. #if THERMOSTAT_DISPLAY_SUPPORT
  159. #undef BUTTON1_CLICK
  160. #define BUTTON1_CLICK BUTTON_ACTION_DISPLAY_ON
  161. #undef BUTTON1_LNGCLICK
  162. #define BUTTON1_LNGCLICK BUTTON_ACTION_TOGGLE
  163. #endif
  164. //------------------------------------------------------------------------------
  165. // We should always set MQTT_MAX_PACKET_SIZE
  166. #if MQTT_LIBRARY == MQTT_LIBRARY_PUBSUBCLIENT
  167. #if not defined(MQTT_MAX_PACKET_SIZE)
  168. #warning "MQTT_MAX_PACKET_SIZE should be set in `build_flags = ...` of the environment! Default value is used instead."
  169. #endif
  170. #endif
  171. //------------------------------------------------------------------------------
  172. // Disable BME680 support if using Core version 2.3.0 due to memory constraints.
  173. #if BME680_SUPPORT && defined(ARDUINO_ESP8266_RELEASE_2_3_0)
  174. #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)."
  175. #undef BME680_SUPPORT
  176. #define BME680_SUPPORT 0
  177. #endif
  178. //------------------------------------------------------------------------------
  179. // Prometheus needs web server + request handler API
  180. #if PROMETHEUS_SUPPORT
  181. #undef WEB_SUPPORT
  182. #define WEB_SUPPORT 1
  183. #endif
  184. //------------------------------------------------------------------------------
  185. // Analog pin needs ADC_TOUT mode set up at compile time
  186. #if BUTTON_PROVIDER_ANALOG_SUPPORT
  187. #undef ADC_MODE_VALUE
  188. #define ADC_MODE_VALUE ADC_TOUT
  189. #endif