本帖最后由 neroxps 于 2018-7-31 17:55 编辑
理论上兼容新旧大方设备(新的没有限位传感器),但我没有旧大方测试,而也不知道不同的大方电机是不是步长不一样,希望有设备的同学使用后反馈下谢谢
前言
在囧帅发了破解小米大方摄像头接入HASS 这个帖子,我就第一时间下单买了大方,并且接入 HA。
但发现 DAFANG_HACK 的云台控制有点不合理,另我也希望设置预置点,例如有人打开家里的门后云台立即对准家里的门,触发自动化发送视频流给手机。
所以就开始研究 DAFANG_HACK 的 motor 这个电机命令。
电机归零问题
源码:https://github.com/EliasKotlyar/Xiaomi-Dafang-Software/blob/master/motor/motor.c
这个是基于君正 T20 的电机驱动编写的一个控制程序,可以控制电机的步长和返回电机的步长信息。
[root@DAFANG:~]# cd /system/sdcard/bin/
[root@DAFANG:bin]# ./motor -d u -s 0
y_max: 0
y_min: 0
x_max: 0
x_min: 0
x_steps: 1420
y_steps: 430
max 和 min 其实是大方早期版本会在电路板上安装一个摇摆限位开关,通过 gpio 来获得限位开关状态,当max 或者 min 为 1 的时候,证明电机已经移动到最大或者最小位置。
但很不幸新版的大方已经阉割了这两个限位开关,我观察小米的固件开机的时候会移动到右侧尽头再移动回左侧尽头,右侧尽头的时候明显电机还是会继续移动不会停(大概2秒),可能是小米使用了新的电机驱动,可以反馈电机的电流(我也不太懂)还是电压?能得知目前电机是否已到尽头。
研究多番无果后,我只能修改电机命令,加入了 f 参数,让电机强制左移和下移最大的步数,最后强制归零。
代码见:https://github.com/neroxps/Xiaomi-Dafang-Software/commit/de4e4dfd3303f1f407a7d86a9252306bffadc05c
对于一个不会C语言的小白来说,我也只能做到这样了。
如何使用?
以下操作建立在你已经破解了小米大方的基础上,如果没有破解,请参考破解小米大方摄像头接入HASS 这个帖子。
- 下载 New_Dafang.zip
- 备份原破解大方 TF 卡内容。
- 解压后将 firmware_mod 里面的所有文件复制到 TF 卡根目录中。
- 恢复之前备份的 config 内容至 TF 卡中(注意:osd.conf)除外,否则界面没有坐标轴看
- 插入 TF 卡到大方开机即可。
配置 homeassistant (以下代码仅供参考,附件中有最新的配置)
input_number:
dafang_ptz_x:
name: X
initial: 0
min: -1250
max: 1250
step: 10
dafang_ptz_y:
name: Y
initial: 0
min: -400
max: 400
step: 10
# http://username:password@DAFANG_IP/cgi-bin/action.cgi?cmd=motor_PTZ&x_axis=1250&y_axis=400
# http://username:password@DAFANG_IP/cgi-bin/action.cgi?cmd=motor_PTZ&x_axis={{ states("input_number.dafang_ptz_x") | int }}&y_axis={{ states("input_number.dafang_ptz_y") | int }}
shell_command:
set_dafang_ptz: 'wget --output-document=/dev/null "http://root:[email protected]/cgi-bin/action.cgi?cmd=motor_PTZ&x_axis={{ states("input_number.dafang_ptz_x") | int }}&y_axis={{ states("input_number.dafang_ptz_y") | int }}"'
open_door_set_ptz: 'wget --output-document=/dev/null "http://root:[email protected]/cgi-bin/action.cgi?cmd=motor_PTZ&x_axis=1070&y_axis=400"'
group:
dafang_ptz:
name: 大方云台控制
view: yes
entities:
- camera.home_cctv
- input_number.dafang_ptz_x
- input_number.dafang_ptz_y
automation:
- alias: set_dafang_ptz
trigger:
- platform: state
entity_id: input_number.dafang_ptz_x
- platform: state
entity_id: input_number.dafang_ptz_y
action:
service: shell_command.set_dafang_ptz
- alias: open_door_set_ptz
trigger:
- platform: state
entity_id: binary_sensor.door_window_sensor_158d0001f9e7ad
from: 'off'
to: 'on'
action:
- service: shell_command.open_door_set_ptz
其中 root:ismart12 为登陆大方http的账号密码
关于 MQTT 报错问题
这个报错是因为自动发现的脚本云台控制部分是用窗帘组件,这个组件本身限制了行程最大是100,而电机的坐标步数是超过一百,故此不用mqtt自动发现功能就不会报错。
我上传了我的配置文件,可供参考。也可以参考 https://raw.githubusercontent.com/neroxps/home-assistant-config/master/packages/CCTV/dafang.yaml 我的配置文件,这边会是最新的。
|