Pilotage d'une alarme Homiris / EPS via la télécommande

Salut à tous,

à l’instar de Activer/Désactiver Alarme Homiris (EPS) par "domotisation" de la télécommande je vous propose une solution similaire, un poil moins chère.

Ils se sont améliorés chez Homiris puisqu’ils proposent désormais l’arrêt de l’alarme via l’appli dédiée mais toujours pas d’API. Visiblement cela n’arrivera jamais.

Je propose donc un montage à base d’ESP et de servo moteurs.

Si vous souhaitez des compléments, n’hésitez pas à laisser un commentaire.
++

Matériel (< 25 euros et certainement beaucoup moins encore si aliexpress)

  • 2 servo moteurs sg90 : < 10 euros
  • 1 ESP32 : < 10 euros
  • 1 cable micro USB : ~2 euros
  • Quelques mètres de PLA

Sécurité

Je n’ai inclu aucun mécanisme de sécurité et vu que l’on parle de désactiver une alarme, soyez prudents avec cela !
De mon coté c’est un POC. Dans quelques temps, si la solution est OK, je mettrai les paillettes qui vont autour (SSL, Authentification, limite IP, etc).

La boiboite

Voila le stl de la boite, je n’ai pas fait de couvercle pour le moment. Le contour et l’emplacement de la télécommande viennent du stl de @DDEF
Fichier STL. Bon visiblement je ne peux pas uploader ce type de fichier. J’édite le post dès que j’aurai publier le stl sur thingiverse ou autre.

Ce n’est pas parfait, j’ai du mettre un point de colle chaude sur les servos pour qu’ils tiennent correctement. La v2 corrigera surement cela.
Il faut faire en sorte que la télécommande soit « sortable » de la boîte pour les maintenances effectuées par Homiris.

Le sketch arduino

Je suis passé par l’IDE arduino pour le pilotage des servos.
Et c’est chatgpt qui a fait le programme.

[Le sketch]. N’oubliez pas d’inclure les lib WifiManager, ESP32Servo, et ESPAsyncWebServer.

#include <WiFiManager.h>
#include <ESP32Servo.h>
#include <ESPAsyncWebServer.h>

const int servo1Pin = 5;
const int servo2Pin = 2;

Servo servo1;
Servo servo2;

const int startPosition = 10;
const int endPosition = 50;
const int delayTime = 400;

AsyncWebServer server(80);

void operateServo(Servo &servo) {
  servo.write(endPosition);
  delay(delayTime);
  servo.write(startPosition);
}

void setup() {
  Serial.begin(115200);

  // Initialiser la connexion Wi-Fi avec WiFiManager
  WiFiManager wifiManager;
  //wifiManager.resetSettings();

  // Ajouter les paramètres pour la connexion Wi-Fi
  WiFiManagerParameter customPassword("password", "Mot de passe WiFi", "password", 40);
  wifiManager.addParameter(&customPassword);

  // Ajouter un bouton pour réinitialiser les paramètres WiFi
  WiFiManagerParameter resetButton("resetButton", "Réinitialiser WiFi", "reset", 6);
  wifiManager.addParameter(&resetButton);

  // Essayer de se connecter avec les paramètres sauvegardés
  if (!wifiManager.autoConnect("IOT-servo")) {
    Serial.println("Échec de la connexion et portail de configuration non accessible");
    delay(3000);
    // Réinitialiser et réessayer
    ESP.restart();
  }

  Serial.println("Connecté au réseau WiFi!");

  // Attacher le servo1 au pin correspondant
  servo1.attach(servo1Pin);

  // Attacher le servo2 au pin correspondant et le désactiver
  servo2.attach(servo2Pin);

  // Configurer les routes du serveur web
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
    String html = "<html><body>";
    html += "<h1>Bienvenue sur le serveur ESP32</h1>";
    html += "<button onclick=\"startAlarm()\">Démarrer l'alarme</button>";
    html += "<button onclick=\"stopAlarm()\">Arrêter l'alarme</button>";
    html += "<button onclick=\"resetWiFi()\">Réinitialiser WiFi</button>";
    html += "<script>";
    html += "function startAlarm() { fetch('/start').then(response => response.text()).then(data => alert(data)); }";
    html += "function stopAlarm() { fetch('/stop').then(response => response.text()).then(data => alert(data)); }";
    html += "function resetWiFi() { fetch('/reset').then(response => response.text()).then(data => alert(data)); }";
    html += "</script></body></html>";
    request->send(200, "text/html", html);
  });

  server.on("/start", HTTP_GET, [](AsyncWebServerRequest *request) {
    operateServo(servo1);
    request->send(200, "text/plain", "Alarme démarrée");
  });

  server.on("/stop", HTTP_GET, [](AsyncWebServerRequest *request) {
    operateServo(servo2);
    request->send(200, "text/plain", "Alarme arrêtée");
  });

// Ajouter la route pour réinitialiser les paramètres WiFi et passer en mode AP
server.on("/reset", HTTP_GET, [&wifiManager](AsyncWebServerRequest *request) {
  WiFi.disconnect(true);  // Disconnect and clear WiFi credentials
  wifiManager.resetSettings();
  wifiManager.startConfigPortal("ESP32-Setup");  // Start configuration portal
  request->send(200, "text/plain", "Paramètres WiFi réinitialisés. Connectez-vous au portail de configuration WiFi.");
});

  // Démarrer le serveur web
  server.begin();
}

void loop() {
  // Rien à faire ici
}

Accès et utilisation

Pour ne pas avoir besoin de compiler le programme chez vous, j’ai intégré un mode AP wifi. Au premier lancement, vous vous connectez à cet AP et vous saisissez vos SSID + clé WPA et au reboot suivant l’ESP demandera une IP à votre dhcp.

SSIID : IOT-servo
Clé : password
URL : http://192.168.4.1

Je vous conseille de fixer l’IP avec un bail fixe sur votre DHCP.

En browsant l’IP avec votre navigateur, vous pourrez appuyer sur les boutons start et stop de l’alarme.

Coté Jeedom, j’ai utilisé le plugin script de la manière suivante

1 « J'aime »