翻譯:Home Assistant 家庭助理

翻譯自:https://home-assistant.io/developers/architecture/
我是爲了方便自己理解作出的翻譯,供大家參考,轉載請註明出處!

系統架構

在我們深入到家庭助理的架構之前,先知道家庭自動化系統清晰的整體概念是非常重要的。請允許我們用圖片展現家庭助理的不同部分。會有有一個時間比較長的討論在概述中各部分負責的功能,看看我們的博客。一個簡潔版本的博客:

  • Home Control負責導通收集信息和控制設備。
  • Home Automation根據用戶的配置觸發命令。
  • Smart Home觸發基於之前的出現過的行爲命令。(智能嗎?)

家庭自動化概述。
家庭自動化概述

Home Assistant內核負責家庭控制。它有四個部分,包括以下功能:

  • 該Event Bus 有利於事件的觸發和聽力。這是Home Assistant跳動的心臟。
  • 該State Machine 跟蹤事物的狀態。當狀態已經改變時,發送state_changed的事件。
  • 該Service Registry監聽Event bus(事件總線)上的call_service事件,並允許其他代碼來註冊服務。
  • 該Timer 將發送的每1秒的time_changed事件給Event bus。
    這裏寫圖片描述
    民政助理核心架構的概述

家庭助理可以通過components(組件)擴展的。每個組件負責在家庭助理特定的域。組件可以監聽或觸發事件,提供服務和保持狀態。組件是用Python編寫的,可以做所有的Python所提供的善良。開箱即用,家庭助理提供了一堆內置的組件

我們可以在助手首頁區分兩個不同類型的組件。

物聯網領域裏相互作用的組件

這些組件將在一個特定域內跟蹤裝置和存在一個核心部分和特定平臺的邏輯的。這些組件使得可通過State Machine和 Event Bus獲得他們的信息。該組件也將在 Service Registry註冊服務,公開設備的控制方法。

例如,內置的組件之一是switch組件。此組件是負責與不同類型的開關交互。

如果你打算增加一個新的平臺,請查看添加新的平臺部分。

家庭助手中對事件作出響應的組件

這些組件提供小部分的家居自動化邏輯或服務——在你的房子裏做些普通任務。

例如,device_sun_light_trigger組件跟蹤設備的狀態和太陽,以確保在燈都打開天黑時或有人在家。該組件的使用邏輯大致如下:

    In the event that device 'Paulus Nexus 5' changes to the 'Home' state:
      If the sun has set and the lights are not on:
        Turn on the lights
    In the event that the combined state of all tracked devices changes to 'Not Home':
      If the lights are on:
        Turn off the lights
    In the event of the sun setting:
      If the lights are off and the combined state of all tracked device equals 'Home':
        Turn on the lights

家庭自動化組件的擴展例子可以點這裏

全貌

當我們把家庭助理的所有的不同部分組合在一起,我們看到,非常接近最初的草圖家庭自動化概述。智能家居的AI智能是尚未實現,因此,從下面的圖片中省略。
這裏寫圖片描述
完整的家庭助理架構與情侶裝組件和平臺的概述。

組件的平臺邏輯使用第三方Python庫的設備進行通信。這樣做是爲了讓我們可以利用那些Python社區偉大的設備庫。

多個連接實例

家庭助理支持使用主從模式運行多同步的實例。每當從機調用events.firestates.set,它將其轉發給主機。主機會複製所有的事件並改變狀態回覆從機。
這裏寫圖片描述
民政助理架構的多種設備的概述。

從實例可以開始下面的代碼,並具有組件作爲主實例同樣的支持。

import homeassistant.remote as remote
import homeassistant.bootstrap as bootstrap

# Location of the Master API: host, password, port.
# Password and port are optional.
remote_api = remote.API("127.0.0.1", "password", 8124)

# Initialize slave
hass = remote.HomeAssistant(remote_api)

# To add an interface to the slave on localhost:8123
bootstrap.setup_component(hass, 'frontend')

hass.start()
hass.block_till_stopped()

因爲每個從機維護其自己的ServiceRegistry,它可能有多個從機對一個服務呼叫作出響應。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章