Zum Inhalt springen

Tapo Kameras: Unterschied zwischen den Versionen

Aus FHEMWiki
DeeSPe (Diskussion | Beiträge)
Pahenning (Diskussion | Beiträge)
Zeile 53: Zeile 53:


== Kamerasteuerung mit Python==
== Kamerasteuerung mit Python==
=== FHEM-Device ===
<pre>
defmod TapoCam dummy
attr TapoCam devStateIcon stream_running:it_camera@green stream_stopped:it_camera@black
attr TapoCam readingList snapshot motor_action motor_result motor_presets error
attr TapoCam setList getPhoto:noArg getClip getEvents privacy:on,off light:on,off light_intensity light_duration light_night:ir,white,auto led:on,off moveLeft moveRight moveUp moveDown calibrate:noArg preset_goto:1,2,3,4,5,6,7,8 preset_save preset_delete getPresets detection_motion detection_person detection_pet detection_tamper detection_vehicle detection_linecrossing alarm:on,off alarm_light:on,off alarm_sound:on,off alarm_duration alarm_volume:low,medium,high
attr TapoCam stateFormat {my $x=ReadingsAge("TapoCam","snapshot","");;\
my $v=ReadingsVal("TapoCam","event_dl_link","");;\
my $w=ReadingsAge("TapoCam","event_dl","");;\
my $y=(ReadingsVal("TapoCam","privacy","") eq "off")?"<a href=\"http://192.168.0.94:8085/pages/player/webrtc/stream1/0\">\nstream_running\n</a>":"stream_stopped";;\
sprintf("<p style=\"text-align:left;;font-weight:normal\">\n%s\n<br/><br/><a href=\"http://192.168.0.94:8083/fhem/images/Tapo.jpg\">Tapo.jpg</a> (%s)\n<br/><a href=\"%s\">TapoClip.mp4</a> (%s)\n</p>",$y,$x,$v,$w)}
attr TapoCam webCmd getPhoto:moveLeft:moveRight:moveUp:moveDown
</pre>
=== DOIF ===
<pre>
defmod TapoCam.N DOIF ([TapoCam:state] ne "ready")
({TapoCamHandler("$DEVICE","$EVENT")})
(setreading TapoCam state ready)
DOELSEIF
([+00:05:00])
({TapoCamHandler("TapoCam","status_update")})
attr TapoCam.N do always
attr TapoCam.N wait 0,3
</pre>
=== Handler ===
In der Datei https://github.com/pahenning/TapoCam_for_FHEM/99_TapoCamUtils.pm findet man zwei Funktionen:
* '''TapoCamHelper''' - nimmt als Parameter den Namen eines FHEM_Devices für die Kamera und ein Event entgegen und ruft dann eines der Python-Skripte auf. Dieses läuft asynchron ab, d.h. die Rückmeldung an FHEM kann bis zu 10 Sekunden dauern.
* '''TapoReturnHelper''' - wird aus dem Python-Skript gerufen und mit einer JSON-Struktur befüllt. Die Inhalte dieser JSON-Struktur werden auf Readings in dem FHEM-Device verteilt.
=== Python Vorbereitung ===
Zur Vorbereitung folgende Schritte ggf. mit root-Rechten unternehmen:
Zur Vorbereitung folgende Schritte ggf. mit root-Rechten unternehmen:
  mkdir -p /opt/fhem/tapo
  mkdir -p /opt/fhem/tapo
Zeile 59: Zeile 88:
  /opt/fhem/tapo/.venv/bin/pip install --upgrade pip
  /opt/fhem/tapo/.venv/bin/pip install --upgrade pip
  /opt/fhem/tapo/.venv/bin/pip install pytapo
  /opt/fhem/tapo/.venv/bin/pip install pytapo
/opt/fhem/tapo/.venv/bin/pip install aiofiles
  chown -R fhem:dialout /opt/fhem/tapo
  chown -R fhem:dialout /opt/fhem/tapo
  chmod -R u+rwX /opt/fhem/tapo
  chmod -R u+rwX /opt/fhem/tapo
