homebridge-dafang
homebridge-dafang copied to clipboard
Homebridge Plugin for Xiaomi Dafang / Wyze Cam IP Camera => Hey Siri, Start Video Recording
homebridge-dafang
Homebridge Plugin for Xiaomi Dafang / Wyze Camera
Installation
- Install ffmpeg on your device
$ brew install ffmpeg --with-openh264 --with-fdk-aac
- Install the plugin using:
$ npm install -g --unsafe-perm homebridge
$ npm install -g --unsafe-perm homebridge-dafang
- Install CFW on camera and set up MQTT. Refer to Setup Readme
- Edit config.json and add the plugin. Refer to
config-sample.jsonin repository. - Run Homebridge
- Add extra camera accessories in Home app. The setup code is the same as in homebridge.You can go into ->
+ -> Add New Accessory -> Add Manually -> Add Homebridge Pin -> Select Camera -> Add
Supported Cameras :
| Name | Picture |
|---|---|
| Xiaomi Dafang | ![]() |
| Xiaomi Xiaofang 1S | ![]() |
| Wyzecam Pan | ![]() |
| Wyzecam V2 | ![]() |
| Sannce I21AG, MixSight HX-I2110T2, WanScam HW0036, Escam G02, Digoo BB-M2 | ![]() |
| Any other Device with Ingenic T10/T20 Device | ![]() |
Todo :
- [ ] Timelapse Switch
- [ ] Intercom 2 Way Audio **
Accessories :
| Accessory | Type | Description | Config |
|---|---|---|---|
| Motion Sensor | motionSensor |
Alerts if Motion is Detected | threshold(optional) => In ms. |
| Rich Motion Sensor | richMotionSensor |
Alerts if Motion is Detected (Rich Notifications) | threshold(optional) => In ms. |
| Night Vision Sensor | nightVisionSensor |
Alerts if Night Mode is Detected | threshold(optional) => In ms. |
| Night Vision Switch | nightVisionSwitch |
Toggles Night Mode on Camera => IR_LED ON IR_CUT OFF | None |
| Brightness Lux Sensor | brightness |
Brightness Lux Sensor | None |
| Automatic Night Mode Toggle Switch | autoNightVisionSwitch |
Toggles Automatic Night Mode on Camera | None |
| Automatic Motion Tracking Switch | autoMotionTrackingSwitch |
Toggles Automatic Motion Tracking on Dafang | None |
| Move/Rotate Camera Motor | moveCamera |
Moves Dafang Camera Horizontal/Vertical right/left up/down Motor | axis(required) => horizontal/vertical, direction(required) => left/right for horizontal and up/down for vertical |
| Record Video+Audio | recordVideo |
Records Video + Audio Toggle Switch. Video(mp4) files are saved in local machine running homebridge | None |
| Record Audio Only | recordAudio |
Records Audio Toggle Switch. Audio(aac) files are saved in local machine running homebridge | None |
| Capture Image | captureImage |
Captures Image from Camera and saves to configured folder | None |
| Recorded Media Storage Sensor | storageSensor |
Alerts when recorded media folder storage is full on the system due to recordings. You can set custom disk space in MB in config | None |
| Clear Storage Switch | clearStorage |
Clears All Recordings | None |
| Reset FFMEPG Switch | resetFFMPEG |
Kills all FFMPEG Zombie Scripts. Audio/Video Recordings will restart recording. | None |
| Motion Detection Switch | motionDetection |
Enables/Disable Motion Detection. Turning off this switch will stop sending motion detection alerts. | None |
| RTSP Server Switch | rtspSwitch |
Debug Switch to turn on/off RTSP H264 Stream Server. | None |
| MJPEG Server Switch | mjpegSwitch |
Debug Switch to turn on/off MJPEG Server | None |
| Recalibrate Motor Switch | recalibrateSwitch |
Debug Switch to Re-Calibrate Camera Motor. | None |
| Restart Camera Switch | restartSwitch |
Debug Switch to restart Camera. | None |
| Re-Mount SD Card RW Switch | remountSwitch |
Debug Switch to re mount sd card with RW permission. It prevents SD Card Failures like stuck RTSP Stream. | None |
Threshold => Lesser Threshold, More Accuracy. Dafang Motion detection is sensitive, and it toggles very quickly, to keep the state of sensor more stable little threshold will delay frequent alerts
Demo :
Sorry for crappy quality. Tested on Rpi + Slow Network
Advanced Demo :

