「スマートホーム」などのプロジェクトのホームアシスタントまたは別の「頭脳」

こんにちは、読者の皆様。 先日、私はすでに有名なGoogleのおもちゃの多くであるGoogle Homeで遊ぶ機会がありました。 事は良いです-もちろん私はそれのレビューを行いません。 Raspberry PI 3(RPi)、Arduino Mega、および音声制御の目的でGoogle Home(GH)に接続したい同様のトライフルは、 完全にクローゼットの中に横たわっていました。 GHには単純なAPIはありませんが、サードパーティのサービスを使用して、数秒のコマンド遅延でRPi + Arduino上のシステムの音声制御を整理することができます。



ブルジョアのフォーラムを読んで(公平に言えば、私は自動化とIoTをオンにした人であることに注意してください)、 ホームアシスタント (HASS)と呼ばれるこれまで知られていないものに気づきました。



プラットフォーム自体の概要:



システムはPythonで作成されており、最新リリースは1月29日で、 現在のバージョンは 0.37.0です。



サポートされているOS:





サポートされるコンポーネント:545個。ほぼすべてのテレビ/ AVレシーバー、Broadlink、ZigBee、iCloud、Yandex TTSなどが含まれます。



コンポーネント、スイッチ、スクリプト、グループ、トリガーを開始、接続、設定するには、Pythonを知る必要は絶対にありませんが、少なくとも少しのyamlを知っている必要があります。



「突然チェチュータ?」-あなたは思う。



私は答えます:上記のすべてのコンポーネント(既存のコンポーネント)の構成は、YAMLファイル(「configuration.yaml」)のみを介して実行されます。



インストールは簡単です-それに専念し、すべてのステップをペイントすることは意味がありません。さらに、プロジェクトには困難な時期に役立つ準備ができた豪華なコミュニティがあります(Eng)。 (すべてのリンクを憲章で規定されているように地下に置きます)



インストールにかなりの時間がかかることに注意してください。私のRPi 3では、合計時間(Raspbianなし)で約1時間かかりました。



大切なwget



完了した後、プラットフォームの勉強を始めました。 HASSのインストールは、ディレクトリ/home/homeassistant



ます。 /home/homeassistant/.homeassistant/configuration.yaml



興味が/home/homeassistant/.homeassistant/configuration.yaml



ます。



デフォルトでは、次のコンポーネントが構成に存在します。



 #   discovery:
      
      





ネットワークに次のデバイスがある場合:





これらは自動的に検出され、メイン(これまでのところ唯一) ホームグループに表示されます。



コンポーネント「 http 」:



 #    frontend http: #       (recommended!) #api_password: YOUR_PASSWORD
      
      





セキュリティ上の理由から、ポータルで絶対に正しく指摘されているように(強く推奨)。



構成ファイルを正常に変更した後、サービスを再起動する必要があります。 これを行うには2つの方法があります。



1)シェルコマンドを使用します。



 ~ $ sudo systemctl stop home-assistant.service ~ $ sudo systemctl start home-assistant.service
      
      





またはすぐに



 ~ $ sudo systemctl restart home-assistant.service
      
      





2)GUIから再起動:ハンバーガーを展開し、「 開発者ツール 」の地下室で「 サービス 」を開き、「 ドメイン 」ドロップダウンリストで「 homeassistant 」を選択し、「 サービス 」ドロップダウンリストで「 再起動 」を選択し、「CALL SERVICE」ボタンをクリックします。

フロントエンドはサービスの再起動または停止中にキャッシュを使用し、ページは完全に表示されますが、アクションを実行することはできないという事実に注意を喚起したいと思います。


シェルまたはGUIを介してサービスが再起動されるとすぐに、サービスの現在のステータスを示すフィールドが画面の下部に表示されます。



サービスが上昇するとすぐに、ページが自動的に更新され、フィールドが消えます。 エラーが構成に侵入した場合、サービスは開始されません。



この場合に必要なこと:



1)ログファイルを開きます: ~/.homeassistant/ home-assistant.log





ログエントリはかなり構造化されており、多くの場合、エラーが発生したconfiguration.yamlの行番号を示しています。

2)ログに示された問題を解決する

3)コンソールから上記のコマンドを使用してサービスを開始します



