blink-mqtt-bridge

Begonnen von juppzupp, 15 Februar 2026, 19:56:05

Vorheriges Thema - Nächstes Thema

juppzupp

ich habe ein wenig mit mit blinkpy https://github.com/fronzbot/blinkpy gespielt.
die neue authentisierungsmethode von blink klappt damit.
da ich keine ahnung habe wie man das in richtung perl übersetzt, habe ich eine blink-mqtt-bridge gebastelt.
status ist "proof of concept", es klappt aber ist ein security-albtraum, da die credentials im klartext in einer json datei gespeichert werden.
man kann einzelne kameras armen/disarmen, das system armen/disarmen, und bekommt ein motion_detected reading pro camera.
keine verarbeitung von snapshots oder videos.
mir reicht das erstmal, da ich hauptsächlich automatisiert nachts die aussenkameras an haben möchte, und wenn keiner zu hause ist auch die im innenbereich.

wer mag, kann es von hier weiter "treiben", ich bin dazu zeitlich nicht in der lage.

das fhem device :

define blink MQTT2_DEVICE blink-bridge
attr blink DbLogExclude .*_timestamp$
attr blink event-on-change-reading .*
attr blink readingList blink/sync/[^/]+/status:.*    { my $t=$TOPIC;; $t=~s#^blink/sync/##;; $t=~s#/status$##;;json2nameValue($EVENT, $t."_");; }\
blink/cameras/[^/]+/status:.* { my $t=$TOPIC;; $t=~s#^blink/cameras/##;; $t=~s#/status$##;;json2nameValue($EVENT, $t."_");; }\

attr blink setList System:arm,disarm blink/sync/[SYSTEM NAME]/cmd $EVTPART1\
terasse:arm,disarm blink/cameras/[CAMERA NAME]/cmd $EVTPART1\
flur_unten:arm,disarm blink/cameras/[CAMERA NAME]/cmd $EVTPART1\
flur_oben:arm,disarm blink/cameras/[CAMERA NAME]/cmd $EVTPART1\
Küche:arm,disarm blink/cameras/[CAMERA NAME]/cmd $EVTPART1\

automatisch generierte installationsanleitung (mileage may vary) :

# Blink MQTT Bridge — clean install (Debian/Ubuntu)

## 1) System packages
sudo apt-get update
sudo apt-get install -y python3 python3-venv python3-pip

## 2) Create folder + venv
sudo mkdir -p /opt/blink-bridge
sudo chown $USER:$USER /opt/blink-bridge
cd /opt/blink-bridge

python3 -m venv .venv
source .venv/bin/activate

## 3) Install Python deps
pip install --upgrade pip
pip install blinkpy aiohttp aiomqtt

## 4) Copy files
cp /path/to/blink_bridge.py /opt/blink-bridge/
# Use test_blink_auth.py to create blink_credentials.json

## 5) Set env vars (optional)
export MQTT_ENABLED=true
export MQTT_HOST=127.0.0.1
export MQTT_PORT=1883
export MQTT_USER=youruser
export MQTT_PASS=yourpass
export MQTT_BASE_TOPIC=blink
export MQTT_STATUS_INTERVAL=60

## 6) Test run
python3 blink_bridge.py

# Optional: systemd service
# Create /etc/systemd/system/blink-bridge.service with:
#
# [Unit]
# Description=Blink MQTT Bridge
# After=network-online.target
# Wants=network-online.target
#
# [Service]
# Type=simple
# WorkingDirectory=/opt/blink-bridge
# Environment=MQTT_ENABLED=true
# Environment=MQTT_HOST=127.0.0.1
# Environment=MQTT_PORT=1883
# Environment=MQTT_USER=youruser
# Environment=MQTT_PASS=yourpass
# Environment=MQTT_BASE_TOPIC=blink
# Environment=MQTT_STATUS_INTERVAL=60
# ExecStart=/opt/blink-bridge/.venv/bin/python /opt/blink-bridge/blink_bridge.py
# Restart=always
# RestartSec=5
#
# [Install]
# WantedBy=multi-user.target
#
# Then:
# sudo systemctl daemon-reload
# sudo systemctl enable --now blink-bridge




JWRu

Ich werde wohl das mal ausprobieren: https://github.com/weirdtangent/blink2mqtt (beruht auf blinkpy).
Den Docker-Container kann ich auf meinem Synology NAS laufen lassen.
Ich hoffe, dass ich in den nächsten Wochen mal dazu komme und werde dann hier berichten.

Vielleicht ist es besser, wenn du den Thread nach Systeme->MQTT verschiebst. Da würde er aus meiner Sicht besser passen.
ZBox; RasPi 3B; RasPi Zero W; Homematic; Z-Wave; EnOcean, Shelly; DuoFern; Oregon- und Bresser-Sensoren; Steuerung Viessmann-Heizung; ESP32 und ESP8266 über MQTT; Arduino

rabehd

Zitat von: juppzupp am 15 Februar 2026, 19:56:05attr blink readingList blink/sync/[^/]+/status:.*    { my $t=$TOPIC;; $t=~s#^blink/sync/##;; $t=~s#/status$##;;json2nameValue($EVENT, $t."_");; }\
blink/cameras/[^/]+/status:.* { my $t=$TOPIC;; $t=~s#^blink/cameras/##;; $t=~s#/status$##;;json2nameValue($EVENT, $t."_");; }\

Also das Attribut möchte mein FHEM nicht übernehmen.
Da ich es auch nicht verstehe....

Zitatblink: bad reading name { my $t=$TOPIC;; $t=~s#^blink/sync/##;; $t=~s#/status$##;;json2nameValue($EVENT, $t."_");; }\ (contains not A-Za-z/\d_\.- or is too long)
Auch funktionierende Lösungen kann man hinterfragen.

JWRu

Leider funktioniert es bei mir seit kurzer Zeit nicht mehr.
Wenn ich versuche, mit test_blink_auth.py eine neue blink_credentials.json zu erzeugen, erhalte ich folgende Fehlermeldung:
Blinkpy Authentication Test
============================

Enter your Blink username (email): xxxxx@xxxxxxxx.xx
Enter your Blink password: xxxxxxxxxxxx

============================================================
BLINKPY AUTHENTICATION TEST
============================================================
Testing with username: xxxxx@xxxxxxxx.xx

[1/3] Attempting to start Blink session...
Login failed
Cannot setup Blink platform.
SUCCESS: Authentication completed without 2FA!

============================================================
TESTING BASIC FUNCTIONALITY
============================================================

[4/5] Refreshing camera data...

 FAILED during functionality test: 'NoneType' object has no attribute 'base_url'
Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0x7f8ba9190190>
Unclosed connector
connections: ['deque([(<aiohttp.client_proto.ResponseHandler object at 0x7f8ba917a090>, 31909.032269541)])']
connector: <aiohttp.connector.TCPConnector object at 0x7f8ba91902d0>

FAILED! Check the error messages above.
ZBox; RasPi 3B; RasPi Zero W; Homematic; Z-Wave; EnOcean, Shelly; DuoFern; Oregon- und Bresser-Sensoren; Steuerung Viessmann-Heizung; ESP32 und ESP8266 über MQTT; Arduino

juppzupp

sorry fürs delay. blinkpy muss upgedated werden
bitte probieren :
/opt/blink-bridge/venv/bin/pip install --upgrade blinkpy
/opt/blink-bridge/venv/binpython /opt/blink-bridge/test_blink_auth.py
 sudo systemctl restart blink-bridge
 sudo systemctl status blink-bridge

evtl verzeichnisse anpassen.

JoWiemann

Hallo,

mir ist gerade etwas aufgefallen. Das Topic armed wird nur bei den neuen Blink Kameras richtig auf true/false aktualisiert. Bei den älteren Kameras (Firmware 9.105) bleibt es immer true. Der set Befehl funktioniert bei allen einwandfrei.

Wie kann ich die Daten am Besten debuggen. Mit Python stehe ich so auf Kriegsfuß.

Grüße Jörg
Jörg Wiemann

RPi 4 B mit 4 GByte bookworm, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM; zigbee2mqtt

ioBroker als Datenlieferant für z.B. Anker, Samsung

juppzupp

Ich hab's gerade mit einer 7.102 probiert, da klappt es.
Nach dem 'set' muss man auf den nächsten Aktualisierungsdurchlauf warten.

JoWiemann

#7
Zitat von: juppzupp am 27 August 2026, 12:50:29Nach dem 'set' muss man auf den nächsten Aktualisierungsdurchlauf warten.
Hallo,

danke für das schnelle prüfen. Ich habe natürlich die Aktualisierung abgewartet. Auch habe ich es mit arm/disarm in der Blink App versucht. Zeigt das selbe Fehlerbild. Da ich eine andere Firmware habe, bräuchte ich Hilfestellung um Dir einen Debug Auszug bereitstellen zu können.

Grüße Jörg
Jörg Wiemann

RPi 4 B mit 4 GByte bookworm, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM; zigbee2mqtt

ioBroker als Datenlieferant für z.B. Anker, Samsung

juppzupp

da müsste man mal hier bei den issues stöbern : https://github.com/fronzbot/blinkpy oder dort anfragen. gehts um blink mini ?
https://github.com/fronzbot/blinkpy/issues/366
https://github.com/fronzbot/blinkpy/issues/224

da kann ich aber nicht wirklich helfen.

JoWiemann

Hallo,

die issuse helfen nicht weiter. Ich wollte eigentlich erst einmal sehen ob das Datum überhaupt in Deiner Bridge angeliefert wird. Oder ob es mit einem anderen Namen angeliefert wird. Das sollte doch möglich sein zu prüfen.

Grüße Jörg
Jörg Wiemann

RPi 4 B mit 4 GByte bookworm, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM; zigbee2mqtt

ioBroker als Datenlieferant für z.B. Anker, Samsung

juppzupp

der code liegt im ersten post, da siehst du welche blinkpy calls ausgeführt werden.
blink_instance.sync
blink_instance.cameras -> camera.arm,camera.motion_enabled,camera.attributes

es kann sein das du owl endpoints brauchst, aber das kann ich dir nicht sagen.