HomeAssistant(7) - HelloMorningStar/HomeAssistant GitHub Wiki

SONOFF(反复开关墙壁火线开关4次,可以复位Sonoff Tasmota)

1,MQTT

在Linux上安装MQTT broker 参考

sudo service mosquitto status
 mosquitto.service - LSB: mosquitto MQTT v3.1 message broker
   Loaded: loaded (/etc/init.d/mosquitto; generated)
   Active: active (running) since Mon 2019-05-06 14:40:03 CST; 1min 1s ago
     Docs: man:systemd-sysv-generator(8)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/mosquitto.service
           └─26379 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf

May 06 14:40:03 cat_cat systemd[1]: Starting LSB: mosquitto MQTT v3.1 message broker...
May 06 14:40:03 cat_cat mosquitto[26371]:  * Starting network daemon: mosquitto
May 06 14:40:03 cat_cat mosquitto[26371]:    ...done.
May 06 14:40:03 cat_cat systemd[1]: Started LSB: mosquitto MQTT v3.1 message broker.

测试:
发送消息:
mosquitto_pub -h 127.0.0.1 -t home-assistant/switch/1/on -m "Switch is ON"
或者在GUI发送消息:

接收消息:
mosquitto_sub -h 127.0.0.1 -v -t "home-assistant/#"

home-assistant/switch/1/on Switch is ON
home-assistant/switch/1/on test
home-assistant/switch/1/on gui test
home-assistant/switch/1/on hello mosquitto

启用自动发现,参考MQTT自动发现 On each Tasmota device which should be automatically discovered by Hass, enter the following commands in the web console: SetOption19 1 - Enables MQTT discovery\
进入设备控制台输入以上命令: http://192.168.2.173/cs?
更多命令参考:https://github.com/arendst/Sonoff-Tasmota/wiki/Commands
开关上电状态可以设置为PowerOnState 1这样就可以与物理开关状态一致(但是,物理开关关闭后sonoff在homeassistant就显示为不可用了),否则需要考虑增加射频开关(怎样增加射频开关?) 也可以参考Sonoff按钮总结

总结:

  1. 刷tasmota firmware;
  2. 配置wifi,配置MQTT host ip,开关的名字Topic别忘记取;
  3. 控制台启用自动发现SetOption19 1,物理开关状态设置 PowerOnState 1
  4. Use Backlog LedPower 0; SetOption31 1 to disable LED even when Wi-Fi or MQTT is not connected

添加温度和湿度传感器

DHT22
*确认配置和硬件连接正常情况下,遇到温湿度没有读数时,用墙壁开关断开再闭合

AM2301 + out -分别对应连接Sonoff 3.3V GPIO14 GND
Tasmota配置如下图

添加人体传感器

硬件连接如图,其中电源和GND分别连接Sonoff电影输出和GND,HC-SR501中间的out连接Sonoff GPIO14,JUMPER选择重复触发
执行“SwitchMode2 1”

注:如果放置在厨房,误触发可能电磁炉总电源未关闭导致(尤其在天黑以后比较明显,夜间如果不关闭电磁炉总电源容易误触发)



1.感应模块通电后有一分钟左右的初始化时间,在此期间模块会间隔地输出0-3 次,一分钟后进入待机状态。
2.应尽量避免灯光等干扰源近距离直射模块表面的透镜,以免引进干扰信号产生误动作;使用环境尽量避免流动的风,风也会对感应器造成干扰。
3.感应模块采用双元探头,探头的窗口为长方形,双元(A元B元)位于较长方向的两端,当人体从左到右或从右到左走过时,红外光谱到达双元的时间、距离有差值,差值越大,感应越灵敏,当人体从正面走向探头或从上到下或从下到上方向走过时,双元检测不到红外光谱距离的变化,无差值,因此感应不灵敏或不工作;所以安装感应器时应使探头双元的方向与人体活动最多的方向尽量相平行,保证人体经过时先后被探头双元所感应。为了增加感应角度范围,本模块采用圆形透镜,也使得探头四面都感应,但左右两侧仍然比上下两个方向感应范围大、灵敏度强,安装时仍须尽量按以上要求。
Sonoff配置
出现两个开关,其中一个作为开关正常使用,另外一个作为人体传感器ON/OFF状态显示
configurational.yaml配置如下:

binary_sensor:
  - platform: mqtt
    name: "PIR"
    qos: 1
    state_topic: "sonoff_MasterRoom_Lamp2/stat/POWER2"
    payload_on: "ON"
    payload_off: "OFF"
    device_class: motion
  - alias: turn on the lamp when human body sensor detect somebody in kitchen #
    initial_state: true
    hide_entity: true
    trigger:
      - platform: state
        entity_id: binary_sensor.pir
        to: 'on'
#    condition:
#      condition: or
#      conditions:
#      - condition: state
#        entity_id: script.timer_off1
#        state: 'on'
    action:
      - service: homeassistant.turn_on
        entity_id: script.timed_switch1

scripts.yaml配置如下:

#PIR 
timed_switch1:
  sequence:
    # Cancel ev. old timers
    - service: script.turn_off
      entity_id: script.timer_off1
    # Set new timer
    - service: script.turn_on
      entity_id: script.timer_off1
#    - condition: state
#      entity_id: switch.wall_switch_left_158d0002234aaf
#      state: 'off'
    - service: homeassistant.turn_on
      entity_id:
        - switch.wall_switch_left_158d0002234aaf
        - switch.chou_you_yan_ji #油烟机

timer_off1:
  sequence:
    - delay: '00:00:55'
    - service: homeassistant.turn_off
      entity_id:
        - switch.wall_switch_left_158d0002234aaf
        - switch.chou_you_yan_ji #油烟机

以上设置可以保证在人体传感器能够检测到人的情况下,不会因反复触发而开关电气,这里设置55秒内只要检测有人就会保持工作台灯和抽油烟机开启,人离开以后55秒内会关闭灯以及抽油烟机。
关于HC-SR501这篇文章写得很清楚了

我的焊接水平 —— 超级烂!!! GPIO14被我焊没了,改用GPIO3还是可以用的,不过只能用3.3V供电了,上220V SONOFF就不能正常工作。汲取的教训,后续Sonoff的焊接还可以,没有出现以上故障。

2,IFTTT

Sonoff用IFTTT不好玩,反应比较慢。

修改IP

root@ubuntu:~# vim /etc/netplan/50-cloud-init.yaml

network:
ethernets:
eth0:
addresses:
- 192.168.15.72/20
gateway4: 192.168.12.2
nameservers:
addresses:
- 223.5.5.5
search: []
optional: true
version: 2
执行命令 使配置生效

root@ubuntu:~# netplan apply

⚠️ **GitHub.com Fallback** ⚠️