Dadurch wird im Verzeichnis /opt/fhem/tapo eine virtuelle Umgebung für die TapoCam angelegt. Danach eine Datei /opt/fhem/tapo/tapo_testmethod.py anlegen, mit dem Inhalt
Dadurch wird im Verzeichnis /opt/fhem/tapo eine virtuelle Umgebung für die TapoCam angelegt.  
#!/opt/fhem/tapo/.venv/bin/python3
from pytapo import Tapo
tapo = Tapo("<IPKAMERA>", "admin", "<PWCLOUD>")
for m in dir(tapo):
    ml = m.lower()
    if any(x in ml for x in [
        "light", "spot", "privacy", "mask", "alarm", "siren",
        "speaker", "micro", "audio", "talk", "voice", "ring"
    ]):
        print(m)
Wichtig: Für die Kamerasteuerung verlangt Tapo inzwischen das Cloud-Passwort und den Usernamen admin.
Dieses Python-Skript ausführbar machen und ausführen:
chmod +x tapo_testmethod.py
./tapo_testmethod.py
Man erhält auf diese Weise eine unstrukturierte Liste alle Methode, die von der Kamera akzeptiert werden.
=== Kontrollprogramm ===
Das zentrale Python-Skript zur Kamerasteuerung liegt in der Datei /opt/fhem/tapo/tapo_control.py und hat den Inhalt
<pre>
#!/opt/fhem/tapo/.venv/bin/python3
 
import sys
import json
from pytapo import Tapo
HOST = "<IPKAMERA>"
USER = "admin"
PASSWORD = "<PWCLOUD>"
 
STEP = 10
 
def out(obj):
    if isinstance(obj, (dict, list)):
        print(json.dumps(obj, ensure_ascii=False))
    else:
        print(str(obj))
 
def ok(msg):
    print(msg)
    sys.exit(0)
 
def err(msg):
    print(msg)
    sys.exit(1)
 
def safe_call(label, func):
    try:
        return func()
    except Exception as e:
        return f"error: {e}"
 
try:
    tapo = Tapo(HOST, USER, PASSWORD)
except Exception as e:
    err(f"login error: {e}")
 
cmd = sys.argv[1] if len(sys.argv) > 1 else ""
 
try:
    if cmd == "left":
        tapo.moveMotor(-STEP, 0)
        ok("ok left")
 
    elif cmd == "right":
        tapo.moveMotor(STEP, 0)
        ok("ok right")
 
    elif cmd == "up":
        tapo.moveMotor(0, STEP)
        ok("ok up")


    elif cmd == "down":
'''Achtung:''' Falls mit den nachfolgend aufgeführten Skripten irgendwelche Laufzeitfehler auftauchen, kann dies an einer veralteten Version von Python liegen. Aktuell ist eigentlich die Version 3.13 erforderlich.
        tapo.moveMotor(0, -STEP)
        ok("ok down")


    elif cmd == "privacy_on":
In dieses Verzeichnis können nun die Python-Skripte aus https://github.com/pahenning/TapoCam_for_FHEM hineinkopiert werden.
        res = tapo.setPrivacyMode(True)
        out(res)


    elif cmd == "privacy_off":
* '''tapo_credentials.py''' - enthält <IPKAMERA> und <PWCLOUD>, sowie IP-Adresse, Port des FHEM-Servers, dessen statischen (!) csrf-Parameter und den Devicenamen des TapoCam-Devices.
        res = tapo.setPrivacyMode(False)
* '''tapo_helper.py''' - diverse Hilfsfunktionen, die von den anderen Skripten importiert werden.
        out(res)
