MicroControlPanel'de Datastream ve Widget Ekleme Rehberi
MicroControlPanel platformunda cihazlarınıza Datastream (Virtual Pin) tanımlama, widget ekleme ve dashboard oluşturma işlemlerini adım adım öğrenin. Tüm widget tipleri, veri tipleri ve yapılandırma seçenekleri detaylı anlatılmıştır.
📡 Datastream Nedir?
MicroControlPanel'de Datastream, cihazınız ile platform arasındaki veri kanallarıdır. Her datastream bir Virtual Pin (V0, V1, V2…) ile tanımlanır ve cihazınızdan gelen sensör verilerini okumak veya cihazınıza komut göndermek için kullanılır.
Datastream'i gerçek hayattaki bir su borusu gibi düşünebilirsiniz:
- 🔵 Input (Okuma): Sensörden platforma veri akar — sıcaklık, nem, basınç gibi
- 🟠 Output (Yazma): Platformdan cihaza komut gider — açma/kapama, hedef değer gibi
- 🟢 InputOutput: Her iki yönde de veri akar
Örnek: Bir sıcaklık sensörüV0üzerinden 23.5 değerini gönderir → Platform bunu Gauge widget'ında gösterir. Kullanıcı slider'ı kaydırır → PlatformV3üzerinden "25" değerini cihaza yazar.
Datastream vs Widget Farkı
| Kavram | Ne İşe Yarar? | Benzetme |
|---|---|---|
| Datastream | Veri kanalı tanımı (pin, veri tipi, aralık, birim) | Su borusu |
| Widget | Görsel kontrol aracı (gauge, switch, slider) | Musluk / Sayaç |
Önce datastream tanımlanır, sonra widget bu datastream'e bağlanır.
🛠️ Datastream (Virtual Pin) Oluşturma
Cihazınıza datastream eklemek için şu adımları izleyin:
- Cihazlarım sayfasına gidin ve cihazınızı seçin.
- Cihaz detayında "+ Datastream Ekle" butonuna tıklayın.
- Açılan formda aşağıdaki alanları doldurun:
| Alan | Açıklama | Örnek |
|---|---|---|
| Pin Code | V0, V1, V2… formatında benzersiz pin kodu | V0 |
| Label | Kullanıcı dostu etiket | Oda Sıcaklığı |
| Data Type | Verinin türü | Double |
| Pin Mode | Veri akış yönü | Input |
| Min / Max | Geçerli değer aralığı | -10 / 50 |
| Units | Birim etiketi | °C |
| Color | Renk kodu (widget'ta kullanılır) | #FF5722 |
| Default Value | Başlangıç değeri | 0 |
| Save History | Veri geçmişi kaydedilsin mi (chart için) | ✅ Evet |
| Expose to Automation | Otomasyon kurallarında kullanılabilsin mi | ✅ Evet |
📌 Veri Tipleri
| Data Type | Kullanım | Örnek Değer |
|---|---|---|
| Integer | Tam sayı veriler (açma/kapama, sayaç) | 0, 1, 255 |
| Double | Ondalıklı veriler (sıcaklık, nem, voltaj) | 23.5, 3.14 |
| String | Metin veriler (durum mesajları, GPS) | "Çalışıyor" |
| Enum | Seçenekli veriler (düşük/orta/yüksek) | Kapalı,Düşük,Orta,Yüksek |
🔄 Pin Mode: Veri Akış Yönü
Pin Mode, verinin hangi yönde akacağını belirler. Doğru ayarlamak önemlidir:
| Pin Mode | Yön | Açıklama | Widget Örnekleri |
|---|---|---|---|
| Input | Cihaz → Platform | Cihaz sensör verisi gönderir, platform okur ve gösterir | Gauge, Value Display, Chart |
| Output | Platform → Cihaz | Kullanıcı widget'tan değer gönderir, cihaz alır ve uygular | Switch, Slider, Button |
| InputOutput | Her iki yön | Hem cihaz veri gönderir hem kullanıcı komut gönderebilir | Slider + Gauge kombinasyonu |
Örnek Senaryo
Bir akıllı aydınlatma projesinde:
V0— Input — LDR sensörden ortam ışık seviyesi (0-1024)V1— Output — LED parlaklık kontrolü (0-255, Slider ile)V2— Output — LED açma/kapama (0 veya 1, Switch ile)V3— Input — WiFi sinyal gücü RSSI (dBm)
💡 İpucu: Save History seçeneğini Input pinlerde mutlaka açın — böylece Chart widget'ında zaman serisi grafik görebilirsiniz. Output pinlerde genellikle geçmiş kaydı gerekmez.
🎨 Widget Tipleri
MicroControlPanel şu widget tiplerini destekler. Her birini ilgili datastream'e bağlayarak dashboard'unuzu oluşturursunuz:
| Widget | Tip | Açıklama | Uygun Pin Mode |
|---|---|---|---|
| 🔘 BUTTON | Kontrol | Basıldığında 1, bırakıldığında 0 gönderir (anlık tetikleme) | Output |
| 🎚️ SLIDER | Kontrol | Min-Max arasında sürgü ile değer gönderir | Output / InputOutput |
| 🔀 SWITCH | Kontrol | Açma/kapama toggle — 0 veya 1 gönderir | Output |
| 📊 VALUE_DISPLAY | Gösterim | Son gelen değeri büyük font ile gösterir | Input |
| 💡 LED | Gösterim | 0/1 durumuna göre renk değişen durum LED'i | Input |
| 🌡️ GAUGE | Gösterim | Yarım daire gösterge — sıcaklık, nem, voltaj için ideal | Input |
| 🏷️ LABEL | Gösterim | String veriyi metin olarak gösterir | Input |
| 📈 CHART | Gösterim | Zaman serisi grafik (son 24 saat / 7 gün) | Input (Save History gerekli) |
📦 Paket Notu: Free planda BUTTON, SLIDER, SWITCH, VALUE_DISPLAY, LED, GAUGE, LABEL kullanılabilir. CHART widget'ı Pro ve Business paketlerinde aktiftir.
➕ Widget Ekleme (Adım Adım)
Dashboard'a widget eklemek için:
- Cihazlarım sayfasında cihazınızı seçin.
- Dashboard görünümünde "+ Widget Ekle" butonuna tıklayın.
- Açılan pencerede şu alanları doldurun:
| Alan | Açıklama | Örnek |
|---|---|---|
| Widget Name | Dashboard'da gösterilecek başlık | Oda Sıcaklığı |
| Widget Type | Widget tipi seçimi | GAUGE |
| Virtual Pin | Bağlanacak datastream | V0 |
| Color | Widget rengi (isteğe bağlı, boşsa datastream rengi kullanılır) | #FF5722 |
🖥️ Örnek Dashboard Düzeni
Bir hava istasyonu projesi için önerilen widget düzeni:
| Sıra | Widget | Tip | Pin | Ayar |
|---|---|---|---|---|
| 1 | Sıcaklık | GAUGE | V0 | Min:-10, Max:50, Unit:°C, Renk:#FF5722 |
| 2 | Nem | GAUGE | V1 | Min:0, Max:100, Unit:%, Renk:#2196F3 |
| 3 | Basınç | VALUE_DISPLAY | V2 | Unit:hPa, Renk:#9C27B0 |
| 4 | Fan Kontrol | SWITCH | V3 | 0=Kapalı, 1=Açık |
| 5 | Fan Hız | SLIDER | V4 | Min:0, Max:255 |
| 6 | Fan Durumu | LED | V5 | 0=Kırmızı, 1=Yeşil |
| 7 | Sıcaklık Grafiği | CHART | V0 | Son 24 saat (Pro+ gerekli) |
💻 Firmware'den Datastream Kullanımı
Cihaz tarafında datastream'lere veri yazmak ve okumak için MCPSimpleEsp8266 kütüphanesini kullanırız. Global MCP nesnesi ve MCP_WRITE makrosu ile çalışılır:
Veri Gönderme (Cihaz → Platform)
// Sensörden okunan değerleri platforma gönder
float sicaklik = dht.readTemperature();
float nem = dht.readHumidity();
int isikSeviyesi = analogRead(A0);
// MCP.virtualWrite(pin, değer) — pin makro olarak (V0, V1...)
MCP.virtualWrite(V0, sicaklik); // 23.5 (float → otomatik 1 ondalık)
MCP.virtualWrite(V1, nem); // 45.2
MCP.virtualWrite(V2, isikSeviyesi); // 680 (int)
// LED durumu (0 veya 1)
MCP.virtualWrite(V5, digitalRead(RELAY_PIN) == LOW ? 1 : 0);
// String veri
MCP.virtualWrite(V6, "Sistem Çalışıyor");
Komut Alma (Platform → Cihaz)
MCP_WRITE(Vx) makrosu ile tanımlanan handler'lar, platformdan o pine değer geldiğinde otomatik çağrılır. param nesnesi gelen değeri içerir:
// V3: Switch widget'ından gelen on/off komutu
MCP_WRITE(V3)
{
int val = param.asInt();
if (val == 1) {
digitalWrite(FAN_PIN, HIGH); // Fan aç
Serial.println("Fan: ON");
} else {
digitalWrite(FAN_PIN, LOW); // Fan kapat
Serial.println("Fan: OFF");
}
}
// V4: Slider widget'ından gelen PWM değeri (0-255)
MCP_WRITE(V4)
{
int pwm = param.asInt();
pwm = constrain(pwm, 0, 255);
analogWrite(FAN_PWM_PIN, pwm);
Serial.printf("Fan hız: %d\n", pwm);
}
// V7: Enum datastream — "Kapalı","Düşük","Orta","Yüksek"
MCP_WRITE(V7)
{
String mod = param.asStr();
Serial.println("Mod: " + mod);
if (mod == "Kapalı") analogWrite(FAN_PWM_PIN, 0);
else if (mod == "Düşük") analogWrite(FAN_PWM_PIN, 80);
else if (mod == "Orta") analogWrite(FAN_PWM_PIN, 170);
else if (mod == "Yüksek") analogWrite(FAN_PWM_PIN, 255);
}
// Bağlantı kurulduğunda son değerleri sunucudan çek
MCP_CONNECTED()
{
MCP.syncVirtual(V3, V4, V7);
}
void setup() {
Serial.begin(115200);
pinMode(FAN_PIN, OUTPUT);
MCP.begin(auth, ssid, pass, server, 80);
}
void loop() {
MCP.run();
// ... sensör okuma ve MCP.virtualWrite() ...
}
⏱️ Gönderim Sıklığı: Sensör verilerini 10-30 saniye aralıkla göndermek idealdir. Çok sık göndermek (1 sn) sunucu yükünü artırır, çok seyrek göndermek (5 dk) anlık izlemeyi zorlaştırır.
🎯 Pratik Proje Örnekleri
Örnek 1: Akıllı Sera Otomasyonu
| Pin | Label | Tip | Mode | Widget |
|---|---|---|---|---|
| V0 | Toprak Nemi | Integer | Input | GAUGE (0-1024) |
| V1 | Hava Sıcaklığı | Double | Input | GAUGE (-10 ~ 50°C) |
| V2 | Sulama Pompası | Integer | Output | SWITCH (0/1) |
| V3 | Sulama Eşiği | Integer | Output | SLIDER (200-800) |
| V4 | Pompa Durumu | Integer | Input | LED |
| V5 | Nem Grafiği | Integer | Input | CHART (son 24 saat) |
Örnek 2: Araç Takip Sistemi
| Pin | Label | Tip | Mode | Widget |
|---|---|---|---|---|
| V0 | GPS Konum | String | Input | LABEL ("40.9906,29.0291") |
| V1 | Hız (km/h) | Double | Input | GAUGE (0-200) |
| V2 | Motor Durumu | Integer | Input | LED |
| V3 | Akü Voltajı | Double | Input | VALUE_DISPLAY (V) |
| V4 | Kilometre | Integer | Input | VALUE_DISPLAY |
Örnek 3: Akıllı Ev Aydınlatma
| Pin | Label | Tip | Mode | Widget |
|---|---|---|---|---|
| V0 | Ortam Işığı | Integer | Input | GAUGE (0-1024 lux) |
| V1 | Lamba On/Off | Integer | Output | SWITCH |
| V2 | Parlaklık | Integer | Output | SLIDER (0-255) |
| V3 | Renk Modu | Enum | Output | LABEL (Sıcak,Nötr,Soğuk) |
| V4 | Hareket Algılandı | Integer | Input | LED |
💡 İpuçları ve En İyi Uygulamalar
📐 Datastream İsimlendirme Kuralları
- Pin kodlarını sıralı kullanın: V0, V1, V2… (boşluk bırakmayın)
- Label'lara anlamlı isimler verin: "Oda Sıcaklığı" ✅ — "V0" ❌
- Aynı cihazda aynı pin kodunu iki kez kullanamazsınız
- Farklı cihazlarda aynı pin kodunu kullanabilirsiniz (V0 her cihaz için ayrıdır)
🎨 Widget Renk Stratejisi
| Veri Türü | Önerilen Renk | Hex |
|---|---|---|
| Sıcaklık | 🟠 Turuncu / Kırmızı | #FF5722 |
| Nem / Su | 🔵 Mavi | #2196F3 |
| Işık | 🟡 Sarı | #FFC107 |
| Durum (On/Off) | 🟢 Yeşil | #4CAF50 |
| Hata / Alarm | 🔴 Kırmızı | #F44336 |
| Enerji / Voltaj | 🟣 Mor | #9C27B0 |
⚡ Performans Tavsiyeleri
- Save History'yi sadece grafik görmek istediğiniz pinlerde açın — gereksiz açmak veritabanı şişirir
- InvalidateSeconds ayarlayarak bağlantı koptuğunda widget'ın eski değeri göstermesini engelleyin (ör: 60 saniye)
- Expose to Automation'ı sadece otomasyon kurallarında kullanacağınız pinlerde açık tutun
- Bir cihazda en fazla 32 Virtual Pin tanımlamanız önerilir
🔧 Sık Yapılan Hatalar
| Hata | Çözüm |
|---|---|
| Widget değer göstermiyor | Pin Mode Input olmalı ve cihaz virtualWrite ile veri göndermeli |
| Switch basınca cihaz tepki vermiyor | Pin Mode Output olmalı ve firmware'de mcp.on("Vx", callback) tanımlı olmalı |
| Chart boş görünüyor | Save History açık olmalı ve en az birkaç dakika veri toplanmalı |
| Gauge min/max yanlış | Datastream'deki Min/Max değerlerini kontrol edin — widget, datastream aralığını kullanır |
| Slider kaydırılınca eski değere dönüyor | Firmware'de mcp.on callback'inde değeri fiziksel olarak uygulayıp onaylamalısınız |
Daha fazla bilgi için REST API dokümantasyonunu inceleyin. Her datastream'eGET /api/devices/{id}/pinsvePOST /api/devices/{id}/pins/{pinCode}/valueendpoint'leri ile programatik olarak da erişebilirsiniz. 🚀