|
| 1 | +# WifInfo |
| 2 | + |
| 3 | +WifInfo est un module de consignation de la téléinformation des compteurs électriques avec serveur web embarqué. |
| 4 | + |
| 5 | +## Introduction |
| 6 | + |
| 7 | +Ce projet est la fusion de développements réalisés en vue du remplacement d'un [eco-devices](http://gce-electronics.com/fr/111-eco-devices) sur base de [ESP-01](https://fr.wikipedia.org/wiki/ESP8266) et de la une réécriture quasi complète - sauf la partie interface web - du projet homonyme de C-H. Hallard [LibTeleinfo](https://github.com/hallard/LibTeleinfo) avec des modifications notamment de [olileger](https://github.com/olileger/LibTeleinfo) et [Doume](https://github.com/Doume/LibTeleinfo). |
| 8 | + |
| 9 | +* Meilleure séparation des fonctions dans des fichiers sources différents |
| 10 | +* Homogénéisation du nommage, nettoyage du code source |
| 11 | +* Minimisation des allocations mémoire (nouvelle librairie teleinfo) |
| 12 | +* Server-sent event ([SSE](https://fr.wikipedia.org/wiki/Server-sent_events)) pour les mises à jour des index |
| 13 | +* Notifications HTTP sur changements HC/HP et dépasssement de seuils ou ADPS |
| 14 | +* Client en liaison série pour mise au point avec [SimpleCLI](https://github.com/spacehuhn/SimpleCLI) |
| 15 | +* Tests sur PC avec [Google Test](https://github.com/google/googletest) et couverture avec [lcov](http://ltp.sourceforge.net/coverage/lcov.php) |
| 16 | +* Client Python de simulation [cli.py](./cli.py) sur base de `miniterm.py` de [pySerial](https://pyserial.readthedocs.io/) |
| 17 | +* Compression et minimisation de la partie web avant écriture du filesystem (`data_src` ⇒ `data` au moment du build) |
| 18 | +* Serveur Python [Flask](https://www.palletsprojects.com/p/flask/) pour développement de la partie web |
| 19 | +* Utilisation de [PlatformIO](https://platformio.org) comme environnement de développement |
| 20 | + |
| 21 | +## Documentation |
| 22 | + |
| 23 | +Documentation ERDF sur la [téléinformation client](https://www.enedis.fr/sites/default/files/Enedis-NOI-CPT_02E.pdf) pour les compteurs électroniques et pour les compteurs [Linky](https://www.enedis.fr/sites/default/files/Enedis-NOI-CPT_54E.pdf). |
| 24 | + |
| 25 | +Module [PiTInfo](https://hallard.me/pitinfov12/) et explications pourquoi le montage avec uniquement optocoupleur et résistances ne suffit pas avec un esp8266. |
| 26 | + |
| 27 | +## Compilation |
| 28 | + |
| 29 | +Le projet est prévu pour PlatformIO sous macOS ou Linux, en conjonction avec [Visual Studio Code](https://code.visualstudio.com) et son l'extension [PlatformIO](https://marketplace.visualstudio.com/items?itemName=platformio.platformio-ide). |
| 30 | +L'IDE d'Arduino peut également être utilisé. |
| 31 | + |
| 32 | +La page HTML est compressée avec [html-minifier](https://github.com/kangax/html-minifier) et gzip. |
| 33 | + |
| 34 | +### PlatformtIO |
| 35 | + |
| 36 | +```bash |
| 37 | +platformio run -t uploadfs |
| 38 | +platformio run -t upload |
| 39 | +``` |
| 40 | + |
| 41 | +### IDE Arduino |
| 42 | + |
| 43 | +Cf. les nombreux tutos pour l'utilisation d'esp8266-arduino et l'upload de SPIFFS. |
| 44 | + |
| 45 | +Le répertoire `data` est préparé à l'aide du script suivant (nécessite python3, gzip, html-minifier) : |
| 46 | + |
| 47 | +```bash |
| 48 | +python3 prep_data_folder.py |
| 49 | +``` |
| 50 | + |
| 51 | +## Client de test/mise au point |
| 52 | + |
| 53 | +```bash |
| 54 | +pip3 install pySerial |
| 55 | +python3 cli.py [port] |
| 56 | +``` |
| 57 | + |
| 58 | +Pour activer le mode commande, il faut taper <TAB> puis la commande (ls, config, time, esp, ...). |
| 59 | + |
| 60 | +* `Ctrl-T` envoie une trame de téléinformation |
| 61 | +* `Ctrl-Y` bascule l'envoi automatique de trames |
| 62 | +* `Ctrl-P` bascule entre heures creuses et heures pleines |
| 63 | +* `Ctrl-C` sort du client |
| 64 | + |
| 65 | +## Tests unitaires |
| 66 | + |
| 67 | +Les tests unitaires et la couverture sont faites dans un conteneur Docker. |
| 68 | + |
| 69 | +Néanmoins, les logiciels et librairies suivants sont nécessaires: |
| 70 | +* [CMake](https://cmake.org) |
| 71 | +* [Google Test](https://github.com/google/googletest) |
| 72 | +* [nlohmann json](https://github.com/nlohmann/json) |
| 73 | +* [lcov](http://ltp.sourceforge.net/coverage/lcov.php) |
| 74 | + |
| 75 | +Préparation de l'image: |
| 76 | +```bash |
| 77 | +docker build -t tic . |
| 78 | +``` |
| 79 | + |
| 80 | +Lancement des tests et couverture: |
| 81 | +```bash |
| 82 | +docker run --rm -ti -v $(pwd):/tic:ro -v $(pwd)/coverage:/coverage tic /tic/runtest.sh |
| 83 | +``` |
| 84 | + |
| 85 | +La couverture est disponible dans `./coverage/index.html` |
| 86 | + |
| 87 | + |
| 88 | +## Développement web |
| 89 | + |
| 90 | +### Avec module simulé (aucun esp8266 requis) |
| 91 | + |
| 92 | +```bash |
| 93 | +pip3 install flask flask_cors |
| 94 | +python3 tools/srv.py |
| 95 | +``` |
| 96 | +L'interface est alors disponible à cette adresse: [http://localhost:5000/](http://localhost:5000/). |
| 97 | + |
| 98 | +### Avec module et partie web sur PC |
| 99 | + |
| 100 | +[nginx](http://nginx.org/en/) est utilisé en reverse proxy pour accéder aux pages dynamiques du module. |
| 101 | + |
| 102 | +```bash |
| 103 | +tools/httpdev.sh [adresse IP du module] |
| 104 | +``` |
| 105 | +L'interface alors sera disponible à cette adresse: [http://localhost:5001/](http://localhost:5001/), avec les requêtes dynamiques redirigées vers le module (qui doit donc être opérationnel et joignable). |
| 106 | + |
| 107 | +## Montage |
| 108 | + |
| 109 | +Le montage final utilise un ESP-01S avec le module [PiTInfo](http://hallard.me/pitinfov12-light/) - à acheter sur [tindie](https://www.tindie.com/products/Hallard/pitinfo/). L'alimentation est assurée par module USB. |
| 110 | + |
| 111 | + |
| 112 | + |
| 113 | +## Licence |
| 114 | + |
| 115 | +Compte-tenu de la diversité d'origine des sources, ce travail est publié avec la licence de [WifInfo](https://github.com/hallard/LibTeleinfo/tree/master/examples/Wifinfo). |
| 116 | + |
| 117 | +<div align="center"> |
| 118 | + |
| 119 | +[](http://creativecommons.org/licenses/by-nc-sa/4.0/) |
| 120 | + |
| 121 | +</div> |
| 122 | + |
| 123 | +Ce(tte) œuvre est mise à disposition selon les termes de la [Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International](http://creativecommons.org/licenses/by-nc-sa/4.0/). |
0 commit comments