* '''tapo_control_privacy.py''' - Kontrollprogramm für den "PRIVAT"-Modus der Kamera - d.h. das Ausschalten der Kamera. Kann wie folgt gerufen werden:
** <code>tapo_control_privacy.py</code> -> Statusmeldung an FHEM
** <code>tapo_control_privacy.py on|off</code> -> setzt den "PRIVAT"-Modus (Kamera aus), oder hebt ihn auf (Kamera eingeschaltet)
=== Bewegung ===
* ''' tapo_control_motor.py''' - Kontrollprogramm für die Bewegungen der Kamera. Kann wie folgt gerufen werden:
** <code>tapo_control_motor.py left [0-359]</code>  ->  Bewege die Kamera nach links. Ohne Parameter wird um den in der Kamera eingestellten Wert, typisch 10°, bewegt. Wenn ein Parameter angegeben wird, ist das der Winkel für die Bewegung.
** <code>tapo_control_motor.py right [0-359]</code>  ->  Bewege die Kamera nach rechts. Parameter wie oben
** <code>tapo_control_motor.py up [0-359]</code>  ->  Bewege die Kamera nach oben. Parameter wie oben
** <code>tapo_control_motor.py down [0-359]</code>  ->  Bewege die Kamera nach unten. Parameter wie oben
** <code>tapo_control_motor.py calibrate</code>  -> Kalibrierung der Kamerabewegung
** <code>tapo_control_motor.py presets</code>  -> Hole die definierten Positionen
** <code>tapo_control_motor.py goto <preset></code>  -> Gehe zur definierten Position (Zahlenangabe)  
** <code>tapo_control_motor.py save <preset> <name></code>  -> Speichere die gegenwärtige Position (Zahlenangabe und Name)
** <code>tapo_control_motor.py delete <preset></code>  -> Lösche die definierte Position (Zahlenangabe)
=== Beleuchtung ===
* '''tapo_control_light.py''' - Kontrollprogramm für die Lichtfunktionen der Kamera. Kann wie folgt gerufen werden:
** <code>tapo_control_light.py status</code>  -> Statusmeldung an FHEM
** <code>tapo_control_light.py led on|off</code> -> Schaltet die Kamera-LED an oder aus
** <code>tapo_control_light.py light on|off</code> -> Schaltet das Kameralicht an oder aus
** <code>tapo_control_light.py intensity <0-100></code> -> Helligkeit des Kameralichtss
** <code>tapo_control_light.py time <0-3600></code> -> Dauer des Kameralichts
** <code>tapo_control_light.py night ir|white|auto</code> -> Modus des Kameralichts bei Nacht
=== Kamera-Events ===
Events werden ausgelöst, wenn eine bestimmte Detektion erfolgt ist. Dafür gibt es
* '''tapo_control_detection.py''' - Kontrollprogramm für die Erkennungsfunktionen der Kamera. Kann wie folgt gerufen werden:
** <code>tapo_control_detection.py status</code> -> Statusmeldung an FHEM
** <code>tapo_control_detection.py motion <0-100></code> -> setzt die Empfindlichkeit der Bewegungserkennung. 0 => ausgeschaltet.
** <code>  tapo_control_detection.py person <0-100></code> -> setzt die Empfindlichkeit der Personenserkennung. 0 => ausgeschaltet.
** <code>  tapo_control_detection.py vehicle <0-100></code> -> setzt die Empfindlichkeit der Fahrzeugerkennung. 0 => ausgeschaltet.
** <code>  tapo_control_detection.py pet <0-100></code> -> setzt die Empfindlichkeit der Haustiererkennung. 0 => ausgeschaltet.
** <code>  tapo_control_detection.py tamper <0-100></code> -> setzt die Empfindlichkeit der Sabotageerkennung. 0 => ausgeschaltet.
** <code>  tapo_control_detection.py linecrossing <0-100></code> -> setzt die Empfindlichkeit der Erkennung des Übertretens einer virtuellen Linie. 0 => ausgeschaltet.


    elif cmd == "alarm_light_enable":
Diese Events werden nur gespeichert, wenn in der Kamera eine SD-Karte eingesetzt wurde. Empfohlen werden mindesten 16 GByte, diese Karte wird als Ringpuffer mit den Erkennungsevents beschrieben. Dabei werden jeweils kurze Videoclips aufgenommen (1 min Dauer). Welche Events vorhanden sind, kann man abfragen mit
        res = tapo.setAlarm(True, soundEnabled=False, lightEnabled=True)
* '''tapo_control_events.py''' - Kontrollprogramm für die Eventfunktionen der Kamera. Kann wie folgt gerufen werden:
        out(res)
** <code>tapo_control_events.py <seconds></code> - Hole die während der vergangenen <seconds> Sekunden detektierten Events von der Kamera und meldet sie an FHEM. Diese Clips werden dabei durchnummeriert. Die Liste der im Zeitfenster vorhandenen Events wird in der Datei /tmp/tapo_control_events.json zwischengespeichert.


    elif cmd == "alarm_sound_enable":