パスワードを設定し、(何らかの理由でデフォルトがなかった場合)機器の自動検出を設定し、ポータルに移動します。



 http://IP-Address:8123
      
      





8123はデフォルトのポートです。



最初のHASS打ち上げ
画像



受信機でHASSを作成できるもの:



利用可能なもの:ソース、ボリューム、音なし(オーディオ録音を聴く場合、トラックコントロールボタンが利用可能です)。



では、yaml-kuを詳しく見てみましょう。 少し拡張したバージョンを提供します。これに基づいて、HASSの機能を理解しやすくなり、また、おそらく、独自の環境のセットアップに役立ちます。



configuration.yaml
 homeassistant: #    HASS name:  #    *,        latitude: _REDACTED_ longitude: _REDACTED_ #     –      elevation: 0 # 'metric'   , 'imperial' -  unit_system: metric #  : http://en.wikipedia.org/wiki/List_of_tz_database_time_zones time_zone: Europe/Moscow #    customize  .  -       #customize: !include customize.yaml #  frontend GUI.  ,   frontend: #    updater: reporting: no #        logbook: #      -      sun: #     GUI conversation: #    history: #    discovery: #    : http: api_password: _REDACTED_ # ssl_certificate: _REDACTED_ # SSL  # ssl_key: _REDACTED_ # base_url: _REDACTED_ # trusted_networks: # - 127.0.0.1 # - _REDACTED_/24 # ip_ban_enabled: True # login_attempts_threshold: 5
      
      





Zone House * -HASSを使用すると、地理座標に基づいて世界中、国、都市(どこでも)にゾーン(場所)を作成し、後で「自動化」(通知)および通知を作成する際に使用できます。




今後、HASSはTelegramサービスとの統合をサポートします。これに基づいてアラートを実装しましたが、それについては後で詳しく説明します。



次に、構成ファイルを編集し、HASSサービスを再起動し、Webページに移動して何が起こったかを確認する必要があります。



