Skip to content

@xcons/cli-thingsboard - Widget List Kılavuzu

Bu dokümantasyon, XCONS ThingsBoard CLI ile widget listeleme işlemlerini detaylı olarak açıklar.

Widget List Komutu

bash
xcons-thingsboard widget list [options]

Seçenekler

  • -h, --host <host>: ThingsBoard sunucu adresi (örn: 192.168.233.132:8080)
  • -u, --user <email>: ThingsBoard kullanıcı adı/email
  • -p, --pass <password>: ThingsBoard şifresi
  • -f, --filter <text>: Widget adı, açıklama, bundle, tür veya ID'ye göre filtreleme
  • --json: Sonuçları JSON formatında çıktı al

Temel Kullanım

Tüm Widget'ları Listeleme

bash
# İnteraktif sunucu bağlantısı
xcons-thingsboard widget list

# Sunucu bilgileri ile listeleme
xcons-thingsboard widget list \
  -h 192.168.233.132:8080 \
  -u admin@domain.com \
  -p password

Filtrelenmiş Listeleme

bash
# Widget adına göre filtreleme
xcons-thingsboard widget list \
  -h localhost:8080 -u tenant@thingsboard.org -p tenant \
  --filter "Temperature"

# Widget türüne göre filtreleme
xcons-thingsboard widget list \
  -h server:8080 -u admin -p pass \
  --filter "timeseries"

# Bundle adına göre filtreleme
xcons-thingsboard widget list \
  -h server:8080 -u admin -p pass \
  --filter "Xcon Studio"

# ID'ye göre filtreleme
xcons-thingsboard widget list \
  -h server:8080 -u admin -p pass \
  --filter "62289610"

JSON Çıktısı

bash
# JSON formatında çıktı
xcons-thingsboard widget list \
  -h server:8080 -u admin -p pass \
  --json

# JSON çıktısını dosyaya kaydet
xcons-thingsboard widget list \
  -h server:8080 -u admin -p pass \
  --json > widgets.json

Çıktı Formatları

Tablo Formatı (Varsayılan)

bash
xcons-thingsboard widget list -h server:8080 -u admin -p pass

Örnek Çıktı:

Fetching ThingsBoard widgets from server...
API Response received (status: 200)
Found 15 widgets
Processing 15 widgets...

Bundle distribution:
   Cards: 3 widgets
   Charts: 4 widgets  
   Control widgets: 2 widgets
   Custom Dashboards: 3 widgets
   Xcon Studio: 3 widgets

Server: http://192.168.233.132:8080

ID                                      NAME                          BUNDLE                    TYPE            DESCRIPTION
------------------------------------------------------------------------------------------------------------
13814000-1dd2-11b2-8080-808080808080    Cards                         Cards                     static          Card widgets
13814001-1dd2-11b2-8080-808080808080    Charts                        Charts                    timeseries      Chart widgets for visual...
13814002-1dd2-11b2-8080-808080808080    Control buttons               Control widgets           rpc             Control widgets for RPC
62289610-f894-11ef-bf2f-f7b9477f8896    Temperature Monitor           Xcon Studio               timeseries      Advanced temperature mon...
278b4440-f894-11ef-bf2f-f7b9477f8896    Device Status                 Xcon Studio               latest          Device status indicator
cf355dd0-369a-11f0-a044-a9b78a26ce7f    Humidity Tracker              Xcon Studio               timeseries      Humidity monitoring wid...

Total: 15 widgets

Widget Types:
  timeseries: 8
  latest: 3
  rpc: 2  
  static: 2

3 SCADA widgets found

Use --json flag to get detailed widget information
Use --filter <text> to filter by name, description, bundle, type or ID

JSON Formatı

bash
xcons-thingsboard widget list --json -h server:8080 -u admin -p pass

Örnek JSON Çıktısı:

