Ham Elektriksel Veri Tablosu
Cinga içerisinde bulunan enerji analizör modülü periodik olarak yapılan 3 faz elektriksel ölçümleri sabit periodlarla (v1 için planlanan 5dk) bulut backend sistemine gönderir. Gönderim GSM IoT altyapısı üzerinden yapılır. Gönderim anında paket hazırlanırken operatör zaman sunucusu ile senkron edilmiş olan RTC (atomik saat) üzerinden paket ölçümleme zamanı alınmaktadır. Bu zaman damgası paket içerisinde measured_at alanında gönderilmektedir.
Backend sistemine gelen veri paketi içerisindeki elektrik parametreleri electrical_measurements tablosu içerisine kaydedilir. Aynı ölçüm anına ait tüm elektriksel parametreler tek satırda tutulur. Böylece hem zaman serisi sorguları sadeleşir hem de aynı ölçüm anına ait gerilim, akım, güç ve enerji parametreleri birlikte değerlendirilebilir. Bu tablo ham elektriksel ölçüm verisinin ana saklama yapısıdır.
tablo yapısı yüksek kayıt sayısı göz önünde bulundurulup measured_at alanı üzerinden aylık partition mantığına uygun düşünülmelidir. Mantıksal olarak tek tablo görünümü korunurken, fiziksel saklama aylık partition'lar üzerinden yönetilecektir.
Hesaplar doğrultusunda 1 adet ham elektriksel ham veri kaydı disk üzerinde 900 byte yer kaplamaktadır. Her 5 dk da bir gelen veri günlük 288, aylık 8640, yıllk 103680 adet paket demektir. Bu hesapla 1 cihaz yıllık 89Mb yer kullanacaktır. Cihaz sayısı büyüdükçe database ve depolama maliyetleri düşünülüp 6 aydan eski partition lar (veriler) arşivlenerek sistemden silinmesi mantıklı olacaktır.
Tablo Yapısı
| Kolon | Tip | Not |
|---|---|---|
id | bigint PK | Otomatik artan kayıt kimliği |
device_id | varchar(21) | Ölçümü üreten cihaz kimliği |
stream_id | integer FK | streams.id alanına bağlı akış referansı |
measured_at | timestamptz | Cihaz tarafındaki ölçüm zamanı |
ingested_at | timestamptz | Sunucuya yazılma zamanı, default now() |
created_at | timestamptz | Kayıt oluşturulma zamanı, default now() |
updated_at | timestamptz | Son güncelleme zamanı, update anında now() |
sample_period_sec | integer | Örneklem periyodu, saniye cinsinden |
sequence_no | integer | Paket sıralama veya frame numarası |
ct_ratio | integer | Akım trafosu dönüşüm oranı |
is_valid | bool | Kayıt temel kalite kontrolünden geçti mi |
vrms_r | double precision | R fazı RMS gerilim değeri |
vrms_s | double precision | S fazı RMS gerilim değeri |
vrms_t | double precision | T fazı RMS gerilim değeri |
fq | double precision | Şebeke frekansı |
vfund_r | double precision | R fazı temel bileşen gerilimi |
vfund_s | double precision | S fazı temel bileşen gerilimi |
vfund_t | double precision | T fazı temel bileşen gerilimi |
vharm_r_3 | double precision | R fazı 3. harmonik gerilim |
vharm_s_3 | double precision | S fazı 3. harmonik gerilim |
vharm_t_3 | double precision | T fazı 3. harmonik gerilim |
vharm_r_5 | double precision | R fazı 5. harmonik gerilim |
vharm_s_5 | double precision | S fazı 5. harmonik gerilim |
vharm_t_5 | double precision | T fazı 5. harmonik gerilim |
vharm_r_7 | double precision | R fazı 7. harmonik gerilim |
vharm_s_7 | double precision | S fazı 7. harmonik gerilim |
vharm_t_7 | double precision | T fazı 7. harmonik gerilim |
vharm_r_9 | double precision | R fazı 9. harmonik gerilim |
vharm_s_9 | double precision | S fazı 9. harmonik gerilim |
vharm_t_9 | double precision | T fazı 9. harmonik gerilim |
irms_r | double precision | R fazı RMS akım değeri |
irms_s | double precision | S fazı RMS akım değeri |
irms_t | double precision | T fazı RMS akım değeri |
ipeak_r | double precision | R fazı tepe akım değeri |
ipeak_s | double precision | S fazı tepe akım değeri |
ipeak_t | double precision | T fazı tepe akım değeri |
ifund_r | double precision | R fazı temel bileşen akımı |
ifund_s | double precision | S fazı temel bileşen akımı |
ifund_t | double precision | T fazı temel bileşen akımı |
iharm_r_3 | double precision | R fazı 3. harmonik akım |
iharm_s_3 | double precision | S fazı 3. harmonik akım |
iharm_t_3 | double precision | T fazı 3. harmonik akım |
iharm_r_5 | double precision | R fazı 5. harmonik akım |
iharm_s_5 | double precision | S fazı 5. harmonik akım |
iharm_t_5 | double precision | T fazı 5. harmonik akım |
iharm_r_7 | double precision | R fazı 7. harmonik akım |
iharm_s_7 | double precision | S fazı 7. harmonik akım |
iharm_t_7 | double precision | T fazı 7. harmonik akım |
iharm_r_9 | double precision | R fazı 9. harmonik akım |
iharm_s_9 | double precision | S fazı 9. harmonik akım |
iharm_t_9 | double precision | T fazı 9. harmonik akım |
p_r | double precision | R fazı aktif güç |
p_s | double precision | S fazı aktif güç |
p_t | double precision | T fazı aktif güç |
p_tot | double precision | Toplam aktif güç |
q_r | double precision | R fazı reaktif güç |
q_s | double precision | S fazı reaktif güç |
q_t | double precision | T fazı reaktif güç |
q_tot | double precision | Toplam reaktif güç |
s_r | double precision | R fazı görünür güç |
s_s | double precision | S fazı görünür güç |
s_t | double precision | T fazı görünür güç |
s_tot | double precision | Toplam görünür güç |
pf_r | double precision | R fazı güç faktörü |
pf_s | double precision | S fazı güç faktörü |
pf_t | double precision | T fazı güç faktörü |
pfund_r | double precision | R fazı temel bileşen güç faktörü |
pfund_s | double precision | S fazı temel bileşen güç faktörü |
pfund_t | double precision | T fazı temel bileşen güç faktörü |
qfund_r | double precision | R fazı temel bileşen reaktif güç |
qfund_s | double precision | S fazı temel bileşen reaktif güç |
qfund_t | double precision | T fazı temel bileşen reaktif güç |
ae_r | double precision | R fazı aktif enerji sayacı |
ae_s | double precision | S fazı aktif enerji sayacı |
ae_t | double precision | T fazı aktif enerji sayacı |
ae_tot | double precision | Toplam aktif enerji sayacı |
re_ind_r | double precision | R fazı endüktif reaktif enerji |
re_ind_s | double precision | S fazı endüktif reaktif enerji |
re_ind_t | double precision | T fazı endüktif reaktif enerji |
re_ind_tot | double precision | Toplam endüktif reaktif enerji |
re_cap_r | double precision | R fazı kapasitif reaktif enerji |
re_cap_s | double precision | S fazı kapasitif reaktif enerji |
re_cap_t | double precision | T fazı kapasitif reaktif enerji |
re_cap_tot | double precision | Toplam kapasitif reaktif enerji |
Tablo SQLAlchemy Modeli
# Electrical_Measurements Database Model
class Electrical_Measurements(Base):
# Define Table Name
__tablename__ = "electrical_measurements"
# Define Columns
id = Column(BigInteger, primary_key=True, autoincrement=True, nullable=False, comment="Otomatik artan kayıt kimliği")
device_id = Column(String(21), ForeignKey("devices.id"), nullable=False, comment="Ölçümü üreten cihaz kimliği")
stream_id = Column(Integer, ForeignKey("streams.id"), nullable=False, comment="streams tablosuna bağlı akış referansı")
measured_at = Column(TIMESTAMP(timezone=True), nullable=False, comment="Cihaz tarafındaki ölçüm zamanı")
ingested_at = Column(TIMESTAMP(timezone=True), nullable=False, server_default=sql.func.now(), comment="Sunucuya yazılma zamanı")
created_at = Column(TIMESTAMP(timezone=True), nullable=False, server_default=sql.func.now(), comment="Kayıt oluşturulma zamanı")
updated_at = Column(TIMESTAMP(timezone=True), nullable=False, server_default=sql.func.now(), onupdate=sql.func.now(), comment="Son güncelleme zamanı")
sample_period_sec = Column(Integer, nullable=True, comment="Örneklem periyodu, saniye cinsinden")
sequence_no = Column(Integer, nullable=True, comment="Paket sıralama veya frame numarası")
ct_ratio = Column(Integer, nullable=True, comment="Akım trafosu dönüşüm oranı")
is_valid = Column(Boolean, nullable=False, server_default=sql.false(), comment="Kayıt kalite kontrolünden geçti mi")
# Voltage Parameters
vrms_r = Column(Float, nullable=True, comment="R fazı RMS gerilim değeri")
vrms_s = Column(Float, nullable=True, comment="S fazı RMS gerilim değeri")
vrms_t = Column(Float, nullable=True, comment="T fazı RMS gerilim değeri")
fq = Column(Float, nullable=True, comment="Şebeke frekansı")
vfund_r = Column(Float, nullable=True, comment="R fazı temel bileşen gerilimi")
vfund_s = Column(Float, nullable=True, comment="S fazı temel bileşen gerilimi")
vfund_t = Column(Float, nullable=True, comment="T fazı temel bileşen gerilimi")
vharm_r_3 = Column(Float, nullable=True, comment="R fazı 3. harmonik gerilim")
vharm_s_3 = Column(Float, nullable=True, comment="S fazı 3. harmonik gerilim")
vharm_t_3 = Column(Float, nullable=True, comment="T fazı 3. harmonik gerilim")
vharm_r_5 = Column(Float, nullable=True, comment="R fazı 5. harmonik gerilim")
vharm_s_5 = Column(Float, nullable=True, comment="S fazı 5. harmonik gerilim")
vharm_t_5 = Column(Float, nullable=True, comment="T fazı 5. harmonik gerilim")
vharm_r_7 = Column(Float, nullable=True, comment="R fazı 7. harmonik gerilim")
vharm_s_7 = Column(Float, nullable=True, comment="S fazı 7. harmonik gerilim")
vharm_t_7 = Column(Float, nullable=True, comment="T fazı 7. harmonik gerilim")
vharm_r_9 = Column(Float, nullable=True, comment="R fazı 9. harmonik gerilim")
vharm_s_9 = Column(Float, nullable=True, comment="S fazı 9. harmonik gerilim")
vharm_t_9 = Column(Float, nullable=True, comment="T fazı 9. harmonik gerilim")
# Current Parameters
irms_r = Column(Float, nullable=True, comment="R fazı RMS akım değeri")
irms_s = Column(Float, nullable=True, comment="S fazı RMS akım değeri")
irms_t = Column(Float, nullable=True, comment="T fazı RMS akım değeri")
ipeak_r = Column(Float, nullable=True, comment="R fazı tepe akım değeri")
ipeak_s = Column(Float, nullable=True, comment="S fazı tepe akım değeri")
ipeak_t = Column(Float, nullable=True, comment="T fazı tepe akım değeri")
ifund_r = Column(Float, nullable=True, comment="R fazı temel bileşen akımı")
ifund_s = Column(Float, nullable=True, comment="S fazı temel bileşen akımı")
ifund_t = Column(Float, nullable=True, comment="T fazı temel bileşen akımı")
iharm_r_3 = Column(Float, nullable=True, comment="R fazı 3. harmonik akım")
iharm_s_3 = Column(Float, nullable=True, comment="S fazı 3. harmonik akım")
iharm_t_3 = Column(Float, nullable=True, comment="T fazı 3. harmonik akım")
iharm_r_5 = Column(Float, nullable=True, comment="R fazı 5. harmonik akım")
iharm_s_5 = Column(Float, nullable=True, comment="S fazı 5. harmonik akım")
iharm_t_5 = Column(Float, nullable=True, comment="T fazı 5. harmonik akım")
iharm_r_7 = Column(Float, nullable=True, comment="R fazı 7. harmonik akım")
iharm_s_7 = Column(Float, nullable=True, comment="S fazı 7. harmonik akım")
iharm_t_7 = Column(Float, nullable=True, comment="T fazı 7. harmonik akım")
iharm_r_9 = Column(Float, nullable=True, comment="R fazı 9. harmonik akım")
iharm_s_9 = Column(Float, nullable=True, comment="S fazı 9. harmonik akım")
iharm_t_9 = Column(Float, nullable=True, comment="T fazı 9. harmonik akım")
# Power Parameters
p_r = Column(Float, nullable=True, comment="R fazı aktif güç")
p_s = Column(Float, nullable=True, comment="S fazı aktif güç")
p_t = Column(Float, nullable=True, comment="T fazı aktif güç")
p_tot = Column(Float, nullable=True, comment="Toplam aktif güç")
q_r = Column(Float, nullable=True, comment="R fazı reaktif güç")
q_s = Column(Float, nullable=True, comment="S fazı reaktif güç")
q_t = Column(Float, nullable=True, comment="T fazı reaktif güç")
q_tot = Column(Float, nullable=True, comment="Toplam reaktif güç")
s_r = Column(Float, nullable=True, comment="R fazı görünür güç")
s_s = Column(Float, nullable=True, comment="S fazı görünür güç")
s_t = Column(Float, nullable=True, comment="T fazı görünür güç")
s_tot = Column(Float, nullable=True, comment="Toplam görünür güç")
pf_r = Column(Float, nullable=True, comment="R fazı güç faktörü")
pf_s = Column(Float, nullable=True, comment="S fazı güç faktörü")
pf_t = Column(Float, nullable=True, comment="T fazı güç faktörü")
pfund_r = Column(Float, nullable=True, comment="R fazı temel bileşen güç faktörü")
pfund_s = Column(Float, nullable=True, comment="S fazı temel bileşen güç faktörü")
pfund_t = Column(Float, nullable=True, comment="T fazı temel bileşen güç faktörü")
qfund_r = Column(Float, nullable=True, comment="R fazı temel bileşen reaktif güç")
qfund_s = Column(Float, nullable=True, comment="S fazı temel bileşen reaktif güç")
qfund_t = Column(Float, nullable=True, comment="T fazı temel bileşen reaktif güç")
# Energy Parameters
ae_r = Column(Float, nullable=True, comment="R fazı aktif enerji sayacı")
ae_s = Column(Float, nullable=True, comment="S fazı aktif enerji sayacı")
ae_t = Column(Float, nullable=True, comment="T fazı aktif enerji sayacı")
ae_tot = Column(Float, nullable=True, comment="Toplam aktif enerji sayacı")
re_ind_r = Column(Float, nullable=True, comment="R fazı endüktif reaktif enerji")
re_ind_s = Column(Float, nullable=True, comment="S fazı endüktif reaktif enerji")
re_ind_t = Column(Float, nullable=True, comment="T fazı endüktif reaktif enerji")
re_ind_tot = Column(Float, nullable=True, comment="Toplam endüktif reaktif enerji")
re_cap_r = Column(Float, nullable=True, comment="R fazı kapasitif reaktif enerji")
re_cap_s = Column(Float, nullable=True, comment="S fazı kapasitif reaktif enerji")
re_cap_t = Column(Float, nullable=True, comment="T fazı kapasitif reaktif enerji")
re_cap_tot = Column(Float, nullable=True, comment="Toplam kapasitif reaktif enerji")
# Define Relationships
device = relationship("Device", back_populates="measurements")
stream = relationship("Stream", back_populates="measurements")
# Define Table Arguments
__table_args__ = (
UniqueConstraint('device_id', 'measured_at', name='uq_electrical_measurements_device_id_measured_at'),
CheckConstraint('sample_period_sec IS NULL OR sample_period_sec > 0', name='ck_electrical_measurements_sample_period_sec_positive'),
CheckConstraint('ct_ratio IS NULL OR ct_ratio > 0', name='ck_electrical_measurements_ct_ratio_positive'),
Index('idx_electrical_measurements_device_id', 'device_id'),
Index('idx_electrical_measurements_measured_at', 'measured_at'),
Index('idx_electrical_measurements_is_valid', 'is_valid'),
)