Inleiding
In dit artikel laat ik zien hoe je Eufy-camera’s via Homey koppelt aan Home Assistant door gebruik te maken van MQTT. Door deze aanpak ontvangen we bewegings- of persoonsdetectie–events van Eufy in Homey, zetten we snapshots om naar base64 en publiceren we die via MQTT. Vervolgens pikt Home Assistant (met Node-RED) die berichten op, slaat de afbeelding lokaal op, voert een AI-analyse uit en toont het resultaat in Home Assistant. Na het doorlopen van dit artikel kun je jouw Eufy-camera’s in één workflow gebruiken in zowel Homey als Home Assistant.
Waarom Eufy koppelen via MQTT?
- Gecentraliseerde berichtstroom: Door bewegings- en persoonsdetectie van Eufy in Homey op te vangen en te publiceren via MQTT, kun je dezelfde data moeiteloos laten landen in Home Assistant. Dat scheelt dubbel beheer en synchronisatieproblemen.
- Base64-afbeeldingen delen: Homey kan geen RTSP of direct bestandssysteem delen met Home Assistant. Met MQTT stuur je snapshots als base64-string, zodat Home Assistant zelf de JPEG kan reconstrueren en opslaan.
- AI-analyse en automatiseringen: In Home Assistant kun je met Node-RED en Google AI (of een andere AI-service) automatisch een korte melding genereren op basis van de camerafoto én de AI-omschrijving direct naar je dashboard of notificaties sturen.
- Flexibiliteit en schaalbaarheid: Met MQTT kun je eenvoudig meerdere camera’s of zelfs andere sensoren toevoegen en uitbreiden zonder aparte koppelingen voor elk platform.
Benodigdheden en voorbereidingen
- Eufy HomeBase & camera’s
- Zorg dat je Eufy-camera’s al zijn gekoppeld aan een Eufy HomeBase en werken in de officiële Eufy Security-app. Een tutorial daarvoor vind je hier: Tutorial Eufy
- Homey-hub
- Homey Pro.
- De community-app Micro Web Server geïnstalleerd (app: Homey Microwebserver) in Homey.
- Home Assistant + Node-RED
- Een draaiende Home Assistant-installatie.
- Add-on Node-RED geïnstalleerd en ingeschakeld.
- MQTT-broker (bijvoorbeeld Mosquitto) die zowel Homey als Home Assistant kan bereiken.
- Google Generative AI (optioneel)
- Als je in Home Assistant (via Node-RED) automatisch korte beschrijvingen wilt laten maken, heb je toegang nodig tot Google Generative AI (of een gelijkaardige AI-service).
Stap 1: Eufy-evenementen in Homey opvangen en snapshot publiceren
1.1 Snapshot maken en omzetten naar base64

