Java SDK
Akıcı FindOptions, tiplendirilmiş IoT modelleri, dayanıklı canlı yayın geri dönüşü.
Kurulum
implementation files('libs/seshat-java-sdk.jar')
İndirilebilirler
Son sürüm bilgisi alınıyor…
İstemci Başlatma
SeshatClient client = new SeshatClient(SeshatClientOptions.builder()
.host("localhost") // seshat sunucusu
.apiKey("")
.secret("")
.company("")
.build());
Sensörler
var fo = client.sensors.findOpts().name("temp").tag("critical").all(true);
client.sensors.findEachPage(fo, page -> {
// page.json, page.page, page.limit
return true;
});
Fonksiyon özeti: find tek sayfa + toplamı döndürür. findEachPage sıralı sayfalarda yineleme yapar; handler false döndürürse veya hata oluşursa durur. findHandler (gösterilmedi) tüm sayfaları gezerken yalnızca sayfalama metadatası (total/page/limit) verir—ilerleme göstergesi için faydalıdır. Boş değerler sorgudan çıkarılır. Hatalar yinelemeyi sonlandırır.
Dönüşler
Find / findEachPage callback'leri sensör modelleri ve sayfalama bilgisi döndürür.
List<Sensor>: sensör listesitotal int: toplam kayıtpage int,limit int: anlık sayfa bilgisi
Sensor alanları (Java)
id(String)name(String)key(String)company(String)machine(String)collector(String)tags(List<String>)is_deleted(boolean)creation_date(long)data_type(int)latest_value(SensorValue)latest_change_value(SensorValue)generative(boolean)send_only_change(boolean)
SensorValue
date(String)type(int)value(Object)
FindOptions parametreleri
name(String): İsimde alt dize (büyük/küçük harf duyarsız).key(String): Tam anahtar eşleşmesi.tag(String): Virgülle ayrılmış etiketler; herhangi biri varsa eşleşir.machine(String)/collector(String): Makine veya toplayıcı kimliği/adı.limit(Integer): Sayfa boyutu (all(true) ise yok sayılır).page(Integer): 1 tabanlı sayfa indeksi (all(true) durumunda yok sayılır).all(Boolean): Tüm sayfaları otomatik gez.
Notlar: Filtreler AND ile birleşir; sunucu sayfa boyutunu sınırlayabilir; aynı seçenekler Makineler servisi için geçerli.
IoTQueryOptions (Java) – akıcı setter'lar
page(int),perPage(int)sortBy("date"|"value"),sortOrder("asc"|"desc")veya kısayollarsortByDateDesc()start(String),end(String)(RFC3339 veya epoch)value(String),min(double),max(double)
IoT Verisi
// Sensöre göre son değer kayıtlarını filtrele
var q = SensorsService.IoTQueryOptions.create()
.perPage(100)
.sortByDateDesc()
.start("2024-01-01T00:00:00Z")
.end("2024-01-02T00:00:00Z");
var resp = client.sensors.getIoTData("sensor-1", q);
// Değişimler uç noktası
var changes = client.sensors.getIoTDataChanges("sensor-1", q);
if (resp != null && resp.items != null) {
resp.items.forEach(rec -> {
// rec.timestamp, rec.value, rec.metadata
});
}
Dönüşler
getIoTData(sensorId, query)→IoTDataResponsegetIoTDataChanges(sensorId, query)→ aynı yapı
IoTDataRecord (Java)
timestamp(String, ISO)value(Object)metadata(IoTDataMetadata veya null)
IoTDataMetadata
companyId(String)machine(String)sensor(String)change(Boolean)beforeChangeData,changeData(IoTDataChangeMeta)togetherTrigger(String)togetherValues(Map<String,Object>)
IoTDataChangeMeta
start(String)end(String)durationMS(Long)startValue,endValue(Object)incValue,decValue(Double)startID(String)
Makine Listeleme
var mo = new com.seshat.sdk.services.MachinesService.FindOptions().tag("production");
var res = client.machines.find(mo);
if (res != null) {
var list = res.data; var total = res.total;
}
Makine fonksiyonları sensörlerle paralel: tek sayfa için find(); filtre mantığı aynı.
FindOptions özeti
name,key,tagcollector/machinelimit,page,all
Sensör FindOptions ile aynı davranış.
Dönüşler
List<Machine>: makine listesitotal int: toplam
Machine alanları (Java)
id(String)collector(String)company(String)name(String)key(String)tags(List<String>)created_by(String)creation_date(long)send_mqtt_direct(boolean)
Canlı
// Basit canlı yayın (liste)
client.live.addListener(new com.seshat.sdk.live.SensorsLiveStream.Listener(){
@Override public void onValue(seshat.v1.Seshat.ReadValueResponse v){
System.out.println(v.getSensorId()+" -> type="+v.getType());
}
@Override public void onError(Throwable t){ t.printStackTrace(); }
@Override public void onCompleted(){ System.out.println("canlı tamamlandı"); }
});
client.live.start(java.util.List.of("sensor123", "sensor456"));
Veri Tipleri (type id → Java türü)
Canlı callback içindeki type kimliği şu değerlere karşılık gelir:
1→Integer2→Long3→Byte4→Short5→Short6→Integer7→Integer8→Long9→Long10→Long11→Double12→java.time.OffsetDateTime13→String14→List<Integer>15→byte[]16→Boolean17→Map<String,Object>18→List<Map<String,Object>>19→Object22→String
Unsigned tipler genişletilmiş signed türlere dönüştürülür.
Bağlantılar
Her sensör bir bağlantıya bağlıdır. MQTT'ye parametre (ör: topic) ile yazmak için gelişmiş yazımı kullanın.
// Gelişmiş: topic parametresiyle boolean yazım
var adv = new com.seshat.sdk.services.ConnectionsService.AdvancedItem();
adv.anyValue = java.util.Map.of("value", true);
adv.typeOverride = 16; // bool
var p = new com.seshat.sdk.services.ConnectionsService.Parameter();
p.key = "topic"; p.value = "67333c8d615f8c6cd6f07c38/67333c8d615f8c6cd6f07c39".getBytes();
adv.parameters = java.util.List.of(p);
client.connections.writeAdvanced("mqtt://0.0.0.0:8888", java.util.List.of(adv));
client.connections.restart("mqtt://0.0.0.0:8888");
Olaylar
var resp = client.events.trigger("rebuild-cache", java.util.Map.of("fast", true));
var list = client.events.list();
Hata Yönetimi
try {
var fo = client.sensors.findOpts().name("temp");
var res = client.sensors.find(fo);
} catch (IOException e) {
// log + yeniden dene
}
try {
var q = SensorsService.IoTQueryOptions.create().perPage(100).sortByDateDesc();
var data = client.sensors.getIoTData("sensor123", q);
} catch (IOException e) {
// ağ / sunucu hatası
}