『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
楼主: 祁连山路

[基础教程] ,判断离家回家你们用的什么方法。

[复制链接]

4

主题

159

帖子

1204

积分

金牌会员

Rank: 6Rank: 6

积分
1204
金钱
1045
HASS币
0
发表于 2021-10-27 20:44:01 | 显示全部楼层
ios官方客户端,给予始终定位权限即可
回复

使用道具 举报

14

主题

191

帖子

888

积分

高级会员

Rank: 4

积分
888
金钱
697
HASS币
0
发表于 2021-10-27 23:38:22 | 显示全部楼层
用手机作为tracker

想省电,可以接受1分钟左右的延迟,在configuration里面用ping手机的IP作为手机是否在家的判断
不在乎电,或者不能接受延迟,手机上安装NextTracks这个App,可以监控具体到米,你人刚进小区就可以让家里的电器都准备好了
回复

使用道具 举报

0

主题

43

帖子

465

积分

中级会员

Rank: 3Rank: 3

积分
465
金钱
422
HASS币
0
发表于 2021-11-24 09:45:44 | 显示全部楼层
本帖最后由 lm317379829 于 2021-11-24 09:47 编辑

手机连接局域网作为判定。
1 路由器绑定手机的mac-ip,自带Nmap Tracker扫描固定IP。优点:简便;缺点:离家判定延时较长。
2 路由器绑定手机的mac-ip,HACS添加ssh sensor,利用ssh连接路由器获取路由信息进行判定。我家软路由没有wifi,所以获取arp信息作为判定,如果有wifi的,可以以连接wifi作为判定。优点:判定迅速,基本无延迟;缺点:arp缓存老化,呈现stale状态,造成设备明明离线了但是还会显示在线,通过在路由器上定期执行ping -c 1 stale状态的ip,可以解决。
回复

使用道具 举报

15

主题

194

帖子

1910

积分

论坛技术达人

积分
1910
金钱
1696
HASS币
40
发表于 2021-11-24 13:45:57 | 显示全部楼层
我的判断比较复杂,  贴个package文件片段,  每个家庭成员的状态(到家,在家,短暂离开,离开, 不在家), 在家人数统计, 家里有人, 家里所有人都离开, 各个状态适用不同的场景。   到家状态主要通过地理位置、开门、智能锁、wifi跟踪多手段确认,对于我基本够用了。


input_select:
  tgm_status_dropdown:
    options:
      - Home
      - Arrived
      - Left
      - Away
      - Extended
    initial: Home

sensor:
  - platform: template
    sensors:
      tgm_status:
        value_template: "{{ states.input_select.tgm_status_dropdown.state }}"
        friendly_name: 'tgm'

      # people_home_count:  在家人数
      people_home_count:
        friendly_name: '在家人数'
        value_template: >
          {% set count = 0 %}
          {% if is_state("sensor.tgm_status", "Home") %}
             {% set count = count + 1 %}
          {% endif %}
          {% if is_state("sensor.x01_status", "Home") %}
             {% set count = count + 1 %}
          {% endif %}
          {% if is_state("sensor.x02_status", "Home") %}
             {% set count = count + 1 %}
          {% endif %}
          {{count}}

      # 在家人数>0  is_people_home:true   不然 false  确认是否有人在家用
      is_people_home:
         friendly_name: '在家'
         value_template: >
          {% set state = true %}
          {% if is_state("sensor.people_home_count", "0") %}
             {% set state = false %}
          {% endif %}
          {{state}}

      # 家里是否无人,都已离开  true /false
      is_people_away:
         friendly_name: '离家'
         value_template: >
           {% set state = false %}
           {%
             if is_state("sensor.people_home_count", "0")
                and (is_state("sensor.tgm_status", "Away") or is_state("sensor.tgm_status", "Extended"))
                and (is_state("sensor.x01_status", "Away") or is_state("sensor.x01_status", "Extended"))
                and (is_state("sensor.x02_status", "Away") or is_state("sensor.x02_status", "Extended"))
           %}
             {% set state = true %}
           {% endif %}
           {{state}}

      # 确定person 是否在家,因person 可能状态为其它zone,故用此判断是否home,not_home
      person_tgm_state:
         value_template: >
          {% set state = "not_home" %}
          {% if is_state("person.tgm", "home") %}
             {% set state = "home" %}
          {% endif %}
          {{state}}

   

