Appearance
@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 passwordFiltrelenmiş 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 IDJSON 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 informationTü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.orgWidget 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:8080Kimlik 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 sysadminYetki 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 tenantBoş 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/userScripting 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:
- Widget Install - Widget'ları sunucuya yükleme
- Widget Delete - Gereksiz widget'ları kaldırma
- Widget Build - Widget'ları güncelleme
Widget listeleme işlemi tamamlandı. Widget envanterinizi artık yönetebilirsiniz!