Ana içeriğe geç

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.

bilgi

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ı

KolonTipNot
idbigint PKOtomatik artan kayıt kimliği
device_idvarchar(21)Ölçümü üreten cihaz kimliği
stream_idinteger FKstreams.id alanına bağlı akış referansı
measured_attimestamptzCihaz tarafındaki ölçüm zamanı
ingested_attimestamptzSunucuya yazılma zamanı, default now()
created_attimestamptzKayıt oluşturulma zamanı, default now()
updated_attimestamptzSon güncelleme zamanı, update anında now()
sample_period_secintegerÖrneklem periyodu, saniye cinsinden
sequence_nointegerPaket sıralama veya frame numarası
ct_ratiointegerAkım trafosu dönüşüm oranı
is_validboolKayıt temel kalite kontrolünden geçti mi
vrms_rdouble precisionR fazı RMS gerilim değeri
vrms_sdouble precisionS fazı RMS gerilim değeri
vrms_tdouble precisionT fazı RMS gerilim değeri
fqdouble precisionŞebeke frekansı
vfund_rdouble precisionR fazı temel bileşen gerilimi
vfund_sdouble precisionS fazı temel bileşen gerilimi
vfund_tdouble precisionT fazı temel bileşen gerilimi
vharm_r_3double precisionR fazı 3. harmonik gerilim
vharm_s_3double precisionS fazı 3. harmonik gerilim
vharm_t_3double precisionT fazı 3. harmonik gerilim
vharm_r_5double precisionR fazı 5. harmonik gerilim
vharm_s_5double precisionS fazı 5. harmonik gerilim
vharm_t_5double precisionT fazı 5. harmonik gerilim
vharm_r_7double precisionR fazı 7. harmonik gerilim
vharm_s_7double precisionS fazı 7. harmonik gerilim
vharm_t_7double precisionT fazı 7. harmonik gerilim
vharm_r_9double precisionR fazı 9. harmonik gerilim
vharm_s_9double precisionS fazı 9. harmonik gerilim
vharm_t_9double precisionT fazı 9. harmonik gerilim
irms_rdouble precisionR fazı RMS akım değeri
irms_sdouble precisionS fazı RMS akım değeri
irms_tdouble precisionT fazı RMS akım değeri
ipeak_rdouble precisionR fazı tepe akım değeri
ipeak_sdouble precisionS fazı tepe akım değeri
ipeak_tdouble precisionT fazı tepe akım değeri
ifund_rdouble precisionR fazı temel bileşen akımı
ifund_sdouble precisionS fazı temel bileşen akımı
ifund_tdouble precisionT fazı temel bileşen akımı
iharm_r_3double precisionR fazı 3. harmonik akım
iharm_s_3double precisionS fazı 3. harmonik akım
iharm_t_3double precisionT fazı 3. harmonik akım
iharm_r_5double precisionR fazı 5. harmonik akım
iharm_s_5double precisionS fazı 5. harmonik akım
iharm_t_5double precisionT fazı 5. harmonik akım
iharm_r_7double precisionR fazı 7. harmonik akım
iharm_s_7double precisionS fazı 7. harmonik akım
iharm_t_7double precisionT fazı 7. harmonik akım
iharm_r_9double precisionR fazı 9. harmonik akım
iharm_s_9double precisionS fazı 9. harmonik akım
iharm_t_9double precisionT fazı 9. harmonik akım
p_rdouble precisionR fazı aktif güç
p_sdouble precisionS fazı aktif güç
p_tdouble precisionT fazı aktif güç
p_totdouble precisionToplam aktif güç
q_rdouble precisionR fazı reaktif güç
q_sdouble precisionS fazı reaktif güç
q_tdouble precisionT fazı reaktif güç
q_totdouble precisionToplam reaktif güç
s_rdouble precisionR fazı görünür güç
s_sdouble precisionS fazı görünür güç
s_tdouble precisionT fazı görünür güç
s_totdouble precisionToplam görünür güç
pf_rdouble precisionR fazı güç faktörü
pf_sdouble precisionS fazı güç faktörü
pf_tdouble precisionT fazı güç faktörü
pfund_rdouble precisionR fazı temel bileşen güç faktörü
pfund_sdouble precisionS fazı temel bileşen güç faktörü
pfund_tdouble precisionT fazı temel bileşen güç faktörü
qfund_rdouble precisionR fazı temel bileşen reaktif güç
qfund_sdouble precisionS fazı temel bileşen reaktif güç
qfund_tdouble precisionT fazı temel bileşen reaktif güç
ae_rdouble precisionR fazı aktif enerji sayacı
ae_sdouble precisionS fazı aktif enerji sayacı
ae_tdouble precisionT fazı aktif enerji sayacı
ae_totdouble precisionToplam aktif enerji sayacı
re_ind_rdouble precisionR fazı endüktif reaktif enerji
re_ind_sdouble precisionS fazı endüktif reaktif enerji
re_ind_tdouble precisionT fazı endüktif reaktif enerji
re_ind_totdouble precisionToplam endüktif reaktif enerji
re_cap_rdouble precisionR fazı kapasitif reaktif enerji
re_cap_sdouble precisionS fazı kapasitif reaktif enerji
re_cap_tdouble precisionT fazı kapasitif reaktif enerji
re_cap_totdouble precisionToplam 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'),
)