Olá pessoal!
Vim compartilhar com vocês a solução que encontrei para ativar detecção de movimento na minha camera de segurança da marca Intelbras (VIP 1430 B G2), sem utillizar recursos da máquina que está rodando o Home Assistant, seja via MotionEye, ou qualquer outro software, espero que acabe ajudando alguém por aqui, ou traga outras ideias
Então, a camera pode enviar alertas de detecção de movimento via SMTP (email), e a url do servidor, precisamos definir nela, então, criei um servidor de SMPT, que roda dentro de um container docker (sobe junto com o compose do esphome e do home assistant), esse servidor então recebe os “emails”, e chama uma URL de webhook do home assistant que pode triggar quaisquer automações que desejar
Segue o código do servidor de SMTP que está rodando no docker:
const { SMTPServer } = require("smtp-server");
const parse = require("parse-email");
const axios = require("axios");
const server = new SMTPServer({
secure: false,
allowInsecureAuth: true,
onConnect(session, callback) {
callback(null, true);
},
onMailFrom(address, session, callback) {
callback(null, true);
},
onRcptTo(address, session, callback) {
callback(null, true);
},
onAuth(a, s, callback) {
callback(null, { user: {} });
},
onData(stream, session, callback) {
const chunks = [];
stream.on("data", function (chunk) {
chunks.push(chunk);
});
stream.on("end", async () => {
console.log("MOVEMENT DETECTED!!!");
const emailString = Buffer.concat(chunks).toString("utf-8");
const email = await parse(emailString);
const base = email.attachments[0]?.content.toString("base64");
const fs = require("fs");
if (base) {
fs.writeFileSync(`/media/movement.jpg`, base, "base64");
await axios.post("http://localhost:8123/api/webhook/motion-detected", {
cam: email.subject,
});
}
callback(null, {});
});
},
});
server.listen(8124, undefined, () => console.log("Listening..."));
A pasta /media é um volume em comum para os 2 containers, então consigo enviar essa foto via push notification usando o home assistant
Ele está meio bagunçado e confuso pois fiz de uma maneira rápida apenas como PoC para validar o conceito, ainda tenho muito para melhorar, e fico com uma duvida, se alguem puder ajudar
Existe maneira de salvar a foto pelo home assistant se eu mandar um base64 na payload do webhook? Gostaria disso pois provavelmente vou ter um modo sentinela, e nao precisaria salvar a foto se estiver desativado.