Chinacams sicher einsetzen

Für einfache private Anwendungen gibt es beim Chinesenshop diverse PTZ Webcams um die 8 Euro.

Nachteile: Cloudbindung, Appbindung, ungutes Gefühl dass die Kamera nur „von aussen“ gesteuert wird.

Bei genauerer Untersuchung zeigt sich auch was da alles in die China-Cloud übertragen wird… das geht auch besser!

Idee: nur lokal drauf zugreifen und den Internetzugang blocken.

Schritt 1: Kamera erstmals einrichten, onvif aktivieren und dann in das „China-Wlan“ (jenes ohne Internetzugang!) verschieben.

Schritt 2: den rtsp Stream finden – leider weichen die Billigcams oft vom Standard ab. nmap kann hier helfen:

nmap -p 554 --script rtsp-url-brute 192.168.x.x
Starting Nmap 7.95 ( https://nmap.org ) at 2024-09-07 10:34 Mitteleuropõische Sommerzeit
Nmap scan report for 192.168.x.x
Host is up (0.0074s latency).

PORT    STATE SERVICE
554/tcp open  rtsp
| rtsp-url-brute:
|   discovered:
|     rtsp://192.168.x.x/MediaInput/mpeg4
|     rtsp://192.168.x.x/cam1/mpeg4
|     rtsp://192.168.x.x/cam1/mjpeg
|     rtsp://192.168.x.x/cam4/mpeg4
|     rtsp://192.168.x.x/live/mpeg4
|     rtsp://192.168.x.x/live_mpeg4.sdp
|     rtsp://192.168.x.x/mjpeg.cgi
|     rtsp://192.168.x.x/mjpeg/media.smp
|     rtsp://192.168.x.x/mpeg4
|     rtsp://192.168.x.x/mpeg4/1/media.amp
|     rtsp://192.168.x.x/mpeg4/media.amp
|     rtsp://192.168.x.x/mpeg4/media.amp?resolution=640x480
|     rtsp://192.168.x.x/mpeg4/media.smp
|     rtsp://192.168.x.x/mpeg4cif
|     rtsp://192.168.x.x/mpeg4unicast
|_    rtsp://192.168.x.x/streaming/mjpeg

Nice!

Schritt 3: die Cam in die lokale Homeassistant Instanz bringen… da die onvif Integration es nicht mag, wenn die Kamera in einem anderen Subnetz ist macht man das via config:

camera:
  - platform: ffmpeg
    name: Meine Kamera
    input: rtsp://192.168.x.x/cam1/mpeg4

Schritt 4: nun noch die PTZ Steuerung als Scripte konfigurieren – die onvif Integration muss vorhanden sein und die Kameras eingerichtet – auch wenn ein Fehler kommt. Ein Beispiel (muss man für hoch, runter, links, rechts und zoom machen):

kamera_pan_left:
  alias: kamera_pan_left
  sequence:
  - alias: Kamera Pan Left
    sequence:
    - data:
        pan: LEFT
        move_mode: RelativeMove
        distance: 0.51
      action: onvif.ptz
      target:
        entity_id: camera.kamera
  description: ''
  icon: mdi:arrow-left-bold

Schritt 5: die Skripte kann man in Lovelace als Buttons anzeigen lassen:

type: horizontal-stack
cards:
  - show_name: false
    show_icon: true
    type: button
    name: Pan Left
    tap_action:
      action: call-service
      service: script.Kamera_pan_left
    show_state: false
    icon: mdi:arrow-left-bold
  - show_name: false
    show_icon: true
    type: button
    name: Pan Right
    tap_action:
      action: call-service
      service: script.Kamera_pan_right
    show_state: true
    icon: mdi:arrow-right-bold
  - show_name: false
    show_icon: true
    type: button
    name: Tilt Up
    tap_action:
      action: call-service
      service: script.Kamera_tilt_up
    show_state: true
    icon: mdi:arrow-up-bold
  - show_name: false
    show_icon: true
    type: button
    name: Tilt Down
    tap_action:
      action: call-service
      service: script.Kamera_tilt_down
    show_state: true
    icon: mdi:arrow-down-bold
  - show_name: false
    show_icon: true
    type: button
    name: Zoom In
    tap_action:
      action: call-service
      service: script.Kamera_zoom_in
    icon: mdi:magnify-plus
    show_state: true
  - show_name: false
    show_icon: true
    type: button
    name: Zoom Out
    tap_action:
      action: call-service
      service: script.Kamera_zoom_out
    icon: mdi:magnify-minus

Fertig! Nun kann man getrost die Kamera verwenden – denn ohne Internetzugriff fließen keine Daten ab. Der Zugriff erfolgt lediglich „lokal“ von der Kamera zum lokalen Homeassistant – und auf diesen kann man relativ sicher zugreifen.

Und wer sich da nicht auf die Sicherheit der Homeassistant App verlassen möchte – siehe Aluhut auf: Wireguard!