Juni 2025

visionplatform

Hidde de Boer
Gespecialiseerd in high-end VMS oplossingen

Milestone XProtect alarms via Telegram ontvangen

Waarom via Telegram?

  • Eenvoudig uit te breiden naar nieuwe gebruikers
  • Geen ‘Smart Connect‘ nodig om push meldingen te ontvangen
  • Push meldingen ook te ontvangen op smart watches
  • Gebruikers hebben geen toegang nodig tot de Milestone omgeving
  • Eenvoudig en overzichtelijk
  • Gewoon omdat het kan!

Vereisten om Milestone alarms en events te kunnen versturen via een Telegram kanaal

Milestone XProtect versie 2024 R1 en hoger hebben lange tijd last gehad van een bug waardoor de ‘Smart Connect’ feature niet, of slecht werkte. Om toch alerts te kunnen blijven ontvangen hebben we een eenvoudige koppeling gemaakt om toch allerlei soorten events te kunnen ontvangen. We gaan je laten zien hoe je dit opzet.

Vereisten:

  • Toegang tot je Milestone server.
  • Milestone XProtect versie 2023 R1 of hoger.
  • Milestone BatAction plugin.
  • Python voor Windows (getest met 3.11.4).
  • De volgende Python modules: ffmpegUrl, requests, pip.
  • Telegram group en bot aanmaken. Hiervan het ‘bot_token’ en ‘chat id’ verzamelen.
  • Camera met RTSP stream.

Onderaan het artikel vind je het volledige script om dit alles automatisch uit te voeren. Scheelt jou weer gedoe!

Milestone telegram koppeling

Het doel

Wanneer er een detectie van een persoon plaatsvind op een specifieke camera, willen wij hiervan een melding ontvangen op een telegram groupschat. Dit bereiken we door een aantal stappen aan elkaar te koppelen.

1: We installeren de Milestone BatAction Plugin via Powershell op onze server.
2: We installeren Python en aanvullende modules om te communiceren met de camera.
3: We maken een Telegram group aan en verzamelen de chat_id en bot_token.
4: We configureren ons python script
5: We stellen de Milestone BatAction Plugin correct in
6: We maken de Milestone rule en testen maar!

Stap 1 – Installeren Milestone Bataction

Execute dit script in Powershell.exe (of ISE) als administrator op de Milestone server om de BatAction plugin te installeren. Deze BatAction plugin wordt op het onderstaande pad door Powershell geïnstalleerd.

C:\Program Files\VideoOS\MIPPlugins\BatAction

Milestone telegram koppeling

Stap 2 – Python modules installeren

Om met de camera te communiceren gebruiken we Python. Hier hebben we de volgende modules voor nodig: ffmpegUrl, requests, pip.

Op het moment dat Milestone een person detect event aanmaakt, halen we via Python een screenshot op van de camera. Dit doen we door middel van de Milestone rule engine en de batchplugin welke we in stap 1 hebben geïnstalleerd. Zo houden we het zo simpel mogelijk. In het voorbeeld hanteren we een Dahua camera en bijbehorende stream URL.

Milestone telegram koppeling

Wat doet dit script?

  • Controleert of Python geïnstalleerd is. Als dat niet zo is, wordt het automatisch gedownload en geïnstalleerd.

  • Zorgt ervoor dat pip aanwezig is en up to date wordt gehouden.

  • Installeert het Python pakket requests dat nodig is voor API communicatie.

  • Maakt de map C:\Scripts aan als deze nog niet bestaat.

  • Controleert of 7Zip geïnstalleerd is. Als dit niet het geval is, wordt eerst Chocolatey geïnstalleerd (indien nodig) en vervolgens 7Zip via Chocolatey.

  • Downloadt FFmpeg als een .7z archiefbestand naar de tijdelijke map.

  • Pakt het archief uit in de C:\map met behulp van 7Zip.

  • Hernoemt de uitgepakte map naar C:\ffmpeg.

  • Verwijdert het gedownloade archiefbestand na installatie.

  • Slaat de installatie van FFmpeg over als deze al aanwezig is op het systeem. 

Stap 3 – Telegram bot en group

We moeten een telegram bot en group maken. Hiervan moeten we het chat_id en bot_token verzamelen.

Dit gaan we nodig hebben in ons Python script. In deze video wordt uitgelegd welke stappen je moet doorlopen om deze te bemachtigen.

Stap 4 – Python script voor de communicatie met de camera

Ons python script! Dit script gaan we opslaan in ‘c:\Scripts’ onder de naam telegram.py