json
[
  {
    "id": "62289610-f894-11ef-bf2f-f7b9477f8896",
    "name": "Temperature Monitor",
    "description": "Advanced temperature monitoring widget with real-time charts",
    "bundleName": "Xcon Studio",
    "widgetType": "timeseries",
    "deprecated": false,
    "scada": false,
    "tags": ["temperature", "monitoring", "iot"]
  },
  {
    "id": "278b4440-f894-11ef-bf2f-f7b9477f8896", 
    "name": "Device Status",
    "description": "Real-time device status and health indicator",
    "bundleName": "Xcon Studio",
    "widgetType": "latest",
    "deprecated": false,
    "scada": false,
    "tags": ["status", "health"]
  },
  {
    "id": "cf355dd0-369a-11f0-a044-a9b78a26ce7f",
    "name": "Humidity Tracker", 
    "description": "Humidity level monitoring and trending",
    "bundleName": "Xcon Studio",
    "widgetType": "timeseries",
    "deprecated": false,
    "scada": true,
    "tags": ["humidity", "environmental"]
  }
]

Filtreleme Örnekleri

Ad Bazlı Filtreleme

bash
# "Temperature" içeren widget'lar
xcons-thingsboard widget list \
  -h server:8080 -u admin -p pass \
  --filter "Temperature"

# "Monitor" içeren widget'lar
xcons-thingsboard widget list \
  -h server:8080 -u admin -p pass \
  --filter "Monitor"

# "Control" içeren widget'lar
xcons-thingsboard widget list \
  -h server:8080 -u admin -p pass \
  --filter "Control"

Filtrelenmiş Çıktı Örneği:

Fetching ThingsBoard widgets from server...
Found 15 widgets
Filter applied: 3/15 widgets match "Temperature"

Filtered by: Temperature
Server: http://192.168.233.132:8080

ID                                      NAME                          BUNDLE                    TYPE            DESCRIPTION
------------------------------------------------------------------------------------------------------------
62289610-f894-11ef-bf2f-f7b9477f8896    Temperature Monitor           Xcon Studio               timeseries      Advanced temperature mon...
a1b2c3d4-e5f6-7890-abcd-ef1234567890    Temperature Gauge             Custom Dashboards         latest          Temperature gauge widget
b2c3d4e5-f6g7-8901-bcde-f01234567891    Temperature Chart             Charts                    timeseries      Temperature trend chart

Total: 3 widgets

Widget Types:
  timeseries: 2
  latest: 1

Use --json flag to get detailed widget information

Tür Bazlı Filtreleme

bash
# TimeSeries widget'ları
xcons-thingsboard widget list \
  -h server:8080 -u admin -p pass \
  --filter "timeseries"

# Latest values widget'ları
xcons-thingsboard widget list \
  -h server:8080 -u admin -p pass \
  --filter "latest"

# RPC control widget'ları
xcons-thingsboard widget list \
  -h server:8080 -u admin -p pass \
  --filter "rpc"

# Static widget'lar
xcons-thingsboard widget list \
  -h server:8080 -u admin -p pass \
  --filter "static"

Bundle Bazlı Filtreleme

bash
# XCONS widget'ları
xcons-thingsboard widget list \
  -h server:8080 -u admin -p pass \
  --filter "Xcon Studio"

# Sistem widget'ları
xcons-thingsboard widget list \
  -h server:8080 -u admin -p pass \
  --filter "Charts"

# Özel bundle widget'ları
xcons-thingsboard widget list \
  -h server:8080 -u admin -p pass \
  --filter "Custom Dashboards"

ID Bazlı Filtreleme

bash
# Kısmi ID ile arama
xcons-thingsboard widget list \
  -h server:8080 -u admin -p pass \
  --filter "62289610"

# Tam ID ile arama
xcons-thingsboard widget list \
  -h server:8080 -u admin -p pass \
  --filter "62289610-f894-11ef-bf2f-f7b9477f8896"

Açıklama Bazlı Filtreleme

bash
# "monitoring" içeren açıklamalar
xcons-thingsboard widget list \
  -h server:8080 -u admin -p pass \
  --filter "monitoring"

# "dashboard" içeren açıklamalar
xcons-thingsboard widget list \
  -h server:8080 -u admin -p pass \
  --filter "dashboard"

# "control" içeren açıklamalar
xcons-thingsboard widget list \
  -h server:8080 -u admin -p pass \
  --filter "control"

Sunucu Bağlantısı

İnteraktif Bağlantı

bash
xcons-thingsboard widget list

İnteraktif Soru Sırası:

Fetching ThingsBoard widgets from server...
ThingsBoard server connection required
? ThingsBoard server host (with port): 192.168.233.132:8080
? Username/Email: admin@domain.com
? Password: [gizli giriş]

