Description
Table des matières
- Présentation
- 1. Avant-propos
- 2. Motivations
- 3. Présentation du projet
- 4. Objectifs de l’ouvrage
- 5. Prérequis
- 6. Matériel utilisé
- 6.1 Raspberry Pi
- 6.2 Feather ESP8266 Huzzah
- 6.3 Feather ESP32 Huzzah
- 6.4 Feather OLED Wing
- 6.5 Module relais
- 6.6 DHT11 – Humidité
- 6.7 AM2315 – Température et humidité
- 6.8 DS18B20 – Température
- 6.9 BME280 et BMP280 – Pression, humidité, température
- 6.10 TSL2561 – Luminosité
- 6.11 ADS1115 – Lecture analogique
- 6.12 TMP36 – Température
- 6.13 Photorésistance – Luminosité
- 6.14 PIR – Détection de mouvement
- 6.15 Contact magnétique
- 6.16 Capteur à effet Hall numérique
- 6.17 CCS811 – Mesure de CO2
- 6.18 Capteur de courant non invasif
- 7. Code source
- 7.1 Téléchargement
- 7.2 GitHub
- 8. Configuration
- 8.1 Installation du Raspberry Pi
- 8.2 Utilitaires : des outils pour travailler
- 8.2.1 Connexion SSH
- 8.2.2 Éditeur de texte Nano
- 8.2.3 Transfert de fichiers via SSH (sftp)
- 8.2.4 Système de fichiers SSH
- 8.2.5 Bureau à distance
- 9. Type de données collectées
- Le broker MQTT
- 1. Présentation et concepts
- 1.1 Le broker MQTT, élément central du réseau MQTT
- 1.2 Les éléments de MQTT
- 1.3 Le broker MQTT
- 1.4 Les topics
- 1.5 Les publishers
- 1.6 Les subscribers
- 1.7 Le ClientId
- 2. Révisions de MQTT
- 3. Les topics en détail
- 3.1 Contenu du message
- 3.1.1 Le message selon MQTT
- 3.1.2 En marge du standard
- 3.2 Création de topic et bonnes pratiques
- 3.3 Les topics système
- 3.1 Contenu du message
- 4. Souscription et expression de filtrage
- 4.1 Expression de filtrage sans joker
- 4.2 Le joker de niveau
- 4.3 Le joker multiniveau
- 5. Les qualités de service MQTT
- 5.1 Les niveaux de qualité
- 5.1.1 QoS 0 : une fois maximum
- 5.1.2 QoS 1 : au moins une fois
- 5.1.3 QoS 2 : exactement une fois
- 5.2 Rétrogradation de QoS
- 5.3 Quel QoS utiliser et quand ?
- 5.1 Les niveaux de qualité
- 6. La rétention de messages
- 7. Les clients persistants
- 8. Message testament
- 9. Quel broker MQTT ?
- 10. Installation de Mosquitto
- 10.1 Mise à jour
- 10.2 Installation
- 11. Test avec Mosquitto.org
- 11.1 La souscription
- 11.2 La publication
- 11.3 Tester le broker MQTT du Raspberry Pi
- 12. Topics du projet
- 13. QoS du projet
- 14. Sécurité
- 15. Configurer le login du broker MQTT
- 15.1 Modifier la configuration
- 15.2 Tester la configuration
- 16. MQTT en Python
- 16.1 test-mqtt-client-sub.py
- 16.2 test-mqtt-client-pub.py
- 16.3 Documentation complémentaire
- 17. MQTT en MicroPython
- 1. Présentation et concepts
- ESP8266 et ESP32 sous MicroPython
- 1. Présentation des ESP
- 1.1 Les possibilités offertes par ESP
- 1.2 Les plateformes ESP populaires
- 1.2.1 Les plateformes ESP8266
- 1.2.2 Les plateformes ESP32
- 1.3 Programmer un ESP
- 1.4 Feather Huzzah ESP8266 et ESP32 en détail
- 1.5 Brochage des Feather Huzzah ESP8266 et ESP32
- 1.5.1 Alimentation
- 1.5.2 Port série
- 1.5.3 Broches d’entrée/sortie
- 1.5.4 Les autres broches
- 2. Charger le firmware MicroPython
- 2.1 Identifier le firmware MicroPython
- 2.2 Préparatifs
- 2.3 Reflasher un ESP
- 3. Prise de contrôle
- 3.1 Communiquer avec MicroPython
- 3.2 Communiquer avec un ESP sous MicroPython
- 3.3 REPL : l’invite de commandes MicroPython
- 3.4 RShell
- 3.5 Ampy
- 4. WebREPL
- 4.1 Le démon WebREPL
- 4.1.1 Activer WebREPL sur l’ESP
- 4.1.2 Le mot de passe WebREPL
- 4.2 Le client WebREPL
- 4.1 Le démon WebREPL
- 5. Nom d’hôte et adresse MAC
- 6. Le mode point d’accès (AP)
- 7. Le mode station (STA)
- 7.1 Mode STA et scan réseau
- 7.2 Réseau Wi-Fi visible ou masqué
- 7.3 Connexion en mode STA
- 7.4 WebREPL en mode STA
- 7.5 Désactivation du point d’accès
- 7.6 Rechercher l’adresse IP d’un ESP
- 8. Séquence de démarrage MicroPython
- 8.1 Fichier boot.py
- 8.2 Fichier main.py
- 8.3 Un fichier boot.py pour ESP
- 8.3.1 Script trop optimiste et conséquences
- 8.3.2 RunApp – Activation de l’application
- 8.3.3 Un script de boot avancé
- 9. Programmer
- 9.1 Création d’une bibliothèque
- 9.2 Les bibliothèques MicroPython
- 9.2.1 Bibliothèques standards et microbibliothèques
- 9.2.2 Bibliothèques spécifiques à MicroPython
- 9.2.3 Bibliothèque spécifique à l’ESP
- 9.2.4 Autres bibliothèques MicroPython
- 9.2.5 Mécanisme de chargement d’une bibliothèque
- 9.3 Charger et exécuter un script à la volée
- 9.4 RunApp : exécution conditionnelle de main.py
- 9.5 Entrées/sorties sur ESP
- 9.5.1 Entrée numérique
- 9.5.2 Entrée numérique (pull-up interne)
- 9.5.3 Entrée numérique et déparasitage logiciel
- 9.5.4 Sortie numérique
- 9.5.5 Entrée analogique sur ESP8266
- 9.5.6 Entrées analogiques sur ESP32
- 9.5.7 Ajout d’entrée/sortie avec MCP23017
- 9.5.8 Lecture analogique avec l’ADS1115
- 9.6 Capteur et interface sur ESP
- 9.6.1 Capteur PIR – capteur de proximité
- 9.6.2 Contact magnétique
- 9.6.3 DHT11 – humidité
- 9.6.4 Capteur à effet Hall
- 9.6.5 TSL2561 – luminosité
- 9.6.6 TSL2591 – luminosité
- 9.6.7 BME280 – température, humidité et pression barométrique
- 9.6.8 CCS811 – capteur de qualité d’air
- 9.6.9 MOD-ENV – capteur environnemental
- 9.6.10 Module relais
- 9.6.11 OLED FeatherWing – afficheur OLED
- 10. MQTT sous ESP
- 10.1 Publication MQTT sous MicroPython
- 10.2 Souscription MQTT sous MicroPython
- 11. Asyncio sur ESP
- 11.1 Asyncio en quelques mots
- 11.2 Installer Asyncio
- 11.3 Asyncio par l’exemple
- 11.4 Fonction run_every pour Asyncio
- 11.5 Plus d’informations sur Asyncio
- 12. Abstraction matérielle ESP8266/ESP32
- 12.1 Abstraction du bus I2C
- 12.2 Abstraction de la LED utilisateur
- 1. Présentation des ESP
- Les objets ESP
- 1. Informations pratiques
- 1.1 Prérequis et configurations
- 1.2 LED de statut
- 1.3 Les topics MQTT
- 1.4 Télécharger et préparer le code des objets IoT
- 2. Fonctionnement général d’un objet IoT
- 2.1 Principales sections
- 2.2 Paramètres d’un objet IoT
- 2.3 RunApp et LED d’activité
- 2.4 La fonction led_error()
- 2.5 Les tâches et fonctions asynchrones des objets IoT
- 3. Objet 1 : Météo cabane de jardin
- 3.1 Schéma de raccordement
- 3.2 Téléverser les scripts
- 3.3 Fonctionnement du script
- 3.4 Tester l’objet
- 4. Objet 1a : Cabane complément
- 4.1 Schéma de raccordement
- 4.2 Téléverser les scripts
- 4.3 Fonctionnement du script
- 5. Objet 2 : Surveillance salon
- 5.1 Téléverser les scripts
- 5.2 Fonctionnement du script
- 5.3 La fonction capture_1h()
- 5.4 Capteur PIR – variables et utilisation
- 5.5 Senseur PIR – la fonction pir_activated
- 5.6 Capteur PIR – la fonction pir_alert
- 5.7 Capteur PIR – la fonction pir_update
- 5.8 Problèmes de concurrence
- 5.9 Tester l’objet
- 6. Objet 3 : Surveillance de la véranda
- 6.1 Téléverser les scripts
- 6.2 Fonctionnement du script
- 6.3 La fonction capture_1h()
- 6.4 La fonction check_contact()
- 6.5 La fonction check_ldr()
- 6.6 Tester l’objet
- 7. Objet 4 : Chaufferie
- 7.1 Téléverser les scripts
- 7.2 Fonctionnement du script
- 7.3 La fonction capture_1h()
- 7.4 La fonction capture_10m()
- 7.5 La fonction check_mqtt_sub()
- 7.6 La fonction sub_cb()
- 7.7 La fonction chaud_exec_cmd()
- 7.8 Tester l’objet
- 8. Objet 5 : Commande de chaufferie
- 8.1 Téléverser les scripts
- 8.2 Fonctionnement du script
- 8.3 Gestion du changement d’état
- 8.4 Réception des données MQTT
- 9. Objet 5 : Surveillance environnementale
- 9.1 Téléverser les scripts
- 9.2 Fonctionnement du script
- 9.3 La fonction capture_5min()
- 9.4 Tester l’objet
- 10. Dépannage d’un objet IoT
- 1. Informations pratiques
- Persistance des données
- 1. Introduction
- 1.1 Pourquoi utiliser une base de données ?
- 1.2 Quel moteur de base de données ?
- 1.3 Principe de fonctionnement de push-to-db
- 2. SQLite 3
- 2.1 Présentation
- 2.2 Classe de stockage, type de données et affinité
- 2.2.1 Classe de stockage
- 2.2.2 Stockage des date et heure
- 2.2.3 Affinité de type pour les colonnes
- 2.2.4 Résolution de l’affinité de type
- 2.3 Affinité, expressions, comparaison et tri
- 2.3.1 Affinité des expressions
- 2.3.2 Comparaison, tri et groupage
- 2.4 Clé primaire et auto-incrément
- 2.4.1 Définir une clé primaire
- 2.4.2 Table rowid et clé primaire
- 2.5 SQLite 3 et accès concurrents
- 2.6 Installation
- 2.6.1 Installer SQLite 3
- 2.6.2 Installer le support Python
- 2.7 Premiers pas avec SQLite 3
- 2.7.1 Documentation SQL pour SQLite
- 2.7.2 Commandes de l’interpréteur SQLite
- 2.8 SQLite et Python
- 2.8.1 Opération de lecture SQLite
- 2.8.2 Opération d’insertion SQLite
- 2.8.3 Row Factory de SQLite
- 3. Approches techniques de push-to-db
- 3.1 Approche base de données de push-to-db
- 3.1.1 topicmsg – dernier message reçu
- 3.1.2 ts_xxx – historique de messages
- 3.2 Approche logicielle de push-to-db
- 3.2.1 Diagramme des classes (partie 1)
- 3.2.2 Fichier de configuration de push-to-db
- 3.2.3 Diagramme des classes (partie 2)
- 3.1 Approche base de données de push-to-db
- 4. Configuration de push-to-db
- 4.1 Les répertoires de stockage de push-to-db
- 4.2 Création des tables de push-to-db
- 4.3 push-to-db.ini
- 4.4 Le script d’installation de push-to-db
- 5. Logger Python
- 5.1 Logger et fichier de configuration
- 5.2 Configuration du logger
- 5.3 Utilisation du logger
- 6. Exécution du script push-to-db
- 7. Service systemd pour push-to-db
- 7.1 Quand démarrer le service ?
- 7.2 Créer le fichier Unit
- 7.3 Configurer, démarrer, contrôler
- 7.4 Documentation sur systemd
- 8. Améliorations
- 1. Introduction
- Développement web en Python
- 1. Présentation de Flask
- 1.1 Pourquoi Flask ?
- 1.2 La flexibilité de Flask
- 1.3 Les nombreuses extensions Flask
- 1.4 Flask plus en détail
- 1.4.1 Werkzeug
- 1.4.2 WSGI
- 1.4.3 Application Flask
- 1.4.4 Jinja
- 1.4.5 Base de données
- 1.5 Documentations
- 2. Anatomie d’un projet Flask
- 3. Installation et prise en main
- 3.1 L’utilitaire flask
- 3.2 Prise en main avancée
- 3.3 Déboguer avec Flask
- 3.4 Application Flask en production
- 4. Les fondamentaux de Flask
- 4.1 Routes et paramètres
- 4.2 Retourner une erreur
- 4.3 Utilisation de template
- 4.4 Création d’URL
- 4.5 Redirection
- 4.6 Requêtes GET et POST
- 4.7 Contexte applicatif
- 4.7.1 L’objet g
- 4.7.2 Connexion à la base de données
- 4.8 Les cookies
- 4.9 Les sessions
- 4.10 Journalisation
- 4.11 Mini-projet Fruits
- 4.11.1 Sources du mini-projet
- 4.11.2 La connexion SQLite 3
- 4.11.3 Organisation du mini-projet
- 4.11.4 Détails du mini-projet
- 4.12 Ressources et documentations
- 5. Templates Jinja
- 5.1 Exécution d’un template
- 5.2 Tester un template
- 5.2.1 Créer une application Flask
- 5.2.2 Test avec serveur web Flask et string Python
- 5.2.3 Test en console et string Python
- 5.2.4 Utiliser le projet Jinja Live Parser
- 5.3 Évaluation des balises
- 5.3.1 {{ … }} : évaluation d’expression
- 5.3.2 {% … %} : instructions de contrôle de flux
- 5.3.3 {# … #} : insertion de commentaire
- 5.3.4 # … : ligne d’instruction
- 5.4 Variables et expressions
- 5.4.1 Variables spéciales
- 5.4.2 Séquence d’échappement
- 5.4.3 Assignation
- 5.5 Branchement
- 5.6 Itération
- 5.7 Les macros
- 5.8 Contrôle des espaces
- 5.9 Filtres Jinja
- 5.10 Inclusion de template
- 5.11 Importer des macros
- 5.12 Héritage de template
- 5.12.1 Les éléments de l’héritage
- 5.12.2 Heritage-app : l’héritage Jinja par la pratique
- 5.12.3 Template de base et blocs
- 5.13 Template enfant
- 5.13.1 Superbloc
- 5.13.2 Ressources
- 5.14 Message Flash
- 1. Présentation de Flask
- Le tableau de bord
- 1. Présentation
- 1.1 Préambule
- 1.2 Dépôt du projet Dashboard
- 1.3 Éléments principaux
- 1.4 Fonctionnalités du projet Dashboard
- 2. Structure HTML
- 2.1 Disposition de la page
- 2.2 Les blocs d’informations
- 2.3 La liste
- 3. Template Jinja
- 3.1 Le template de base
- 3.2 Utilisation du template de base
- 4. Configuration
- 4.1 Base de données dashboard.db
- 4.1.1 Schéma de la base de données
- 4.1.2 Répertoire de stockage
- 4.1.3 Création des tables de Dashboard
- 4.1.4 Copie de la base de données
- 4.2 Fichier de configuration de Dashboard
- 4.1 Base de données dashboard.db
- 5. Détails de l’application Flask
- 5.1 Répertoires et fichiers
- 5.2 Les routes de Dashboard
- 5.3 Accès aux données
- 5.3.1 La fonction get_db( db_key ) multibases de données
- 5.3.2 Les classes DBHelper de Dashboard
- 5.3.3 Exemple : liste des topics disponibles pour Dashboard
- 5.3.4 Exemple : extraction de l’historique dans Dashboard
- 5.3.5 Affichage d’un tableau de bord
- 5.4 Les filtres Jinja personnalisés
- 5.5 Affichage du tableau de bord
- 5.6 Les macros Jinja
- 5.6.1 La macro make_block
- 5.6.2 La macro block_icon
- 5.6.3 La macro block_big_text
- 5.6.4 La macro select_color (édition d’un bloc)
- 6. Bloc SWITCH (marche/arrêt)
- 6.1 Développements complémentaires
- 6.1.1 MQTT sources
- 6.1.2 Bloc et paramètres additionnels
- 6.2 Ajout du bloc SWITCH
- 6.2.1 Block_config du switch
- 6.2.2 Ajouter le nouveau type de bloc
- 6.3 Le switch et MQTT
- 6.3.1 Client MQTT JavaScript
- 6.3.2 MQTT en JavaScript et WebSocket
- 6.3.3 Activer le support WebSocket sur Mosquitto
- 6.3.4 Tester le client MQTT JavaScript
- 6.3.5 Alternative à MQTT en JavaScript
- 6.3.6 La route MqttProxyPublish
- 6.3.7 Événement on_switch_change
- 6.4 Tester le bloc SWITCH
- 6.1 Développements complémentaires
- 7. Améliorations
- 1. Présentation
- InfluxDB
- 1. Introduction
- 2. InfluxDB
- 2.1 Présentation
- 2.2 Concepts InfluxDB
- 3. Installation
- 4. Premiers pas avec InfluxDB
- 4.1 Quelques commandes utiles
- 4.2 Autocritique
- 5. Commandes de l’interpréteur
- 5.1 Commandes InfluxDB
- 5.2 Paramètres de l’utilitaire influx
- 6. La commande SELECT
- 6.1 Multiple sources
- 6.2 Nom de table qualifié
- 6.3 La clause WHERE
- 6.4 Expressions régulières
- 6.5 Casting de type
- 7. Importer des données
- 8. Règles de rétention
- 8.1 Accès aux données
- 8.2 Requêtes continues
- 8.3 Rétention et requêtes continues par la pratique
- 8.4 Bonnes pratiques de conception
- 8.5 Documentation pour InfluxDB
- 9. InfluxDB API
- 9.1 Créer un utilisateur
- 9.2 Activer l’authentification sur InfluxDB
- 9.3 Tester l’authentification
- 9.4 Tester InfluxDB API
- 10. Capture des données MQTT
- 11. Greffon Telegraf MQTT pour InfluxDB
- 11.1 Installation
- 11.1.1 Mise à jour des dépôts
- 11.1.2 Installation de telegraf
- 11.2 Configuration
- 11.2.1 Configuration du service Telegraf
- 11.2.2 Configuration telegraf avancée
- 11.1 Installation
- 12. InfluxDB et Python
- 12.1 Installation
- 12.2 Opération de lecture
- 12.3 Opération d’écriture
- 13. Duplicata de champs
- 14. Ensuite
- Grafana
- 1. Introduction
- 2. Les concepts fondamentaux
- 2.1 Les sources de données
- 2.2 Éditeur de requêtes
- 2.3 Organisation
- 2.4 Utilisateur
- 2.5 Panneau
- 2.6 Ligne
- 2.7 Tableau de bord
- 3. Installer Grafana
- 3.1 Installation du dépot
- 3.2 Première connexion et mot de passe
- 4. Les données InfluxDB
- 4.1 Collecter rapidement des données
- 4.2 Améliorer la fiabilité des mesures
- 4.3 Contrôler la capture de données
- 5. Afficher les données InfluxDB
- 5.1 Source de données InfluxDB
- 5.2 Créer un tableau de bord
- 5.2.1 Ajouter un panneau
- 5.2.2 Sélectionner la série pour la cabane
- 5.3 Ajouter une seconde série dans le graphique
- 5.4 Exploration des données
- 5.5 Autre visualisation
- 5.6 Quelques astuces Grafana
- 5.6.1 Redimensionner un panneau
- 5.6.2 Glisser/déposer un panneau
- 5.6.3 Transformer en ligne
- 5.6.4 Enregistrer le tableau de bord
- 6. Limites de Grafana
- 6.1 Liens Internet sur un panneau
- 6.2 Lien vers MqttProxyPublish
- 6.3 Liens Grafana et méthode GET
- Conclusion
- 1. Introduction
- 2. Remerciements
- 3. Retour sur client MQTT JavaScript
- Annexes
- 1. Installat
Reviews
There are no reviews yet.