# Docker et Home assistant Le docker hub : https://hub.docker.com/ ## Installation de docker Téléchargez la version correspondante à votre OS et installer : + https://www.docker.com/get-started Pour windows, il vous demandera également le support de WSL2 qui est un environnement unix pour Windows. Il faut l'installer lorsqu'il vous le propose. Si ce n'est pas le cas voir : + https://docs.microsoft.com/fr-fr/windows/wsl/install-win10#manual-installation-steps + https://korben.info/installer-wsl2-windows-linux.html Redémarrer ## Pour tester 1. ouvrez powershell 2. Lancez ``` docker run -d -p 80:80 docker/getting-started ``` 3. Connectez vous sur http://localhost/ ## Liste des params utiles : + `-p psource:pdest` : monte le port hôte source sur le port destination + `-d` lance en arriere plan et en mode serveur + `--name nom` : donne un nom a la machine + `it` : lance en interactif + `--rm` : efface le container après utilisation + `-v rsource:rdest` : monter un repertoire source sur la destination ## Tester avec nginx ``` docker run -d -p 8090:80 nginx ``` ## Tester linux alpine ``` docker run -it --rm alpine ``` Sous alpine vous pouvez installer htop par exemple : ``` apk update apk add htop ``` ## Home Assistant ### Sans partage (pour tester mais inutile) Vous pouvez lancer home assistant comme ceci : ``` docker run --rm -it -p 8123:8123 homeassistant/home-assistant:stable ``` Cependant cela ne vous permettra pas de sauvegarder votre configuration sur la machine hôte puisqu'aucun répertoire n'est partagé. ### Avec configuration sur l'hôte Pour activer le partage vous pouvez procéder comme suit : 1. Créez un répertoire dans un dossier que vous connaissez. Par exemple C:\Users\NomUtilisateur\Desktop\HomeAssistant 2. Mettez vous *dans le répertoire que vous avez créez* (/!\ important) et lancez un terminal : ```java docker run --rm -it -p 8123:8123 -v ${PWD}:/config homeassistant/home-assistant:stable ``` `${PWD}` est une variable windows qui pointe sur le repertoire courant ## Configuration de MQTT ### Ajout d'un serveur distant Pour pouvoir ajouter un serveur mqtt dans home assitant, 1. Ouvrez la page intégration dans Configuration : ![](https://i.imgur.com/CUOoIl5.png) 2. Cliquez sur ajouter une intégration ![](https://i.imgur.com/WK9G6vE.png) 3. Selectionnez MQTT et configurez le serveur ### Configuration du serveur Dans Visual Studio Code ouvrez le fichier configuration.yaml Nous allons ajouter un MQTT sensor : https://www.home-assistant.io/integrations/sensor.mqtt/ 1. Dans configuration.yaml ajoutez les lignes suivantes (attention les tabulation et les espaces sont très importants en yaml) : ```yaml sensor: - platform: mqtt name: "RSSI" state_topic: "INFO/RSSI" unit_of_measurement: "dBm" ``` 2. Activer le mode avancé dans les params de l'utilisateur ![](https://i.imgur.com/AsczTXZ.png) 3. Dans contrôle du serveur, vérifiez la config 4. Dans contrôle du serveur, redémarez le serveur Tester avec http://mqtt-explorer.com/ Pour ajouter un deuxieme capteur, mettez le à la suite de l'autre: ```yaml sensor: - platform: mqtt name: "RSSI" state_topic: "INFO/RSSI" unit_of_measurement: "dBm" - platform: mqtt name: "temp_cuisine" state_topic: "cuisine/temperature" unit_of_measurement: "°C" ``` ## Exploitation des données via REST Nous allons utiliser l'historique d'Home assistant pour construire une petite analyse des données en python. L'historique des valeurs de capteur est activé par défaut dans home assistant. ### Récupération des valeurs dans l'historique dans insomnia 1. Dans utilisateur créez vous un jeton et notez le. ![](https://i.imgur.com/l9a4cNM.png) 2. Dans insomnia créez une requête vers l'historique pointant en ajoutant le Bearer Token. 3. Créez une requête vers l'historique La requête historique est une requête de type GET sur l'url http://148.60.82.187:8123/api/history/period?minimal_response&filter_entity_id=sensor.rssi avec une authentification de type bearer token (le jeton que vous avez créez.) ![](https://i.imgur.com/VMUEll4.png) Il faut adapter la requête pour indiquer l'IP de votre home assistant et l'entity_id de votre capteur. Vous devriez avoir une liste de valeur du capteur. Pour en ajouter utiliser [mqtt explorer](http://mqtt-explorer.com/) pour poster des données sur le topic de votre capteur. ### Configuration de Jupyter Nous allons utiliser Jupyter notebook. Il existe plusieurs [images docker disponible](https://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html), nous choisirons l'image jupyter/scipy-notebook qui contient les librairies d'analyse. 1. Créez un repertoire notebook sur votre machine 2. Allez dans le repertoire notebook et ouvrez powershell 3. Lancez : ``` docker run --rm -it -v ${PWD}:/home/jovyan/work -p 8888:8888 jupyter/scipy-notebook ``` A l'intérieur de l'image, /home/jovyan/work est le répertoire qui contient les notebooks. En lançant l'image ainsi, vous conservez vos travaux dans le repertoire notebook que vous avez créé. 4. Une fois le téléchargement de l'image terminé (long), une invite vous proposera de vous connecter : ![](https://i.imgur.com/4g8COWE.png) Rendez vous sur cette URL en copiant bien le token, celui ci est une authentification qui évité a un tiers de se connecter sur votre machine. ### Test de Jupyter 1. Dans le repertoire work, créez un nouveau notebook python3 ![](https://i.imgur.com/WWQjsWv.png) 2. Dans la première cellule, saisissez le code donné en exemple (ou 2+2) et appuyer sur CTRL+espace pour executer ![](https://i.imgur.com/hNz30xw.png) ### Exploitation des données avec Jupyter 1. Génerer le code de la requête vers l'historique avec insomnia en selectionnant la requête puis en tapant CTRL+SHIFT+G. Vous choissirez python puis requests. **Faites attention à ce que l'IP soit l'IP de votre machine et non localhost** ![](https://i.imgur.com/mV529bq.png) 2. Créez une nouvelle cellule (+) dans le notebook de jupyter ![](https://i.imgur.com/ESum09k.png) 3. Dans cette nouvelle cellule copiez le code et executer le. Vous devriez pouvoir récupérer le résultat. ![](https://i.imgur.com/Pezdco3.png) 4. Transformons le résultat en quelque chose d'exploitable en python. Vous pouvez saisir le code suivant dans une nouvelle cellule et executez : ```python import json #Transforme en json data = json.loads(response.text) #Récupére seulement les données du premier capteur data = data[0] #Récupére seulement les valeurs numériques valeurs = [] for d in data : v = d.get("state") #ne garde que les valeurs numériques if v.isnumeric() : valeurs.append(int(v)) print(valeurs) ``` 5. Calculons des statistiques simples dans une nouvelle cellule : ```python import statistics as s print("moyenne : ", s.mean(valeurs)) print("variance : ", s.pvariance(valeurs)) print("ecart type : ", s.pstdev(valeurs)) ``` # Liens REST https://insomnia.rest/ https://www.youtube.com/channel/UCbCJtFizTFNf4waPWPFAqcA https://developers.home-assistant.io/docs/api/rest/ ## Home assistant utilisateur admin mdp *... http://148.60.19.201:8123