利用Home Assistant實現馬桶沖泡泡的自動化

原本使用七年左右的HCG免治馬桶座壞了,後來在某間衛浴公司物色新的免治馬桶座時,用了他們的國際牌全自動洗淨馬桶,是具有泡沫洗淨功能的機型,泡沫洗淨後剩餘的泡沫會覆蓋於水面上,達到防止濺水、沾黏和臭味擴散的作用,雖然覺得這個功能很厲害,但問了一下發現價格也滿厲害的,所以後來也就沒放在心上了。

幾天後,我在蝦皮閒晃時看到馬桶泡泡機這種產品,這類外掛的泡泡機需要透過手動操作機器上的按鍵或是遙控器來啟動,當下就覺得應該可以來搞一些自動化,不需要上完廁所還要多一個啟動泡泡機的動作。

自動化情境

  1. 上完廁所後,系统自動沖泡泡。
  2. 當有人進入廁所,若離上次沖泡泡超過四小時以上,系统會自己補一次泡泡。
  3. 每小時系統自行確認一次,若離上次沖泡泡超過四小時以上,會再自己補一次泡泡。

情境2和情境3是因為泡泡會隨著時間消耗掉,所以若是要保持泡泡的覆蓋率,大約四小時要補一次泡泡。

需要的材料

  1. 帶有紅外線遙控的馬桶泡泡機一台。
  2. 紅外線遙控發射器一台(Broadlink RM4 Pro)。
  3. 浮球開關一個。
  4. Aqura水浸感應器一個。
  5. 適當尺寸的盒子一個。

自動化的思路

要實現情境1,我將浮球開關的導線二條導線分別鎖在Aqura水浸感應器的二個接點上,然後將浮球開關鎖在盒子上,水浸感應器藏在盒子內。最後將容器固定在馬桶水箱內,此時需滿足水箱滿水位時浮球必須是浮起的。

沖水後,水箱內的水由滿水位下降的過程中浮球會下降,這時浮球開關狀態會改變(斷路變成短路或是相反),這個狀態的改變對應於Aqura水浸感應器就是on/off的切換。Home Assistant的自動化只需要監聽Aqura水浸感應器on/off狀態的改變並下令沖泡泡即可。

裝好後測試一下確認沒問題

情境1的Automation程式碼如下,當浮球浮起(水浸感應器為off)轉為降下(水浸感應器為on)後10秒開始沖泡泡。

- alias: Device:Bubble_Machine_AfterUse_Refill
  trigger:
    - platform: state
      entity_id: binary_sensor.bathroom2ff_bubblemachine_leaksensor_moisture
      from: "off"
      to: "on"
      for:
        seconds: 10
  action:
    - service: script.turn_on
      data:
        entity_id: script.bubble_machine_toggle
  mode: queued

script.bubble_machine_toggle的程式碼如下

bubble_machine_toggle:
  alias: Bubble_Machine_Toggle
  sequence:
    - service: counter.increment
      entity_id: counter.bubble_machine_refill
    - service: remote.send_command
      data:
        command: toggle
        device: bubble_machine
      target:
        entity_id: remote.broadlink_rm4pro_bathroom2ff

沒有將script的內容放到Automation的Action中是因為需要把上一次沖泡泡的時間記錄下來,這樣才能做到情境2和情境3「超過四小時以上」的判斷,只需計算現在時間與script.bubble_machine_toggle最後觸發的時間差即可。

在情境1中,連接浮球開關的Aqura水浸感應器也可以換成門窗感應器,其原理是一樣的,但水浸感應器有簡易的防水,畢竟是要放在水箱中,用水浸感應器還是會比較好一點。

情境2比較複雜一點,需要判斷有沒有人由浴室外走進浴室內(input_boolean.bathroom2ff_occupied),因為每個人的習慣不同,這個沒有一定的做法。

情境2和情境3可以寫在一起,Automation程式碼如下

- alias: Device:Bubble_Machine_Regular_Refill
  trigger:
    - platform: state #情境2
      entity_id: input_boolean.bathroom2ff_occupied
      from: "off"
      to: "on"
    - platform: time_pattern #情境3
      minutes: 0
  condition:
    - condition: template
      value_template: "{{ (as_timestamp(now()) - as_timestamp(states.script.bubble_machine_toggle.attributes.last_triggered | default(0)) | int) > 14400 }}"
  action:
    - service: script.turn_on
      data:
        entity_id: script.bubble_machine_toggle
  mode: queued

input_boolean.bathroom2ff_occupied程式碼如下,僅供參考。

- alias: Room_Condition:Bathroom2FF_Status_On(PushButton)
  trigger:
    - platform: state
      entity_id: sensor.bathroom2ff_wirelessbutton_action
      to: "single"
  action:
    - service: input_boolean.turn_on
      data:
        entity_id: input_boolean.bathroom2ff_occupied
  mode: queued

- alias: Room_Condition:Bathroom2FF_Status_On(OpenDoor)
  trigger:
    - platform: state
      entity_id: binary_sensor.bathroom2ff_door_contactsensor_contact
      from: "off"
      to: "on"
  condition:
    - condition: state
      entity_id: input_boolean.bathroom2ff_occupied
      state: "off"
  action:
    - service: input_boolean.turn_on
      data:
        entity_id: input_boolean.bathroom2ff_occupied
  mode: queued

- alias: Room_Condition:Bathroom2FF_Status_Off(CloseDoor)
  trigger:
    - platform: state
      entity_id: binary_sensor.bathroom2ff_door_contactsensor_contact
      from: "on"
      to: "off"
      for:
        seconds: 5
  condition:
    - condition: state
      entity_id: input_boolean.bathroom2ff_occupied
      state: "on"
      for:
        seconds: 40
  action:
    - service: input_boolean.turn_off
      data:
        entity_id: input_boolean.bathroom2ff_occupied
  mode: queued

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

返回頂端