automation:
  ######################################
  # Arrived  到家
  # Home  在家 (到家后600秒,或开门确认到家)
  # Left  短暂离开(小于10分钟,可能的wifi暂时不在线,连不上,卫星漂移等情况)
  # Away  离家 (离开10分钟后)
  # Extended 不在家 (离家24hour)
  #######################################
  - alias: Mark tgm as just arrived
    initial_state: true
    trigger:
    - platform: state
      entity_id: sensor.person_tgm_state
      from: not_home
      to: home
    condition:
      condition: or
      conditions:
      - condition: state
        entity_id: sensor.tgm_status
        state: Away
      - condition: state
        entity_id: sensor.tgm_status
        state: Extended
    action:
    - service: input_select.select_option
      data:
        entity_id: input_select.tgm_status_dropdown
        option: Arrived

  - alias: Mark tgm as home
    initial_state: false
    trigger:
    - platform: state
      entity_id: input_select.tgm_status_dropdown
      to: Arrived
      for:
        seconds: 600
    action:
    - service: input_select.select_option
      data:
        entity_id: input_select.tgm_status_dropdown
        option: Home

  - alias: Mark tgm as home4
    initial_state: true
    trigger:
    - platform: state
      entity_id: sensor.lock_opener
      to: tgm
    action:
    - service: input_select.select_option
      data:
        entity_id: input_select.tgm_status_dropdown
        option: Home

  - alias: Mark tgm as home3
    initial_state: true
    trigger:
    - platform: state
      entity_id: sensor.person_tgm_state
      from: not_home
      to: home
    condition:
      condition: state
      entity_id: sensor.tgm_status
      state: Left
    action:
    - service: input_select.select_option
      data:
        entity_id: input_select.tgm_status_dropdown
        option: Home

  - alias: Mark tgm as home2
    initial_state: true
    trigger:
    - platform: state
      entity_id: binary_sensor.door_window_sensor_158d000233169f
      from: 'off'
      to: 'on'
    condition:
      condition: state
      entity_id: input_select.tgm_status_dropdown
      state: Arrived
    action:
    - service: input_select.select_option
      data:
        entity_id: input_select.tgm_status_dropdown
        option: Home

  - alias: Mark tgm as just left
    initial_state: true
    trigger:
    - platform: state
      entity_id: sensor.person_tgm_state
      from: home
      to: not_home
    action:
    - service: input_select.select_option
      data:
        entity_id: input_select.tgm_status_dropdown
        option: Left

  - alias: Mark tgm as away
    initial_state: true
    trigger:
    - platform: state
      entity_id: input_select.tgm_status_dropdown
      to: Left
      for:
        minutes: 10
    action:
    - service: input_select.select_option
      data:
        entity_id: input_select.tgm_status_dropdown
        option: Away

  - alias: Mark tgm as away2
    initial_state: true
    trigger:
    - platform: homeassistant
      event: start
    condition:
      condition: state
      entity_id: sensor.person_tgm_state
      state: not_home
    action:
    - service: input_select.select_option
      data:
        entity_id: input_select.tgm_status_dropdown
        option: Away

  - alias: Mark tgm as extended away
    initial_state: true
    trigger:
    - platform: state
      entity_id: input_select.tgm_status_dropdown
      to: Away
      for:
        hours: 24
    action:
    - service: input_select.select_option
      data_template:
        entity_id: input_select.tgm_status_dropdown
        option: Extended
回复

使用道具 举报

5

主题

68

帖子

270

积分

中级会员

Rank: 3Rank: 3

积分
270
金钱
202
HASS币
0
发表于 2021-12-11 22:58:17 | 显示全部楼层
sasukebinbin 发表于 2021-10-24 15:53
ESP32蓝牙,之前论坛有人发过教程,不过适合iOS而已
之前用Homeassistant自带的device tracker利用GPS, 缺点 ...

利用GPS很耗电应该
回复

使用道具 举报

24

主题

623

帖子

2756

积分

金牌会员

Rank: 6Rank: 6

积分
2756
金钱
2123
HASS币
40
发表于 2021-12-12 22:56:59 | 显示全部楼层
wugeng668 发表于 2021-12-11 22:58
利用GPS很耗电应该

其实还好. 不想用GPS那就用蓝牙最好.目前用来下超级稳定.
回复

使用道具 举报

16

主题

271

帖子

2221

积分

金牌会员

Rank: 6Rank: 6

积分
2221
金钱
1950
HASS币
10
发表于 2021-12-13 16:23:59 | 显示全部楼层
sasukebinbin 发表于 2021-12-12 22:56
其实还好. 不想用GPS那就用蓝牙最好.目前用来下超级稳定.

蓝牙 你用的哪个方案?
回复

使用道具 举报

5

主题

68

帖子

270

积分

中级会员

Rank: 3Rank: 3

积分
270
金钱
202
HASS币
0
发表于 2021-12-13 22:13:39 | 显示全部楼层
sasukebinbin 发表于 2021-12-12 22:56
其实还好. 不想用GPS那就用蓝牙最好.目前用来下超级稳定.

我用群晖虚拟机,可惜DSM7 官方不支持蓝牙了,我家里还有之前电脑用的蓝牙适配器呢,浪费了
回复

使用道具 举报

24

主题

623

帖子

2756

积分

金牌会员

Rank: 6Rank: 6

积分
2756
金钱
2123
HASS币
40
发表于 2021-12-13 22:20:09 | 显示全部楼层
我是用论坛里的ESP32的方案. 但是只针对iOS有效.
如果是安卓的话,ESPHome应该就可以吧.
回复

使用道具 举报

0

主题

5

帖子

24

积分

新手上路

Rank: 1

积分
24
金钱
19
HASS币
0
发表于 2022-2-22 00:49:04 | 显示全部楼层

可以详细一点吗?详细!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-29 16:50 , Processed in 0.608219 second(s), 29 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表