Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision |
projets:fuz:presence_button [2019-11-02 00:57] – [Current status] Lomanic | projets:fuz:presence_button [2020-02-02 23:42] – remove duplicate legacy "Arduino sketch revisions" section ; update current status Lomanic |
---|
===== Hardware ===== | ===== Hardware ===== |
* some glorious esp8266 in a Sonoff S20 power plug (NodeMCU v0.9 for development) | * some glorious esp8266 in a Sonoff S20 power plug (NodeMCU v0.9 for development) |
* another esp8266 to check when the S20 goes down (Fuz closing) | |
| |
To flash a Sonoff S20, solder the pins on the left of the push button, connect your USB-to-Serial convertor (RobotDyn CH340G in this case) to the headers like in the image below (from top to bottom, GND, TX, RX, 3.3v VCC), push Sonoff button while plugging in your USB-to-Serial convertor in your PC and then release the push button after a few seconds (check out [[https://medium.com/@jeffreyroshan/flashing-a-custom-firmware-to-sonoff-wifi-switch-with-arduino-ide-402e5a2f77b|this link]] and [[http://blinkingled.cc/update-firmware-of-smart-switch-sonoff-s20/|that one]]). Don't forget about the SPIFFS setting in Arduino IDE as we are using it to store custom settings via WifiManager (see step 6 below). | To flash a Sonoff S20, solder the pins on the left of the push button, connect your USB-to-Serial convertor (RobotDyn CH340G in this case) to the headers like in the image below (from top to bottom, GND, TX, RX, 3.3v VCC), push Sonoff button while plugging in your USB-to-Serial convertor in your PC and then release the push button after a few seconds (check out [[https://medium.com/@jeffreyroshan/flashing-a-custom-firmware-to-sonoff-wifi-switch-with-arduino-ide-402e5a2f77b|this link]] and [[http://blinkingled.cc/update-firmware-of-smart-switch-sonoff-s20/|that one]]). Don't forget about the SPIFFS setting in Arduino IDE as we are using it to store custom settings via WifiManager (see step 6 below). |
{{:projets:fuz:presence_button:sonoff_s20_ftdi_pinout.jpg?200|}} | {{:projets:fuz:presence_button:sonoff_s20_ftdi_pinout.jpg?200|}} |
| |
| ===== Software ===== |
| |
| See [[https://github.com/Lomanic/presence-button|Lomanic/presence-button]] on Github. |
| |
| See [[https://glitch.com/edit/#!/presence-button|presence-button project]] on glitch.com for the remote server part. |
===== Roadmap ===== | ===== Roadmap ===== |
- make the LED blink (GPIO 13 is the green LED, **not 12** as it's the relay and blue LED) | - make the LED blink (GPIO 13 is the green LED, **not 12** as it's the relay and blue LED) |
- properly notify when the Fuz is closed | - properly notify when the Fuz is closed |
- notify if the Fuz is open or closed on https://fuz.re | - notify if the Fuz is open or closed on https://fuz.re |
| - investigate random crashes after some time, integrate the awesome [[https://github.com/krzychb/EspSaveCrash|EspSaveCrash]] library, maybe do as this dude [[https://www.esp8266.com/viewtopic.php?f=6&t=18716&start=4#p79055|here]], but sending crash to HTTP server. See also https://arduino-esp8266.readthedocs.io/en/latest/faq/a02-my-esp-crashes.html |
- ?? | - ?? |
- profit! | - profit! |
- **DONE** following [[https://github.com/matt-williams/matrix-esp8266/blob/master/matrix-esp8266.ino#L70-L109|matrix-esp8266.ino#L70-L109]] [[https://gist.github.com/Lomanic/06c1a2d873dfbd9be93db7c965117f91|sonoff_s20_multiwifi_matrix_events.ino]] (also implemented [[https://matrix.org/docs/spec/client_server/latest#post-matrix-client-r0-rooms-roomid-receipt-receipttype-eventid|read receipts]] in [[https://gist.github.com/Lomanic/dba3cd9f93161cc1acc32c83197298eb/e8fb3810c208f21e2d62c4d173d6801aec0b3a80|sonoff_s20_wifimanager_longpress_matrix_events.ino]] so even if nobody mentions the Matrix account, we see it running) | - **DONE** following [[https://github.com/matt-williams/matrix-esp8266/blob/master/matrix-esp8266.ino#L70-L109|matrix-esp8266.ino#L70-L109]] [[https://gist.github.com/Lomanic/06c1a2d873dfbd9be93db7c965117f91|sonoff_s20_multiwifi_matrix_events.ino]] (also implemented [[https://matrix.org/docs/spec/client_server/latest#post-matrix-client-r0-rooms-roomid-receipt-receipttype-eventid|read receipts]] in [[https://gist.github.com/Lomanic/dba3cd9f93161cc1acc32c83197298eb/e8fb3810c208f21e2d62c4d173d6801aec0b3a80|sonoff_s20_wifimanager_longpress_matrix_events.ino]] so even if nobody mentions the Matrix account, we see it running) |
- **DONE** (only useful when using WifiManager) [[https://gist.github.com/Lomanic/dba3cd9f93161cc1acc32c83197298eb|sonoff_s20_wifimanager_longpress_matrix_events.ino]] | - **DONE** (only useful when using WifiManager) [[https://gist.github.com/Lomanic/dba3cd9f93161cc1acc32c83197298eb|sonoff_s20_wifimanager_longpress_matrix_events.ino]] |
- **TODO** | - **TO BE TESTED** see [[https://github.com/Lomanic/presence-button/tree/multiroom|multiroom branch]] |
- **TODO** https://github.com/esp8266/Arduino/issues/4826#issuecomment-491813938 (insecure) https://github.com/esp8266/Arduino/pull/3271/files (more secure). https://github.com/SensorsIot/HTTPS-for-Makers | - **TODO** https://github.com/esp8266/Arduino/issues/4826#issuecomment-491813938 (insecure) https://github.com/esp8266/Arduino/pull/3271/files (more secure). https://github.com/SensorsIot/HTTPS-for-Makers https://github.com/knolleary/pubsubclient/issues/462#issuecomment-542911896 very promising example, finally. Also for POST-ing/PUT-ing https://github.com/esp8266/Arduino/issues/5975#issuecomment-483995654, https://www.esp8266.com/viewtopic.php?f=29&t=14054. Tests were started and ESP was systematically crashing. |
- **DOING** <del>making the S20 regularly ping a remote server. This remote server would then send a message on Matrix saying Fuz is closed if it's not ping-ed after some delay. Implementing the latter using MQTT ([[https://github.com/knolleary/pubsubclient|PubSubClient library]]).</del> simpler, have an HTTP server on the S20 indicating if the button has been pushed once, and have an always-on esp8266 poll this webserver and notify the Matrix channel and a remote server when it's gone after a few minutes. S20 webserver done in [[https://gist.github.com/Lomanic/3ac81aa6bb5ce4cdb88da3a76fe4aa1c|sonoff_s20_wifimanager_longpress_matrix_events_webserver_admin.ino]] (with an admin interface as a bonus) | - **DONE** making the S20 regularly ping a remote server. This remote server would then send a message on Matrix saying Fuz is closed if it's not ping-ed after some delay. Implementing the latter using <del>MQTT ([[https://github.com/knolleary/pubsubclient|PubSubClient library]])</del> HTTP polling. <del>simpler, have an HTTP server on the S20 indicating if the button has been pushed once, and have an always-on esp8266 poll this webserver and notify the Matrix channel and a remote server when it's gone after a few minutes. S20 webserver done in [[https://gist.github.com/Lomanic/3ac81aa6bb5ce4cdb88da3a76fe4aa1c|sonoff_s20_wifimanager_longpress_matrix_events_webserver_admin.ino]] (with an admin interface as a bonus)</del>, S20 part done in [[https://github.com/Lomanic/presence-button/commit/450fdfcddf5a187fb261470427bf255231f175d5|450fdfcddf5a187fb261470427bf255231f175d5]], server side on the Glitch platform also done (via a JSON log file as container gets killed after a while and to be able to recover after being killed) |
- **TODO** needs a publicly accessible server to serve an image/API (probably the same server as previous step), include the image/JS on fuz.re and yadda! | - **ALMOST DONE** check out [[https://github.com/Lomanic/presence-button/commit/450fdfcddf5a187fb261470427bf255231f175d5|450fdfcddf5a187fb261470427bf255231f175d5]] and https://glitch.com/edit/#!/presence-button [[https://presence-button.glitch.me/|presence-button]], to be integrated on fuz.re |
| - **DOING** Unfortunately, [[https://github.com/krzychb/EspSaveCrash|EspSaveCrash]] is not able to save crash information on flash, to be removed. Maybe a completely rework is needed as we may use too much RAM or something, where the ESP would only be pinging a remote server about its state and all the logic would be on this server (it would be the server that tells the ESP to turn on or off the rotating light). Maybe also remove @mentions handling as it's not used before a complete rework. |
- ?? | - ?? |
- **TODO** | - **DOING** |
| |
Today the elementary functionalities described in step 2 are implemented [[https://gist.github.com/Lomanic/dba3cd9f93161cc1acc32c83197298eb|sonoff_s20_wifimanager_longpress_matrix_events.ino]]. | Today the button can notify on Matrix when it's pressed after initialization or after being notified on Matrix, and a server registers pings from the button to notify on Matrix that the Fuz is closed when it's not pinged anymore. |
| |
Next steps: | Next steps: |
| |
- handle multiple matrix channels configured (to listen to and to reply to) | - handle multiple matrix channels configured (to listen to and to reply to) |
- notify when the Fuz is closing | - resolve HTTPS locally instead of relying on an HTTP/HTTPS proxy |
- resolve HTTPS locally instead of relying on a HTTP/HTTPS proxy | - huge refactoring of the code is needed, it's a huge pile of hacks, hard to work on, follow how it's done in [[https://github.com/biohazardxxx/ESP_WiFiSwitch|this similar project]] (separate files?), also fix button reset [[https://github.com/biohazardxxx/ESP_WiFiSwitch/blob/1c642fe2b00fbf83324e2228826ad341f687ce45/ESP_WiFiSwitch.ino#L136-L172|with a ticker like in this project]] |
| |
===== Arduino sketch versions ===== | |
| |
In chronological order for a better comprehension compared to the note-taking style above | |
| |
* [[https://gist.github.com/Lomanic/1fc51b4ae0df0d69c9e994ee8d6a9cbe|sonoff_s20_blinky_led.ino]] | |
* [[https://gist.github.com/Lomanic/798936d9564fb5d42ee3806e15e82c2f|sonoff_s20_wifimanager_with_button_reset.ino]] | |
* [[https://gist.github.com/Lomanic/e8f4938202864c7b8e6da00211c07943|sonoff_s20_wifimanager_with_custom_settings_and_led_status_and_reset_button.ino]] | |
* [[https://gist.github.com/Lomanic/fe318c9de4061493160cfb0c5349dfcd|sonoff_s20_wifimanager_with_custom_settings_and_led_status_and_reset_button_and_matrix_message.ino]] | |
* [[https://gist.github.com/Lomanic/06c1a2d873dfbd9be93db7c965117f91|sonoff_s20_multiwifi_matrix_events.ino]] | |
* [[https://gist.github.com/Lomanic/dba3cd9f93161cc1acc32c83197298eb|sonoff_s20_wifimanager_longpress_matrix_events.ino]] | |
* [[https://gist.github.com/Lomanic/3ac81aa6bb5ce4cdb88da3a76fe4aa1c|sonoff_s20_wifimanager_longpress_matrix_events_webserver_admin.ino]] | |
| |
===== Resources ===== | ===== Resources ===== |