96 lines
4.9 KiB
Python
96 lines
4.9 KiB
Python
import binascii
|
|
import datetime
|
|
|
|
from Telegram.TelegramData import TelegramData
|
|
|
|
|
|
class Telegram:
|
|
type = '/CTA5ZIV-METER'
|
|
firmwareVersie = 50
|
|
meterId = 4530303737303030373330383837373232
|
|
totaalVerbruikTarief1 = '015234.018*kWh'
|
|
totaalVerbruikTarief2 = '003510.128*kWh'
|
|
totaalTerugleveringTarief1 = '001996.135*kWh'
|
|
totaalTerugleveringTarief2 = '004945.369*kWh'
|
|
tariefIndicator = '0002'
|
|
actueelVerbruik = '20.000*kW'
|
|
actueleTeruglevering = '03.505*kW'
|
|
statuscode2 = '00009'
|
|
statuscode1 = '00003'
|
|
onderbrekingslog = '1)(0-0:96.7.19)(240624104032S)(0000000215*s'
|
|
tellerElektriciteitsMeterstand1 = '00000'
|
|
tellerElektriciteitsMeterstand2 = '00000'
|
|
tellerElektriciteitsMeterstand3 = '00000'
|
|
spanningsOnderbrekingenFase1 = '00005'
|
|
spanningsOnderbrekingenFase2 = '00002'
|
|
spanningsOnderbrekingenFase3 = '00003'
|
|
bepaaldeEvents = ''
|
|
spanningFase1 = '241.0*V'
|
|
spanningFase2 = '243.0*V'
|
|
spanningFase3 = '246.0*V'
|
|
stroomFase1 = '030*A'
|
|
stroomFase2 = '030*A'
|
|
stroomFase3 = '030*A'
|
|
vermogenFase1 = '00.000kW'
|
|
vermogenFase2 = '00.000kW'
|
|
vermogenFase3 = '00.000kW'
|
|
terugleveringFase1 = '01.090*kW'
|
|
terugleveringFase2 = '01.201*kW'
|
|
terugleveringFase3 = '01.213*kW'
|
|
gasmeterTelegram = '003'
|
|
gasmeterId = '4730303732303034323030333530343232'
|
|
gasverbruik = '250528172000S)(02334.011*m3'
|
|
|
|
def getDatumTijd(self):
|
|
return datetime.datetime.now().strftime('%y%m%d%H%M%SS') # TODO: change 'S' to actual season
|
|
|
|
def voegCrcToe(self, telegram):
|
|
bericht = ''.join(telegram)
|
|
crc = binascii.crc_hqx(bericht.encode('ascii'), 0x0000)
|
|
return (bericht + f'!{crc}\r\n')
|
|
|
|
def maakTelegram(self):
|
|
return [
|
|
f'{TelegramData.P1_KENMERK.value}\r\n',
|
|
f'\r\n',
|
|
f'{TelegramData.FIRMWARE_VERSIE.value}(50)\r\n',
|
|
f'{TelegramData.DATUM_TIJD.value}({self.getDatumTijd()})\r\n',
|
|
f'{TelegramData.METER_ID.value}({self.meterId})\r\n',
|
|
f'{TelegramData.TOTAAL_VERBRUIK_TARIEF1.value}({self.totaalVerbruikTarief1})\r\n',
|
|
f'{TelegramData.TOTAAL_VERBRUIK_TARIEF2.value}({self.totaalVerbruikTarief2})\r\n',
|
|
f'{TelegramData.TOTAAL_TERUGLEVERING_TARIEF1.value}({self.totaalTerugleveringTarief1})\r\n',
|
|
f'{TelegramData.TOTAAL_TERUGLEVERING_TARIEF2.value}({self.totaalTerugleveringTarief2})\r\n',
|
|
f'{TelegramData.TARIEF_INDICATOR.value}({self.tariefIndicator})\r\n',
|
|
f'{TelegramData.ACTUEEL_VERBRUIK.value}({self.actueelVerbruik})\r\n',
|
|
f'{TelegramData.ACTUEELE_TERUGLEVERING.value}({self.actueleTeruglevering})\r\n',
|
|
f'{TelegramData.STATUSCODE2.value}({self.statuscode2})\r\n',
|
|
f'{TelegramData.STATUSCODE1.value}({self.statuscode1})\r\n',
|
|
f'{TelegramData.ONDERBREKINGSLOG.value}({self.onderbrekingslog})\r\n',
|
|
f'{TelegramData.TELLER_ELEKTRICITEITSMETERSTAND1.value}({self.tellerElektriciteitsMeterstand1})\r\n',
|
|
f'{TelegramData.TELLER_ELEKTRICITEITSMETERSTAND2.value}({self.tellerElektriciteitsMeterstand2})\r\n',
|
|
f'{TelegramData.TELLER_ELEKTRICITEITSMETERSTAND3.value}({self.tellerElektriciteitsMeterstand3})\r\n',
|
|
f'{TelegramData.SPANNINGSONDERBREKINGEN_fASE1.value}({self.spanningsOnderbrekingenFase1})\r\n',
|
|
f'{TelegramData.SPANNINGSONDERBREKINGEN_fASE2.value}({self.spanningsOnderbrekingenFase2})\r\n',
|
|
f'{TelegramData.SPANNINGSONDERBREKINGEN_fASE3.value}({self.spanningsOnderbrekingenFase3})\r\n',
|
|
f'{TelegramData.BEPAALDE_EVENTS.value}({self.bepaaldeEvents})\r\n',
|
|
f'{TelegramData.SPANNING_FASE1.value}({self.spanningFase1})\r\n',
|
|
f'{TelegramData.SPANNING_FASE2.value}({self.spanningFase2})\r\n',
|
|
f'{TelegramData.SPANNING_FASE3.value}({self.spanningFase3})\r\n',
|
|
f'{TelegramData.STROOM_FASE1.value}({self.stroomFase1})\r\n',
|
|
f'{TelegramData.STROOM_FASE2.value}({self.stroomFase2})\r\n',
|
|
f'{TelegramData.STROOM_FASE3.value}({self.stroomFase3})\r\n',
|
|
f'{TelegramData.VERMOGEN_FASE_1.value}({self.vermogenFase1})\r\n',
|
|
f'{TelegramData.VERMOGEN_FASE_2.value}({self.vermogenFase2})\r\n',
|
|
f'{TelegramData.VERMOGEN_FASE_3.value}({self.vermogenFase3})\r\n',
|
|
f'{TelegramData.TERUGLEVERING_FASE1.value}({self.terugleveringFase1})\r\n',
|
|
f'{TelegramData.TERUGLEVERING_FASE2.value}({self.terugleveringFase2})\r\n',
|
|
f'{TelegramData.TERUGLEVERING_FASE3.value}({self.terugleveringFase3})\r\n',
|
|
f'{TelegramData.GASMETER_TELEGRAM.value}({self.gasmeterTelegram})\r\n',
|
|
f'{TelegramData.GASMETER_ID.value}({self.gasmeterId})\r\n',
|
|
f'{TelegramData.GASVERBRUIK.value}({self.gasverbruik})\r\n',
|
|
]
|
|
|
|
def __str__(self):
|
|
telegram = self.maakTelegram()
|
|
volledigeTelegram = self.voegCrcToe(telegram)
|
|
return volledigeTelegram |