---
# System prepended metadata

title: Meshtastic Python 取得裝置會持續的產生訊息
tags: [Meshtastic]

---

Meshtastic Python 取得裝置會持續的產生訊息
---

Meshtastic Python 函式庫使用pubsub 發布-訂閱 (pub/sub) 模式，
在系統不同部分之間傳遞非同步事件，
並通知應用程式收到的訊息、狀態變更和連線事件。

官方有很多內定的toptic，
內定的 meshtastic.receive 本身就提供很多訊息。新手可以先觀察這部分。
其他上官方文件找還有很多。

範例： mesh_log_monitor.py  (簡單的純文字範例，連線COM3 有需要自己改，或者參考官網改成藍芽或TCP網路介面)

    import meshtastic
    import meshtastic.serial_interface
    from pubsub import pub
    import threading
    import time


    try:
        interface = meshtastic.serial_interface.SerialInterface(devPath="COM3")
        print("連線成功")
    except Exception as e:
        print(f"連線失敗：{e}")


    # 訂閱 meshtastic.receive 的訊息事件
    def on_receive(packet, interface):
        print(f"收到訊息：{packet}")

    # 訂閱事件
    pub.subscribe(on_receive, "meshtastic.receive")

    # 保持程式運作
    try:
        while True:
            pass
    except KeyboardInterrupt:
        print("結束監聽")
        interface.close()

編輯後再執行 python.exe mesh_log_monitor.py

可以參照我之前的可攜python環境寫一個批次來跑 [Meshtastic Python 的基礎可攜環境製作](https://hackmd.io/4RhEkBKSSjmRZtN_NQ67cg)

能連上機器後，稍等一下，就會接收到很多機器輸出的訊息，
我們是很上層的toptic，所以會有很多不同portnum類型的訊息，
圖中是很常見的portnum 定義名稱為'TELEMETRY_APP'，
它會一直顯示機器的硬體數據，電池電量與電壓。
還有很多不同portnum項目訊息，有興趣看看官網的說明，跟觀察一下內容。

以觀察電量來說，如果是python會寫的人，應該很好過濾訊息，  
看看官方的toptic，其實有比較細的，不用全讀到。
例如：
以TELEMETRY_APP來說，把電量資料帶時間輸出txt文字檔或是寫進資料庫內，用於電量分析或即時顯示。

如果是文字訊息就是portnum 是 TEXT_MESSAGE_APP。

![image](https://hackmd.io/_uploads/rysxIgt6gg.png)