Doğrudan Bağlantı

bash
# Tüm parametrelerle
xcons-thingsboard widget list \
  -h 192.168.233.132:8080 \
  -u tenant@thingsboard.org \
  -p tenant

# Minimal parametreler (şifre interaktif sorulur)
xcons-thingsboard widget list \
  -h localhost:8080 \
  -u admin@thingsboard.org

Widget Durumları ve Özellikler

Widget Türleri

TimeSeries Widget'lar:

  • Zaman serisi verilerini görüntüler
  • Grafikler ve trendler için kullanılır
  • Geçmiş veriler analizi

Latest Values Widget'lar:

  • Güncel telemetri değerlerini gösterir
  • Anlık durum göstergeleri
  • Dashboard panelleri

RPC Control Widget'lar:

  • Cihaz kontrolü için kullanılır
  • Uzaktan komut gönderimi
  • Interaktif kontrol panelleri

Static Widget'lar:

  • Statik HTML içeriği
  • Bilgilendirme panelleri
  • Dokümantasyon widget'ları

Widget Durumları

Normal Widget'lar:

  • Aktif kullanımda
  • Dashboard'larda kullanılabilir
  • Güncellenebilir

Deprecated Widget'lar:

  • Kullanımdan kaldırılmış
  • Sarı renkte gösterilir
  • Yeni projelerde kullanılmamalı

SCADA Widget'lar:

  • Endüstriyel kontrol sistemleri için
  • Magenta renkte gösterilir
  • Özel yetkiler gerekebilir

Pratik Kullanım Senaryoları

XCONS Widget'larını Bulma

bash
# XCONS CLI ile oluşturulan widget'ları listele
xcons-thingsboard widget list \
  -h server:8080 -u admin -p pass \
  --filter "Xcon Studio" --json | \
  jq -r '.[].name'

Widget İstatistikleri

bash
# Widget türü istatistikleri
xcons-thingsboard widget list \
  -h server:8080 -u admin -p pass \
  --json | \
  jq 'group_by(.widgetType) | map({type: .[0].widgetType, count: length})'

Çıktı:

json
[
  {"type": "timeseries", "count": 8},
  {"type": "latest", "count": 3},
  {"type": "rpc", "count": 2},
  {"type": "static", "count": 2}
]

Bundle Analizi

bash
# Bundle başına widget sayısı
xcons-thingsboard widget list \
  -h server:8080 -u admin -p pass \
  --json | \
  jq 'group_by(.bundleName) | map({bundle: .[0].bundleName, count: length})'

Deprecated Widget Bulma

bash
# Kullanımdan kaldırılan widget'ları listele
xcons-thingsboard widget list \
  -h server:8080 -u admin -p pass \
  --json | \
  jq '.[] | select(.deprecated == true)'

SCADA Widget'lar

bash
# SCADA widget'larını listele
xcons-thingsboard widget list \
  -h server:8080 -u admin -p pass \
  --json | \
  jq '.[] | select(.scada == true)'

Gelişmiş Filtreleme

Çoklu Kriter Filtreleme

bash
#!/bin/bash

advanced_filter() {
    local host=$1
    local user=$2
    local pass=$3
    local widget_type=$4
    local bundle_name=$5
    
    xcons-thingsboard widget list \
        -h "$host" -u "$user" -p "$pass" \
        --json | \
        jq ".[] | select(.widgetType == \"$widget_type\" and .bundleName == \"$bundle_name\")"
}

# TimeSeries widget'larını Xcon Studio bundle'ından bul
advanced_filter "server:8080" "admin" "pass" "timeseries" "Xcon Studio"

Tarih Bazlı Filtreleme

bash
# Bu özellik için widget metadata'sı genişletilmesi gerekir
# Şu an için manuel analiz ile yapılabilir

recent_widgets() {
    local widgets_file="widgets.json"
    
    # Widget listesini al
    xcons-thingsboard widget list --json > "$widgets_file"
    
    echo "Recent widgets analysis:"
    echo "Total widgets: $(jq length "$widgets_file")"
    echo "XCONS widgets: $(jq '[.[] | select(.bundleName == "Xcon Studio")] | length' "$widgets_file")"
    echo "Non-deprecated: $(jq '[.[] | select(.deprecated == false)] | length' "$widgets_file")"
}

Boyut Bazlı Sıralama