Simple Demo :

Rich Notifications :
Plugin Config :
| Config | Type | Description | Config |
|---|---|---|---|
| mqtt.hostBroker | bool | Set true to host MQTT Locally, set false to connect to external MQTT Broker. | Required |
| cameras | Array (Object) | Can add Multiple Cameras | Required |
Camera Config :
| Config | Type | Description | Config |
|---|---|---|---|
| cameraRTSPStreamUrl | string | RTSP Stream Url e.g. rtsp://192.168.1.2:8554/unicast |
Required |
| disableStream | bool | Set true to stream camera, set false to disable camera view | Optional |
| mqttTopic | string | Each Dafang Device must have a unique topic. Topic should match for each corresponding camera accessory | Required |
| folder | string | Absolute path of directory where recordings/images will be saved | Required |
| segmentLength | number | Length of each video file. (in seconds). Each recording will be saved in segmented videos. Default : 60 (1 minute) | Optional |
| maxDirSize | number | Max Size of folder (in mb) where recordings will be saved. Default : 2048 (2GB) | Optional |
| checkStorageSizeInterval | number | Time in seconds to re check recording folder size for storageSensor. Default : 300 (5 min) |
Optional |
| recordingDirectoryPathFormat | string | DateTime format for Recordings Directory Path. Default : MMM-Do-YY |
Optional |
| recordingFilenameFormat | string | DateTime format for Recordings Filename. Default : YYYY-M-D-h-mm-ss |
Optional |
Refer to https://momentjscom.readthedocs.io/en/latest/moment/04-displaying/01-format/ for custom DirectoryPath/FileName formats for recordings..
{
"platforms": [
{
"platform": "Dafang",
"mqtt": {
"hostBroker": true,
"port": 1883,
"host": "localhost",
"debug": true,
"mongoUrl": "mongodb://localhost:27017/mqtt"
},
"cameras": [{
"cameraName": "My Dafang",
"cameraRTSPStreamUrl": "rtsp://192.168.1.12:8554/unicast",
"mqttTopic": "myhome/dafang/#",
"folder": "/Users/sahilchaddha/Sahil/Recordings/",
"accessories": [
{
"name": "Living Room Motion Sensor",
"type": "richMotionSensor",
"threshold": 300000
},
{
"name": "Living Room Auto Motion Tracking Switch",
"type": "autoMotionTrackingSwitch"
},
{
"name": "Living Room Night Vision Sensor",
"type": "nightVisionSensor",
"threshold": 0
},
{
"name": "Living Room Night Vision Switch",
"type": "nightVisionSwitch"
},
{
"name": "Living Room Auto Night Vision Switch",
"type": "autoNightVisionSwitch"
},
{
"name": "Horizontal Left",
"type": "moveCamera",
"axis": "horizontal",
"direction": "left"
},
{
"name": "Horizontal Right",
"type": "moveCamera",
"axis": "horizontal",
"direction": "right"
},
{
"name": "Vertical Up",
"type": "moveCamera",
"axis": "vertical",
"direction": "up"
},
{
"name": "Vertical Down",
"type": "moveCamera",
"axis": "vertical",
"direction": "down"
},
{
"name": "Record Video",
"type": "recordVideo"
},
{
"name": "Record Audio",
"type": "recordAudio"
},
{
"name": "Capture Image",
"type": "captureImage"
},
{
"name": "RPi Storage Sensor",
"type": "storageSensor"
},
{
"name": "Clear Storage Switch",
"type": "clearStorage"
},
{
"name": "Reset Streaming",
"type": "resetFFMPEG"
},
{
"name": "Camera Brightness",
"type": "brightness"
}
]
}]
}
]
}
Lint
$ npm run lint
Need Help ?
Get Slack Invite => https://slackin-znyruquwmv.now.sh/
Slack Channel => https://homebridgeteam.slack.com/messages/homebridge-dafang
Slack User => @sahilchaddha
Author
Sahil Chaddha




