So hier mein Weg um eine beliebige RTSP Kamera in homee einzubinden.
System ist hier der Raspberry 4 mit 4 GB Ram.
Grundlage ist ein Buster Image von Iobroker…
Hier wurde dann ein Apache Webserver eingerichtet.
sudo apt-get install apache2
Danach die IP deines Raspberry aufrufen um zu testen ob es läuft ( 123.456.789.00:80)
Wenn das gut durchgelaufen ist dann kommt ffmpeg dran.
sudo apt-get install ffmpeg
Die Installation von ffmpeg dauert eine Weile. ( Kaffee oder was anderes geht da immer )
Zum testen könnt Ihr jetzt mal ein Video eurer RTSP Cam streamen,
ffmpeg -rtsp_transport tcp -i rtsp://xxx.xxx.xxx.xx:554/onif1 -vcodec copy -hls_time 4 -hls_list_size 2 -hls_wrap 2 -start_number 1 -y /home/pi/test.m3u8
dann sollte der Bildschirm wie folgt aussehen.
Soweit so gut.
Jetzt haben wir also einen Stream der mit einem VLC player oder mit homee oder jedem mobilen Gerät abgerufen werden kann.
Da meine Kamera keinen Snapshot hat musste ich aus dem Livestream einen anlegen,
das ganze kommt jetzt in den Ordner /var/www/html/ des PI.
für den Snapshot habe ich eine /home/pi/test.sh Datei mit einem einfachen Aufruf des ffmpeg angelegt.
ffmpeg -loglevel fatal -i rtsp:xxx.xxx.xxx.xx:554/onif1 -vframes 1 -y -r 1 /var/www/html/test.png
Hierzu muss man dem Ordner vorher die passenden Rechte vergeben.
sudo chmod 777 -R /var/www/html
Nun könnt Ihr über einen beliebigen Browser das Bild öffnen. (ip:80/test.png)
Das ganze wird dann noch schön in ein Cronetab gepackt damit das Bild auch aktuell ist.
Dazu wird die Datei /etc/crontab geöffnet und folgende Zeile eingefügt.
*/5 * * * * root /home/pi/test.sh
Sehr schön soweit.
Jetzt geht es an das vhih Gerät Netatmo Kamera,
dazu habe ich euch mal den Flow von mir exportiert.
[
{
"id": "565879f8.8bbd18",
"type": "homeeDevice",
"z": "ed531f2.24960e",
"virtual-homee": "",
"name": "Eingang",
"nodeId": "1002",
"profile": "3027",
"icon": "",
"attributes": "[{\"id\":2235,\"node_id\":1002,\"instance\":0,\"minimum\":0,\"maximum\":1,\"current_value\":1,\"target_value\":1,\"last_value\":0,\"unit\":\"n%2Fa\",\"step_value\":1,\"editable\":1,\"type\":179,\"state\":1,\"last_changed\":1571855493,\"changed_by\":1,\"changed_by_id\":0,\"based_on\":1,\"data\":\"{\\\"baseUrlOnline\\\":\\\"http://IPdesPI:80\\\",\\\"baseUrlLocal\\\":\\\"http://IPdesPI:80\\\",\\\"commands\\\":{\\\"image\\\":\\\"/test.png\\\",\\\"ping\\\":\\\"/command/ping\\\",\\\"video\\\":\\\"/test.m3u8\\\"}}\"}]",
"x": 100,
"y": 500,
"wires": [
[
"14471ac1.de5305",
"8582db99.009558"
]
]
},
{
"id": "debc0b71.7ae098",
"type": "exec",
"z": "ed531f2.24960e",
"command": "ffmpeg -rtsp_transport tcp -i rtsp://xxx.xxx.xxx.xx:554/onif1 -vcodec copy -hls_time 4 -hls_list_size 3 -hls_wrap 3 -start_number 1 -y /var/www/html/test.m3u8",
"addpay": false,
"append": "",
"useSpawn": "true",
"timer": "",
"oldrc": false,
"name": "Eingang Stream",
"x": 860,
"y": 480,
"wires": [
[],
[],
[]
]
},
{
"id": "f4a889f0.80bc58",
"type": "change",
"z": "ed531f2.24960e",
"name": "",
"rules": [
{
"t": "move",
"p": "payload",
"pt": "msg",
"to": "kill",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 640,
"y": 520,
"wires": [
[
"debc0b71.7ae098"
]
]
},
{
"id": "14471ac1.de5305",
"type": "switch",
"z": "ed531f2.24960e",
"name": "Anschalten",
"property": "payload.targetValue",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "1",
"vt": "num"
}
],
"checkall": "true",
"repair": false,
"outputs": 1,
"x": 250,
"y": 480,
"wires": [
[
"debc0b71.7ae098"
]
]
},
{
"id": "8582db99.009558",
"type": "switch",
"z": "ed531f2.24960e",
"name": "ausschalten",
"property": "payload.targetValue",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "0",
"vt": "num"
}
],
"checkall": "true",
"repair": false,
"outputs": 1,
"x": 250,
"y": 520,
"wires": [
[
"45a245fe.a5f87c"
]
]
},
{
"id": "45a245fe.a5f87c",
"type": "change",
"z": "ed531f2.24960e",
"name": "",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "SIGTERM",
"tot": "str"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 430,
"y": 520,
"wires": [
[
"f4a889f0.80bc58"
]
]
}
]
Das war eigentlich schon alles um die Kamera in den homee zu bringen.
Leider wie gesagt aktuell nur lokal da mir keine Idee für den externen Zugang eingefallen ist und ich das auch nicht wirklich weiter verfolgt habe.
Bei dem ffmpeg könnt Ihr noch ein wenig mit der Zeitdauer und der Segmente arbeiten um das beste Ergebnis für euch raus zu holen.
Ich hoffe das ich nichts vergessen habe.
Wenn noch Fragen sind nur zu und ich schaue ob mir was einfällt dazu.
VG Micha
Edit:
Der Flow ist so aufgebaut das beim aktivieren der Kamera in homee erst der Stream angelegt wird, somit muss der Pi nicht die ganze Zeit die Daten umwandeln.