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ül | Açıklama |
|---|---|
api_catalog.py | Arayüz kataloğu için tek doğru kaynak (ApiInterface / Endpoint / Direction) |
proto_codec.py | ProtoCodec: JSON ↔ Protobuf kodeği, varsayılan şablon |
openapi_client.py | OpenApiClient / 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öntem | Açıklama |
|---|---|
connect() / disconnect() | Bağlanma / bağlantıyı kesme (with bağlamını destekler) |
is_connected | Bağ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ı |
codec | Yerleş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.pynokta bulutu açma (decompression) işlemini gösterir vepip install lz4 zstandardkomutunu 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:

