variables
variables, telemetry paketlerinde gelen her ölçüm değişkenini tanımlar. Bu tablo, ingress sırasında routing kararı almak için danışılır. Bir değişkene ait kayıt bulunamazsa veya is_active = false ise yalnız ilgili değişken atlanır; stream ve diğer geçerli ölçümler korunur.
Her record, bir değişkenin benzersiz kimliğini (id), hangi segment'e ait olduğunu (segment_id), veri tipini (data_type) ve birimini (unit) tanımlar. Operasyonel koşullara göre is_active flag'ı false'a çekilebilir; bu değişkene ait hiç bir paket kabul edilmezdeki o esnada.
Variable Routing Sözleşmesi
Measurement yazımı sırasında hedef tablo seçimi sabit if/else ile değil, variables + segment_code sözlüğü ile yapılır.
Routing adımları
- Payload'tan çıkarılan her
variable_idiçin öncevariableskaydı bulunur. variables.is_active = falseise ilgili değişken atlanır, operasyonel log yazılır ve akış sonraki değişkenle devam eder.variables.segment_idenum değeri (segment_code) doğrulanır.- Segment enum eşlemesine göre hedef tablo deterministik olarak belirlenir.
- Hedef tabloda kolon eşlemesi yoksa ilgili değişken atlanır ve operasyonel log üretilir.
- Geçerli değişkenler hedef segment tablolara yazılır; başarısız değişkenler stream'i bozmaz.
Segment -> tablo eşlemesi
Qapu v1 için routing map'i aşağıdaki gibidir ve deterministiktir. Bu, variables tablosundaki segment_id enum değeri ile measurements_* tabloları arasındaki doğrudan eşlemedir:
| Segment Enum Değeri | Hedef Tablo |
|---|---|
electric.voltage | measurements_voltage |
electric.current | measurements_current |
electric.power | measurements_power |
electric.energy | measurements_energy |
register | measurements_register |
device | measurements_device |
location | measurements_location |
environment | measurements_environment |
water | measurements_water |
fota | (metadata, ölçüm tablosu yok) |
Bu enum değerleri deploy-time sözleşmesidir. Yeni segment eklenmesi veya değiştirilmesi migration + enum ALTER + doküman güncellemesi gerektirir.
Güvenlik kuralları
- Aynı
variable_idaynı stream içinde yalnız bir kez yazılmalıdır. - Segment enum değeri geçersiz/undefined olursa ilgili değişken atlanır ve loglanır.
- Routing belirsizse varsayılan davranış değişken seviyesinde skip + log olmalıdır; stream yalnızca geçerli ölçümlerle devam eder.
Routing karar tablosu
| Durum | Koşul | Davranış | accepted zincire etkisi |
|---|---|---|---|
| Bilinmeyen değişken | variables kaydı yok | İlgili değişken atlanır, operasyonel log üretilir | Stream korunur, diğer değişkenler yazılır |
| İnaktif değişken | variables.is_active = false | İlgili değişken atlanır, operasyonel log üretilir | Stream korunur, diğer değişkenler yazılır |
| Segment var, kolon yok | segment_id enum değeri geçerli ama hedef tabloda kolon yok | İlgili değişken atlanır, model/sözlük uyumsuzluğu loglanır | Stream korunur, diğer değişkenler yazılır |
| Tam eşleşme | Segment + kolon eşleşmesi var | Hedef segment tabloya yazılır | Stream korunur |
Kolonlar
| Kolon | Tip | Null | Anlamı |
|---|---|---|---|
id | varchar(30) | hayır | Değişkenin benzersiz kimliği (örn: VRMS_R, TEMP, AE_R) |
name | varchar(100) | evet | İnsan okunur değişken adı |
description | text | evet | Detaylı açıklama |
unit | varchar(20) | evet | Ölçüm birimi (V, A, kWh, °C, %RH vb.) |
segment_id | segment_code | hayır | Bu değişkenin ait olduğu segment kodu (enum); ör: "electric.voltage", "register" |
data_type | variable_data_type | hayır | Veri tipi enum'u |
is_active | boolean | hayır | Değişkenin aktif olup olmadığı (DEFAULT: true) |
create_time | timestamp | hayır | Tanımın oluşturulma zamanı |
update_time | timestamp | hayır | Son güncelleme zamanı |
segment_code Enum Tanımı
segment_code, telemetry sisteminde desteklenen tüm segment kategorilerini temsil eden enum tipidir. Statik bir tanımdır ve değişiklik migration gerektirir.
| Enum Değeri | Hedef Tablo | Anlamı |
|---|---|---|
electric.voltage | measurements_voltage | Faz gerilim ve harmonik bileşenleri |
electric.current | measurements_current | Faz akım ve temel bileşen |
electric.power | measurements_power | Güç faktörü ve reaktif güç |
electric.energy | measurements_energy | Enerji sayaç ve tüketim değerleri |
register | measurements_register | Register değişkenleri ve durum kodları |
device | measurements_device | Cihaz özellikleri ve meta verileri |
location | measurements_location | Konum verileri |
environment | measurements_environment | Çevresel ölçüm verileri |
water | measurements_water | Su ölçüm verileri |
fota | (none) | FOTA versiyonu ve durum |
variable_data_type Enum Sözleşmesi
| Enum Değeri | Anlamı |
|---|---|
numeric | Ondalıklı sayısal değer (float, decimal) |
integer | Tamsayı değer |
boolean | Mantıksal true/false değer |
string | Metin değeri |
json | JSON yapılı veri |
Örnek Kayıtlar
- Gerilim Değişkenleri
- Akım Değişkenleri
- Çevresel Değişkenler
- Enerji Sayaç Değişkenleri
- Durum Değişkenleri
{
"id": "VRMS_R",
"name": "Faz R RMS Gerilimi",
"description": "R fazı RMS gerilim değeri",
"unit": "V",
"segment_id": "electric.voltage",
"data_type": "numeric",
"is_active": true,
"create_time": "2026-04-03T10:00:00Z",
"update_time": "2026-04-03T10:00:00Z"
}
Özet: VRMS_R, electric.voltage segment'inde tanımlı; RMS gerilim ölçümüdür. Yazım measurements_voltage tablosuna yönlendirilir.
{
"id": "IFUND_R",
"name": "Faz R Temel Akımı",
"description": "R fazı temel bileşen akımı",
"unit": "A",
"segment_id": "electric.current",
"data_type": "numeric",
"is_active": true,
"create_time": "2026-04-03T10:00:00Z",
"update_time": "2026-04-03T10:00:00Z"
}
Özet: IFUND_R, electric.current segment'inde tanımlı; temel bileşen akımıdır. Yazım measurements_current tablosuna yönlendirilir.
{
"id": "TEMP",
"name": "Sıcaklık",
"description": "Ortam sıcaklık değeri",
"unit": "°C",
"segment_id": "environment",
"data_type": "numeric",
"is_active": true,
"create_time": "2026-04-03T10:00:00Z",
"update_time": "2026-04-03T10:00:00Z"
}
Özet: TEMP, environment segment'inde tanımlı. Yazım measurements_environment tablosuna yönlendirilir.
{
"id": "AE_R",
"name": "R Faz Enerji Sayacı",
"description": "R fazı aktif enerji sayacı",
"unit": "kWh",
"segment_id": "electric.energy",
"data_type": "numeric",
"is_active": true,
"create_time": "2026-04-03T10:00:00Z",
"update_time": "2026-04-03T10:00:00Z"
}
Özet: AE_R, electric.energy segment'inde tanımlı. Yazım measurements_energy tablosuna yönlendirilir.
{
"id": "REGISTER_STATUS",
"name": "Durum Registeri",
"description": "Cihaz durum register değeri",
"unit": null,
"segment_id": "register",
"data_type": "integer",
"is_active": true,
"create_time": "2026-04-03T10:00:00Z",
"update_time": "2026-04-03T10:00:03Z"
}
Özet: REGISTER_STATUS, register segment'inde tanımlı; integer tipi durum kodu. Yazım measurements_register tablosuna yönlendirilir.