User Tools

Site Tools


projets:fuz:presence_button

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

projets:fuz:presence_button [2019-11-03 17:41] – [Current status] Lomanicprojets:fuz:presence_button [2023-02-02 22:06] (current) – external edit 127.0.0.1
Line 3: Line 3:
 <WRAP round box 60%> <WRAP round box 60%>
 ===== Goals ===== ===== Goals =====
-  * Notifying that the Hackerspace is open/closed on different channels (Matrix, Fuz.re homepage), while respecting the privacy of attendants+  * Notifying that the Hackerspace is open/closed on different channels ([[:infra:Matrix]], Fuz.re homepage, wiki, [[spaceapi]]), while respecting the privacy of attendants
 </WRAP> </WRAP>
  
  
 ===== Hardware ===== ===== Hardware =====
-  * some glorious esp8266 in a Sonoff S20 power plug (NodeMCU v0.9 for development)+  * some glorious esp8266 in a [[https://sonoff.tech/product/wifi-smart-plugs/s20|Sonoff S20 power plug]] (NodeMCU v0.9 for development) 
 +  * something to turn on/off that may get attendants attention, that they would want to turn off. We chose a revolving light that we already had, an off-the-shelf lamp (like [[https://www.amazon.fr/Eurolite-060090-Police-Lumi%C3%A8re-Rouge/dp/B000TGOGRS/|this one]]) which plugs to main via the Sonoff 
  
 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).
Line 18: Line 19:
 You can also use ''screen /dev/ttyUSB0 115200'' to watch the serial monitor, but Arduino IDE serial monitor is more practical to use as it is relaunched each time it detects when the USB/serial adapter is plugged to a running chip. You can also use ''screen /dev/ttyUSB0 115200'' to watch the serial monitor, but Arduino IDE serial monitor is more practical to use as it is relaunched each time it detects when the USB/serial adapter is plugged to a running chip.
  
-Using a FTDI as below is more practical as it's able to properly power the Sonoff S20. **Don't forget to set the jumper to 3.3V or you will fry the ESP**.+Using a FTDI as below is more practical and safer as it's able to properly power the Sonoff S20. **Don't forget to set the jumper to 3.3V or you will fry the ESP**.
  
 {{:projets:fuz:presence_button:sonoff_s20_ftdi_pinout.jpg?200|}} {{:projets:fuz:presence_button:sonoff_s20_ftdi_pinout.jpg?200|}}
Line 24: Line 25:
 ===== Software ===== ===== Software =====
  
-See [[https://github.com/Lomanic/presencebutton|Lomanic/presencebutton]] on Github.+See [[https://github.com/Lomanic/presence-button|Lomanic/presence-button]] on Github ([[https://git.interhacker.space/Lomanic/presence-button|sourcecode mirror]]).
  
 +See [[https://github.com/Lomanic/presence-button-web|Lomanic/presence-button-web]] on Github for the remote server part ([[https://git.interhacker.space/Lomanic/presence-button-web|sourcecode mirror]]).
 ===== 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)
Line 39: Line 41:
   - 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!
Line 46: Line 49:
  
   - **DONE** [[https://gist.github.com/Lomanic/1fc51b4ae0df0d69c9e994ee8d6a9cbe|sonoff_s20_blinky_led.ino]]   - **DONE** [[https://gist.github.com/Lomanic/1fc51b4ae0df0d69c9e994ee8d6a9cbe|sonoff_s20_blinky_led.ino]]
-  - **DONE** the Fuz is open when there is electricity in the basement and someone pushes the button. Someone wants to push the button because the rotating light is lightened up by the Sonoff S20 when it is powered up and also each time someone mentions the Matrix account on Matrix ; the S20 disables the rotating light when the button is pressed +  - **DONE** the Fuz is open when there is electricity in the basement and someone pushes the button. Someone wants to push the button because the revolving light is lightened up by the Sonoff S20 when it is powered up<del> and also each time someone mentions the Matrix account on Matrix</del> ; the S20 disables the revolving light when the button is pressed 
-  - **DONE** <del>[[https://gist.github.com/Lomanic/b0b5e3eba81ecdc4f3065b5b3561bc92|sonoff_s20_wifimanager_with_custom_settings_and_led_status_and_reset_button_and_aruinoota_and_matrix_message.ino]], in case of ''Authenticating...FAIL 18:43:52 [ERROR]: ERR: ERROR[4]: Not Enough Space'' :-( => https://www.esp8266.com/viewtopic.php?f=32&t=19064#p80107 (see also step 6)</del> Sonoff S20 is not compatible with its only 1M flash +  - **DONE** <del>[[https://gist.github.com/Lomanic/b0b5e3eba81ecdc4f3065b5b3561bc92|sonoff_s20_wifimanager_with_custom_settings_and_led_status_and_reset_button_and_aruinoota_and_matrix_message.ino]], in case of ''Authenticating...FAIL 18:43:52 [ERROR]: ERR: ERROR[4]: Not Enough Space'' :-( => https://www.esp8266.com/viewtopic.php?f=32&t=19064#p80107 (see also step 6)</del> Sonoff S20 is not compatible with its only 1M flash. We should solder a bigger memory. 
-  - **DONE** Unsurprisingly, it works, see this sketch I slightly adapted [[https://gist.github.com/Lomanic/798936d9564fb5d42ee3806e15e82c2f|sonoff_s20_wifimanager_with_button_reset.ino]], next step is try to add custom options (Matrix login and room to post to), maybe adapt <del>https://github.com/tzapu/WiFiManager/blob/368ea928f014be9c1616b1a94caf81a8971142ee/examples/OnDemandConfigPortal/OnDemandConfigPortal.ino</del> check out [[https://gist.github.com/Lomanic/e8f4938202864c7b8e6da00211c07943|sonoff_s20_wifimanager_with_custom_settings_and_led_status_and_reset_button.ino]]+  - **DONE** Unsurprisingly, it works, see this sketch I slightly adapted [[https://gist.github.com/Lomanic/798936d9564fb5d42ee3806e15e82c2f|sonoff_s20_wifimanager_with_button_reset.ino]], next step is to try to add custom options (Matrix login and room to post to), maybe adapt <del>https://github.com/tzapu/WiFiManager/blob/368ea928f014be9c1616b1a94caf81a8971142ee/examples/OnDemandConfigPortal/OnDemandConfigPortal.ino</del> check out [[https://gist.github.com/Lomanic/e8f4938202864c7b8e6da00211c07943|sonoff_s20_wifimanager_with_custom_settings_and_led_status_and_reset_button.ino]]
   - <del>**DOING**, currently struggling with HTTPS, try using [[https://github.com/esp8266/Arduino/blob/308e131dee0271f60459933b1315ec88fc2004a5/libraries/ESP8266httpUpdate/examples/httpUpdateSecure/httpUpdateSecure.ino|httpUpdateSecure.ino]] (includes some NTP!!, see also [[https://github.com/esp8266/Arduino/issues/4749|esp8266/Arduino#4749]] as it's not instant) or [[https://github.com/esp8266/Arduino/blob/308e131dee0271f60459933b1315ec88fc2004a5/libraries/ESP8266WiFi/examples/BearSSL_CertStore/BearSSL_CertStore.ino|BearSSL_CertStore.ino]]</del> **DONE** (HTTP only through proxy though)! See [[https://gist.github.com/Lomanic/fe318c9de4061493160cfb0c5349dfcd|sonoff_s20_wifimanager_with_custom_settings_and_led_status_and_reset_button_and_matrix_message.ino]]   - <del>**DOING**, currently struggling with HTTPS, try using [[https://github.com/esp8266/Arduino/blob/308e131dee0271f60459933b1315ec88fc2004a5/libraries/ESP8266httpUpdate/examples/httpUpdateSecure/httpUpdateSecure.ino|httpUpdateSecure.ino]] (includes some NTP!!, see also [[https://github.com/esp8266/Arduino/issues/4749|esp8266/Arduino#4749]] as it's not instant) or [[https://github.com/esp8266/Arduino/blob/308e131dee0271f60459933b1315ec88fc2004a5/libraries/ESP8266WiFi/examples/BearSSL_CertStore/BearSSL_CertStore.ino|BearSSL_CertStore.ino]]</del> **DONE** (HTTP only through proxy though)! See [[https://gist.github.com/Lomanic/fe318c9de4061493160cfb0c5349dfcd|sonoff_s20_wifimanager_with_custom_settings_and_led_status_and_reset_button_and_matrix_message.ino]]
   - **DONE** Yup [[https://gist.github.com/Lomanic/e8f4938202864c7b8e6da00211c07943|sonoff_s20_wifimanager_with_custom_settings_and_led_status_and_reset_button.ino]], but you have to properly set up your Arduino IDE [[https://github.com/esp8266/Arduino/issues/5699#issuecomment-459619483|like this]]   - **DONE** Yup [[https://gist.github.com/Lomanic/e8f4938202864c7b8e6da00211c07943|sonoff_s20_wifimanager_with_custom_settings_and_led_status_and_reset_button.ino]], but you have to properly set up your Arduino IDE [[https://github.com/esp8266/Arduino/issues/5699#issuecomment-459619483|like this]]
-  - **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)+  - <del>**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)</del> **REMOVED** in [[https://git.interhacker.space/Lomanic/presence-button/commit/4c74d44d02f179aed81a439ef1abf0fd14eb860c|4c74d44d02f1]], to limit runtime crashes, useless feature
   - **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** +  - **WON'T DO** implemented in [[https://github.com/Lomanic/presence-button/tree/multiroom|multiroom branch]], but of little use 
-  - **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 +  - **INSECURELY/PARTIALLY DONE** For reference: 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. [[https://github.com/Lomanic/presence-button/commit/a0d852c1ed49de9c049d2704f0af9fc154c130fd|We //insecurely// ping https://presence.fuz.re]] as doing the same on https://matrix.fuz.re was making the ESP systematically crash. 
-  - **DOING** 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</del> HTTP polling ([[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)</del>, S20-part done in [[https://github.com/Lomanic/presencebutton/commit/450fdfcddf5a187fb261470427bf255231f175d5|450fdfcddf5a187fb261470427bf255231f175d5]] +  - **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 database file as container gets killed after a while and to be able to recover after being killed) 
-  - **ALMOST DONE** check out [[https://github.com/Lomanic/presencebutton/commit/450fdfcddf5a187fb261470427bf255231f175d5|450fdfcddf5a187fb261470427bf255231f175d5]] and https://glitch.com/edit/#!/presence-button [[https://presence-button.glitch.me/|presence-button]]+  - **DONE** check out [[https://github.com/Lomanic/presence-button/commit/450fdfcddf5a187fb261470427bf255231f175d5|450fdfcddf5a187fb261470427bf255231f175d5]] and https://glitch.com/edit/#!/presence-button [[https://presence.fuz.re/|presence-button]], image integrated on [[https://fuz.re|fuz.re]] on 2020-10-11 by @jeanjack \o/ 
 +  - **DONE** Unfortunately, [[https://github.com/krzychb/EspSaveCrash|EspSaveCrash]] is not able to save crash information on flash and [[https://git.interhacker.space/Lomanic/presence-button/commit/404c440ed4128d0a19e97092025c69cfb92c612e|was removed]]. We did a complete rework/simplification, where the ESP is only pinging a remote server about its state and all the logic is on this server (in the future it could even be the server that tells the ESP to turn on or off the revolving light according to what the remote server replies to the HTTP ping). @mentions handling was also removed as it's not used in [[https://github.com/Lomanic/presence-button/commit/4c74d44d02f179aed81a439ef1abf0fd14eb860c|4c74d44d02f179aed81a439ef1abf0fd14eb860c]].
   - ??   - ??
-  - **TODO**+  - **DOING**, when people push the button!
  
-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 regularly pings a server (HTTPS requests) every ten seconds, this server registers pings from the button to notify on Matrix that the Fuz opens (on first ''fuzisopen=1'' call) or is closed when it's not pinged anymore after 5 minutes.
  
-Next steps: 
- 
-  - 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 a HTTP/HTTPS proxy 
- 
-===== Arduino sketch revisions ===== 
- 
-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]] 
- 
-Subsequent versions on [[https://github.com/Lomanic/presencebutton|Github Lomanic/presencebutton]]. 
  
 ===== Resources ===== ===== Resources =====
 +==== Sonoff ====
  
   * https://blog.thesen.eu/itead-sonoff-switch-und-s20-steckdose-programmieren-esp8266/ GPIOs of Sonoff S20   * https://blog.thesen.eu/itead-sonoff-switch-und-s20-steckdose-programmieren-esp8266/ GPIOs of Sonoff S20
Line 88: Line 74:
   * https://www.itead.cc/wiki/S20_Smart_Socket S20 specifications   * https://www.itead.cc/wiki/S20_Smart_Socket S20 specifications
   * https://medium.com/@jeffreyroshan/flashing-a-custom-firmware-to-sonoff-wifi-switch-with-arduino-ide-402e5a2f77b   * https://medium.com/@jeffreyroshan/flashing-a-custom-firmware-to-sonoff-wifi-switch-with-arduino-ide-402e5a2f77b
-  * https://notenoughtech.com/category/home-automation/esp/ really great website about esp-based intelligent shits+  * https://notenoughtech.com/category/home-automation/esp/ really great website about esp-based smart shits
   * http://www.martyncurrey.com/category/esp8266/ nice little series of tutorials, may be obsolete   * http://www.martyncurrey.com/category/esp8266/ nice little series of tutorials, may be obsolete
   * https://diyprojects.io/hack-connected-sonoff-s20-plug-esp-easy-rules/ interesting part here is the hardware mod with a 3.5 mm jack used to connect the pins without opening the Sonoff case   * https://diyprojects.io/hack-connected-sonoff-s20-plug-esp-easy-rules/ interesting part here is the hardware mod with a 3.5 mm jack used to connect the pins without opening the Sonoff case
   * https://www.letscontrolit.com/forum/viewtopic.php?t=3263#p17124 GPIO15 physical location on Sonoff S20 PCB   * https://www.letscontrolit.com/forum/viewtopic.php?t=3263#p17124 GPIO15 physical location on Sonoff S20 PCB
-  * http://blog.zener.free.fr/index.php?post/2018/10/07/ESPEasy-et-le-Sonoff-S26 (french) how to flash Sonoff S26+  * http://blog.zener.free.fr/index.php?post/2018/10/07/ESPEasy-et-le-Sonoff-S26 (French) how to flash Sonoff S26 
 + 
 +==== Misc ==== 
 + 
 +  * https://wiki.das-labor.org/w/Status-Bot this German hackerpace has its own presence button, really similar design 
 +  * https://www.iot-experiments.com/esp32-warning-light/ An old school warning light connected to an MQTT server thanks to an ESP32. Uses veroboard, a 12v warning light, an ESP32 (or an ESP8266), a IRF3205 MOSFET and 2N2222 NPN to drive the light+motor. Pretty cool build.
  
  
projets/fuz/presence_button.1572802872.txt.gz · Last modified: 2023-02-02 22:06 (external edit)