Başlangıç Rehberleri

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.

admin@microcontrolpanel.com 18 Haziran 2025 4 görüntülenme

📡 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 → Platform V3 üzerinden "25" değerini cihaza yazar.

Datastream vs Widget Farkı

KavramNe İşe Yarar?Benzetme
DatastreamVeri kanalı tanımı (pin, veri tipi, aralık, birim)Su borusu
WidgetGö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:

  1. Cihazlarım sayfasına gidin ve cihazınızı seçin.
  2. Cihaz detayında "+ Datastream Ekle" butonuna tıklayın.
  3. Açılan formda aşağıdaki alanları doldurun:
AlanAçıklamaÖrnek
Pin CodeV0, V1, V2… formatında benzersiz pin koduV0
LabelKullanıcı dostu etiketOda Sıcaklığı
Data TypeVerinin türüDouble
Pin ModeVeri akış yönüInput
Min / MaxGeçerli değer aralığı-10 / 50
UnitsBirim etiketi°C
ColorRenk kodu (widget'ta kullanılır)#FF5722
Default ValueBaşlangıç değeri0
Save HistoryVeri geçmişi kaydedilsin mi (chart için)✅ Evet
Expose to AutomationOtomasyon kurallarında kullanılabilsin mi✅ Evet

📌 Veri Tipleri

Data TypeKullanımÖrnek Değer
IntegerTam sayı veriler (açma/kapama, sayaç)0, 1, 255
DoubleOndalıklı veriler (sıcaklık, nem, voltaj)23.5, 3.14
StringMetin veriler (durum mesajları, GPS)"Çalışıyor"
EnumSeç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 ModeYönAçıklamaWidget Örnekleri
InputCihaz → PlatformCihaz sensör verisi gönderir, platform okur ve gösterirGauge, Value Display, Chart
OutputPlatform → CihazKullanıcı widget'tan değer gönderir, cihaz alır ve uygularSwitch, Slider, Button
InputOutputHer iki yönHem cihaz veri gönderir hem kullanıcı komut gönderebilirSlider + Gauge kombinasyonu

Örnek Senaryo

Bir akıllı aydınlatma projesinde:

  • V0Input — LDR sensörden ortam ışık seviyesi (0-1024)
  • V1Output — LED parlaklık kontrolü (0-255, Slider ile)
  • V2Output — LED açma/kapama (0 veya 1, Switch ile)
  • V3Input — 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:

WidgetTipAçıklamaUygun Pin Mode
🔘 BUTTONKontrolBasıldığında 1, bırakıldığında 0 gönderir (anlık tetikleme)Output
🎚️ SLIDERKontrolMin-Max arasında sürgü ile değer gönderirOutput / InputOutput
🔀 SWITCHKontrolAçma/kapama toggle — 0 veya 1 gönderirOutput
📊 VALUE_DISPLAYGösterimSon gelen değeri büyük font ile gösterirInput
💡 LEDGösterim0/1 durumuna göre renk değişen durum LED'iInput
🌡️ GAUGEGösterimYarım daire gösterge — sıcaklık, nem, voltaj için idealInput
🏷️ LABELGösterimString veriyi metin olarak gösterirInput
📈 CHARTGösterimZaman 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:

  1. Cihazlarım sayfasında cihazınızı seçin.
  2. Dashboard görünümünde "+ Widget Ekle" butonuna tıklayın.
  3. Açılan pencerede şu alanları doldurun:
AlanAçıklamaÖrnek
Widget NameDashboard'da gösterilecek başlıkOda Sıcaklığı
Widget TypeWidget tipi seçimiGAUGE
Virtual PinBağlanacak datastreamV0
ColorWidget 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ıraWidgetTipPinAyar
1SıcaklıkGAUGEV0Min:-10, Max:50, Unit:°C, Renk:#FF5722
2NemGAUGEV1Min:0, Max:100, Unit:%, Renk:#2196F3
3BasınçVALUE_DISPLAYV2Unit:hPa, Renk:#9C27B0
4Fan KontrolSWITCHV30=Kapalı, 1=Açık
5Fan HızSLIDERV4Min:0, Max:255
6Fan DurumuLEDV50=Kırmızı, 1=Yeşil
7Sıcaklık GrafiğiCHARTV0Son 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

PinLabelTipModeWidget
V0Toprak NemiIntegerInputGAUGE (0-1024)
V1Hava SıcaklığıDoubleInputGAUGE (-10 ~ 50°C)
V2Sulama PompasıIntegerOutputSWITCH (0/1)
V3Sulama EşiğiIntegerOutputSLIDER (200-800)
V4Pompa DurumuIntegerInputLED
V5Nem GrafiğiIntegerInputCHART (son 24 saat)

Örnek 2: Araç Takip Sistemi

PinLabelTipModeWidget
V0GPS KonumStringInputLABEL ("40.9906,29.0291")
V1Hız (km/h)DoubleInputGAUGE (0-200)
V2Motor DurumuIntegerInputLED
V3Akü VoltajıDoubleInputVALUE_DISPLAY (V)
V4KilometreIntegerInputVALUE_DISPLAY

Örnek 3: Akıllı Ev Aydınlatma

PinLabelTipModeWidget
V0Ortam IşığıIntegerInputGAUGE (0-1024 lux)
V1Lamba On/OffIntegerOutputSWITCH
V2ParlaklıkIntegerOutputSLIDER (0-255)
V3Renk ModuEnumOutputLABEL (Sıcak,Nötr,Soğuk)
V4Hareket AlgılandıIntegerInputLED

💡 İ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 RenkHex
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östermiyorPin Mode Input olmalı ve cihaz virtualWrite ile veri göndermeli
Switch basınca cihaz tepki vermiyorPin Mode Output olmalı ve firmware'de mcp.on("Vx", callback) tanımlı olmalı
Chart boş görünüyorSave 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üyorFirmware'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'e GET /api/devices/{id}/pins ve POST /api/devices/{id}/pins/{pinCode}/value endpoint'leri ile programatik olarak da erişebilirsiniz. 🚀

#Datastream #Widget #VirtualPin #Dashboard #Gauge #Switch #Slider #LED #Chart #MicroControlPanel #IoT