bash
# Widget'ları isim uzunluğuna göre sırala
xcons-thingsboard widget list --json | \
  jq 'sort_by(.name | length) | reverse | .[] | {name: .name, length: (.name | length)}'

Hata Durumları ve Çözümler

Bağlantı Hataları

Hata: ThingsBoard server not found - Check host address

Çözüm:

bash
# Host adresini kontrol et
ping 192.168.233.132

# Port kontrolü
telnet 192.168.233.132 8080

# Protokol ekle
xcons-thingsboard widget list -h http://192.168.233.132:8080

Kimlik Doğrulama Hataları

Hata: Authentication failed - Invalid username or password

Çözüm:

bash
# Kullanıcı bilgilerini doğrula
# ThingsBoard web arayüzünde giriş dene

# Farklı kullanıcı dene
xcons-thingsboard widget list \
  -h server:8080 \
  -u sysadmin@thingsboard.org \
  -p sysadmin

Yetki Hataları

Hata: Access forbidden - User may not have required permissions

Çözüm:

bash
# Yönetici hesabı kullan
xcons-thingsboard widget list \
  -h server:8080 \
  -u admin@company.com \
  -p admin_password

# Tenant admin hesabı kullan
xcons-thingsboard widget list \
  -h server:8080 \
  -u tenant@thingsboard.org \
  -p tenant

Boş Sonuç

Çıktı: No widgets found on the server.

Kontroller:

bash
# Filtreyi kaldır
xcons-thingsboard widget list \
  -h server:8080 -u admin -p pass

# Farklı kullanıcı dene (widget görüntüleme yetkileri farklı olabilir)
xcons-thingsboard widget list \
  -h server:8080 -u sysadmin@thingsboard.org -p sysadmin

# Tenant değiştir (multi-tenant ortamda)

API Response Hataları

Hata: Error fetching widgets: HTTP 500

Çözüm:

bash
# Debug modu ile detayları gör
# (Widget list komutunda --debug seçeneği yok, ancak sunucu loglarını kontrol et)

# Farklı API endpoint dene
# ThingsBoard sürümü uyumluluğunu kontrol et

# Sunucu durumunu kontrol et
curl -I http://server:8080/api/auth/user

Scripting ve Otomasyon

Widget Inventory Script

bash
#!/bin/bash

generate_widget_inventory() {
    local host=$1
    local user=$2
    local pass=$3
    local output_file="widget_inventory_$(date +%Y%m%d_%H%M%S).json"
    
    echo "Generating widget inventory..."
    
    # Widget listesini al
    xcons-thingsboard widget list \
        -h "$host" -u "$user" -p "$pass" \
        --json > "$output_file"
    
    # İstatistikleri hesapla
    local total=$(jq length "$output_file")
    local timeseries=$(jq '[.[] | select(.widgetType == "timeseries")] | length' "$output_file")
    local latest=$(jq '[.[] | select(.widgetType == "latest")] | length' "$output_file") 
    local rpc=$(jq '[.[] | select(.widgetType == "rpc")] | length' "$output_file")
    local static=$(jq '[.[] | select(.widgetType == "static")] | length' "$output_file")
    local deprecated=$(jq '[.[] | select(.deprecated == true)] | length' "$output_file")
    local scada=$(jq '[.[] | select(.scada == true)] | length' "$output_file")
    
    # Rapor oluştur
    cat > "widget_report.md" << EOF
# Widget Inventory Report

Generated: $(date)
Server: $host

## Summary
- **Total Widgets**: $total
- **TimeSeries**: $timeseries
- **Latest Values**: $latest  
- **RPC Control**: $rpc
- **Static**: $static
- **Deprecated**: $deprecated
- **SCADA**: $scada

## Bundle Distribution
EOF
    
    # Bundle dağılımı ekle
    jq -r 'group_by(.bundleName) | map("- **\(.[0].bundleName)**: \(length) widgets") | .[]' "$output_file" >> "widget_report.md"
    
    echo "Inventory generated:"
    echo "  Data: $output_file"
    echo "  Report: widget_report.md"
}

# Kullanım
generate_widget_inventory "localhost:8080" "tenant" "tenant"

Widget Karşılaştırma

bash
#!/bin/bash