Om bij persoonsdetectie een snapshot te kunnen versturen, gebruik je de volgende flowcards in Homey:
- Flowcard: “Als Eufy-camera een persoon detecteert”
- Triggert wanneer de camera een “person”-event, of beweging registreert.
- Flowcard: “Sla camera-event op als camera1.jpg” (Micro Web Server)
- Configureer met de Micro Web Server-app een virtuele HTTP-endpoint die de snapshot opslaat als
/camera1.jpg
in Homey. - Deze stap zorgt dat er altijd een statisch bestand klaarstaat zodra een bewegings/Persoons-event plaatsvindt.
- Configureer met de Micro Web Server-app een virtuele HTTP-endpoint die de snapshot opslaat als
- Flowcard: “Ontvang URL voor camera1.jpg” (Micro Web Server)
- Dit geeft je een URL (bijvoorbeeld
http://<homey-ip>/camera1.jpg
) waarmee je de JPEG kunt ophalen.
- Dit geeft je een URL (bijvoorbeeld
- Flowcard: “Voer HomeyScript uit” met argumenten
- Argument (
flow_args
) is een JSON-array met twee velden:{ "url": "{{url}}", "person": "{{Persoon}}" }
- Het bijbehorende HomeyScript (JavaScript) doet het volgende:
- Argument (
const flow_args = JSON.parse(args[0]);
const url = flow_args.url;
const person = flow_args.person;
try {
// Fetch de afbeelding van de opgegeven URL
const response = await fetch(url);
if (!response.ok) throw new Error("Failed to fetch the image");
// Converteer de afbeelding naar een buffer
const buffer = await response.arrayBuffer();
const base64 = Buffer.from(new Uint8Array(buffer)).toString('base64');
// Geef de base64-gecodeerde string terug
return JSON.stringify({"person":person, "camera_name": "camera1","picture":base64});
} catch (error) {
return;
}
- In dit script vervang je
"camera1"
door de naam van je specifieke camera, zodat Home Assistant later weet welke camera het betreft. - Flowcard: “Verzend resultaat op topic
homey/snapshots/camera
” (MQTT)- Zodra het script klaar is en de base64-string retour geeft, stuur je deze JSON (bijvoorbeeld
{"person":"John","camera_name":"camera_huis","picture":"<base64string>"}
) via MQTT naar het topichomey/snapshots/camera
. - Zorg dat je Homey MQTT-configuratie correct is ingesteld en dat deze broker bereikbaar is voor zowel Homey als Home Assistant.
- Zodra het script klaar is en de base64-string retour geeft, stuur je deze JSON (bijvoorbeeld
Let op: Als je meerdere camera’s hebt, maak je één flow per camera. In het HomeyScript pas je dan de waarde van
"camera_name"
aan (bijvoorbeeld"camera1"
,"camera2"
, etc.).
Stap 2: Home Assistant ontvangt MQTT-bericht via Node-RED

2.1 MQTT-in node in Node-RED
- Open Node-RED in Home Assistant.
- Voeg een “mqtt in” node toe en configureer deze op het topic:
homey/snapshots/camera
- Instelling QoS = 2, Data type =
json
. - Hiermee ontvang je automatisch het JSON-object met de velden
person
,camera_name
enpicture
(base64-string).
- Instelling QoS = 2, Data type =
2.2 Payload verwerken met een Function node
Na de MQTT-in node verbind je een Function node waarin je de base64-string decodeert en bestandsmetadata genereert:
if (typeof msg.payload === "string") {
msg.payload = JSON.parse(msg.payload);
}
msg.picture = msg.payload.picture;
msg.person = msg.payload.person === "null" || msg.payload.person === "Unknown" ? 'onbekend' : msg.payload.person;
msg.camera_name = msg.payload.camera_name;
msg.filename = "/homeassistant/www/img/" + msg.camera_name + ".jpg";
msg.picturepath = "./www/img/" + msg.camera_name + ".jpg";
msg.topic = "homey/ai/" + msg.camera_name;
// Maak nieuwe payload voor de base64-node
msg.payload = msg.picture;
return msg;
msg.filename
: het absolute pad waar Home Assistant het JPEG-bestand zal bewaren (/config/www/img/...
).msg.picturepath
: het pad dat Google AI (of een andere flow) kan gebruiken om het bestand te lezen.msg.topic
: een extra MQTT-topic voor AI-resultaten (homey/ai/<camera_name>
) die je weer terug kunt sturen naar Homey.
2.3 Base64 omzetten en bestand opslaan
Sluit hierna een “base64” node aan, gevolgd door een “file” node:
- Base64 node
- Zet
msg.payload
(de base64-string) automatisch om naar een binaire payload.
- Zet
- File node (Save Image)
- Configureer de File node met “Filename” =
msg.filename
, “Create Dir” =true
, “Overwrite” =true
. - Dit schrijft de JPEG op in de map
/config/www/img/
, zodat Home Assistant er later direct via URL toegang toe heeft (http://<home_assistant_ip>:8123/local/img/<camera_name>.jpg
).
- Configureer de File node met “Filename” =
2.4 AI-analyse en beschrijving genereren
Na de File node voeg je een “call-service” node toe om Google Generative AI (of een andere image-to-text service) aan te roepen. Deze node gebruikt de afbeelding en de naam van de persoon om een korte beschrijving te genereren die geschikt is voor telefoonmeldingen:
{
"prompt": "Beschrijf in één korte zin wat er gebeurt op deze camerafoto, met de focus op de persoon in beeld. Als " & person & " niet null of unknown is, identificeer die persoon altijd bij naam. Noem geen gebouwen of apparatuur. Houd de beschrijving kort genoeg voor een telefoonmelding. antwoord altijd in het nederlands en altijd met de naam van de persoon, tenzij deze null of onbekend is!", "image_filename": "./www/img/" & camera_name & ".jpg"
}
- Vervang
{{person}}
en{{camera_name}}
met de variabelen uit de payload. - De service
google_generative_ai_conversation.generate_content
retourneertmsg.payload.text
met de ultieme beschrijving.
2.5 Output naar juiste Home Assistant-entiteit
Omdat je meerdere camera’s hebt (bijvoorbeeld camera1
, camera2
en deurbel
), gebruik je een “Switch” node die filtert op msg.camera_name
en de AI-tekst invoert in verschillende input_text
-entiteiten:
- camera1 →
input_text.camera1_omschrijving
- camera2 →
input_text.camera2_omschrijving
- deurbel →
input_text.deurbel_omschrijving
Deze entiteiten zijn gemaakt in Home Assistant door een ‘Helper’ aan te maken met input_text.
Elke branch eindigt in een “call-service” node (domain = input_text
, service = set_value
, data = {"value":"{{payload}}"}
) die de gegenereerde tekst direct in de Home Assistant front-end zichtbaar maakt.
Tip: Je kunt vervolgens in Lovelace-kaarten of automations gebruikmaken van de inhoud van deze input_text-entiteiten om notificaties te sturen, een logboek bij te houden of een widget in je dashboard te vullen.
Stap 3: (Optioneel) Camera-uploads loggen in MySQL
Als je ook de originele JPEG’s of metadata in een database wilt bewaren, voeg je in Node-RED vlak na de oorspronkelijke MQTT-in node nog een extra Function node en MySQL node toe:
- Function node (voor database-insert)
// in msg.topic komt de query met ? placeholders
msg.camera = msg.payload;
msg.topic = `
INSERT INTO camera_uploads
(person, camera_name, image_data, mime_type)
VALUES (?, ?, ?, ?)
`;
// in msg.payload komt een array van de vier waarden in de juiste volgorde
msg.payload = [
msg.payload.person,
msg.payload.camera_name,
msg.payload.picture,
'image/jpg'
];
return msg;
- MySQL node (“database”)
- Configureer connectiegegevens (host, port, database, gebruiker/wachtwoord).
- Verbind met de Function node en laat de query uitvoeren.
Op deze manier kun je later via een dashboard of een externe applicatie eenvoudig alle snapshots en bijbehorende persoonsnamen uit de MySQL-tabel camera_uploads
halen.
Tips en aandachtspunten
- Paden en permissies:
- In Home Assistant staat de lokale webmap meestal op
/config/www/
. Zorg dat Node-RED de juiste rechten heeft om in die map te schrijven. - Gebruik in je URL
http://<home_assistant_ip>:8123/local/img/<camera_name>.jpg
om de opgeslagen JPEG’s te bekijken.
- In Home Assistant staat de lokale webmap meestal op
- AI-kosten: Google Generative AI (of gelijkwaardige services) kunnen per verzoek kosten in rekening brengen. Overweeg een caching-mechanisme per camera of alleen AI-acties te laten lopen buiten piekuren.
- Flow-schaalbaarheid:
- Heb je meer camera’s, breid dan de Switch node uit met extra branches en extra
input_text
-entiteiten. - Je kunt in plaats van per-camera input_text-entiteit ook één centrale
sensor
ofinput_text
gebruiken en de context tonen in een kaart afhankelijk van welke camera als laatste iets meldde.
- Heb je meer camera’s, breid dan de Switch node uit met extra branches en extra
Veelvoorkomende vragen
1. Kan ik ook lokale snapshots (RTSP) direct in Node-RED gebruiken in plaats van via Homey?
Ja, als je Eufy-camera RTSP-streams ondersteunt en je Home Assistant direct toegang heeft, kun je in Node-RED node-rtsp gebruiken om frames te capturen. In dit artikel gebruiken we echter de cloud–gebaseerde snapshotmethode via Homey, omdat de meeste Eufy-camera’s alleen over RTSP via BaseStation werken en Homey deze snapshots makkelijker via MQTT kan distribueren.
2. Hoe voorkom ik vertragingen in het pipeline?
– Zorg dat zowel Homey als Home Assistant op bekabeld netwerk zitten of een snelle Wi-Fi (5 GHz).
– Zet de AI-aanroep bij voorkeur op een aparte taakqueue of tijdens minder drukke uren.
– Als je alleen een korte melding wilt, kun je de AI-aanroep weglaten en in HomeyScript een statische template gebruiken.
3. Ondersteunt deze setup ook bewegingsdetectie zonder “personen”-filter?
Ja. In Homey verander je de trigger van “person detected” naar “motion detected”. Pas dan in het HomeyScript en in Node-RED de logica aan zodat msg.payload.person
leeg of “niet aanwezig” wordt. In Home Assistant kun je dan bijvoorbeeld een algemene melding sturen: “Beweging gedetecteerd bij camera X”.
Conclusie
Met bovenstaande stappen integreer je Eufy-camera’s zowel met Homey als Home Assistant, waarbij Homey fungeert als detector en broker voor snapshots én persoonsinformatie, en Home Assistant (via Node-RED) fungeert als verwerker, opslag en (optioneel) AI-analyse. De MQTT-koppeling maakt deze opzet krachtig en schaalbaar. Door snapshots te encoderen als base64 in Homey en te publiceren op het topic homey/snapshots/camera
, laat je Node-RED in Home Assistant die weer decoderen, lokaal opslaan en verwerken. Op die manier kun je in Home Assistant dynamische dashboards, notificaties of logboeken bijhouden met minimale vertraging.
Experimenteer gerust met extra flows—denk aan gezichtsherkenning of integratie met andere slimme apparaten (lampen, alarmsystemen). Veel succes met jouw Eufy–Homey–Home Assistant setup!
Sommige links op deze pagina zijn affiliatelinks. Dit betekent dat ik een kleine commissie verdien wanneer je via deze links een aankoop doet, zonder dat het jou extra kost. Dit helpt mij om deze website draaiende te houden en nuttige content te blijven aanbieden.
Amazon Affiliate Disclaimer
Als Amazon Affiliate verdien ik aan kwalificerende aankopen. Voor meer informatie, bekijk de volledige Affiliate Disclaimer.