İçeriğe geç
TREN
Atlıhan Harita

Lixel OpenAPI Kullanım Kılavuzu · Python

İstemci Sarmalayıcı ve Araçlar

Bölüm 08.2 / 09Kılavuz sürümü v1.1.0Türkçe

Proje; yeniden kullanılabilir bir istemci sarmalayıcı, grafik kontrol paneli ve örnek betikler sunar. Bunlar "birkaç satır kodla bir arayüzü çağırmaktan" "grafik arayüzde elle hata ayıklamaya" kadar her şeyi kapsar.

İstemci Sarmalayıcı

Sarmalayıcı hiçbir grafik arayüz kütüphanesine bağlı değildir ve ikincil geliştirme için önerilen giriş noktasıdır. Modüller:

ModülAçıklama
api_catalog.pyArayüz kataloğu için tek doğru kaynak (ApiInterface / Endpoint / Direction)
proto_codec.pyProtoCodec: JSON ↔ Protobuf kodeği, varsayılan şablon
openapi_client.pyOpenApiClient / ClientOptions: MQTT bağlantısı, istek-yanıt, abonelik

ClientOptions

from example.core import ClientOptions

opts = ClientOptions(
    host="192.168.55.1",
    port=1883,
    use_tls=False,          # set True for MQTTS
    username="",
    password="",
    openapi_key="",         # written into header.openapi_key automatically
    device_id="",
    client_id="",           # MQTT client ID, auto-generated when empty
    connect_timeout=10.0,
    request_timeout=10.0,
)

İstek-Yanıt

from example.core import OpenApiClient, ClientOptions

with OpenApiClient(ClientOptions(host="192.168.55.1", openapi_key="<provided by XGRIDS>")) as client:
    rsp = client.request(
        req_topic="lixel/application/request/device_info",
        req_message="DeviceInfoRequest",
        payload={},                       # dict or JSON string
        rsp_topic="lixel/application/response/device_info",
        rsp_message="DeviceInfoResponse",
    )
    print(rsp)                            # decoded dict

request() işlevi içeride yanıt konusuna abone olur, isteği yayımlar, ilk yanıtı bekler ve dönüş değerini çözer; zaman aşımında TimeoutError oluşturur.

Raporlara Abone Olma

import time
from example.core import ClientOptions, OpenApiClient


def on_status(topic, data):   # data is already decoded into a dict
    print(topic, data)


with OpenApiClient(ClientOptions(host="192.168.55.1", openapi_key="<provided by XGRIDS>")) as client:
    client.subscribe(
        "lixel/application/report/device_status",
        "DeviceStatusReport",
        on_status,
    )
    time.sleep(5)             # keep the connection alive to receive reports

JSON yükleri (heartbeat) için message alanına boş bir dize verin; geri çağırma işlevi bir dize alır. Geri çağırma işlevinde oluşan bir istisna günlüğe kaydedilir (Python varsayılan olarak terminale yazdırır) ve diğer abonelikleri kesintiye uğratmaz.

API'ye Genel Bakış

YöntemAçıklama
connect() / disconnect()Bağlanma / bağlantıyı kesme (with bağlamını destekler)
is_connectedBağlantı Durumu
publish(topic, message, payload)Mesaj yayımlama
subscribe(topic, message, callback)Abone olma ve geri çağırma işlevi kaydetme
subscribe_raw(topic_filter, callback)Joker karakterle abone olma; geri çağırma işlevi ham bayt alır
unsubscribe(topic)Abonelikten çıkma
request(req_topic, req_message, payload, rsp_topic, rsp_message, timeout=None)Senkron istek-yanıt çağrısı
codecYerleşik ProtoCodec

Grafik Kontrol Paneli

Kontrol paneli tüm arayüzleri işlevlere göre gruplanmış sekmelerde gösterir. Her arayüz için bir kart bulunur; bu kartta bir JSON yükünü düzenleyerek istek gönderebilir veya raporlara abone olarak çıktıyı görüntüleyebilirsiniz.

python python/example/main.py                 # English UI by default
python python/example/main.py --lang zh       # start in Chinese (also switchable live in the menu)