Wat doet dit script nou precies?

  • Importeert de benodigde Python modules (requests, subprocess, os, sys).

  • Stelt variabelen in voor je Telegram bot: BOT_TOKEN en CHAT_ID.

  • Stelt variabelen in voor je RTSP cameragegevens: gebruikersnaam, wachtwoord, IPadres en poort.

  • Bouwt daaruit de volledige RTSP URL (RTSP_URL) voor de camerastroom.

  • Definieert het pad naar ffmpeg.exe (FFMPEG_PATH) en naar het tijdelijke snapshotbestand (SNAPSHOT_PATH).

  • Functie capture_rtsp_snapshot(rtsp_url, output_path):

    • Roept ffmpeg aan om één enkel frame uit de RTSP stream te halen.

    • Slaat dat frame op als JPEG in output_path.

    • Geeft True terug bij succes, of False en een foutmelding bij mislukking.

  • Functie send_to_telegram(message, photo_path=None):

    • Als photo_path is opgegeven: verstuurt een foto met bijschrift naar de opgegeven Telegram chat via de Bot API (sendPhoto).

    • Anders stuurt hij alleen een tekstbericht (sendMessage).

    • Vangt eventuele netwerk of API errors af en toont een foutmelding in de console.

  • In de if __name__ == "__main__": sectie:

    • Probeert eerst een snapshot van de camera te maken met capture_rtsp_snapshot(RTSP_URL, SNAPSHOT_PATH).

    • Bij een geslaagde snapshot: roept send_to_telegram("Objectdetectie Oprit", SNAPSHOT_PATH) op om de foto met bijschrift te versturen.

    • Bij een mislukte snapshot: stuurt hij alleen de tekst “Objectdetectie Oprit (snapshot failed)” naar Telegram.

    • Controleert vervolgens of het tijdelijke bestand snapshot.jpg bestaat en verwijdert dit bestand weer.

Pas de velden in de foto aan naar jou eigen waardes

  • BOT_TOKEN – (Zie video in stap 3)
  • CHAT_ID – (Zie video in stap 3)
  • RTSP_USERNAME – Username van jou camera
  • RTSP_PASSWORD – Password van jou camera
  • RTSP_IP – Het IP adres van jou camera

Dit script sla je op in ‘c:\Scripts’ onder de naam telegram.py

Milestone telegram koppeling

Stap 5 – Configureren van de Milestone BatAction Plugin

We hebben nu inmiddels de volgende stappen doorlopen:

  • BatAction Plugin geïnstalleerd.
  • Python en vereiste Python modules geïnstalleerd.
  • Telegram bot token en chat id verzameld.
  • Python script ingesteld voor de communicatie met de camera.

De volgende stap is het instellen van de BatAction Plugin. Hier gaan we de volgende stappen voor doorlopen:

1: Navigeer op de Milestone server naar: C:\Program Files\VideoOS\MIPPlugins\BatAction\BatFiles\

 

Milestone telegram koppeling

2: Open de folder Batfiles. Hier zie je een batch file genaamd CameraReport.bat. Dit is een standaard bestand. Maak hier een copy van in dezelfde map en noem deze “Telegram.bat“.

Milestone telegram koppeling

3: Bekijk de inhoud van het Telegram.bat file

Milestone telegram koppeling

4: Bekijk de inhoud van het Telegram.bat file. Wat doet dit bestand nou eigenlijk?

  • Start PowerShell zonder profiel of gebruikersinteractie.

  • Negeert het PowerShell executiebeleid

  • Zoekt een .ps1-script met dezelfde naam als de .bat file, in de map ..\Ps1Files\.

  • Voorbeeld: install.bat voert ..\Ps1Files\install.ps1 uit.

  • Geeft alle meegegeven parameters aan de .bat file door aan het .ps1 script.

Milestone telegram koppeling

5: Navigeer nu één map terug en open de Ps1Files folder

Milestone telegram koppeling

6: Copy nu weer het CameraReport.ps1 bestand in dezelfde map en hermoem deze naar Telegram.ps1.

Milestone telegram koppeling

7: Pas het script aan naar deze text:

Python C:\Scripts\Telegram.py

En sla dit script op.

Milestone telegram koppeling

8: Als je deze hebt opgeslagen, herstart je de Event Server zodat de scripts opnieuw worden geladen en we deze in de rule engine kunnen zien.

Milestone telegram koppeling

9: Open de management client, navigeer naar de rules sectie en selecteer de camera waarop je een event wil ontvangen. In dit voorbeeld gebruiken we de people detection van een camera als de action. Maar, dit kan in principe iedere andere trigger zijn. Enkele relevantie voorbeelden zouden kunnen zijn:

  • Motion detection
  • I/O trigger (bijvoorbeeld aanbellen bij een intercom)
  • People/car detection

Wil je eenvoudig testen of je automation werkt? Gebruik dan bijvoorbeeld een user defined event als actie trigger zodat je deze eenvoudig kan testen!

Milestone telegram koppeling

Het resultaat!

Milestone telegram koppeling

Done!

Als je alle stappen succesvol hebt doorlopen kan jij nu via Telegram meldingen vanuit Milestone ontvangen. Om het makkelijker te maken vind je hieronder het script om zowel de BatAction Plugin en de Python modules automatisch te installeren.

Vragen? Neem gerust contact op!

Vrijblijvende offerte?

Dezelfde werkdag geregeld!


085 303 48 69

Offerte aanvragen

Artikelen, referenties en nieuws