İlk Uygulamanızı Oluşturun
Bu kılavuz, edge cihazlardan veri toplayan ve gerçek zamanlı dashboard’larda gösteren bir IronFlock uygulaması oluşturmak için tipik iş akışını anlatır. Sonunda bir veri modeline, edge mantığına, kullanıcıya yönelik bir yapılandırma formuna ve canlı grafiklere sahip olacaksınız — hepsi proje veritabanı aracılığıyla bağlı.
1. Veri Modelini Tasarılayın
.ironflock/data-template.yml dosyasından başlayın. İki tablo kategorisini düşünün:
- Varlık tabloları — şeylerin mevcut durumunu izler (cihazlar, makineler, bağlantılar). Her değişiklikte satır eklenir;
maintainLatestFlagFor, bir varlığı hangi sütunların tanımladığını bildirir; böylece varlık başına en yeni satır istendiğinde geri okunabilir. - Zaman serisi tabloları — zaman içindeki ölçümleri toplar (sensör okumaları, metrikler). Her satır, zaman damgası olan yeni bir veri noktasıdır.
data:
tables:
# Entity table: one row per device, latest state always queryable
- tablename: devices
maintainLatestFlagFor: ['device_key']
columns:
- id: tsp
dataType: timestamp
- id: device_key
dataType: string
- id: status
dataType: string
- id: device_name
dataType: string
- id: deleted
dataType: boolean
# Entity table: user-configured Modbus servers
- tablename: modbus_servers
maintainLatestFlagFor: ['server_id']
columns:
- id: tsp
dataType: timestamp
- id: server_id
dataType: string
- id: host
dataType: string
- id: port
dataType: numeric
- id: deleted
dataType: boolean
# Time-series table: periodic readings from connected hardware
- tablename: readings
columns:
- id: tsp
dataType: timestamp
- id: server_id
dataType: string
- id: metric
dataType: string
- id: value
dataType: numeric2. Test Ortamı Kurun
Uygulamanızı test etmek için en az bir çevrimiçi cihaza sahip bir projede geliştirme ortamına ihtiyacınız vardır:
- Cloud IDE’yi açmak için uygulama detay sayfasındaki Geliştir’e tıklayın.
- Erişiminiz olan herhangi bir projeden çevrimiçi bir cihaz seçin.
- O projenin veritabanında bir geliştirme ortamı oluşturmak için yan paneldeki Backend Oluştur’a tıklayın.
Bu, data-template.yml dosyanızda tanımlanan tabloları projenin veritabanı içinde örnekler. Bunları projenin Fleet Database görünümünde inceleyebilirsiniz.
Cloud IDE size dosya gezgini, editör, terminal ve cihazınızda derleme ve dağıtım için Edge Geliştirme paneli ile tam bir VS Code ortamı sağlar.
3. Edge Kodu Yazın
Docker container’ınız cihazda çalışır ve proje veritabanıyla etkileşim kurmak için IronFlock SDK’sını kullanır.
Başlatmada cihazı kaydedin
Edge bileşeni başladığında, dashboard’ın cihazın çevrimiçi olduğunu bilmesi için devices varlık tablosuna bir satır ekleyin:
Python
import asyncio
from ironflock import IronFlock
async def main():
# Register this device as online
await flock.append_to_table("devices", {
"device_key": os.environ.get('DEVICE_KEY'),
"tsp": now,
"status": "online",
"device_name": os.environ.get('DEVICE_NAME'),
"deleted": False
})
# ... rest of your logic
flock = IronFlock(mainFunc=main)
flock.run()devices, maintainLatestFlagFor: ['device_key'] kullandığından, bu cihaz için önceki durum satırı otomatik olarak geçersiz kılınır. latest filtresi etkinleştirilmiş widget’lar her zaman mevcut durumu gösterir.
Kullanıcı yapılandırmasına tepki verin
Kullanıcılar panodaki bir form aracılığıyla Modbus sunucuları ekleyebilir (4. adıma bakın). Edge kodunuz modbus_servers tablosuna abone olur ve yeni girişlere göre hareket eder:
Python
async def main():
# ... device registration ...
# Read existing Modbus servers
existing = await flock.getHistory("modbus_servers", {
"limit": 1000,
"filterAnd": [
# "latest": True returns only the newest row per server_id
{"latest": True},
{"column": "deleted", "operator": "IS", "value": None}
]
})
for server in existing:
create_modbus_connection(server)
# React to new servers in real time
def on_server_change(*args, **kwargs):
server = args[0] if args else kwargs
if server.get("deleted"):
delete_modbus_connection(server["server_id"])
else:
create_modbus_connection(server)
await flock.subscribe_to_table("modbus_servers", on_server_change)Zaman serisi verilerini toplayın
Bir Modbus bağlantısı kurulduğunda, periyodik olarak sorgulayın ve okumaları readings tablosuna yazın:
Python
async def modbus_poll_loop(server_id, client):
while True:
values = client.read_registers()
for metric, value in values.items():
await flock.publish_to_table("readings", {
"server_id": server_id,
"metric": metric,
"value": value
})
await asyncio.sleep(5)4. Panoyu Oluşturun
Pano Editörünü açın ve Veri Arka Ucu tablolarınıza bağlanan widget’lar ekleyin.
Cihaz durumunu gösterin
devices tablosuna bağlı bir Tablo widget’ı ekleyin. Her cihazın mevcut durumunu her zaman göstermesi için widget’ın filtre ayarlarındaki latest anahtarını açın. Tablo, bir cihaz çevrimiçi veya çevrindışı olduğunda otomatik olarak güncellenir.
Kullanıcıların Modbus sunucularını yapılandırmasına izin verin
modbus_servers tablosuna bağlı bir Form widget’ı ekleyin. host ve port için alanlar yapılandırın. Bir kullanıcı formu doldurup gönderdiğinde, modbus_servers tablosuna otomatik olarak yeni bir satır eklenir — form gönderimini işlemek için arka uç kodu gerekmez.
Edge kodunuz yeni satırı subscribeToTable aracılığıyla alır (3. adıma bakın) ve Modbus bağlantısını kurar.
Zaman serisi verilerini görselleştirin
readings tablosuna bağlı bir Çizgi Grafik widget’ı ekleyin. tsp’yi X eksenine, value’yu Y eksenine eşleyin. Grafik, cihazlardan yeni okumalar geldikçe gerçek zamanlı olarak güncellenir — sorgulama veya manuel yenileme gerekmez.
Her Şey Nasıl Bir Araya Gelir
┌─────────────────────────────────────────────────────────┐
│ Board (Dashboard) │
│ ┌──────────┐ ┌──────────────┐ ┌───────────────────┐ │
│ │ Table │ │ Form │ │ Line Chart │ │
│ │ devices │ │ modbus_servers │ │ readings │ │
│ └────┬─────┘ └──────┬───────┘ └────────┬──────────┘ │
│ │ │ │ │
└───────┼───────────────┼───────────────────┼─────────────┘
│ │ │
┌────▼───────────────▼───────────────────▼────┐
│ Project Database │
│ devices │ modbus_servers │ readings │
└────▲───────────────▲───────────────────▲────┘
│ │ │
┌────┴───────────────┴───────────────────┴────┐
│ Edge Code (on device) │
│ register device → read config → poll data │
└─────────────────────────────────────────────┘Proje veritabanı tek gerçek kaynağıdır. Edge kodu buna yazar, pano bunu gerçek zamanlı olarak okur ve formlar aracılığıyla kullanıcı eylemleri tekrar buna yazar. Edge kodunuz döngüyü kapatmak için bu değişikliklere abone olabilir — özel API uç noktaları gerekmez.
İpuçları
- Varlık tablolarından başlayın. Zaman serisi toplama eklemeden önce cihaz kaydını ve durum tablosunu çalıştırın.
maintainLatestFlagForkullanın mevcut durumu sorgulamanız gereken herhangi bir tabloda. Geçmiş eklemenizi ve varlık başına en son satırı — bir widget’taki latest anahtarıyla ya da bir SDK filtresindeki{"latest": true}ile — ek kod olmadan geri okumanızı sağlar.- Bir
deletedsütunu ekleyin kullanıcıların formlar aracılığıyla yönettiği varlık tablolarına, böylece geçmişi korurken kayıtlar yumuşaklaştırılabilir. appendToTable’ı onay gerektiren yazmalar için kullanın (örn. ilk cihaz kaydı). Yüksek frekanslı telemetri içinpublishToTable’ı kullanın; burada gönder ve unut kabul edilebilir.- Zaman serisi tablolarını basit tutun. Bir zaman damgası, kaynak için bir tanımlayıcı ve ölçülen değerler. Toplama için dönüşüm tablolarını kullanın.
Sonraki Adımlar
Donanımınız web tabanlı bir HMI veya yapılandırma arayüzü sunuyorsa, bunu Embed widget’ı ve cihaz tünelleri kullanarak doğrudan IronFlock panonuza gömebilirsiniz. Ayrıntılar için bkz. Harici HMI’leri Gömme.