Das Programm zum Download ist
        res = tapo.setAlarm(True, soundEnabled=True, lightEnabled=False)
* '''tapo_control_download.py''' - Kontrollprogramm zum Download eines Event-Videoclips auf den FHEM-Server. Kann wie folgt gerufen werden:
        out(res)
*** <code>tapo_control_download.py clip <number> [DEBUG]</code> -> <number> ist die aus der o.a. Nummerierung abzulesende Nummer des Events. DEBUG: 0 oder 1, default 0. Wenn DEBUG eingeschaltet ist, werden auf STDOUT Kontrollnachrichten ausgegeben.


    elif cmd == "alarm_both_enable":
Bei diesem Download laufen etliche Dinge im Hintergrund ab, insbesondere ist das Linux-Paket ffmpeg nötig, um die Umwandlung des Kameravideos in eine MP4-Datei durchzuführen. Diese wird in /tmp/tapo_recordings/clips gespeichert, und ein Link von /opt/fhem/www/images/TapoClip.mp4 auf diese Datei angelegt.
        res = tapo.setAlarm(True, soundEnabled=True, lightEnabled=True)
        out(res)


    elif cmd == "alarm_off":
=== Alarmierung ===
        res = tapo.setAlarm(False)
Bei entsprechend detektierten Events kann auch ein lokaler Alarm in der Kamera ausgelöst werden (blinkende Beleuchtung = light und/oder Sirene=sound). Achtung: light und sound dürfen nicht beide off sein.
        out(res)
* '''tapo_control_alarm.py'''- Kontrollprogramm für die Alarmfunktionen der Kamera. Kann wie folgt gerufen werden:
 
** <code>tapo_control_alarm.py status</code> -> Statusmeldung an FHEM
    elif cmd == "status":
** <code>tapo_control_alarm.py on|off</code> -> schaltet die Alarmfunktionen an oder aus
        status = {
** <code>tapo_control_alarm.py light on|off</code> -> bei Alarm wird das Licht eingeschaltet, oder nicht
            "privacy": safe_call("privacy", lambda: tapo.getPrivacyMode()),
** <code>tapo_control_alarm.py sound on|off</code> -> bei Alarm wird die Sirene eingeschaltet, oder nicht.
            "alarm": safe_call("alarm", lambda: tapo.getAlarm()),
** <code>tapo_control_alarm.py volume low|medium|high</code> -> Lautstärke der Sirene
            "audio": safe_call("audio", lambda: tapo.getAudioConfig()),
** <code>tapo_control_alarm.py duration <zahl></code> -> Dauer eines Alarms in Sekunden
            "floodlight_status": safe_call("floodlight_status", lambda: tapo.getFloodlightStatus()),
            "floodlight_config": safe_call("floodlight_config", lambda: tapo.getFloodlightConfig()),
            "floodlight_capability": safe_call("floodlight_capability", lambda: tapo.getFloodlightCapability()),
        }
        out(status)
 
    else:
        err("unknown command")
 
except Exception as e:
    err(f"command error: {e}")
</pre>

Version vom 24. März 2026, 17:38 Uhr

Verifiziert für Tapo C530WS

Cloud-Installation

Die Kamera zunächst mit der von Tapo angegebenen App installieren und testen. Dafür muss ein Konto angelegt werden, mit Mailadresse und einem Passwort, das im Folgenden als <PWCLOUD> abgekürzt wird.

Die Kamera erhält im internen Netz eine IP-Adresse, die im Folgenden als <IPKAMERA> abgekürzt wird.

Wichtig: In der Tapo-App unter "Ich" unbedingt "Dienste von Drittanbietern" aufrufen und "Kompatibilität mit Drittanbietern" auf EIN stellen!

Stream und Snapshot

Hierfür muss zunächst ein so genanntes Kamera-Konto auf der Kamera angelegt werden, unter Einstellungen->Erweiterte Einstellungen. Dabei werden ein Username und ein Passwort festgelegt, die im Folgenden als <USERKAMERA> und <PWKAMERA> abgekürzt werden.

