Skip to Content
IoT Uygulama Geliştirmeİlk Uygulamanızı Oluşturun

İ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: numeric

2. 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:

  1. Cloud IDE’yi açmak için uygulama detay sayfasındaki Geliştir’e tıklayın.
Geliştir düğmesini gösteren uygulama detay sayfası
  1. Erişiminiz olan herhangi bir projeden çevrimiçi bir cihaz seçin.
Projeler genelinde mevcut cihazları gösteren cihaz seçici
  1. O projenin veritabanında bir geliştirme ortamı oluşturmak için yan paneldeki Backend Oluştur’a tıklayın.
Edge Geliştirme kontrolleri ve Backend Oluştur düğmesi içeren yan panel

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.

Kod editörü ve Edge Geliştirme paneli ile Cloud IDE

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:

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:

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:

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.
  • maintainLatestFlagFor kullanı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 deleted sü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çin publishToTable’ı 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.

Last updated on