Skip to content

updates2mqtt

updates2mqtt

Rhizomatics Open Source

PyPI - Version Ruff Coverage Tests pre-commit.ci status Publish Python 🐍 distribution 📦 to PyPI and TestPyPI Github Deploy CodeQL Dependabot Updates



概要

Home Assistantがコンテナ用Dockerイメージの新しいアップデートを通知します。

Home Assistantアップデートページの例Home Assistantリリースノートの例

リリースノートを読み、必要に応じてアップデートをクリックしてDockerのpull(またはbuild)と更新を実行します。

Home Assistantアップデートダイアログの例

説明

Updates2MQTTは定期的にコンポーネントの新バージョンをチェックし、新しいバージョン情報をMQTTに公開します。HomeAssistantの自動検出がサポートされているため、すべてのアップデートをHome Assistant自身のコンポーネントやアドインと同じ場所で確認できます。

現在はDockerコンテナのみがサポートされており、イメージレジストリチェック(v1 Docker APIまたはOCI v2 APIを使用)またはソース用gitリポジトリ(ローカルビルド参照)を通じて確認できます。Docker、Github Container Registry、Gitlab、Codeberg、Microsoft Container Registry、Quay、LinuxServer Registryに対する特定の処理と、その他のほとんどに対する適応的な動作をサポートしています。設計はモジュラーであるため、少なくとも通知については他の更新ソースを追加できます。次に予定されているのはDebianベースシステム向けのaptです。

コンポーネントは自動的に、またはMQTT経由でトリガーされてアップデートすることもできます。例えば、HomeAssistantのアップデートダイアログでインストールボタンを押すことで実行できます。より良いHAエクスペリエンスのためにアイコンとリリースノートを指定できます。詳細はHome Assistantインテグレーションを参照してください。

始めるには、インストール設定のページをお読みください。

クイックスタートには以下をお試しください:

docker run -v /var/run/docker.sock:/var/run/docker.sock -e MQTT_USER=user1 -e MQTT_PASS=user1 -e MQTT_HOST=192.168.1.5 ghcr.io/rhizomatics/updates2mqtt:latest

またはDockerなしで、uvを使用:

export MQTT_HOST=192.168.1.1;export MQTT_USER=user1;export MQTT_PASS=user1;uv run --with updates2mqtt python -m updates2mqtt

単一の実行中コンテナの分析を実行したり、リモートレジストリからマニフェスト、JSONブロブ、タグリストを取得する基本的なコマンドラインツールも付属しています(GitHub、GitLab、Codeberg、Quay、LSCR、Microsoft MCRで動作確認済み)。

リリースサポート

現在はDockerコンテナのみがサポートされていますが、他も計画中で、おそらくaptが優先されます。

エコシステム サポート コメント
Docker Scan, Fetch Fetchはdocker pullのみ。再起動サポートはdocker-composeイメージベースのコンテナのみ。

ハートビート

ハートビートJSONペイロードは、設定可能なMQTTトピック(デフォルト:healthcheck/{node_name}/updates2mqtt)に定期的にオプションで公開されます。Updates2MQTTの現在のバージョン、ノード名、タイムスタンプ、基本的な統計が含まれます。

ヘルスチェック

healthcheck.shスクリプトがDockerイメージに含まれており、コンテナの環境変数MQTT_HOSTMQTT_PORTMQTT_USERMQTT_PASSが設定されている場合、Dockerヘルスチェックとして使用できます。トピックをサブスクライブするためのmosquitto_subコマンドを提供するmosquitto-clients Linuxパッケージを使用します。

Tip

docker inspect --format "{{json .State.Health }}" updates2mqtt | jqを使用してヘルスチェックが機能していることを確認してください(jsonqueryがインストールされていない場合は| jqを省略できますが、あった方が読みやすいです)

別のアプローチとして、Docker Composeに直接リスタータサービスを使用して再起動を強制する方法があります(この場合は1日1回):

Composeサービスの例
restarter:
    image: docker:cli
    volumes: ["/var/run/docker.sock:/var/run/docker.sock"]
    command: ["/bin/sh", "-c", "while true; do sleep 86400; docker restart updates2mqtt; done"]
    restart: unless-stopped
    environment:
      - UPD2MQTT_UPDATE=AUTO

対象コンテナ

updates2mqttはDockerデーモン下で実行されているすべてのコンテナを検出して監視しますが、それらのコンテナの動作を調整するためのオプションがあります。

これは、コンテナに環境変数またはDockerラベルを追加することで行います。通常は.envファイル内、またはdocker-compose.yaml内のenvironmentオプションとして指定します。

自動アップデート

Dockerコンテナを確認やトリガーなしに即座にアップデートする場合(例:HomeAssistantのアップデートダイアログから)、対象コンテナの環境変数UPD2MQTT_UPDATEAutoに設定します(デフォルトはPassive)。MQTTへの公開やHome Assistantへの表示なしにアップデートする場合はSilentを使用します。

Composeスニペットの例
restarter:
    image: docker:cli
    command: ["/bin/sh", "-c", "while true; do sleep 86400; docker restart mailserver; done"]
    environment:
      - UPD2MQTT_UPDATE=AUTO

自動アップデートは、git_repo_pathが定義されたローカルビルドにも適用されます。リモートコミットがpull可能な場合、git pulldocker compose builddocker compose upが実行されます。

関連プロジェクト

MQTTを活用したセルフホスティングに役立つ他のアプリ:

  • psmqtt - MQTT経由でシステムの健全性とメトリクスを報告

awesome-mqttでさらに多くを見つける

より強力なDockerに特化したアップデートマネージャーにはWhat’s Up Dockerをお試しください

開発

このコンポーネントはいくつかのオープンソースパッケージに依存しています:

  • docker-py Docker API アクセス用 Python SDK
  • Eclipse Paho MQTTクライアント
  • OmegaConf 設定と検証用
  • structlog 構造化ログ用と rich より良い例外レポート用
  • hishel メタデータのキャッシュ用
  • httpx メタデータ取得用
  • Astral uvruff 開発とビルド用ツール
  • pytest と自動テスト用サポートアドイン
  • usingversion 現在のバージョン情報をログに記録

Home Assistant向け Rhizomatics オープンソース

HACS

  • AutoArm - 物理ボタン、在室検知、カレンダー、太陽情報などを使用してHome Assistantの警報コントロールパネルを自動的にアームおよびディスアーム
  • Remote Logger - Home Assistant用のOpenTelemetry(OTLP)およびSyslogイベントキャプチャ
  • Supernotify - 強力なチャイムとセキュリティカメラ統合を含む、簡単なマルチチャンネルメッセージング向け統合通知。

Python / Docker

  • Anpr2MQTT - オプションの画像解析とUK DVLA統合を備えた、ファイルシステム(NAS/FTP)経由でANPR/ALPR車番認識カメラをMQTTに統合。