Auf dem FHEM-Server (oder einem anderen System zum Testen) muss dann die ffmpeg-Suite installiert werden.

Wenn die Kamera eingeschaltet ist, lässt sich dann der Stream der Kamera abgreifen mit

ffplay rtsp://<USERKAMERA>:<PWKAMERA>@<IPKAMERA>:554/stream1

in voller Auflösung, sowie mit reduzierter Auflösung als

ffplay rtsp://<USERKAMERA>:<PWKAMERA>@<IPKAMERA>:554/stream2

Die Erstellung eines Snapshots wird über ein Shellskript gesteuert, mit folgendem Inhalt

#!/bin/bash
OUT="/opt/fhem/www/images/Tapo.jpg"
URL="/fhem/images/Tapo.jpg"
ffmpeg -rtsp_transport tcp -y \
  -i "rtsp://<USERKAMERA>:<PWKAMERA>@<IPKAMERA>:554/stream1" \
  -frames:v 1 "$OUT" >/dev/null 2>&1
if [ $? -eq 0 ] && [ -s "$OUT" ]; then
  echo "$URL"
else
  echo "error creating image"
fi

Für das Weitere gehen wir davon aus, dass dieses Shellskript unter /opt/fhem/tapo liegt und durch den FHEM-Prozess ausführbar ist. Wir definieren ein Dummy-Device mit zunächst minimalen Eigenschaften

defmod TapoCam dummy
attr TapoCam readingList snapshot
attr TapoCam setList takePhoto:noArg 

sowie ein DOIF

defmod TapoCam.move.N DOIF ([TapoCam:state] =~ /^takePhoto$/) \
({my $res = qx(/opt/fhem/tapo/tapo_snapshot.sh);;\
 chomp($res);;\
 fhem("setreading TapoCam snapshot $res");;\
 fhem("setreading TapoCam state ready")\
}\
)

mit Attribut

attr TapoCam.move.N do always

Dann sorgt der FHEM-Befehl

set TapoCam takePhoto

dafür, dass ein Snapshot unter /opt/fhem/www/images gespeichert wird. Im FHEMWEB Frontend ist er dann unter /fhem/images/Tapo.jpg ansehbar

TODO: Komfortabler machen

Kamerasteuerung mit Python

FHEM-Device

defmod TapoCam dummy
attr TapoCam devStateIcon stream_running:it_camera@green stream_stopped:it_camera@black
attr TapoCam readingList snapshot motor_action motor_result motor_presets error
attr TapoCam setList getPhoto:noArg getClip getEvents privacy:on,off light:on,off light_intensity light_duration light_night:ir,white,auto led:on,off moveLeft moveRight moveUp moveDown calibrate:noArg preset_goto:1,2,3,4,5,6,7,8 preset_save preset_delete getPresets detection_motion detection_person detection_pet detection_tamper detection_vehicle detection_linecrossing alarm:on,off alarm_light:on,off alarm_sound:on,off alarm_duration alarm_volume:low,medium,high
attr TapoCam stateFormat {my $x=ReadingsAge("TapoCam","snapshot","");;\
 my $v=ReadingsVal("TapoCam","event_dl_link","");;\
 my $w=ReadingsAge("TapoCam","event_dl","");;\
 my $y=(ReadingsVal("TapoCam","privacy","") eq "off")?"<a href=\"http://192.168.0.94:8085/pages/player/webrtc/stream1/0\">\nstream_running\n</a>":"stream_stopped";;\
 sprintf("<p style=\"text-align:left;;font-weight:normal\">\n%s\n<br/><br/><a href=\"http://192.168.0.94:8083/fhem/images/Tapo.jpg\">Tapo.jpg</a> (%s)\n<br/><a href=\"%s\">TapoClip.mp4</a> (%s)\n</p>",$y,$x,$v,$w)}
attr TapoCam webCmd getPhoto:moveLeft:moveRight:moveUp:moveDown

DOIF

defmod TapoCam.N DOIF ([TapoCam:state] ne "ready")
({TapoCamHandler("$DEVICE","$EVENT")})
(setreading TapoCam state ready)
DOELSEIF
([+00:05:00])
({TapoCamHandler("TapoCam","status_update")})
attr TapoCam.N do always
attr TapoCam.N wait 0,3

