听说标题长才有人看
零
之前看blindlight大神的帖子被安利了Appdaemon,最近腾出时间看了几天官方的E文教程,然后想来实践下。于是翻出角落里N久前刷好了Tasmota固件然后吃灰的Sonoff、一时兴起买的光照度传感器和红外传感器,就决定做个简单的走廊灯自动控制吧。期间还是折腾了一番,感觉Tasmota还有Appdaemon还有太多的东西要学了,还是先写点东西作个总结吧。
本来只想附个代码为论坛不多的Appdaemon资料充充数算了,结果强迫症发作还是把整个流程都介绍了。所参考的各位大大教程都标注出来了,涉及的东西有点多,自行按需食用。
PS:因为实践时间跨度有点长,估计会有遗漏的地方,以出处为准吧。
PS2:代码中有中文的地方请自行替换
一、准备
1.硬件(买买买)
- sonoff basic(淘宝28元左右那款)
- BH1750光照度传感器(6元左右)
- HC-SR501人体传感器(6元左右)
- CH340G USB转TTL模块(8元左右)
- 杜邦线7条
- 排针(2.54MM间距,17MM长,买长点容易掰弯走线)
- 电烙铁+焊锡+松香
2.软件环境
3.预期效果
- 光线暗并且感应到人,开灯
- 感应到没人,延时一段时间(自定义)后关灯
HC-SR501检测到人之后设置一个计时器,计时器结束后才输出低电平。期间检测到人活动,会重置计时器,所以关灯的时间是HC-SR501的计时器(可通过旋钮调)+自定义时间
二、Sonoff
Step1.刷固件
先把排针焊接在中间的5个孔上
我买的两个焊盘都堵上了,试过吸锡器也不好用,最后是把排针拆成一个一个,加热锡盘时候把排针顶进去。
然后按alei643大的教程刷固件,注意com参数的Flash Mode: DIO要改成DOUT!
Step2.接线
传感器需要共用3.3V和GND供电,可以把杜邦线的头抽出来(挑起条形的挡片就能抽出来了),然后把另一根线的头剪掉、剥线绕在抽出。
光照传感器 - Sonoff
VCC - 3.3V
SCL - GPIO 3
SDA - GPIO 1
GND - GND
人体传感器 - Sonoff
VCC - 3.3V
OUT - GPIO 14
GND - GND
PS:人体传感器一般供电是5V,可能是3.3V供电影响,距离旋钮不能调大,不然好像工作不正常,具体请自行测试。
Step3.配置
设置时区
主页>Console
输入 Timezone 8
设置switch2的模式
主页>Console
输入 SwitchMode2 1
PS:默认工作模式是0,详细解释可见帖子
设置传感器上报间隔
主页>Configuration>Configure Logging
配置Telemetry period,最小是10,一般60就可以
PS:这个只影响照度的上传频率,因为代码可以通过http接口主动取数据,不用担心设置过大影响准确率
设置mqtt
主页>Configuration>Configure MQTT
按mosquitto的设置配置Host、Port、User、Password
主页>Configuration>Configure Other
勾上MQTT enable
设置数据端口(详见27hh大的教程)
主页>Configuration>Configure Module
GPIO 4设置成Relay2,GPIO 14设置成Switch2。原理应该是借助Relay的状态来间接传递人体传感器的输出(有人>高电平>Switch2接通>Relay2接通>MQTT传递状态)。
GPIO 3、GPIO 1按Step2的接线分别设置SCL、SDA,接收光照传感器数据。
三、Homeassistant
增加一个sensor,用于接收光照度信息;增加一个binary_sensor,用于接收触发状态;增加mqtt,与mosquitto主机通信;增加一个light/switch,Sonoff控制的灯。
sensor:
- platform: mqtt
name: illuminance_hallway
state_topic: "tele/sonoff/SENSOR"
value_template: "{{ value_json['BH1750'].Illuminance }}"
unit_of_measurement: "lux"
binary_sensor:
- platform: mqtt
name: motion_hallway
qos: 1
state_topic: "stat/sonoff/POWER2"
payload_on: "ON"
payload_off: "OFF"
device_class: motion
mqtt:
# MQTT Broker的IP地址或者域名
broker: [mosquitto主机的ip]
# MQTT Broker的端口号,缺省为1883
port: 1883
# 用户名
username: [自定义]
# 密码
password: [自定义]
light:
- platform: mqtt
name: hallway
state_topic: "stat/sonoff/POWER1"
command_topic: "cmnd/sonoff/POWER1"
qos: 1
payload_on: "ON"
payload_off: "OFF"
retain: true
四、Appdaemon