Voordeurbel met AI? Ja het kan!

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}`;
}


11 Likes

Hallo MV,

Bedankt voor het delen van het script. Ziet er goed uit en geeft weer wat ideeen voor de toekomst.

Ik wil het echter toepassen op mijn situatie, maar de kan de kaart “ Huidige snapshot plakken” niet vinden. Ik gebruik de officiele Ring app van Homey en heb een 2e generatie Ring-deurbel.
Kan het zijn dat mijn deurbel niet geschikt is en zo ja, welke dan wel?
Of heb ik een andere app nodig en zo ja, welke dan?

@Cees_Heltzel Ik gebruik de Ring community app, die wat meer mogelijkheden heeft dan de Athom app. Dit lijkt mij een goede startpositie om de flow te maken.

Probeer als prompt “beschrijf zeer gedetailleerd wat op de afbeelding is te zien”, en laat je verbazen wat AI allemaal ziet en kan omschrijven.

1 Like

Wat een leuk idee!

Ik kan allen die kaart in micro webserver niet vinden.

De app heeft alleen deze:

Hoe heb je dat gedaan?

Bedankt!

Gebruik de Homey app FTP client, dan zie je de kaarten wel. Zie hier het stappenplan om dit te configurenen

2 Likes

Beste Amersfoort,

Dank je wel voor jouw aanvulling. Het is mij hiermij gelukt. Moest wel gebruik maken van de tag CloudURL en niet van de tag URL.

Ook was wel even verwarrend dat de kaarten niet onder de app Micro Web Server hangen, maar onder de app FTP client (met dezelfde naam).

Zojuist mijn eerste flow gemaakt met het aanbellen via de Ring doorbell en krijg netjes een push bericht. Nu optimaliseren wanneer ik wel en wanneer ik geen bericht wil; misschien wel via WhatsApp.

Leuk en handig, maar houd er wel rekening mee dat je op deze manier de beelden van bezoekers en toevallige voorbijgangers door de AI laat verwerken. Dat is niet heel netjes.

2 Likes

Ik denk zelfs strafbaar.

Gelukkig heeft de Ring bel een terrein afbakening in de software zitten. Deze is zodanig in te stellen, dat alleen personen die op eigen grond komen worden gesignaleerd. De hele dag “man met hond” meldingen zit niemand op te wachten. Bovendien ben je dan snel door je “gratis” api capaciteit heen.

Bij daadwerkelijk aanbellen is het altijd toegestaan. De strafbaarheid is ook maar relatief, want als het even kan vraagt de politie voordeurbel beelden op na calamiteiten; die calamiteit is dan meestal niet op eigen terrein.

Een willekeurige LLM != Politie/Justitie.

1 Like

Je kan de camera snapshots ook door een lokale LLM (zoals qwen2.5vl) laten verwerken met de Ollama app.

1 Like

Bordje plaatsen met “Als u aanbelt, gaat akkoord met onze voorwaarden qua beeldmateriaal; Deze voorwaarden zijn binnen in te zien”.