compare_widget_environments() {
    local env1_host=$1
    local env1_user=$2
    local env1_pass=$3
    local env2_host=$4
    local env2_user=$5
    local env2_pass=$6
    
    echo "Comparing widgets between environments..."
    
    # Her iki ortamdan widget listesi al
    xcons-thingsboard widget list \
        -h "$env1_host" -u "$env1_user" -p "$env1_pass" \
        --json | jq -r '.[].name' | sort > env1_widgets.txt
    
    xcons-thingsboard widget list \
        -h "$env2_host" -u "$env2_user" -p "$env2_pass" \
        --json | jq -r '.[].name' | sort > env2_widgets.txt
    
    echo "=== Environment 1 only ==="
    comm -23 env1_widgets.txt env2_widgets.txt
    
    echo "=== Environment 2 only ==="
    comm -13 env1_widgets.txt env2_widgets.txt
    
    echo "=== Common widgets ==="
    comm -12 env1_widgets.txt env2_widgets.txt
    
    # Temizlik
    rm env1_widgets.txt env2_widgets.txt
}

# Dev vs Prod karşılaştırması
compare_widget_environments \
    "dev:8080" "dev-user" "dev-pass" \
    "prod:8080" "prod-user" "prod-pass"

Widget Health Check

bash
#!/bin/bash

widget_health_check() {
    local host=$1
    local user=$2
    local pass=$3
    
    echo "=== Widget Health Check ==="
    echo "Server: $host"
    echo "Time: $(date)"
    echo
    
    # Widget listesini al
    local widgets_json=$(xcons-thingsboard widget list \
        -h "$host" -u "$user" -p "$pass" \
        --json)
    
    if [ $? -ne 0 ]; then
        echo "❌ CRITICAL: Cannot connect to ThingsBoard server"
        return 1
    fi
    
    local total=$(echo "$widgets_json" | jq length)
    local deprecated=$(echo "$widgets_json" | jq '[.[] | select(.deprecated == true)] | length')
    local xcon_widgets=$(echo "$widgets_json" | jq '[.[] | select(.bundleName == "Xcon Studio")] | length')
    
    echo "✅ CONNECTION: OK"
    echo "📊 TOTAL WIDGETS: $total"
    echo "🔧 XCONS WIDGETS: $xcon_widgets"
    
    if [ "$deprecated" -gt 0 ]; then
        echo "⚠️  DEPRECATED WIDGETS: $deprecated (review recommended)"
    else
        echo "✅ DEPRECATED WIDGETS: None"
    fi
    
    # Bundle sağlığı
    local bundles=$(echo "$widgets_json" | jq -r 'group_by(.bundleName) | map(.[0].bundleName) | length')
    echo "📦 ACTIVE BUNDLES: $bundles"
    
    if [ "$total" -eq 0 ]; then
        echo "⚠️  WARNING: No widgets found"
    elif [ "$total" -gt 100 ]; then
        echo "⚠️  WARNING: High widget count ($total) - performance review recommended"
    fi
    
    echo
    echo "Health check completed"
}

# Kullanım
widget_health_check "localhost:8080" "tenant" "tenant"

CSV Export

bash
#!/bin/bash

export_widgets_csv() {
    local host=$1
    local user=$2
    local pass=$3
    local output_file="widgets_$(date +%Y%m%d_%H%M%S).csv"
    
    echo "Exporting widgets to CSV..."
    
    # CSV header
    echo "ID,Name,Type,Bundle,Description,Deprecated,SCADA" > "$output_file"
    
    # Widget verilerini CSV formatında export et
    xcons-thingsboard widget list \
        -h "$host" -u "$user" -p "$pass" \
        --json | \
        jq -r '.[] | [.id, .name, .widgetType, .bundleName, .description, .deprecated, .scada] | @csv' >> "$output_file"
    
    echo "Widgets exported to: $output_file"
    echo "Total records: $(tail -n +2 "$output_file" | wc -l)"
}

# Kullanım
export_widgets_csv "localhost:8080" "tenant" "tenant"

Sonraki Adımlar

Widget listeleme işleminden sonra:

  1. Widget Install - Widget'ları sunucuya yükleme
  2. Widget Delete - Gereksiz widget'ları kaldırma
  3. Widget Build - Widget'ları güncelleme

Widget listeleme işlemi tamamlandı. Widget envanterinizi artık yönetebilirsiniz!