Handler

In der Datei https://github.com/pahenning/TapoCam_for_FHEM/99_TapoCamUtils.pm findet man zwei Funktionen:

  • TapoCamHelper - nimmt als Parameter den Namen eines FHEM_Devices für die Kamera und ein Event entgegen und ruft dann eines der Python-Skripte auf. Dieses läuft asynchron ab, d.h. die Rückmeldung an FHEM kann bis zu 10 Sekunden dauern.
  • TapoReturnHelper - wird aus dem Python-Skript gerufen und mit einer JSON-Struktur befüllt. Die Inhalte dieser JSON-Struktur werden auf Readings in dem FHEM-Device verteilt.

Python Vorbereitung

Zur Vorbereitung folgende Schritte ggf. mit root-Rechten unternehmen:

mkdir -p /opt/fhem/tapo
cd /opt/fhem/tapo
python3 -m venv .venv
/opt/fhem/tapo/.venv/bin/pip install --upgrade pip
/opt/fhem/tapo/.venv/bin/pip install pytapo
/opt/fhem/tapo/.venv/bin/pip install aiofiles
chown -R fhem:dialout /opt/fhem/tapo
chmod -R u+rwX /opt/fhem/tapo

Dadurch wird im Verzeichnis /opt/fhem/tapo eine virtuelle Umgebung für die TapoCam angelegt.

Achtung: Falls mit den nachfolgend aufgeführten Skripten irgendwelche Laufzeitfehler auftauchen, kann dies an einer veralteten Version von Python liegen. Aktuell ist eigentlich die Version 3.13 erforderlich.

In dieses Verzeichnis können nun die Python-Skripte aus https://github.com/pahenning/TapoCam_for_FHEM hineinkopiert werden.

  • tapo_credentials.py - enthält <IPKAMERA> und <PWCLOUD>, sowie IP-Adresse, Port des FHEM-Servers, dessen statischen (!) csrf-Parameter und den Devicenamen des TapoCam-Devices.
  • tapo_helper.py - diverse Hilfsfunktionen, die von den anderen Skripten importiert werden.
  • tapo_control_privacy.py - Kontrollprogramm für den "PRIVAT"-Modus der Kamera - d.h. das Ausschalten der Kamera. Kann wie folgt gerufen werden:
    • tapo_control_privacy.py -> Statusmeldung an FHEM
    • tapo_control_privacy.py on|off -> setzt den "PRIVAT"-Modus (Kamera aus), oder hebt ihn auf (Kamera eingeschaltet)

Bewegung

  • tapo_control_motor.py - Kontrollprogramm für die Bewegungen der Kamera. Kann wie folgt gerufen werden:
    • tapo_control_motor.py left [0-359] -> Bewege die Kamera nach links. Ohne Parameter wird um den in der Kamera eingestellten Wert, typisch 10°, bewegt. Wenn ein Parameter angegeben wird, ist das der Winkel für die Bewegung.
    • tapo_control_motor.py right [0-359] -> Bewege die Kamera nach rechts. Parameter wie oben
    • tapo_control_motor.py up [0-359] -> Bewege die Kamera nach oben. Parameter wie oben
    • tapo_control_motor.py down [0-359] -> Bewege die Kamera nach unten. Parameter wie oben
    • tapo_control_motor.py calibrate -> Kalibrierung der Kamerabewegung
    • tapo_control_motor.py presets -> Hole die definierten Positionen
    • tapo_control_motor.py goto <preset> -> Gehe zur definierten Position (Zahlenangabe)
    • tapo_control_motor.py save <preset> <name> -> Speichere die gegenwärtige Position (Zahlenangabe und Name)
    • tapo_control_motor.py delete <preset> -> Lösche die definierte Position (Zahlenangabe)

Beleuchtung

  • tapo_control_light.py - Kontrollprogramm für die Lichtfunktionen der Kamera. Kann wie folgt gerufen werden:
    • tapo_control_light.py status -> Statusmeldung an FHEM
    • tapo_control_light.py led on|off -> Schaltet die Kamera-LED an oder aus
    • tapo_control_light.py light on|off -> Schaltet das Kameralicht an oder aus
    • tapo_control_light.py intensity <0-100> -> Helligkeit des Kameralichtss
    • tapo_control_light.py time <0-3600> -> Dauer des Kameralichts
    • tapo_control_light.py night ir|white|auto -> Modus des Kameralichts bei Nacht