次に、最初の自動化 (以降、 自動化に進み ます 。 最初の自動化として、「アラーム」を検討することを提案します。 このタスクを実装するために、ネットワーク上にオーディオデバイスまたはビデオデバイスを用意する必要はありません。 ただし、この例では、アラーム自体としてのレシーバーの使用を示します。



挑戦する



音量を上げながら、AVレシーバーをオンにして、指定された時間に目覚めます。 一定時間後、テキストを音声に合成し、窓の外で現在の天気について目を覚ましている人に通知します。これにより、天気の状況に合わせて服を着せるようになります。



資源





実装



まず、プロジェクトに接続するためにTelegramでボットを作成する必要があります。 インターネットには、独自のボットを登録する方法に関する多くの指示がありますので、このプロセスについては説明しません。 説明の過程でのみ、重要な点に注意を集中します。



したがって、独自のボットがあります。 HASSに接続するには、 configuration.yaml



以下を記述する必要がありconfiguration.yaml







 # Telegram Notifier notify: - name: NOTIFIER_NAME (        'notify' - eng) platform: telegram api_key: ABCDEFGHJKLMNOPQRSTUVXYZ chat_id: YOUR_CHAT_ID
      
      





ただし、複数の通知サービスを追加する場合は、添付ファイルを使用することをお勧めします。 構成ファイルの可読性を大幅に簡素化します。



これを行う方法を以下に説明します。



コメントからわかるように、チャットIDと同様に、ボット用に発行されたAPIが必要です。 チャットIDを取得するには、少なくとも1つのメッセージをボットに書き込んでから、アドレスを含むページを開く必要があります。



  https://api.telegram.org/bot*API*/getUpdates.
      
      





ここで、* API *は発行されたAPIです。



その結果、次のことに興味があるJSONが得られます。



 {"<b>id</b>":<b>123456789 </b>…}
      
      





IDの値は必要なものです。



次に、テキストの合成を行うコンポーネント-SpeechKit Cloud Yandexを接続します。



これを行うには、 登録して、いくつかの簡単なセットアップ手順を実行する必要があります。



接続されたサービスからSpeechKit Cloud APIを選択し、キーを取得します。



configuration.yaml



、次のエントリを作成します。



 tts: - platform: yandextts #       TTS name: yandextts #  ,     api_key: 'API  SpeechKit' language: 'ru-RU' #    –   ru codec: 'mp3' #     voice: 'jane' #   emotion: 'good' #   speed: '1' #  
      
      





説明とオプションは 、Yandex Webサイトで入手できます。



すでに2つの通知サービスがありますが、「私たちには十分ではありません」ので、もう1つVLCを追加する必要があります。



もともとRaspberry PIを使用していたので、簡単なコマンドでVLCをインストールしました。



 sudo apt-get install vlc
      
      





次に、デフォルトの再生デバイスであるRaspberryのサウンド設定を構成し、HASS AIO(All-In-One)のインストール時に作成されたユーザー権限を簡単に操作する必要があります。



 sudo usermod -a -G audio homeassistant
      
      





このコマンドは、ユーザーをオーディオグルー​​プに追加します。



configuration.yaml



に次の行を追加します。



 media_player: !include media_player.yaml
      
      





親フォルダーで、ファイルmedia_player.yaml



作成します。ここに、接続するメディアデバイスのすべての設定が保存されます。



次の設定を行います。



 - platform: yamaha name: Yamaha_671 zone: 2 #     -  commands: turn_on: service: media_player.turn_on turn_off: service: media_player.turn_off volume_up: service: media_player.volume_up volume_down: service: media_player.volume_down customize: #    frontend   media_player.yamaha_671: hidden: true #   yamaha_671 -   (Main) - platform: vlc name: vlcmp #    VLC
      
      





私のレシーバーには2つの再生ゾーン( MainZone 2 )があります。 例では、2番目を使用します。



追加のコンポーネントはすべて接続されています。 アラーム要素自体の設定に進むことができます。



設定ファイルに次の行を追加します。



 ## Input Boolean input_boolean: !include input_boolean.yaml
      
      





親フォルダーにファイルを作成します: input_boolean.yaml







次の行を入力します。



 alarmweekday: #  -      name:   initial: on #    icon: mdi:calendar
      
      





yamlという名前が示すように、「スイッチ」タイプのコンポーネントを接続します。 さらに説明する価値があると思われる唯一のものはアイコンです。 MDIライブラリの任意のアイコンを使用できます。



時間を設定するには、次のコンポーネントを使用できます。



 input_slider input_select
      
      





1つはリストからの選択です。 別のスライダー。 設定には便利なスライダーを使用しました。



configuration.yaml



記述します。



 ## Input Slider input_slider: !include input_slider.yaml
      
      





親フォルダーで既に開始されているように、ファイルinput_slider.yaml



作成します

次に、それを埋めます:



 alarmhour: name:  icon: mdi:timer initial: 8 #    min: 0 #  max: 23 #  step: 1 #  alarmminutes: name:  icon: mdi:timer initial: 40 min: 0 max: 59 step: 1
      
      





そして、もう1つ簡単なことは、 センサーです。

設定レジスタで:



 sensor: !include_dir_merge_list sensors
      
      





このコマンドは、すべてのファイルをセンサーフォルダーから取得する必要があることを意味します。 次に、sensorsフォルダーで、名前がalarmclock.yamlのyamlファイルを作成します。 alarmclock.yaml



設定:



 - platform: template sensors: alarm_time: friendly_name: ' ' value_template: '{{ states.input_slider.alarmhour.state | int }}:{% if states.input_slider.alarmminutes.state|length == 1 %}0{% endif %}{{ states.input_slider.alarmminutes.state | int }}'
      
      





ここでもっと面白いです。 特定のテンプレートが表示されます。 このコンポーネントを使用すると、他のHASSコンポーネントのデータを完全に管理できます。 この例では、センサーを作成し、アラームスライダーからデータを入力します。値を強制的にintにキャストし、分の「長さ」が1の場合は「0」を追加します。HASSポータルで詳細を確認できます。



別のセンサーが必要です-気象条件。



天気などの利用可能なすべてのコンポーネントの中で、私の選択はOpenWeatherMap Sensorにありましたセンサーフォルダーで、 weather.yaml



ファイルを作成し、以下を入力します。



 - platform: openweathermap api_key: *API* latitude: *latitude* longitude: *longitude* monitored_conditions: - weather - temperature - wind_speed - humidity - clouds - rain - snow
      
      





気づくのは難しくないので、OWMのAPIを統合する必要があります。 APIは無料で、ポータルに登録することで入手できます 。 保存して閉じて先に進みます。



目覚まし時計用のスイッチ、スライダー、センサーを作成しました。 しかし、アラーム自体がまだない場合、なぜそれをオンにしますか?



自動化の作成を始めましょう。



configuration.yaml



記述します。



 ## Automation for: alarmclock... automation: !include_dir_merge_list automation
      
      





これは、 自動化フォルダーからすべてのファイルがロードされることを意味します。 次に、親ディレクトリに「automation」フォルダを作成します。



ファイルを作成: alarmclock.yaml







そして、充填に進みます。



私は毎秒ボリュームの増分を使用しているため、ファイルが大きくなります。 最も必要な行を示しますが、残りは類推によって構成できます。



アラームの自動化
 - alias: ' ' trigger: platform: template value_template: '{{ states.sensor.time.state == states.sensor.alarm_time.state }}' #  . condition: #  condition: or conditions: - condition: and conditions: - condition: state entity_id: input_boolean.alarmweekday state: 'on' - condition: time weekday: - mon - tue - wed - thu - fri - condition: state entity_id: input_boolean.alarmweekday state: 'off' action: #  - service: notify.NOTIFIER_NAME data_template: title:  , ! =) message: ",   !    {{ states('sensor.owm_temperature')|int }} °C." - service: media_player.turn_on #    entity_id: media_player.yamaha_671_zone_2 # ,       - service: media_player.volume_set #   data: entity_id: media_player.yamaha_671_zone_2# ,       volume_level: '0.20' #    - service: media_player.select_source #   data: entity_id: media_player.yamaha_671_zone_2 source: NET RADIO - delay: 00:00:10 #  - service: media_player.volume_set #   data: entity_id: media_player.yamaha_671_zone_2 volume_level: '0.25' - delay: 00:00:01 #  - service: media_player.volume_set #   data: entity_id: media_player.yamaha_671_zone_2 volume_level: '0.30' #            - delay: 00:00:01 - service: media_player.turn_on #  ,  . (      automation) entity_id: media_player.yamaha_671_zone_2 - service: media_player.select_source data: entity_id: media_player.yamaha_671_zone_2 #   -    Audio 2 -     RPi source: AUDIO2 - service: media_player.volume_set data: entity_id: media_player.yamaha_671_zone_2 volume_level: '0.70' - delay: 00:00:01 - service: tts.yandextts_say #   data_template: message: " !       .    {{ states('sensor.owm_temperature')|int }} ." #       entity_id: media_player.vlcmp # ,       language: 'ru-RU'
      
      







「ほら! 稼いだ!」 しかし、すべてを美しく行うために、別の簡単なアクションを実行することを提案します。 グループを作成します(フロントエンドタブ)。



親フォルダーにgroup.yaml



ファイルを作成します。 構成で、それを参照します:



 group: !include group.yaml
      
      





group.yaml



入力に進みます。



作成したアイテムの表示設定
 #         frontend,  ,      . default_view: view: yes entities: - group.AlarmClock - sensor.alarm_time - sensor.owm_cloud_coverage - sensor.owm_condition - sensor.owm_humidity - sensor.owm_rain - sensor.owm_snow - sensor.owm_temperature - sensor.owm_wind_speed #       alarmclock: name: . entities: - sensor.alarm_time - input_slider.alarmhour - input_slider.alarmminutes - input_boolean.alarmweekday # (tab)   . AlarmClock: name:  view: yes entities: - group.alarmclock
      
      







すべての設定を保存し、サービスを再起動して、何が起こったのかを確認しましょう!



現時点では、次のコンポーネントが接続されています。



テレビ、AVレシーバー、TP-Linkルーター、追跡デバイス、私たちの1人が家を出たときに私と妻に通知します。最初に誰かが家に帰るとレシーバーがオンになり、全員が家を出るとデバイスをオフにします。一時的に:Broadlink + Livolo Switch。



開発





読者の皆様、貴重な時間をありがとうございました! HASSに強い関心がある場合は、例を使用して他の可能性について説明します。 じゃあね!



参照資料
HASS公式ウェブサイト

HASS公式コミュニティ

ヤムル

テレグラムボット登録

電報ボットの操作方法

Yandex Technologies

Openweathermap

ネットワーク経由でフィリップステレビを管理する

ラズベリーパイ




All Articles