Arayüz yapısı:

  • Menü çubuğu: Settings → Language (İngilizce/Çince arasında anında geçiş, yeniden başlatma gerekmez); About (derleme sırasında eklenen program sürümünü gösterir, kaynaktan çalıştırıldığında V0.0.0).
  • Üst bağlantı çubuğu: Host / Port / Protocol (MQTT·MQTTS) / Username / Password / OpenAPI Key / Connect. Varsayılan ana makine 192.168.55.1; Username ve Password yalnızca MQTTS seçildiğinde gösterilir ve üretici tarafından sağlanan kimlik bilgilerini gerektirir; MQTT'ye geri dönüldüğünde gizlenir ve temizlenir.
  • Sol "Publish" paneli: Topic açılır listesi (yayımlanabilir tüm istek konularıyla önceden doldurulur), mesaj türü açılır listesi, Load template, arayüz açıklaması, JSON düzenleyici, Publish düğmesi.
  • Sağ "Subscribe" paneli: Topic açılır listesi, Subscribe / Subscribe all, joker karakterli abonelik (varsayılan lixel/#), geçerli abonelik listesi, alınan mesajlar listesi (çözülmüş içeriğin tamamını görmek için çift tıklayın).

Not: Yayımlama yalnızca bir istek gönderir ve arayüzü engellemez; yanıtlar ve raporların tümü sağdaki "Subscribe" panelinde görüntülenir. Bir istek yayımlamadan önce ilgili yanıt konusuna abone olun (veya lixel/# joker karakterini kullanın).

Örnek Betikler

python/example/usage/ klasörü, her arayüz için bağımsız ve çalıştırılabilir bir betik sunar. Bunlar ikincil geliştirme için en doğrudan referanstır; hepsi istemci sarmalayıcıyı temel alır ve grafik arayüz gerektirmez:

cd python/example/usage
python device_info.py --host 192.168.55.1 --port 1883 --key <provided by XGRIDS>
python modeling.py --host 192.168.55.1 --key <provided by XGRIDS> --project demo --watch 5   # device must be in standby; a full run takes a minute or more
python heartbeat.py --host 192.168.55.1 --seconds 15                                         # the heartbeat needs no key

Ortak bağımsız değişkenler: --host / --port / --tls / --username / --password / --key / --timeout. Cihaz yalnızca geçerli bir OpenAPI Key içeren isteklere yanıt verir; bu nedenle heartbeat gibi abonelikler dışındaki her işlem için --key değerini verin. --host verilmezse varsayılan olarak kablolu adres 192.168.55.1 kullanılır (1.0.0 sürümünde varsayılan 192.168.12.1 idi; 1.0.1 veya daha yeni bir sürüm kullanın ya da --host değerini açıkça verin).

modeling.py önce cihazın bekleme modunda olduğunu doğrular, taramayı başlatır, gerçekten taramaya geçene kadar bekler, --watch saniye boyunca izler, ardından taramayı durdurur ve bekleme moduna dönmesini bekler. Cihaz bekleme modunda değilse 2 koduyla çıkar. Çıkış kodları: 0 başarılı; 1 başlatma veya durdurma bekleme zaman aşımı; 2 cihaz bekleme modunda değil; 3 AC_START yanıt kodu başarılı değil (ör. yanlış anahtar); 4 AC_START veya AC_STOP için yanıt yok; 130 Ctrl-C ile kesildi. AC_START gönderildikten sonra, AC_START yanıt almazsa (çıkış kodu 4) dışında her zaman AC_STOP da gönderilir. Bu durumda cihazın durumu bilinmez ve kendiniz kontrol etmelisiniz. Bekleme süreleri --start-timeout (varsayılan 90 sn) ve --stop-timeout (varsayılan 180 sn) ile ayarlanabilir. Betiklerin tam listesi için depodaki python/example/usage/README.md dosyasına bakın.

Not: lio_pcl.py nokta bulutu açma (decompression) işlemini gösterir ve pip install lz4 zstandard komutunu gerektirir. Bunlar kurulu değilse betik bir ipucu yazdırır ve nokta bulutu çözmeyi atlar.

Yerelleştirme

Kontrol panelindeki kullanıcıya görünen tüm metinler birden fazla dili destekler. Arayüz varsayılan olarak İngilizcedir ve "Settings → Language" menüsünden anında değiştirilebilir ya da başlangıçta --lang <code> ile belirtilebilir. Yeni bir dil eklemek için çeviri dosyasını kopyalayıp çevirin, derleyin ve kaynak koddaki LANGUAGES sabitine (python/example/gui/control_panel.py) kaydedin. Dil daha sonra menüde görünür.

Bu bölüm XGRIDS'in resmî kullanım kılavuzundan Türkçeye çevrildi; ekran görüntüleri ve arayüz adları özgün haliyle İngilizcedir. İngilizce aslı (yeni sekmede açılır) · Güncelleme:

XGRIDS Türkiye

Kurulumda ve Sahada Yanınızdayız

Atlıhan Harita; cihaz kurulumu, firmware güncellemesi, yazılım kullanımı ve saha uygulamalarında eğitim ve teknik destek verir. Sorunuzu iletin, uzmanımız size dönsün.

+90 216 546 0804