分享ESPresense設定

知道ESPresense已經一段時間一直沒有去研究要怎麼玩
今天沒事閑來就摸索了一下
看了很多資料每個人的設定方式都不太相同
導致整個頭暈腦脹
後來終於摸索出了一個可行的方式
現在將自己摸索出來的方式分享給大家
希望能幫助到想要玩ESPresense的朋友

前置作業

  1. 先準備一顆具有藍芽的esp晶片(我習慣用esp32s,所以後面都是以esp32s當範例)
  2. HA安裝MQTT Explorer
    https://community.home-assistant.io/t/mqtt-explorer-addon/465758

正式開始

  1. 先前往ESPresense官網開始燒錄espresense firmware
    https://espresense.com/firmware

    image

等待安裝完成後設定wifi連線


image
在這邊遇到過第一個坑 轉很久 實際上已經連線完成
如果轉超過2分鐘可以檢查router是否已經連線取得ip
是的話直接F5刷新
重新connect設備有時候會跟一開始一樣只有兩個或者是三個選項關掉再重新連
出現四個選項才是正常

  1. 設定espresense
    選擇visit device
    此時會開啟espresense的設定頁面
    這邊我們先做第一次的初次設定先將這顆espresenst加入HA裏面

    依序輸入房間名稱 MQTT資料 儲存後重開設備

    重開後即可在MQTT裡面就可以看到設備已經抓到

選擇Logs&console



此時就可以看到附近的藍芽設備慢慢的被掃進來

  1. 設定 Mqtt Explorer



    依序輸入MQTT Server資料設好儲存連線
    image
    會列出你的所有mqtt的連線資料選擇 espresense

    在rooms就能看到剛剛設定的資料

  2. 抓取要連線的手機資訊
    有很多方式可以抓手機的資料這邊我只列出其中一種個人覺得簡單的方式
    因我只有iphone所以我只用iphone舉例
    連到espresense的設備綁定頁 http://espresense.ip/ui (注意是espresense的ip)


    在name中輸入設備名稱
    因我們只是要取得設備的資訊而已等下會另外處理所以隨便輸入另外一個即可
    後續會把這個資料砍掉
    設好以後確認
    espresense會開啟藍芽配對模式
    此時打開手機的藍牙搜尋espresense



    配對完後即會馬上斷開這是正常的不用擔心
    回到MQTT Explorer

    此時可以看到剛剛連接的設備可以在settings這邊看到
    確認name是否跟你剛剛設定的一樣
    將irk:xxxxxxxxxxxx複製下來此資料後續需要用到
    複製下來後即可以將此設定資料刪除了

5.最後的設定
依照官方資料須將下列資料加入 configuration.yaml 裏面
也可放在你習慣的yaml裏面

sensor:
# One entry for each beacon you want to track
  - platform: mqtt_room
    device_id: "iTrack:xxxxxxxxxxxx"
    name: 'ESP Keys'
    state_topic: 'espresense/devices/iTrack:xxxxxxxxxxxx'
    timeout: 10
    away_timeout: 120
  - platform: mqtt_room
    device_id: "iBeacon:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3-58241"
    name: 'ESP Chipolo'
    state_topic: 'espresense/devices/iBeacon:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3-58241'
    timeout: 10
    away_timeout: 120

此時將剛剛複製下來的irk資料填入


返回espresense 設定頁面

將irk資料填入此欄位 只需要輸入irk:後面的32碼即可
如果有兩個以上設備每個irk code之間用空格隔開
中間不要加入任何符號
設定好後儲存檢查沒有問題重開HA以及espresense

重開後即可在實體找到剛剛設定的設備


以上為這次的分享
希望能幫助到有需要的人

後記

  1. 第二顆開始只要照著1. 2.設定好esp晶片接入HA
    再將第一顆 scanning 的資料複製過去即可

  2. apple watch irk取得方式
    依照官方資料
    https://espresense.com/beacons/apple


    在取得password時請注意只要找到

	<key>Remote IRK</key>
	<data>
	xxxxxxxxxxxxxxxxxxxx
	</data>

將Remote IRK data裡面的資料複製出來
在輸入官方的欄位去產出32碼的irk key即可

至於要怎麼調整範圍就給各位自己去摸索了

2023.7.29
新增資料
將sensor改為device_tracker可以加入Person

automation:    
  - alias: "手機轉換為裝置"
    description: ""
    trigger:
      - platform: state
        entity_id:
          - sensor.your_espresense_device_id
    condition: []
    action:
      - service: device_tracker.see
        data:
          dev_id: your_device_id
          location_name: >
            {% if trigger.to_state.state in ['bor_room', 'living_room'] %}
              home
            {% elif trigger.to_state.state == 'not_home' %}
              not_home
            {% else %}
              unknown_room
            {% endif %}
    mode: single
    max: 10

sensor.your_espresense_device_id 替換成你自己的
device_id: 自己定義要顯示的名稱
location_name: >
{% if trigger.to_state.state in [‘bor_room’, ‘living_room’] %}
這段請改房間名稱與你的相符即可
將上段code加入 ESPresense設定或者加在automation.yaml都可以

3個讚

分享一個小秘訣
如果, 都確定好, 要 scan 的 devices (iphone, android, apple watch)
有一個欄位是 filtering, 可以只知的 裝置丟給 mqtt broker , 可以減輕 mqtt broker 的訊息量

2個讚

ESPresense 重要的是, 二個參數要特別調整,
一個是

Calibration :information_source:

Rssi expected from a 0dBm transmitter at 1 meter (NOT used for iBeacons or Eddystone)

這個可以再精準知道 手機的位置. 調整方式, 是先把手機放在 basestation 一公尺的位置, 然後, 觀察它大概的 rssi 值, 再把 rssi 值寫在這個欄位

另一個是

Filtering :information_source:

Maximum distance to report (in meters):
這個可以依據房間大小, 定出最大要回報的距離. 對於 room-presense 很有幫助

其他還有一些參數, 也可以依照自己的狀況去調整, 例如, 多久沒有掃到, 就視為不在了

1個讚

請問一下大大,設定好的EPS32S都是用什麼東西保護?保護殼還是什麼的?

自己弄的3D列印外殼

請問HA在附加元件內無法安裝MQTT Explorer 有可能是什麼原因,還是我操作錯誤

有出現什麼訊息?


刷了好幾次都這樣 ,不知是那裡出了錯


但在WIFI表有找到ESPRESENSE

http://espresense.ip/ui
進不去

你的那顆espresense的ip不是 espresense.ip

針對Espresense的sensor轉device tracker,小弟分享一個只要一個自動化就可以把全部的sensor分別轉換成對應的device tracker實體

alias: "espresense:sensor to device tracker"
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.xxxxx #有幾個sensor就在下面加入
      - sensor.xxxxxxxx
      - sensor.xxxxx
      - sensor.xxxxx
      - sensor.xxxxxxx
    enabled: true
condition: []
action:
  - service: device_tracker.see
    data:
      dev_id: "{{ trigger.entity_id.split('.')[1] }}"
      location_name: |
        {% set locations = ['601b8e', '9020f0', 'ec3af0'] %} #引號內的名稱需要改成自己的esp偵測器名稱
        {% if trigger.to_state.state in locations %}
          home
        {% elif trigger.to_state.state not in locations %}
          not_home
        {% else %}
          unknown
        {% endif %}
      source_type: gps
mode: restart

請問esp32 為什麼常斷線
有什麼 地方要檢查的嗎?

檢查你家網路是否有問題