Go SDK
Türkçe dokümantasyon: Tipli servisler & birleşik seçenek kalıpları (FindOptions, LiveOptions, IoTQueryOptions).
Kurulum
go get git.antodis.com/seshat/sdk
Modül
Modül bilgisi yükleniyor…
İstemci Başlatma
c := sdk.NewAntodisSdk(apiKey, secret,
sdk.WithHost("localhost"), // seshat sunucusu
)
Sensörler: Arama & Sayfalama
opt := c.Sensors.FindOpts()
opt.SetName("temp")
opt.SetTag("critical")
opt.SetAll(true)
err := c.Sensors.FindEachPage(ctx, opt, func(items []sdk.Sensor, total, page, limit int) bool {
// öğeleri işle
return true
})
Fonksiyon özeti: Find tek sayfa (öğeler + toplam) döndürür. FindEachPage tüm sayfaları sırasıyla gezinir ve işleyiciniz döndürdüğü sürece devam eder. FindHandler sadece ilerleme/tahmini için toplam & sayfa & limit metadatasını verir. Filtreler AND ile birleşir; sıfır/boş değerler sorguya eklenmez. Hata oluşursa yineleme durur.
Dönüşler
Find / FindEachPage callback'leri sensör modelleri ve sayfalama bilgisi döndürür.
[]Sensor: sensör listesitotal int: tüm sayfalardaki toplampage int,limit int: anlık sayfa metadatası
Sensor alanları (Go)
ID(string)Name(string)Key(string)Company(string)Machine(string)Collector(string)Tags([]string)IsDeleted(bool)CreationDate(int64)DataType(int)LatestValue(SensorValue)LatestChange(SensorValue)Generative(bool)SendOnlyChange(bool)
SensorValue
Date(string, ISO)Type(int)Value(any)
FindOptions setter'ları
opt.SetName(string): İsimde büyük/küçük harf duyarsız alt dize.opt.SetKey(string): Tam anahtar eşleşmesi.opt.SetTag(string): Virgülle ayrılmış etiket listesi; herhangi biri eşleşirse dahil.opt.SetMachine(string)/opt.SetCollector(string): Makine / toplayıcı kimliği veya adı.opt.SetLimit(int): Sayfa boyutu (All true ise yok sayılır).opt.SetPage(int): 1 tabanlı sayfa indeksi (All true ise yok sayılır).opt.SetAll(bool): Tüm sayfaları otomatik gez.
Notlar
- Filtreler AND ile birleşir.
- Sunucu maksimum limitleri sessizce düşürebilir.
- Aynı desen Makineler servisi için de geçerli.
Makine Listesi
mopt := c.Machines.FindOpts()
mopt.SetTag("production")
machines, total, err := c.Machines.Find(ctx, mopt)
Dönüşler
[]Machine: makine listesitotal int: toplam
Machine alanları (Go)
ID(string)Collector(string)Company(string)Name(string)Key(string)Tags([]string)CreatedBy(string)CreationDate(int64)SendMqttDirect(bool)
Canlı
err = c.Sensors.Live(func(sensorId string, data any, dataType int) {
fmt.Println(sensorId, data, dataType)
})
Veri Tipleri (t → Go türü)
Callback içindeki t tip kimliği ve v karşılık gelen Go türüdür.
1→int2→uint3→int84→uint85→int166→uint167→int328→uint329→int6410→uint6411→float6412→time.Time13→string14→[]int3215→[]byte16→bool17→map[string]any18→[]map[string]any19→any(ham JSON)22→string
Canlı fonksiyonlar: Live ve LiveContext içten LiveWith üzerine kurulur. Yayın önce akış denemesi yapar; bağlantı koparsa periyodik polling'e geçer. Sensör listesi verilmezse yeni sensörleri yakalamak için liste 60 saniyede bir yenilenir. Callback hataları döngüyü bozmaz. İptal etmek için context'i cancel edin.
IoT Verisi (Tipli)
q := sdk.IotData.QueryOptions()
q.SetSensorIDs("sensor123")
q.SetPerPage(50)
q.SortByDateDesc()
resp, _ := c.Sensors.IotData(ctx, q)
for _, item := range resp.Items {
_ = item.Value
}
IoT uçları: IotData zaman serisi değer kayıtlarını döndürür; IotDataChanges değişim odaklı aralıkları döndürür. Setter'lar sayfalama, zaman aralığı, değer aralığı, tam değer ve sıralama kontrolü sağlar. Boş alanlar sorguya eklenmez.
Dönüşler
IoTDataResponse
Items []IoTDataRecordOk boolPage int,PerPage int,Total intSensorIDs []string
IoTDataRecord
Timestamp string(ISO)Value anyMetadata *IoTDataMetadata(opsiyonel)
IoTDataMetadata
CompanyID(string)Machine(string)Sensor(string)Change(bool)BeforeChangeData(*IoTDataChangeMeta)ChangeData(*IoTDataChangeMeta)TogetherTrigger(string)TogetherValues(map[string]any)
IoTDataChangeMeta
Start(string)End(string)DurationMS(int64)StartValue(any)EndValue(any)IncValue(float64)DecValue(float64)StartID(string)
IoTQueryOptions Setter'ları
SetSensorIDs(ids ...string): Sensör kimlikleri.SetStartDate(string)/SetEndDate(string): Başlangıç / bitiş zaman damgası.SetValue(string): Tam değer eşleşmesi.SetMin(float64)/SetMax(float64): Sayısal aralık.SetPage(int)/SetPerPage(int): Sayfalama.SetSortBy("date"|"value")/SetSortOrder("asc"|"desc"): Sıralama.SortByDateAsc(),SortByDateDesc(),SortByValueAsc(),SortByValueDesc(): Kısayollar.
Bağlantılar Yazma
Her sensör bir bağlantıya bağlıdır. Örn: MQTT veya PostgreSQL. MQTT'ye yazmak için sürücü parametreleriyle gelişmiş yazım kullanın.
// Gelişmiş yazım (topic parametresiyle tek bool)
var r bool = true
vd, _ := json.Marshal(r)
items := []*proto.WriteItem{
{Value: vd, AnyValue: &anypb.Any{Value: vd}, Type: 16, Parameters: []*proto.KeyValue{
{Key: "topic", Value: []byte("67333c8d615f8c6cd6f07c38/67333c8d615f8c6cd6f07c39")},
}},
}
err := c.Connections.Write(ctx, "mqtt://0.0.0.0:8888", items)
Hata Yönetimi
// Tek çağrı ve hata kontrolü
sensors, total, err := c.Sensors.Find(ctx, c.Sensors.FindOpts())
if err != nil { /* kaydet + dön */ }
// Yineleme (hata olursa durur)
_ = c.Sensors.FindEachPage(ctx, opt, func(items []sdk.Sensor, total, page, limit int) bool {
return true
})
// Context timeout ile canlı
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute)
defer cancel()
if err := c.Sensors.LiveWith(ctx, sdk.LiveOptions{Interval: time.Second}, cb); err != nil {
// geçici ise backoff dene
}
Olay Tetikleme
resp, err := c.Events.Trigger(ctx, "rebuild-cache", map[string]any{"fast": true})