Home Assistant

ha

Home Assistant

Raspberry Pi

Modèle : Raspberri Pi 3 Model B+ 64bits

Graver avec BelenaEtcher HA sur une carte micro SD de plus de 16Go : image

Ajouter l’addon ESPHome, File Editor et MQTT Mosquitto.

NodeMCU avec un DHT22

Pour flasher la première fois le NodeMCU v3, il faut rester appuyer sur le bouton FLASH puis appuyer sur RESET une fois pour entrer en mode bootloader.

Utiliser PyFlasher pour uploader le firmware de ESPHome.

Utiliser Visual Studio Code avec PlatformIO.

Code :

/*
  @name : nodemcu_dht_mqtt
  @date : 18/03/2020
  @author : Samuel Goutenoir
  @link : https://blackdrop.fr/
  @description: NodeMCU v2 + DHT22 + MQTT + HomeAssistant + DeepSleep
*/
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>

#define wifi_ssid "nom_reseau_wifi"
#define wifi_password "mot_de_passe_wifi"

#define mqtt_server "192.168.1.000" // Home Assistant url
#define mqtt_user "MQTT"  //user HomeAssistant
#define mqtt_password "mqtt"

#define temperature_topic "serre/temperature"  //Topic température
#define humidity_topic "serre/humidite"        //Topic humidité

bool debug = true;      //Affiche sur la console si True

#define DHTPIN D2       // Pin sur lequel est branché le DHT

#define DHTTYPE DHT22   // DHT 22  (AM2302)

DHT dht(DHTPIN, DHTTYPE);
WiFiClient espClient;
PubSubClient client(espClient);

void setup_wifi() {
  delay(10);
  Serial.println();
  Serial.println(millis());
  Serial.print("Connexion a ");
  Serial.println(wifi_ssid);
  WiFi.begin(wifi_ssid, wifi_password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("Connexion WiFi etablie ");
  Serial.print("=> Addresse IP : ");
  Serial.println(WiFi.localIP());
}

void reconnect() {
  //Boucle jusqu'à obtenur une reconnexion
  while (!client.connected()) {
    Serial.print("Connexion au serveur MQTT...");
    if (client.connect("NodeMCU", mqtt_user, mqtt_password)) {
      Serial.println("OK");
    } else {
      Serial.print("KO, erreur : ");
      Serial.print(client.state());
      Serial.println(" On attend 5 secondes avant de recommencer");
      delay(5000);
    }
  }
}

void setup() {
  long now = millis();
  Serial.begin(115200);  
  setup_wifi();           
  client.setServer(mqtt_server, 1883);    /
  dht.begin();
  if (!client.connected()) {
    reconnect();
  }
  //Lecture de l'humidité ambiante
  float h = dht.readHumidity();
  // Lecture de la température en Celcius
  float t = dht.readTemperature();
  //Inutile d'aller plus loin si le capteur ne renvoi rien
  if ( isnan(t) || isnan(h)) {
    Serial.println("Echec de lecture ! Verifiez votre capteur DHT");
    return;
  }
  if ( debug ) {
    Serial.print("Temperature : ");
    Serial.print(t);
    Serial.print(" | Humidite : ");
    Serial.println(h);
  }
  client.publish(temperature_topic, String(t).c_str(), true);   //Publie la température sur le topic temperature_topic
  client.publish(humidity_topic, String(h).c_str(), true);      //Et l'humidité
  delay(1000); // Delay important sinon la pub mqtt ne se fait pas avant que l'ESP parte en DeepSleep
  Serial.println(millis()-now);
  ESP.deepSleep(10*60*1e6);
}

void loop() {
}

Côté HomeAssistant dans configuration.yaml :

sensor:
  - platform: mqtt
    state_topic: "serre/temperature"
    name: "Température de la serre"
    qos: 0
    unit_of_measurement: "°C"
    unique_id: "serre_temp"
    #value_template: ''

  - platform: mqtt
    state_topic: "serre/humidite"
    name: "Humidité de la serre"
    qos: 0
    icon: humidity
    unit_of_measurement: "%"
    unique_id: "serre_hum"
    #value_template: ''

J’utilise l’addon MQTT Mosquitto.

HA-graphs

Calculateur d’autonomie sur batterie

Vous pouvez utiliser mon tableur pour le calcul d’autonomie de batterie :

calcul autonomie