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!

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

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.

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
enCHAT_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, ofFalse
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

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\

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“.

3: Bekijk de inhoud van het Telegram.bat file

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.

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

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

7: Pas het script aan naar deze text:
Python C:\Scripts\Telegram.py
En sla dit script op.

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.

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!

Het resultaat!

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!