Kamera-Events

Events werden ausgelöst, wenn eine bestimmte Detektion erfolgt ist. Dafür gibt es

  • tapo_control_detection.py - Kontrollprogramm für die Erkennungsfunktionen der Kamera. Kann wie folgt gerufen werden:
    • tapo_control_detection.py status -> Statusmeldung an FHEM
    • tapo_control_detection.py motion <0-100> -> setzt die Empfindlichkeit der Bewegungserkennung. 0 => ausgeschaltet.
    • tapo_control_detection.py person <0-100> -> setzt die Empfindlichkeit der Personenserkennung. 0 => ausgeschaltet.
    • tapo_control_detection.py vehicle <0-100> -> setzt die Empfindlichkeit der Fahrzeugerkennung. 0 => ausgeschaltet.
    • tapo_control_detection.py pet <0-100> -> setzt die Empfindlichkeit der Haustiererkennung. 0 => ausgeschaltet.
    • tapo_control_detection.py tamper <0-100> -> setzt die Empfindlichkeit der Sabotageerkennung. 0 => ausgeschaltet.
    • tapo_control_detection.py linecrossing <0-100> -> setzt die Empfindlichkeit der Erkennung des Übertretens einer virtuellen Linie. 0 => ausgeschaltet.

Diese Events werden nur gespeichert, wenn in der Kamera eine SD-Karte eingesetzt wurde. Empfohlen werden mindesten 16 GByte, diese Karte wird als Ringpuffer mit den Erkennungsevents beschrieben. Dabei werden jeweils kurze Videoclips aufgenommen (1 min Dauer). Welche Events vorhanden sind, kann man abfragen mit

  • tapo_control_events.py - Kontrollprogramm für die Eventfunktionen der Kamera. Kann wie folgt gerufen werden:
    • tapo_control_events.py <seconds> - Hole die während der vergangenen <seconds> Sekunden detektierten Events von der Kamera und meldet sie an FHEM. Diese Clips werden dabei durchnummeriert. Die Liste der im Zeitfenster vorhandenen Events wird in der Datei /tmp/tapo_control_events.json zwischengespeichert.

Das Programm zum Download ist

  • tapo_control_download.py - Kontrollprogramm zum Download eines Event-Videoclips auf den FHEM-Server. Kann wie folgt gerufen werden:
      • tapo_control_download.py clip <number> [DEBUG] -> <number> ist die aus der o.a. Nummerierung abzulesende Nummer des Events. DEBUG: 0 oder 1, default 0. Wenn DEBUG eingeschaltet ist, werden auf STDOUT Kontrollnachrichten ausgegeben.

Bei diesem Download laufen etliche Dinge im Hintergrund ab, insbesondere ist das Linux-Paket ffmpeg nötig, um die Umwandlung des Kameravideos in eine MP4-Datei durchzuführen. Diese wird in /tmp/tapo_recordings/clips gespeichert, und ein Link von /opt/fhem/www/images/TapoClip.mp4 auf diese Datei angelegt.

Alarmierung

Bei entsprechend detektierten Events kann auch ein lokaler Alarm in der Kamera ausgelöst werden (blinkende Beleuchtung = light und/oder Sirene=sound). Achtung: light und sound dürfen nicht beide off sein.

  • tapo_control_alarm.py- Kontrollprogramm für die Alarmfunktionen der Kamera. Kann wie folgt gerufen werden:
    • tapo_control_alarm.py status -> Statusmeldung an FHEM
    • tapo_control_alarm.py on|off -> schaltet die Alarmfunktionen an oder aus
    • tapo_control_alarm.py light on|off -> bei Alarm wird das Licht eingeschaltet, oder nicht
    • tapo_control_alarm.py sound on|off -> bei Alarm wird die Sirene eingeschaltet, oder nicht.
    • tapo_control_alarm.py volume low|medium|high -> Lautstärke der Sirene
    • tapo_control_alarm.py duration <zahl> -> Dauer eines Alarms in Sekunden