├── .gitignore ├── LICENSE ├── README.md ├── data ├── FreeSansBold.ttf └── icons │ ├── battery-10.png │ ├── battery-20.png │ ├── battery-30.png │ ├── battery-40.png │ ├── battery-50.png │ ├── battery-60.png │ ├── battery-70.png │ ├── battery-80.png │ ├── battery-90.png │ ├── battery-alert.png │ ├── battery.png │ ├── blinds-0.png │ ├── blinds-100.png │ ├── blinds-closing.png │ ├── blinds-opening.png │ ├── blinds.png │ ├── bluetooth.png │ ├── camera.png │ ├── cinemascreen.png │ ├── climate-off.png │ ├── climate-on.png │ ├── climate.png │ ├── error.png │ ├── fan.png │ ├── faucet.png │ ├── fire-off.png │ ├── fire-on.png │ ├── fire.png │ ├── fuel.png │ ├── garage.png │ ├── garagedoor-closed.png │ ├── garagedoor-closing.png │ ├── garagedoor-open.png │ ├── garagedoor-opening.png │ ├── garagedoor.png │ ├── garden.png │ ├── gas.png │ ├── heating.png │ ├── humidity.png │ ├── lawnmower.png │ ├── light-off.png │ ├── light-on.png │ ├── light.png │ ├── lightbulb.png │ ├── lock-closed.png │ ├── lock-open.png │ ├── lock.png │ ├── motion-closed.png │ ├── motion-open.png │ ├── motion.png │ ├── network-off.png │ ├── network-on.png │ ├── network.png │ ├── oil.png │ ├── poweroutlet-off.png │ ├── poweroutlet-on.png │ ├── poweroutlet.png │ ├── poweroutlet_au.png │ ├── poweroutlet_eu.png │ ├── poweroutlet_uk.png │ ├── poweroutlet_us.png │ ├── pressure.png │ ├── projector.png │ ├── pump.png │ ├── qualityofservice-0.png │ ├── qualityofservice-1.png │ ├── qualityofservice-2.png │ ├── qualityofservice-3.png │ ├── qualityofservice-4.png │ ├── qualityofservice.png │ ├── receiver.png │ ├── screen-off.png │ ├── screen-on.png │ ├── screen.png │ ├── signal.png │ ├── siren.png │ ├── switch-off.png │ ├── switch-on.png │ ├── switch.png │ ├── temperature.png │ ├── unknown.png │ ├── wallswitch-off.png │ ├── wallswitch-on.png │ ├── wallswitch.png │ ├── water-outline.png │ ├── water.png │ └── window.png ├── default_16MB.csv ├── doc └── m5panel.jpg ├── large_spiffs_16MB.csv ├── littlefsbuilder.py ├── platformio.ini ├── src ├── M5PanelWidget.cpp ├── M5PanelWidget.h ├── defs-sample.h └── main.cpp └── tools ├── icons ├── convert_icons.sh ├── mdi │ ├── alert-outline.svg │ ├── audio-video.svg │ ├── battery-10.svg │ ├── battery-20.svg │ ├── battery-30.svg │ ├── battery-40.svg │ ├── battery-50.svg │ ├── battery-60.svg │ ├── battery-70.svg │ ├── battery-80.svg │ ├── battery-90.svg │ ├── battery-alert.svg │ ├── battery.svg │ ├── bell.svg │ ├── bluetooth.svg │ ├── cctv.svg │ ├── fan.svg │ ├── faucet.svg │ ├── fire-off.svg │ ├── fire.svg │ ├── fuel.svg │ ├── garage-alert-variant.svg │ ├── garage-alert.svg │ ├── garage-open-variant.svg │ ├── garage-open.svg │ ├── garage-variant.svg │ ├── garage.svg │ ├── gas-cylinder.svg │ ├── gauge.svg │ ├── grass.svg │ ├── lightbulb-outline.svg │ ├── lightbulb.svg │ ├── lock-open-variant-outline.svg │ ├── lock-outline.svg │ ├── motion-sensor-off.svg │ ├── motion-sensor.svg │ ├── nest-thermostat.svg │ ├── oil.svg │ ├── power-plug-off.svg │ ├── power-plug.svg │ ├── power-socket-au.svg │ ├── power-socket-eu.svg │ ├── power-socket-uk.svg │ ├── power-socket-us.svg │ ├── progress-question.svg │ ├── projector-screen-outline.svg │ ├── projector.svg │ ├── signal-cellular-1.svg │ ├── signal-cellular-2.svg │ ├── signal-cellular-3.svg │ ├── signal-cellular-outline.svg │ ├── signal.svg │ ├── snowflake-off.svg │ ├── snowflake.svg │ ├── television-off.svg │ ├── television.svg │ ├── thermometer.svg │ ├── toggle-switch-off.svg │ ├── toggle-switch-outline.svg │ ├── toggle-switch.svg │ ├── tree-outline.svg │ ├── water-outline.svg │ ├── water-percent.svg │ ├── water-pump.svg │ ├── water.svg │ ├── wifi-off.svg │ ├── wifi.svg │ ├── window-closed-variant.svg │ ├── window-shutter-alert.svg │ ├── window-shutter-open.svg │ └── window-shutter.svg ├── png │ ├── battery-10.png │ ├── battery-20.png │ ├── battery-30.png │ ├── battery-40.png │ ├── battery-50.png │ ├── battery-60.png │ ├── battery-70.png │ ├── battery-80.png │ ├── battery-90.png │ ├── battery-alert.png │ ├── battery.png │ ├── blinds-0.png │ ├── blinds-100.png │ ├── blinds-closing.png │ ├── blinds-opening.png │ ├── blinds.png │ ├── bluetooth.png │ ├── camera.png │ ├── cinemascreen.png │ ├── climate-off.png │ ├── climate-on.png │ ├── climate.png │ ├── error.png │ ├── fan.png │ ├── faucet.png │ ├── fire-off.png │ ├── fire-on.png │ ├── fire.png │ ├── fuel.png │ ├── garage.png │ ├── garagedoor-closed.png │ ├── garagedoor-closing.png │ ├── garagedoor-open.png │ ├── garagedoor-opening.png │ ├── garagedoor.png │ ├── garden.png │ ├── gas.png │ ├── heating.png │ ├── humidity.png │ ├── lawnmower.png │ ├── light-off.png │ ├── light-on.png │ ├── light.png │ ├── lightbulb.png │ ├── lock-closed.png │ ├── lock-open.png │ ├── lock.png │ ├── motion-closed.png │ ├── motion-open.png │ ├── motion.png │ ├── network-off.png │ ├── network-on.png │ ├── network.png │ ├── oil.png │ ├── poweroutlet-off.png │ ├── poweroutlet-on.png │ ├── poweroutlet.png │ ├── poweroutlet_au.png │ ├── poweroutlet_eu.png │ ├── poweroutlet_uk.png │ ├── poweroutlet_us.png │ ├── pressure.png │ ├── projector.png │ ├── pump.png │ ├── qualityofservice-0.png │ ├── qualityofservice-1.png │ ├── qualityofservice-2.png │ ├── qualityofservice-3.png │ ├── qualityofservice-4.png │ ├── qualityofservice.png │ ├── receiver.png │ ├── screen-off.png │ ├── screen-on.png │ ├── screen.png │ ├── signal.png │ ├── siren.png │ ├── switch-off.png │ ├── switch-on.png │ ├── switch.png │ ├── temperature.png │ ├── unknown.png │ ├── wallswitch-off.png │ ├── wallswitch-on.png │ ├── wallswitch.png │ ├── water-outline.png │ ├── water.png │ └── window.png └── png_icons.csv └── littlefs └── README /.gitignore: -------------------------------------------------------------------------------- 1 | # Prerequisites 2 | *.d 3 | 4 | # Compiled Object files 5 | *.slo 6 | *.lo 7 | *.o 8 | *.obj 9 | 10 | # Precompiled Headers 11 | *.gch 12 | *.pch 13 | 14 | # Compiled Dynamic libraries 15 | *.so 16 | *.dylib 17 | *.dll 18 | 19 | # Fortran module files 20 | *.mod 21 | *.smod 22 | 23 | # Compiled Static libraries 24 | *.lai 25 | *.la 26 | *.a 27 | *.lib 28 | 29 | # Executables 30 | *.exe 31 | *.out 32 | *.app 33 | 34 | .pio 35 | .vscode 36 | 37 | # Settings (including Wifi) 38 | src/defs.h 39 | samples -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Cyril Pawelko 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # m5Panel for OpenHAB 2 | ![m5paper](doc/m5panel.jpg) 3 | 4 | ## Introduction 5 | 6 | This is a preliminary release of using a [m5paper](https://m5stack.com/products/m5paper-esp32-development-kit-960x540-4-7-eink-display-235-ppi) as an automation panel for OpenHAB. 7 | 8 | I want it to be as simple as possible : it queries OpenHAB items through REST API, so much of the configuration will be on the OpenHAB side. I don't want "yet another interface to configure with its cryptic syntax". 9 | 10 | Actually, it just displays the 6 specified OpenHAB item's Label and Status. 11 | 12 | While the is no power optimizations, it can already run several hours on battery. 13 | 14 | It has been tested with OpenHAB 2.5 and 3.0 15 | 16 | ## See Also 17 | Visit https://github.com/TAKeanice/m5panel for a more advanced fork 18 | 19 | ## How to 20 | - Clone and open in PlatformIO 21 | - Copy defs-sample.h to defs.h 22 | - Edit defs.h and customize: 23 | - Wifi settings 24 | - Openhab host and port 25 | - Sitemap to use (default: m5paper) 26 | - Upload filesystem image (from PlatformIO menu, or "pio run -t uploadfs") 27 | - Compile and upload to m5paper 28 | - Monitor through serial port 29 | 30 | Then, a sitemap containing the items to be displayed must be created. 31 | Here is a sample sitemap : 32 | 33 | sitemap m5panel label="m5panel" { 34 | Default item=HueSensor1Temperature label="Outside[%.1f°]" 35 | Default item=SondeTH4_Temperature label="Cellar[%.1f]" 36 | Default item=AqaraTemp02Temperature label="Bedroom[%.1f]" icon="" 37 | Default item=SonoffRelay2Power label="Cellar[%s]" icon="light" 38 | Default item=gd_currstate label="Garage[%s]" icon="" 39 | } 40 | 41 | Sitemap rules : 42 | - Use sitemap label formatting 43 | - Label is used as the button title 44 | - The state is extracted from the label value enclosed in [brackets] 45 | - Dynamic icons (light, switch, ...) are based on this state 46 | - If no icon is specified (icon=""), the item state will be displayed in the center of the button 47 | - Else, it will be displayed at the bottom, in a smaller font, under the icon location 48 | - 6 items max are supported for now 49 | - Don't use other sitemap features (frames, ...) 50 | 51 | If you're in trouble : 52 | - Check serial log 53 | - Display your sitemap at http://:/basicui/app?sitemap= 54 | - Check you can reach REST API at http://:/rest/sitemaps/ 55 | 56 | ## Known issues 57 | - First displays are slow (due to font caching) 58 | - No touch screen support 59 | 60 | ## Todo 61 | - [X] Nice font and correct encoding 62 | - [X] Dynamic updates 63 | - [X] Basic icon set 64 | - [ ] Touch screen support for commands (switchs, ...) 65 | - [ ] WifiManager for Wifi and items setup 66 | - [ ] Support https connection to OpenHAB 67 | - [ ] Provide binary releases 68 | - [ ] Advanced widgets (gauge, weather, ...) 69 | - [ ] Multi-page navigation 70 | - [ ] Advanced configuration method (for widgets, fonts ...) 71 | -------------------------------------------------------------------------------- /data/FreeSansBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/FreeSansBold.ttf -------------------------------------------------------------------------------- /data/icons/battery-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/battery-10.png -------------------------------------------------------------------------------- /data/icons/battery-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/battery-20.png -------------------------------------------------------------------------------- /data/icons/battery-30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/battery-30.png -------------------------------------------------------------------------------- /data/icons/battery-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/battery-40.png -------------------------------------------------------------------------------- /data/icons/battery-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/battery-50.png -------------------------------------------------------------------------------- /data/icons/battery-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/battery-60.png -------------------------------------------------------------------------------- /data/icons/battery-70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/battery-70.png -------------------------------------------------------------------------------- /data/icons/battery-80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/battery-80.png -------------------------------------------------------------------------------- /data/icons/battery-90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/battery-90.png -------------------------------------------------------------------------------- /data/icons/battery-alert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/battery-alert.png -------------------------------------------------------------------------------- /data/icons/battery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/battery.png -------------------------------------------------------------------------------- /data/icons/blinds-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/blinds-0.png -------------------------------------------------------------------------------- /data/icons/blinds-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/blinds-100.png -------------------------------------------------------------------------------- /data/icons/blinds-closing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/blinds-closing.png -------------------------------------------------------------------------------- /data/icons/blinds-opening.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/blinds-opening.png -------------------------------------------------------------------------------- /data/icons/blinds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/blinds.png -------------------------------------------------------------------------------- /data/icons/bluetooth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/bluetooth.png -------------------------------------------------------------------------------- /data/icons/camera.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/camera.png -------------------------------------------------------------------------------- /data/icons/cinemascreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/cinemascreen.png -------------------------------------------------------------------------------- /data/icons/climate-off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/climate-off.png -------------------------------------------------------------------------------- /data/icons/climate-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/climate-on.png -------------------------------------------------------------------------------- /data/icons/climate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/climate.png -------------------------------------------------------------------------------- /data/icons/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/error.png -------------------------------------------------------------------------------- /data/icons/fan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/fan.png -------------------------------------------------------------------------------- /data/icons/faucet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/faucet.png -------------------------------------------------------------------------------- /data/icons/fire-off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/fire-off.png -------------------------------------------------------------------------------- /data/icons/fire-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/fire-on.png -------------------------------------------------------------------------------- /data/icons/fire.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/fire.png -------------------------------------------------------------------------------- /data/icons/fuel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/fuel.png -------------------------------------------------------------------------------- /data/icons/garage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/garage.png -------------------------------------------------------------------------------- /data/icons/garagedoor-closed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/garagedoor-closed.png -------------------------------------------------------------------------------- /data/icons/garagedoor-closing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/garagedoor-closing.png -------------------------------------------------------------------------------- /data/icons/garagedoor-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/garagedoor-open.png -------------------------------------------------------------------------------- /data/icons/garagedoor-opening.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/garagedoor-opening.png -------------------------------------------------------------------------------- /data/icons/garagedoor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/garagedoor.png -------------------------------------------------------------------------------- /data/icons/garden.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/garden.png -------------------------------------------------------------------------------- /data/icons/gas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/gas.png -------------------------------------------------------------------------------- /data/icons/heating.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/heating.png -------------------------------------------------------------------------------- /data/icons/humidity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/humidity.png -------------------------------------------------------------------------------- /data/icons/lawnmower.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/lawnmower.png -------------------------------------------------------------------------------- /data/icons/light-off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/light-off.png -------------------------------------------------------------------------------- /data/icons/light-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/light-on.png -------------------------------------------------------------------------------- /data/icons/light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/light.png -------------------------------------------------------------------------------- /data/icons/lightbulb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/lightbulb.png -------------------------------------------------------------------------------- /data/icons/lock-closed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/lock-closed.png -------------------------------------------------------------------------------- /data/icons/lock-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/lock-open.png -------------------------------------------------------------------------------- /data/icons/lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/lock.png -------------------------------------------------------------------------------- /data/icons/motion-closed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/motion-closed.png -------------------------------------------------------------------------------- /data/icons/motion-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/motion-open.png -------------------------------------------------------------------------------- /data/icons/motion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/motion.png -------------------------------------------------------------------------------- /data/icons/network-off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/network-off.png -------------------------------------------------------------------------------- /data/icons/network-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/network-on.png -------------------------------------------------------------------------------- /data/icons/network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/network.png -------------------------------------------------------------------------------- /data/icons/oil.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/oil.png -------------------------------------------------------------------------------- /data/icons/poweroutlet-off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/poweroutlet-off.png -------------------------------------------------------------------------------- /data/icons/poweroutlet-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/poweroutlet-on.png -------------------------------------------------------------------------------- /data/icons/poweroutlet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/poweroutlet.png -------------------------------------------------------------------------------- /data/icons/poweroutlet_au.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/poweroutlet_au.png -------------------------------------------------------------------------------- /data/icons/poweroutlet_eu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/poweroutlet_eu.png -------------------------------------------------------------------------------- /data/icons/poweroutlet_uk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/poweroutlet_uk.png -------------------------------------------------------------------------------- /data/icons/poweroutlet_us.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/poweroutlet_us.png -------------------------------------------------------------------------------- /data/icons/pressure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/pressure.png -------------------------------------------------------------------------------- /data/icons/projector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/projector.png -------------------------------------------------------------------------------- /data/icons/pump.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/pump.png -------------------------------------------------------------------------------- /data/icons/qualityofservice-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/qualityofservice-0.png -------------------------------------------------------------------------------- /data/icons/qualityofservice-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/qualityofservice-1.png -------------------------------------------------------------------------------- /data/icons/qualityofservice-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/qualityofservice-2.png -------------------------------------------------------------------------------- /data/icons/qualityofservice-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/qualityofservice-3.png -------------------------------------------------------------------------------- /data/icons/qualityofservice-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/qualityofservice-4.png -------------------------------------------------------------------------------- /data/icons/qualityofservice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/qualityofservice.png -------------------------------------------------------------------------------- /data/icons/receiver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/receiver.png -------------------------------------------------------------------------------- /data/icons/screen-off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/screen-off.png -------------------------------------------------------------------------------- /data/icons/screen-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/screen-on.png -------------------------------------------------------------------------------- /data/icons/screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/screen.png -------------------------------------------------------------------------------- /data/icons/signal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/signal.png -------------------------------------------------------------------------------- /data/icons/siren.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/siren.png -------------------------------------------------------------------------------- /data/icons/switch-off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/switch-off.png -------------------------------------------------------------------------------- /data/icons/switch-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/switch-on.png -------------------------------------------------------------------------------- /data/icons/switch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/switch.png -------------------------------------------------------------------------------- /data/icons/temperature.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/temperature.png -------------------------------------------------------------------------------- /data/icons/unknown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/unknown.png -------------------------------------------------------------------------------- /data/icons/wallswitch-off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/wallswitch-off.png -------------------------------------------------------------------------------- /data/icons/wallswitch-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/wallswitch-on.png -------------------------------------------------------------------------------- /data/icons/wallswitch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/wallswitch.png -------------------------------------------------------------------------------- /data/icons/water-outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/water-outline.png -------------------------------------------------------------------------------- /data/icons/water.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/water.png -------------------------------------------------------------------------------- /data/icons/window.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/data/icons/window.png -------------------------------------------------------------------------------- /default_16MB.csv: -------------------------------------------------------------------------------- 1 | # Name, Type, SubType, Offset, Size, Flags 2 | nvs, data, nvs, 0x9000, 0x5000, 3 | otadata, data, ota, 0xe000, 0x2000, 4 | app0, app, ota_0, 0x10000, 0x640000, 5 | app1, app, ota_1, 0x650000,0x640000, 6 | spiffs, data, spiffs, 0xc90000,0x370000, -------------------------------------------------------------------------------- /doc/m5panel.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/doc/m5panel.jpg -------------------------------------------------------------------------------- /large_spiffs_16MB.csv: -------------------------------------------------------------------------------- 1 | # Name, Type, SubType, Offset, Size, Flags 2 | nvs, data, nvs, 0x9000, 0x5000, 3 | otadata, data, ota, 0xe000, 0x2000, 4 | app0, app, ota_0, 0x10000, 0x480000, 5 | app1, app, ota_1, 0x490000,0x480000, 6 | spiffs, data, spiffs, 0x910000,0x6F0000, 7 | -------------------------------------------------------------------------------- /littlefsbuilder.py: -------------------------------------------------------------------------------- 1 | Import("env") 2 | env.Replace( MKSPIFFSTOOL=env.get("PROJECT_DIR") + '/tools/littlefs/mklittlefs' ) -------------------------------------------------------------------------------- /platformio.ini: -------------------------------------------------------------------------------- 1 | ; PlatformIO Project Configuration File 2 | ; 3 | ; Build options: build flags, source filter 4 | ; Upload options: custom upload port, speed and extra flags 5 | ; Library options: dependencies, extra library storages 6 | ; Advanced options: extra scripting 7 | ; 8 | ; Please visit documentation for the other options and examples 9 | ; https://docs.platformio.org/page/projectconf.html 10 | 11 | [env:m5stack-fire] 12 | platform = espressif32 13 | board = m5stack-fire 14 | framework = arduino 15 | upload_speed = 2000000 16 | monitor_speed = 115200 17 | lib_deps = 18 | m5stack/M5EPD@^0.1.0 19 | bblanchon/ArduinoJson@^6.17.2 20 | ropg/ezTime @ ^0.8.3 21 | lorol/LittleFS_esp32@1.0.5 22 | board_build.partitions = large_spiffs_16MB.csv 23 | build_flags = 24 | -DCORE_DEBUG_LEVEL=4 25 | -DBOARD_HAS_PSRAM 26 | -mfix-esp32-psram-cache-issue 27 | -DCONFIG_LITTLEFS_FOR_IDF_3_2 28 | extra_scripts = littlefsbuilder.py 29 | -------------------------------------------------------------------------------- /src/M5PanelWidget.cpp: -------------------------------------------------------------------------------- 1 | #include "M5PanelWidget.h" 2 | 3 | void M5PanelWidget::init(byte index, byte page, int xLeftCorner, int yLeftCorner) 4 | { 5 | this->index = index; 6 | this->page = page; 7 | this->xLeftCorner = xLeftCorner; 8 | this->yLeftCorner = yLeftCorner; 9 | this->type = type; 10 | this->canvas = new M5EPD_Canvas(&M5.EPD); 11 | this->canvas->createCanvas(BUTTON_SIZE+4, BUTTON_SIZE+4); 12 | } 13 | 14 | void M5PanelWidget::update(const String &title, const String &value, const String &itemState, const String &icon, const String &type, const String &itemName, const String &itemType) 15 | { 16 | this->title = title; 17 | this->value = value; 18 | this->itemState = itemState; 19 | this->icon = icon; 20 | this->type = type; 21 | this->itemName = itemName; 22 | this->itemType = itemType; 23 | } 24 | 25 | void M5PanelWidget::update(const String &title, const String &value, const String &itemState, const String &itemName, const String &itemType) 26 | { 27 | this->title = title; 28 | this->value = value; 29 | this->itemState = itemState; 30 | this->icon = icon; 31 | this->itemName = itemName; 32 | this->itemType = itemType; 33 | } 34 | 35 | /* 36 | void M5PanelWidget::update(const String &value) 37 | { 38 | this->value = value; 39 | }*/ 40 | 41 | bool M5PanelWidget::testIfTouched(uint16_t x, uint16_t y) 42 | { 43 | if ((x > xLeftCorner) && (x < (this->xLeftCorner+BUTTON_SIZE)) && (y > yLeftCorner) && (y < (yLeftCorner+BUTTON_SIZE))) 44 | { 45 | return true; 46 | } 47 | else 48 | { 49 | return false; 50 | } 51 | } 52 | 53 | void M5PanelWidget::getTouchedValues(String &itemName, String &newValue) 54 | { 55 | itemName = this->itemName; 56 | newValue = ""; 57 | if (itemType.equals("Switch")) 58 | { 59 | //Serial.println("Touched item type="+itemType+" itemState="+itemState); 60 | if (itemState.equals("ON")) { newValue = "OFF"; } 61 | else if (itemState.equals("OFF")) { newValue = "ON"; } 62 | } 63 | } 64 | 65 | void M5PanelWidget::draw(m5epd_update_mode_t drawMode) 66 | { 67 | long startTime = millis(); 68 | this->canvas->fillRoundRect(0, 0, BUTTON_SIZE+4, BUTTON_SIZE+4, 5, 15); 69 | this->canvas->fillRoundRect(2, 2, BUTTON_SIZE, BUTTON_SIZE, 5, 0); 70 | 71 | // Draw title 72 | this->canvas->setTextSize(FONT_SIZE_LABEL); 73 | this->canvas->setTextDatum(TC_DATUM); 74 | this->canvas->drawString(title,BUTTON_SIZE/2+2,15+2); 75 | 76 | long titleTime = millis(); 77 | long iconTime; 78 | long bottomTime; 79 | 80 | if ( this->icon == "") 81 | { 82 | // Draw value centered 83 | this->canvas->setTextSize(FONT_SIZE_STATUS_CENTER); 84 | this->canvas->setTextDatum(TC_DATUM); 85 | this->canvas->drawString(value,BUTTON_SIZE/2+2,BUTTON_SIZE-120+2); 86 | iconTime = millis(); 87 | bottomTime = iconTime; 88 | } 89 | else 90 | { 91 | String iconFile = "/icons/"+icon+"-"+itemState+".png"; // Try to find dynamic icon ... 92 | iconFile.toLowerCase(); 93 | if (! LITTLEFS.exists(iconFile)) 94 | { 95 | iconFile = "/icons/"+icon+".png"; // else try to find non dynamic icon 96 | iconFile.toLowerCase(); 97 | if (! LITTLEFS.exists(iconFile)) 98 | { 99 | iconFile = "/icons/unknown.png"; // else use icon "unknown" 100 | } 101 | } 102 | //Serial.println("icon file="+iconFile); 103 | this->canvas->drawPngFile(LITTLEFS,iconFile.c_str(),BUTTON_SIZE/2-48+2,55+2,0,0,0,0,1); 104 | 105 | iconTime = millis(); 106 | 107 | // Draw bottom value 108 | this->canvas->setTextSize(FONT_SIZE_STATUS_BOTTOM); 109 | this->canvas->setTextDatum(TC_DATUM); 110 | this->canvas->drawString(value,BUTTON_SIZE/2+2,BUTTON_SIZE-45+2); // 40 111 | bottomTime = millis(); 112 | } 113 | // Push canvas 114 | this->canvas->pushCanvas(xLeftCorner, yLeftCorner, drawMode); // UPDATE_MODE_GL16 (higher quality) or UPDATE_MODE_A2 (no flipping) 115 | long canvasTime = millis(); 116 | Serial.println("Draw stats (ms): title=" + String(titleTime-startTime) + " icon=" + String(iconTime - titleTime) + " bottom=" + String(bottomTime-iconTime)+ " canvas=" + String(canvasTime-bottomTime)); 117 | } 118 | 119 | void M5PanelWidget::clear() 120 | { 121 | canvas->fillCanvas(0); 122 | canvas->pushCanvas(xLeftCorner, yLeftCorner, UPDATE_MODE_GC16); 123 | } 124 | 125 | void M5PanelWidget::drawPushedBorder(m5epd_update_mode_t drawMode) 126 | { 127 | canvas->drawRect(4, 4, BUTTON_SIZE-4, BUTTON_SIZE-4, 15); 128 | canvas->drawRect(5, 5, BUTTON_SIZE-5, BUTTON_SIZE-5, 15); 129 | canvas->pushCanvas(xLeftCorner, yLeftCorner, drawMode); 130 | } 131 | -------------------------------------------------------------------------------- /src/M5PanelWidget.h: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | #define BUTTONS_X 3 // bttons columns 6 | #define BUTTONS_Y 2 // buttons rows 7 | #define BUTTON_SIZE 210 // button widht and height 8 | 9 | #define FONT_SIZE_LABEL 32 10 | #define FONT_SIZE_STATUS_CENTER 48 11 | #define FONT_SIZE_STATUS_BOTTOM 36 12 | 13 | class M5PanelWidget 14 | { 15 | private: 16 | byte index; 17 | byte page; // always 0 18 | int xLeftCorner; 19 | int yLeftCorner; 20 | String title; 21 | String value; 22 | String icon; 23 | String type; 24 | String itemName; 25 | String itemType; 26 | String itemState; 27 | M5EPD_Canvas* canvas; 28 | public: 29 | void init(byte index, byte page, int xLeftCorner, int yLeftCorner); 30 | void update(const String &title, const String &value, const String &itemState, const String &icon, const String &type, const String &itemName, const String &itemType); 31 | void update(const String &title, const String &value, const String &itemState, const String &itemName, const String &itemType); 32 | //void update(const String &value); 33 | void draw(m5epd_update_mode_t drawMode); 34 | void clear(); 35 | void drawPushedBorder(m5epd_update_mode_t drawMode); 36 | bool testIfTouched(uint16_t x, uint16_t y); 37 | void getTouchedValues(String &item, String &newValue); 38 | }; 39 | 40 | /* Docs: 41 | https://github.com/m5stack/M5Paper_FactoryTest/blob/main/src/epdgui/epdgui_button.h 42 | https://github.com/m5stack/M5Paper_FactoryTest/blob/main/src/epdgui/epdgui_button.cpp 43 | */ -------------------------------------------------------------------------------- /src/defs-sample.h: -------------------------------------------------------------------------------- 1 | #define WIFI_SSID "mySSID" 2 | #define WIFI_PSK "mySecretPSK" 3 | 4 | #define OPENHAB_HOST "openhabian" 5 | #define OPENHAB_PORT 8080 6 | 7 | #define REFRESH_INTERVAL 20 // Refresh interval in seconds 8 | 9 | #define OPENHAB_SITEMAP "m5panel" // Name of displayed sitemap 10 | 11 | #define DISPLAY_SYSINFO false 12 | -------------------------------------------------------------------------------- /src/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include "M5PanelWidget.h" 10 | #include "defs.h" 11 | 12 | #define ERR_WIFI_NOT_CONNECTED "ERROR: Wifi not connected" 13 | #define ERR_HTTP_ERROR "ERROR: HTTP code " 14 | #define ERR_GETITEMSTATE "ERROR in getItemState" 15 | 16 | #define DEBUG true 17 | 18 | #define WIDGET_COUNT 6 19 | #define FONT_CACHE_SIZE 256 20 | 21 | // Global vars 22 | M5EPD_Canvas canvas(&M5.EPD); 23 | M5PanelWidget* widgets = new M5PanelWidget[WIDGET_COUNT]; 24 | HTTPClient httpClient; 25 | HTTPClient httpSubscribeClient; 26 | WiFiClient SubscribeClient; 27 | 28 | String restUrl = "http://" + String(OPENHAB_HOST) + String(":") +String(OPENHAB_PORT) + String("/rest"); 29 | String iconURL = "http://" + String(OPENHAB_HOST) + String(":") +String(OPENHAB_PORT) + String("/icon"); 30 | String subscriptionURL = ""; 31 | 32 | unsigned long upTime; 33 | 34 | DynamicJsonDocument jsonDoc(30000); // size to be checked 35 | DynamicJsonDocument sitemap(30000); // Test 36 | 37 | int previousSysInfoMillis = 0; 38 | int currentSysInfoMillis; 39 | 40 | int previousRefreshMillis = 0; 41 | int currentRefreshMillis; 42 | 43 | uint16_t _last_pos_x = 0xFFFF, _last_pos_y = 0xFFFF; 44 | 45 | Timezone openhabTZ; 46 | 47 | #ifndef OPENHAB_SITEMAP 48 | #define OPENHAB_SITEMAP "m5panel" 49 | #endif 50 | 51 | #ifndef OPENHAB_SITEMAP 52 | #define DISPLAY_SYSINFO false 53 | #endif 54 | 55 | /* Reminders 56 | EPD canvas library https://docs.m5stack.com/#/en/api/m5paper/epd_canvas 57 | Text aligment https://github.com/m5stack/M5Stack/blob/master/examples/Advanced/Display/TFT_Float_Test/TFT_Float_Test.ino 58 | */ 59 | 60 | // HTTP and REST 61 | 62 | void debug(String function, String message) 63 | { 64 | if ( DEBUG ) 65 | { 66 | Serial.print(F("DEBUG (function ")); 67 | Serial.print(function); 68 | Serial.print(F("): ")); 69 | Serial.println(message); 70 | } 71 | } 72 | 73 | bool httpRequest(String &url,String &response) 74 | { 75 | HTTPClient http; 76 | debug(F("httpRequest"),"HTTP request to " + String(url)); 77 | if (WiFi.status() != WL_CONNECTED) 78 | { 79 | Serial.println(ERR_WIFI_NOT_CONNECTED); 80 | response = String(ERR_WIFI_NOT_CONNECTED); 81 | return false; 82 | } 83 | http.useHTTP10(true); 84 | http.setReuse(false); 85 | http.begin(url); 86 | int httpCode = http.GET(); 87 | if (httpCode != HTTP_CODE_OK) 88 | { 89 | Serial.println(String(ERR_HTTP_ERROR) + String(httpCode)); 90 | response = String(ERR_HTTP_ERROR) + String(httpCode); 91 | http.end(); 92 | return false; 93 | } 94 | response = http.getString(); 95 | http.end(); 96 | debug(F("httpRequest"),F("HTTP request done")); 97 | return true; 98 | } 99 | 100 | void postWidgetValue(const String &itemName, const String &newValue) 101 | { 102 | HTTPClient httpPost; 103 | httpPost.setReuse(false); 104 | httpPost.begin(restUrl + "/items/" + itemName); 105 | httpPost.addHeader(F("Content-Type"),F("text/plain")); 106 | httpPost.POST(newValue); 107 | //httpPost.end(); // to be fixed, http client should be ended, but it also closes subscription client 108 | } 109 | 110 | bool subscribe(){ 111 | String subscribeResponse; 112 | httpClient.useHTTP10(true); 113 | httpClient.begin(restUrl + "/sitemaps/events/subscribe"); 114 | int httpCode = httpClient.POST(""); 115 | if (httpCode != HTTP_CODE_OK) 116 | { 117 | Serial.println(String(ERR_HTTP_ERROR) + String(httpCode)); 118 | httpClient.end(); 119 | return false; 120 | } 121 | subscribeResponse = httpClient.getString(); 122 | httpClient.end(); 123 | 124 | //Serial.println("HTTP SUBSCRIBE: " + subscribeResponse); 125 | deserializeJson(jsonDoc,subscribeResponse); 126 | 127 | //String subscriptionURL = jsonDoc["Location"].as(); 128 | String subscriptionURL = jsonDoc["context"]["headers"]["Location"][0]; 129 | debug(F("subscribe"), "Full subscriptionURL: " + subscriptionURL); 130 | subscriptionURL = subscriptionURL.substring(subscriptionURL.indexOf("/rest/sitemaps")) + "?sitemap=" + OPENHAB_SITEMAP + "&pageid=" + OPENHAB_SITEMAP; // Fix : pageId 131 | debug(F("subscribe"), "subscriptionURL: " + subscriptionURL); 132 | SubscribeClient.connect(OPENHAB_HOST,OPENHAB_PORT); 133 | SubscribeClient.println("GET " + subscriptionURL + " HTTP/1.1"); 134 | SubscribeClient.println("Host: " + String(OPENHAB_HOST) + ":" + String(OPENHAB_PORT) ); 135 | SubscribeClient.println(F("Accept: text/event-stream")); 136 | SubscribeClient.println(F("Connection: keep-alive")); 137 | SubscribeClient.println(); 138 | return true; 139 | } 140 | 141 | void parseWidgetLabel(String sitemapLabel, String &label, String &state ) 142 | { 143 | int firstOpeningBracket = sitemapLabel.indexOf('['); 144 | int firstClosingBracket = sitemapLabel.indexOf(']'); 145 | if ( (firstOpeningBracket == -1) || (firstClosingBracket == -1) ) // Value not found 146 | { 147 | sitemapLabel.trim(); 148 | label = sitemapLabel; 149 | state = ""; 150 | } 151 | else 152 | { 153 | label = sitemapLabel.substring(0,firstOpeningBracket); 154 | label.trim(); 155 | state = sitemapLabel.substring(firstOpeningBracket + 1, firstClosingBracket); 156 | state.trim(); 157 | } 158 | } 159 | 160 | void updateSiteMap(){ 161 | debug(F("updateSiteMap"),"1:"+String(ESP.getFreeHeap())); 162 | String sitemapStr; 163 | httpRequest(restUrl + "/sitemaps/" + OPENHAB_SITEMAP, sitemapStr); 164 | debug(F("updateSiteMap"),"2:"+String(ESP.getFreeHeap())); 165 | deserializeJson(sitemap, sitemapStr); 166 | debug(F("updateSiteMap"),"3:"+String(ESP.getFreeHeap())); 167 | for(byte i = 0; i < 6; i++) { //6 168 | if (! sitemap["homepage"]["widgets"][i]["type"].isNull()) 169 | { 170 | String type = sitemap["homepage"]["widgets"][i]["type"]; 171 | String slabel = sitemap["homepage"]["widgets"][i]["label"]; 172 | String label = ""; 173 | String state = ""; 174 | parseWidgetLabel(slabel, label, state); 175 | String icon = sitemap["homepage"]["widgets"][i]["icon"]; 176 | String itemState = sitemap["homepage"]["widgets"][i]["item"]["state"]; 177 | String itemName = sitemap["homepage"]["widgets"][i]["item"]["name"]; 178 | String itemType = sitemap["homepage"]["widgets"][i]["item"]["type"]; 179 | Serial.println("Item " + String(i) + " label=" + label + " type="+ type + " icon=" + icon + " state=" + state + " itemName=" + itemName + " itemType=" + itemType +" itemState=" + itemState ); 180 | widgets[i].update(label, state, itemState, icon, type, itemName, itemType); 181 | widgets[i].draw(UPDATE_MODE_GC16); // UPDATE_MODE_GL16 182 | } 183 | else 184 | { 185 | widgets[i].clear(); 186 | } 187 | 188 | debug(F("updateSiteMap"),"4:"+String(ESP.getFreeHeap())); 189 | } 190 | sitemap.clear(); 191 | debug(F("updateSiteMap"),"5:"+String(ESP.getFreeHeap())); 192 | } 193 | 194 | void parseSubscriptionData(String jsonDataStr) 195 | { 196 | DynamicJsonDocument jsonData(30000); 197 | deserializeJson(jsonData, jsonDataStr); 198 | if (! jsonData["widgetId"].isNull() ) // Data Widget (subscription) 199 | { 200 | debug(F("parseSubscriptionData"),F("Data Widget (subscription)")); 201 | byte widgetId = jsonData["widgetId"]; 202 | String slabel = jsonData["label"]; 203 | String itemState = jsonData["item"]["state"]; 204 | String itemName = jsonData["item"]["name"]; 205 | String itemType = jsonData["item"]["type"]; 206 | String label = ""; 207 | String state = ""; 208 | parseWidgetLabel(slabel, label, state); 209 | Serial.println("Update Item " + String(widgetId) + " label=" + label + " state=" + state); 210 | widgets[widgetId].update(label, state, itemState, itemName, itemType); 211 | widgets[widgetId].draw(UPDATE_MODE_GC16); // UPDATE_MODE_A2 212 | } 213 | else if (! jsonData["TYPE"].isNull() ) 214 | { 215 | String jsonDataType = jsonData["TYPE"]; 216 | if ( jsonDataType.equals("ALIVE") ) 217 | { 218 | debug(F("parseSubscriptionData"),F("Subscription Alive")); 219 | } 220 | else if ( jsonDataType.equals("SITEMAP_CHANGED") ) 221 | { 222 | debug(F("parseSubscriptionData"),F("Sitemap changed, reloading")); 223 | updateSiteMap(); 224 | } 225 | } 226 | jsonData.clear(); 227 | } 228 | 229 | void setTimeZone() // Gets timezone from OpenHAB 230 | { 231 | String response; 232 | if (httpRequest(restUrl + "/services/org.eclipse.smarthome.i18n/config",response)) 233 | { 234 | //DynamicJsonDocument doc(2000); 235 | deserializeJson(jsonDoc, response); 236 | String timezone = jsonDoc["timezone"]; 237 | debug("setTimeZone","OpenHAB timezone= " + timezone); 238 | jsonDoc.clear(); 239 | openhabTZ.setLocation(timezone); 240 | } 241 | else 242 | { 243 | debug("setTimeZone","Could not get OpenHAB timezone"); 244 | } 245 | } 246 | 247 | void syncRTC() 248 | { 249 | /* 250 | RTCtime.hour = now.hour 251 | RTCtime.min = timeClient.getMinutes(); 252 | RTCtime.sec = timeClient.getSeconds(); 253 | M5.RTC.setTime(&RTCtime); 254 | 255 | RTCDate.year = timeClient.getDay(); 256 | RTCDate.mon = timeClient.getHours(); 257 | RTCDate.day = timeClient.getDay(); 258 | M5.RTC.setDate(&RTCDate); 259 | */ 260 | /* 261 | String dateTime = getItemState(OPENHAB_DATETIME_ITEM); 262 | RTCtime.hour = dateTime.substring(11,13).toInt(); 263 | RTCtime.min = dateTime.substring(14,16).toInt(); 264 | RTCtime.sec = dateTime.substring(17,19).toInt(); 265 | debug("syncRTC","Time="+String(RTCtime.hour)+":"+String(RTCtime.min)+":"+String(RTCtime.sec)); 266 | M5.RTC.setTime(&RTCtime); 267 | 268 | RTCDate.year = dateTime.substring(0,4).toInt(); 269 | RTCDate.mon = dateTime.substring(5,7).toInt(); 270 | RTCDate.day = dateTime.substring(8,10).toInt(); 271 | debug("syncRTC","Date="+String(RTCDate.year)+"-"+String(RTCDate.mon)+"-"+String(RTCDate.day)); 272 | M5.RTC.setDate(&RTCDate); 273 | */ 274 | 275 | } 276 | 277 | void displaySysInfo() 278 | { 279 | // Display system information 280 | canvas.setTextSize(FONT_SIZE_STATUS_CENTER); 281 | canvas.setTextDatum(TC_DATUM); 282 | 283 | /*M5.RTC.getTime(&RTCtime); 284 | char time[6]; 285 | snprintf(time,sizeof(time),"%02d:%02d",RTCtime.hour,RTCtime.min); 286 | canvas.drawString(time,80,30);*/ 287 | 288 | canvas.drawString(openhabTZ.dateTime("H:i"), 80, 40); 289 | 290 | canvas.setTextSize(FONT_SIZE_LABEL); 291 | canvas.setTextDatum(TL_DATUM); 292 | 293 | canvas.drawString("Free Heap:",0,250); 294 | canvas.drawString(String(ESP.getFreeHeap())+ " B",0,290); 295 | 296 | canvas.drawString("Voltage: ",0,340); 297 | canvas.drawString(String(M5.getBatteryVoltage())+ " mV",0,380); 298 | 299 | upTime = millis()/(60000); 300 | canvas.drawString("Uptime: ",0,430); 301 | canvas.drawString(String(upTime)+ " min",0,470); 302 | canvas.pushCanvas(780,0,UPDATE_MODE_A2); 303 | } 304 | 305 | void setup() 306 | { 307 | M5.begin(true,false,true,true,false); // bool touchEnable = true, bool SDEnable = false, bool SerialEnable = true, bool BatteryADCEnable = true, bool I2CEnable = false 308 | M5.disableEXTPower(); 309 | /* Uncomment for static IP 310 | IPAddress ip(192,168,0,xxx); // Node Static IP 311 | IPAddress gateway(192,168,0,xxx); // Network Gateway (usually Router IP) 312 | IPAddress subnet(255,255,255,0); // Subnet Mask 313 | IPAddress dns1(xxx,xxx,xxx,xxx); // DNS1 IP 314 | IPAddress dns2(xxx,xxx,xxx,xxx); // DNS2 IP 315 | WiFi.config(ip, gateway, subnet, dns1, dns2); 316 | */ 317 | // M5.EPD.SetRotation(180); 318 | M5.EPD.Clear(true); 319 | M5.RTC.begin(); 320 | 321 | // FS Setup 322 | Serial.println(F("Inizializing FS...")); 323 | if (SPIFFS.begin()){ 324 | Serial.println(F("SPIFFS mounted correctly.")); 325 | }else{ 326 | Serial.println(F("!An error occurred during SPIFFS mounting")); 327 | } 328 | 329 | Serial.println(F("Inizializing LITTLEFS FS...")); 330 | if (LITTLEFS.begin()){ 331 | Serial.println(F("LITTLEFS mounted correctly.")); 332 | }else{ 333 | Serial.println(F("!An error occurred during LITTLEFS mounting")); 334 | } 335 | 336 | // Get all information of LITTLEFS 337 | unsigned int totalBytes = LITTLEFS.totalBytes(); 338 | unsigned int usedBytes = LITTLEFS.usedBytes(); 339 | 340 | // TODO : Should fail and stop if SPIFFS error 341 | 342 | Serial.println("===== File system info ====="); 343 | 344 | Serial.print("Total space: "); 345 | Serial.print(totalBytes); 346 | Serial.println("byte"); 347 | 348 | Serial.print("Total space used: "); 349 | Serial.print(usedBytes); 350 | Serial.println("byte"); 351 | 352 | Serial.println(); 353 | 354 | canvas.createCanvas(160, 540); 355 | canvas.loadFont("/FreeSansBold.ttf", LITTLEFS); 356 | // TODO : Should fail and stop if font not found 357 | 358 | canvas.setTextSize(FONT_SIZE_LABEL); 359 | canvas.createRender(FONT_SIZE_LABEL,FONT_CACHE_SIZE); 360 | canvas.createRender(FONT_SIZE_STATUS_CENTER,FONT_CACHE_SIZE); 361 | canvas.createRender(FONT_SIZE_STATUS_BOTTOM,FONT_CACHE_SIZE); 362 | 363 | // Setup Wifi 364 | Serial.println(F("Starting Wifi")); 365 | WiFi.begin(WIFI_SSID, WIFI_PSK); 366 | while (WiFi.status() != WL_CONNECTED) { 367 | delay(500); 368 | Serial.print("."); 369 | } 370 | Serial.println(); 371 | Serial.println(F("WiFi connected")); 372 | Serial.println(F("IP address: ")); 373 | Serial.println(WiFi.localIP()); 374 | 375 | // Init widgets 376 | for(byte i = 0; i < WIDGET_COUNT; i++) { 377 | int x = i % BUTTONS_X; 378 | int y = i / BUTTONS_X; 379 | widgets[i].init(i, 0, 40 + x * (40 + BUTTON_SIZE), 40 + y * (40 + BUTTON_SIZE)); 380 | } 381 | // NTP stuff 382 | setInterval(3600); 383 | waitForSync(); 384 | setTimeZone(); 385 | 386 | displaySysInfo(); 387 | subscribe(); 388 | updateSiteMap(); 389 | } 390 | 391 | // Loop 392 | void loop() 393 | { 394 | // Subscribe or re-subscribe to sitemap 395 | if (! SubscribeClient.connected()) { 396 | Serial.println(F("SubscribeClient not connected, connecting...")); 397 | if (! subscribe()) { delay(300); } 398 | } 399 | 400 | // Check and get subscription data 401 | while (SubscribeClient.available()) { 402 | String SubscriptionReceivedData = SubscribeClient.readStringUntil('\n'); 403 | int dataStart = SubscriptionReceivedData.indexOf("data: "); 404 | if (dataStart > -1) // received data contains "data: " 405 | { 406 | String SubscriptionData = SubscriptionReceivedData.substring(dataStart+6); // Remove chars before "data: " 407 | int dataEnd = SubscriptionData.indexOf("\n\n"); 408 | SubscriptionData = SubscriptionData.substring(0,dataEnd); 409 | parseSubscriptionData(SubscriptionData); 410 | } 411 | } 412 | 413 | // Check touch 414 | if (M5.TP.available()) 415 | { 416 | M5.TP.update(); 417 | bool is_finger_up = M5.TP.isFingerUp(); 418 | if(is_finger_up || (_last_pos_x != M5.TP.readFingerX(0)) || (_last_pos_y != M5.TP.readFingerY(0))) 419 | { 420 | _last_pos_x = M5.TP.readFingerX(0); 421 | _last_pos_y = M5.TP.readFingerY(0); 422 | if(! is_finger_up) 423 | { 424 | for(byte i = 0; i < WIDGET_COUNT; i++) 425 | if (widgets[i].testIfTouched(_last_pos_x,_last_pos_y)) 426 | { 427 | //debug("loop","Widget touched: " + String(i)); 428 | String itemName; 429 | String newValue; 430 | widgets[i].getTouchedValues(itemName, newValue); 431 | //debug("loop","Touched values: " + itemName +", " + newValue); 432 | if (! newValue.isEmpty()) 433 | { 434 | widgets[i].drawPushedBorder(UPDATE_MODE_A2); 435 | postWidgetValue(itemName,newValue); 436 | //debug("loop","POST values: " + itemName +", " + newValue); 437 | } 438 | } 439 | } 440 | } 441 | M5.TP.flush(); 442 | } 443 | 444 | // Display sysinfo 445 | if ( DISPLAY_SYSINFO ) { 446 | currentSysInfoMillis = millis(); 447 | if ( (currentSysInfoMillis-previousSysInfoMillis) > 10000) 448 | { 449 | previousSysInfoMillis = currentSysInfoMillis; 450 | displaySysInfo(); 451 | //debug("loop","Total PSRAM: %d" + String(ESP.getPsramSize())); 452 | //debug("loop","Free PSRAM: %d" + String(ESP.getFreePsram())); 453 | } 454 | } 455 | 456 | // Full refresh every 10 minutes to clear artefacts 457 | currentRefreshMillis = millis(); 458 | if ((currentRefreshMillis-previousRefreshMillis) > 600000 ) // 600000 459 | { 460 | previousRefreshMillis = currentRefreshMillis; 461 | M5.EPD.UpdateFull(UPDATE_MODE_GL16); 462 | debug("Loop","Full refresh"); 463 | } 464 | events(); // for ezTime 465 | } -------------------------------------------------------------------------------- /tools/icons/convert_icons.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | svgdir=mdi 3 | pngdir=png 4 | 5 | while IFS=";" read -r svg png 6 | do 7 | #echo "svg:$svg png:$png" 8 | svgfile=$svg.svg 9 | pngfile=$png.png 10 | echo "$svgfile -> $pngfile" 11 | if [ ! -f $svgdir/$svgfile ] 12 | then 13 | echo "ERROR: $svgfile not found, downloading" 14 | wget --no-hsts https://api.iconify.design/mdi-$svgfile -O $svgdir/$svgfile 15 | fi 16 | rsvg-convert $svgdir/$svgfile -o $pngdir/$pngfile -w 96 17 | done < png_icons.csv -------------------------------------------------------------------------------- /tools/icons/mdi/alert-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/audio-video.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/battery-10.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/battery-20.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/battery-30.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/battery-40.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/battery-50.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/battery-60.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/battery-70.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/battery-80.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/battery-90.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/battery-alert.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/battery.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/bell.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/bluetooth.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/cctv.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/fan.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/faucet.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/fire-off.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/fire.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/fuel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/garage-alert-variant.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/garage-alert.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/garage-open-variant.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/garage-open.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/garage-variant.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/garage.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/gas-cylinder.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/gauge.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/grass.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/lightbulb-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/lightbulb.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/lock-open-variant-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/lock-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/motion-sensor-off.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/motion-sensor.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/nest-thermostat.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/oil.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/power-plug-off.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/power-plug.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/power-socket-au.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/power-socket-eu.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/power-socket-uk.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/power-socket-us.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/progress-question.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/projector-screen-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/projector.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/signal-cellular-1.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/signal-cellular-2.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/signal-cellular-3.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/signal-cellular-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/signal.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/snowflake-off.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/snowflake.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/television-off.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/television.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/thermometer.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/toggle-switch-off.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/toggle-switch-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/toggle-switch.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/tree-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/water-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/water-percent.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/water-pump.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/water.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/wifi-off.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/wifi.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/window-closed-variant.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/window-shutter-alert.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/window-shutter-open.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/mdi/window-shutter.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tools/icons/png/battery-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/battery-10.png -------------------------------------------------------------------------------- /tools/icons/png/battery-20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/battery-20.png -------------------------------------------------------------------------------- /tools/icons/png/battery-30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/battery-30.png -------------------------------------------------------------------------------- /tools/icons/png/battery-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/battery-40.png -------------------------------------------------------------------------------- /tools/icons/png/battery-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/battery-50.png -------------------------------------------------------------------------------- /tools/icons/png/battery-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/battery-60.png -------------------------------------------------------------------------------- /tools/icons/png/battery-70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/battery-70.png -------------------------------------------------------------------------------- /tools/icons/png/battery-80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/battery-80.png -------------------------------------------------------------------------------- /tools/icons/png/battery-90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/battery-90.png -------------------------------------------------------------------------------- /tools/icons/png/battery-alert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/battery-alert.png -------------------------------------------------------------------------------- /tools/icons/png/battery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/battery.png -------------------------------------------------------------------------------- /tools/icons/png/blinds-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/blinds-0.png -------------------------------------------------------------------------------- /tools/icons/png/blinds-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/blinds-100.png -------------------------------------------------------------------------------- /tools/icons/png/blinds-closing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/blinds-closing.png -------------------------------------------------------------------------------- /tools/icons/png/blinds-opening.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/blinds-opening.png -------------------------------------------------------------------------------- /tools/icons/png/blinds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/blinds.png -------------------------------------------------------------------------------- /tools/icons/png/bluetooth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/bluetooth.png -------------------------------------------------------------------------------- /tools/icons/png/camera.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/camera.png -------------------------------------------------------------------------------- /tools/icons/png/cinemascreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/cinemascreen.png -------------------------------------------------------------------------------- /tools/icons/png/climate-off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/climate-off.png -------------------------------------------------------------------------------- /tools/icons/png/climate-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/climate-on.png -------------------------------------------------------------------------------- /tools/icons/png/climate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/climate.png -------------------------------------------------------------------------------- /tools/icons/png/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/error.png -------------------------------------------------------------------------------- /tools/icons/png/fan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/fan.png -------------------------------------------------------------------------------- /tools/icons/png/faucet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/faucet.png -------------------------------------------------------------------------------- /tools/icons/png/fire-off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/fire-off.png -------------------------------------------------------------------------------- /tools/icons/png/fire-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/fire-on.png -------------------------------------------------------------------------------- /tools/icons/png/fire.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/fire.png -------------------------------------------------------------------------------- /tools/icons/png/fuel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/fuel.png -------------------------------------------------------------------------------- /tools/icons/png/garage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/garage.png -------------------------------------------------------------------------------- /tools/icons/png/garagedoor-closed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/garagedoor-closed.png -------------------------------------------------------------------------------- /tools/icons/png/garagedoor-closing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/garagedoor-closing.png -------------------------------------------------------------------------------- /tools/icons/png/garagedoor-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/garagedoor-open.png -------------------------------------------------------------------------------- /tools/icons/png/garagedoor-opening.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/garagedoor-opening.png -------------------------------------------------------------------------------- /tools/icons/png/garagedoor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/garagedoor.png -------------------------------------------------------------------------------- /tools/icons/png/garden.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/garden.png -------------------------------------------------------------------------------- /tools/icons/png/gas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/gas.png -------------------------------------------------------------------------------- /tools/icons/png/heating.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/heating.png -------------------------------------------------------------------------------- /tools/icons/png/humidity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/humidity.png -------------------------------------------------------------------------------- /tools/icons/png/lawnmower.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/lawnmower.png -------------------------------------------------------------------------------- /tools/icons/png/light-off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/light-off.png -------------------------------------------------------------------------------- /tools/icons/png/light-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/light-on.png -------------------------------------------------------------------------------- /tools/icons/png/light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/light.png -------------------------------------------------------------------------------- /tools/icons/png/lightbulb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/lightbulb.png -------------------------------------------------------------------------------- /tools/icons/png/lock-closed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/lock-closed.png -------------------------------------------------------------------------------- /tools/icons/png/lock-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/lock-open.png -------------------------------------------------------------------------------- /tools/icons/png/lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/lock.png -------------------------------------------------------------------------------- /tools/icons/png/motion-closed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/motion-closed.png -------------------------------------------------------------------------------- /tools/icons/png/motion-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/motion-open.png -------------------------------------------------------------------------------- /tools/icons/png/motion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/motion.png -------------------------------------------------------------------------------- /tools/icons/png/network-off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/network-off.png -------------------------------------------------------------------------------- /tools/icons/png/network-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/network-on.png -------------------------------------------------------------------------------- /tools/icons/png/network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/network.png -------------------------------------------------------------------------------- /tools/icons/png/oil.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/oil.png -------------------------------------------------------------------------------- /tools/icons/png/poweroutlet-off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/poweroutlet-off.png -------------------------------------------------------------------------------- /tools/icons/png/poweroutlet-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/poweroutlet-on.png -------------------------------------------------------------------------------- /tools/icons/png/poweroutlet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/poweroutlet.png -------------------------------------------------------------------------------- /tools/icons/png/poweroutlet_au.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/poweroutlet_au.png -------------------------------------------------------------------------------- /tools/icons/png/poweroutlet_eu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/poweroutlet_eu.png -------------------------------------------------------------------------------- /tools/icons/png/poweroutlet_uk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/poweroutlet_uk.png -------------------------------------------------------------------------------- /tools/icons/png/poweroutlet_us.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/poweroutlet_us.png -------------------------------------------------------------------------------- /tools/icons/png/pressure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/pressure.png -------------------------------------------------------------------------------- /tools/icons/png/projector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/projector.png -------------------------------------------------------------------------------- /tools/icons/png/pump.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/pump.png -------------------------------------------------------------------------------- /tools/icons/png/qualityofservice-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/qualityofservice-0.png -------------------------------------------------------------------------------- /tools/icons/png/qualityofservice-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/qualityofservice-1.png -------------------------------------------------------------------------------- /tools/icons/png/qualityofservice-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/qualityofservice-2.png -------------------------------------------------------------------------------- /tools/icons/png/qualityofservice-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/qualityofservice-3.png -------------------------------------------------------------------------------- /tools/icons/png/qualityofservice-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/qualityofservice-4.png -------------------------------------------------------------------------------- /tools/icons/png/qualityofservice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/qualityofservice.png -------------------------------------------------------------------------------- /tools/icons/png/receiver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/receiver.png -------------------------------------------------------------------------------- /tools/icons/png/screen-off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/screen-off.png -------------------------------------------------------------------------------- /tools/icons/png/screen-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/screen-on.png -------------------------------------------------------------------------------- /tools/icons/png/screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/screen.png -------------------------------------------------------------------------------- /tools/icons/png/signal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/signal.png -------------------------------------------------------------------------------- /tools/icons/png/siren.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/siren.png -------------------------------------------------------------------------------- /tools/icons/png/switch-off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/switch-off.png -------------------------------------------------------------------------------- /tools/icons/png/switch-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/switch-on.png -------------------------------------------------------------------------------- /tools/icons/png/switch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/switch.png -------------------------------------------------------------------------------- /tools/icons/png/temperature.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/temperature.png -------------------------------------------------------------------------------- /tools/icons/png/unknown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/unknown.png -------------------------------------------------------------------------------- /tools/icons/png/wallswitch-off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/wallswitch-off.png -------------------------------------------------------------------------------- /tools/icons/png/wallswitch-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/wallswitch-on.png -------------------------------------------------------------------------------- /tools/icons/png/wallswitch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/wallswitch.png -------------------------------------------------------------------------------- /tools/icons/png/water-outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/water-outline.png -------------------------------------------------------------------------------- /tools/icons/png/water.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/water.png -------------------------------------------------------------------------------- /tools/icons/png/window.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cyrilpawelko/m5panel/e07035a6f69f662711c0325f5ee3178161969d68/tools/icons/png/window.png -------------------------------------------------------------------------------- /tools/icons/png_icons.csv: -------------------------------------------------------------------------------- 1 | battery;battery 2 | battery-10;battery-10 3 | battery-20;battery-20 4 | battery-30;battery-30 5 | battery-40;battery-40 6 | battery-50;battery-50 7 | battery-60;battery-60 8 | battery-70;battery-70 9 | battery-80;battery-80 10 | battery-90;battery-90 11 | battery-alert;battery-alert 12 | window-shutter;blinds 13 | window-shutter-open;blinds-0 14 | window-shutter;blinds-100 15 | window-shutter-alert;blinds-closing 16 | window-shutter-alert;blinds-opening 17 | bluetooth;bluetooth 18 | cctv;camera 19 | projector-screen-outline;cinemascreen 20 | snowflake;climate 21 | snowflake-off;climate-off 22 | snowflake;climate-on 23 | alert-outline;error 24 | fan;fan 25 | faucet;faucet 26 | fire;fire 27 | fire-off;fire-off 28 | fire;fire-on 29 | garage-variant;garage 30 | garage-variant;garagedoor 31 | garage-variant;garagedoor-closed 32 | garage-alert-variant;garagedoor-closing 33 | garage-open-variant;garagedoor-open 34 | garage-alert-variant;garagedoor-opening 35 | tree-outline;garden 36 | gas-cylinder;gas 37 | nest-thermostat;heating 38 | water-percent;humidity 39 | grass;lawnmower 40 | lightbulb-outline;light 41 | lightbulb-outline;lightbulb 42 | lightbulb;light-off 43 | lightbulb-outline;light-on 44 | lock-outline;lock 45 | lock-outline;lock-closed 46 | lock-open-variant-outline;lock-open 47 | motion-sensor;motion 48 | motion-sensor;motion-open 49 | motion-sensor-off;motion-closed 50 | wifi;network 51 | wifi-off;network-off 52 | wifi;network-on 53 | water;oil 54 | power-plug;poweroutlet 55 | power-socket-au;poweroutlet_au 56 | power-socket-eu;poweroutlet_eu 57 | power-socket-uk;poweroutlet_uk 58 | power-socket-us;poweroutlet_us 59 | power-plug-off;poweroutlet-off 60 | power-plug;poweroutlet-on 61 | gauge;pressure 62 | projector;projector 63 | water-pump;pump 64 | signal-cellular-3;qualityofservice 65 | signal-cellular-outline;qualityofservice-0 66 | signal-cellular-1;qualityofservice-1 67 | signal-cellular-2;qualityofservice-2 68 | signal-cellular-3;qualityofservice-3 69 | signal-cellular-3;qualityofservice-4 70 | audio-video;receiver 71 | television;screen 72 | television-off;screen-off 73 | television;screen-on 74 | signal;signal 75 | bell;siren 76 | toggle-switch-outline;switch 77 | toggle-switch-off;switch-off 78 | toggle-switch-outline;switch-on 79 | thermometer;temperature 80 | progress-question;unknown 81 | toggle-switch;wallswitch 82 | toggle-switch-off;wallswitch-off 83 | toggle-switch;wallswitch-on 84 | water-outline;water 85 | window-closed-variant;window 86 | fuel;fuel 87 | -------------------------------------------------------------------------------- /tools/littlefs/README: -------------------------------------------------------------------------------- 1 | According to https://github.com/lorol/LITTLEFS/tree/master/examples/LITTLEFS_PlatformIO : 2 | Download mklittlefs from https://github.com/earlephilhower/mklittlefs/releases and saveto this directory 3 | --------------------------------------------------------------------------------