.NET SDK
Async sayfalama, tiplendirilmiş IoT modelleri, Makineler servisi.
Kurulum
Paket bilgisi alınıyor…
NuGet
Paket bilgisi alınıyor…
İstemci Başlatma
var client = new SeshatClient(apiKey, secret, new SeshatClientOptions {
Host = "localhost", // seshat sunucusu
Company = "<company>"
});
Sensörler
var fo = client.Sensors.FindOpts();
fo.Name = "temp"; fo.Tag = "critical"; fo.All = true;
await client.Sensors.FindEachPageAsync(fo, (items, total, page, limit) => {
// sayfa
return true;
});
var q = client.Sensors.IoTQueryOptions()
.SensorId("sensor123")
.PerPage(50)
.SortByDateDesc();
var data = await client.Sensors.GetIoTDataAsync(q);
if (data?.Items != null){ foreach (var it in data.Items){ /* it.Value */ } }
Dönüşler
IEnumerable<Sensor>: sensör listesiint total: toplamint page,int limit: sayfa metadatası
Sensor özellikleri (C#)
Id,Name,KeyCompany,Machine,CollectorTags(List<string>),IsDeleted(bool)CreationDate(long),DataType(int)LatestValue,LatestChange(SensorValue)
SensorValue
Date(string),Type(int),Value(object)
Makineler
var mo = new MachinesService.FindOptions{ Tag = "production" };
var res = await client.Machines.FindAsync(mo);
var list = res?.Data; var total = res?.Total ?? 0;
Dönüşler
IEnumerable<Machine>: makine listesiint total: toplam
Machine alanları (C#)
Id,Collector,Company,Name,KeyTags(List<string>),CreatedBy(string)CreationDate(long),SendMqttDirect(bool)
FindOptions özeti
Name,Key,TagCollector/MachineLimit,Page,All
Canlı
// Sensör servisi üzerinden doğrudan canlı akış (dayanıklı)
await client.Sensors.LiveWithAsync(new[]{"sensor123"}, null, (sensorId, value, type) => {
Console.WriteLine($"{sensorId}: {value}");
});
Veri Tipleri (type → C#)
1→int,2→uint3→sbyte,4→byte5→short,6→ushort7→int,8→uint9→long,10→ulong11→double12→DateTime(ISO)13→string14→int[]15→byte[]16→bool17→Dictionary<string,object>18→List<Dictionary<string,object>>19→object(ham JSON)22→string
IoT Verisi
var q = client.Sensors.IoTQueryOptions()
.SensorId("sensor-1")
.PerPage(100)
.SortByDateDesc()
.Start("2024-01-01T00:00:00Z")
.End("2024-01-02T00:00:00Z");
var data = await client.Sensors.GetIoTDataAsync(q);
var changes = await client.Sensors.GetIoTDataChangesAsync(q);
if (data?.Items != null) {
foreach (var rec in data.Items) {
// rec.Timestamp, rec.Value, rec.Metadata
}
}
Dönüşler
GetIoTDataAsync(query)→IoTDataResponseGetIoTDataChangesAsync(query)→ aynı yapı
IoTDataRecord
Timestamp(string, ISO)Value(object)Metadata(IoTDataMetadata veya null)
Bağlantılar
Her sensör bir bağlantıyla ilişkilidir. MQTT'ye parametreli (ör: topic) yayınlamak için WriteItem kullanın.
// Gelişmiş: topic parametresiyle boolean yazım
var item = new SeshatSdk.Services.ConnectionsService.WriteItem {
AnyValue = new { value = true },
Type = 16, // bool
Parameters = new List {
new() { Key = "topic", Value = System.Text.Encoding.UTF8.GetBytes("67333c8d615f8c6cd6f07c38/67333c8d615f8c6cd6f07c39") }
}
};
await client.Connections.WriteItemAsync("mqtt://0.0.0.0:8888", item);
Olaylar
var resp = await client.Events.TriggerAsync("rebuild-cache", new { fast = true });
var list = await client.Events.ListAsync();
Hata Yönetimi
try {
var fo = client.Sensors.FindOpts();
var page = await client.Sensors.FindAsync(fo);
} catch (HttpRequestException ex) {
// ağ hatası
}
try {
var q = client.Sensors.IoTQueryOptions().SensorId("sensor123").PerPage(100).SortByDateDesc();
var data = await client.Sensors.GetIoTDataAsync(q);
} catch (Exception ex) {
// aktarım / parse hatası
}