Je slimme deurbel uitrusten met AI? Dat kan door inzet van advanced flow en Homey script
In onderstaand voorbeeld zie je een flow gebaseerd op een Ring voordeurbel:
- als er beweging is of er wordt aangebeld, dan maak een foto van het camerabeeld
- foto tijdelijk opslaan in Homey geheugen, om de url van de foto te krijgen
- het Homey script ontvangt deze url. Onderstaand script stelt een vraag (prompt) aan Gemini over deze foto; in dit voorbeeld “omschrijf de persoon die voor de deur staat”.
- het antwoord van Gemini komt terug in een text/string variabele “Resultaat”
- in mijn voorbeeld controleer ik of er echt wel een persoon voor de deur staat, en zo ja, spreek de omschrijving dan uit via Google Nest mini (afhandeling door ander script)
Ik ben geen developer, maar met hulp van Google Gemini AI is onderstaand Homey script tot stand gekomen.
Heeft iemand nog andere mooie opties voor AI?
/**
* Homey Script: Foto → Gemini → Omschrijving persoon
*/
const GEMINI_API_KEY = 'zet hier je Gemini api key';
const GEMINI_ENDPOINT = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent';
const PROMPT_TEXT = "Alleen als er een persoon zichtbaar is op de foto, beschrijf kort de belangrijkste kenmerken van die persoon, zoals geslacht, leeftijdscategorie, kleur haar, huidskleur en opvallende kenmerken. Verwijder alle asterisks in de beschrijving. Als er geen persoon zichtbaar is op de foto, geef dan geen antwoord.";
const imageUrl = args[0];
// Valideer de URL
if (!imageUrl || typeof imageUrl !== 'string' || !imageUrl.startsWith('http')) {
return "Geen geldige URL van een afbeelding meegegeven als argument.";
}
// Hoofd-uitvoeringslogica
try {
// Haal de afbeelding op en converteer deze naar een Base64-string
const response = await fetch(imageUrl);
if (!response.ok) {
throw new Error(`Fout bij het ophalen van de afbeelding: ${response.statusText}`);
}
const arrayBuffer = await response.arrayBuffer();
const base64Image = Buffer.from(arrayBuffer).toString("base64");
// Stuur de base64-afbeelding naar de Gemini API
const body = {
contents: [{
parts: [
{ text: PROMPT_TEXT },
{ inline_data: { mime_type: "image/jpeg", data: base64Image } }
]
}]
};
const apiResponse = await fetch(`${GEMINI_ENDPOINT}?key=${GEMINI_API_KEY}`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(body)
});
if (!apiResponse.ok) {
const errorResult = await apiResponse.json();
throw new Error(`Gemini API-fout: ${apiResponse.status} - ${JSON.stringify(errorResult)}`);
}
const result = await apiResponse.json();
const omschrijving = result.candidates?.[0]?.content?.parts?.[0]?.text;
// Retourneer het antwoord
if (omschrijving) {
return omschrijving;
} else {
return "Geen omschrijving ontvangen.";
}
} catch (error) {
return `Script-fout: ${error.message}`;
}

