From 90ab29a0640195157a18d354a58d2fbb074871a8 Mon Sep 17 00:00:00 2001 From: Juul Date: Mon, 25 Aug 2025 20:17:25 +0200 Subject: [PATCH] Wat veranderingen, maar geen progressie --- Telegram/Telegram.py | 88 ++++++++++++++++++------------------- Telegram/TelegramUtil.py | 18 ++++---- Voorbeelden/Ontvang.txt | 77 -------------------------------- Voorbeelden/Ontvangen-1.txt | 38 ++++++++++++++++ Voorbeelden/Ontvangen-2.txt | 39 ++++++++++++++++ Voorbeelden/Ontvanger-3.txt | 39 ++++++++++++++++ __main__.py | 5 +-- 7 files changed, 170 insertions(+), 134 deletions(-) delete mode 100644 Voorbeelden/Ontvang.txt create mode 100644 Voorbeelden/Ontvangen-1.txt create mode 100644 Voorbeelden/Ontvangen-2.txt create mode 100644 Voorbeelden/Ontvanger-3.txt diff --git a/Telegram/Telegram.py b/Telegram/Telegram.py index f31a970..62169e8 100644 --- a/Telegram/Telegram.py +++ b/Telegram/Telegram.py @@ -44,55 +44,53 @@ class Telegram: def getDatumTijd(self): return datetime.datetime.now().strftime('%y%m%d%H%M%SS') # TODO: change 'S' to actual season - def berekenCrc(self, telegram): - bericht = b''.join(telegram) - crc = binascii.crc_hqx(bericht, 0x0000) - return f'!{crc:04X}\r\n'.encode() + 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'\x00'.encode(), - f'{TelegramData.P1_KENMERK.value}\r\n'.encode(), - f'\r\n'.encode(), - f'{TelegramData.FIRMWARE_VERSIE.value}(50)\r\n'.encode(), - f'{TelegramData.DATUM_TIJD.value}({self.getDatumTijd()})\r\n'.encode(), - f'{TelegramData.METER_ID.value}({self.meterId})\r\n'.encode(), - f'{TelegramData.TOTAAL_VERBRUIK_TARIEF1.value}({self.totaalVerbruikTarief1})\r\n'.encode(), - f'{TelegramData.TOTAAL_VERBRUIK_TARIEF2.value}({self.totaalVerbruikTarief2})\r\n'.encode(), - f'{TelegramData.TOTAAL_TERUGLEVERING_TARIEF1.value}({self.totaalTerugleveringTarief1})\r\n'.encode(), - f'{TelegramData.TOTAAL_TERUGLEVERING_TARIEF2.value}({self.totaalTerugleveringTarief2})\r\n'.encode(), - f'{TelegramData.TARIEF_INDICATOR.value}({self.tariefIndicator})\r\n'.encode(), - f'{TelegramData.ACTUEEL_VERBRUIK.value}({self.actueelVerbruik})\r\n'.encode(), - f'{TelegramData.ACTUEELE_TERUGLEVERING.value}({self.actueleTeruglevering})\r\n'.encode(), - f'{TelegramData.STATUSCODE2.value}({self.statuscode2})\r\n'.encode(), - f'{TelegramData.STATUSCODE1.value}({self.statuscode1})\r\n'.encode(), - f'{TelegramData.ONDERBREKINGSLOG.value}({self.onderbrekingslog})\r\n'.encode(), - f'{TelegramData.TELLER_ELEKTRICITEITSMETERSTAND1.value}({self.tellerElektriciteitsMeterstand1})\r\n'.encode(), - f'{TelegramData.TELLER_ELEKTRICITEITSMETERSTAND2.value}({self.tellerElektriciteitsMeterstand2})\r\n'.encode(), - f'{TelegramData.TELLER_ELEKTRICITEITSMETERSTAND3.value}({self.tellerElektriciteitsMeterstand3})\r\n'.encode(), - f'{TelegramData.SPANNINGSONDERBREKINGEN_fASE1.value}({self.spanningsOnderbrekingenFase1})\r\n'.encode(), - f'{TelegramData.SPANNINGSONDERBREKINGEN_fASE2.value}({self.spanningsOnderbrekingenFase2})\r\n'.encode(), - f'{TelegramData.SPANNINGSONDERBREKINGEN_fASE3.value}({self.spanningsOnderbrekingenFase3})\r\n'.encode(), - f'{TelegramData.BEPAALDE_EVENTS.value}({self.bepaaldeEvents})\r\n'.encode(), - f'{TelegramData.SPANNING_FASE1.value}({self.spanningFase1})\r\n'.encode(), - f'{TelegramData.SPANNING_FASE2.value}({self.spanningFase2})\r\n'.encode(), - f'{TelegramData.SPANNING_FASE3.value}({self.spanningFase3})\r\n'.encode(), - f'{TelegramData.STROOM_FASE1.value}({self.stroomFase1})\r\n'.encode(), - f'{TelegramData.STROOM_FASE2.value}({self.stroomFase2})\r\n'.encode(), - f'{TelegramData.STROOM_FASE3.value}({self.stroomFase3})\r\n'.encode(), - f'{TelegramData.VERMOGEN_FASE_1.value}({self.vermogenFase1})\r\n'.encode(), - f'{TelegramData.VERMOGEN_FASE_2.value}({self.vermogenFase2})\r\n'.encode(), - f'{TelegramData.VERMOGEN_FASE_3.value}({self.vermogenFase3})\r\n'.encode(), - f'{TelegramData.TERUGLEVERING_FASE1.value}({self.terugleveringFase1})\r\n'.encode(), - f'{TelegramData.TERUGLEVERING_FASE2.value}({self.terugleveringFase2})\r\n'.encode(), - f'{TelegramData.TERUGLEVERING_FASE3.value}({self.terugleveringFase3})\r\n'.encode(), - f'{TelegramData.GASMETER_TELEGRAM.value}({self.gasmeterTelegram})\r\n'.encode(), - f'{TelegramData.GASMETER_ID.value}({self.gasmeterId})\r\n'.encode(), - f'{TelegramData.GASVERBRUIK.value}({self.gasverbruik})\r\n'.encode(), + 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() - crc = self.berekenCrc(telegram) - telegram.append(crc) - return telegram \ No newline at end of file + volledigeTelegram = self.voegCrcToe(telegram) + return volledigeTelegram \ No newline at end of file diff --git a/Telegram/TelegramUtil.py b/Telegram/TelegramUtil.py index c45735a..d2f313f 100644 --- a/Telegram/TelegramUtil.py +++ b/Telegram/TelegramUtil.py @@ -2,18 +2,18 @@ from time import sleep import serial -INPUT_PORT = '/dev/ttyUSB1' +INPUT_PORT = '/dev/ttyUSB0' OUTPUT_PORT = '/dev/ttyUSB0' -dataInput = serial.Serial(INPUT_PORT, 115200, timeout=1) -dataOutput = serial.Serial(OUTPUT_PORT, 115200, timeout=1) +serialInput = serial.Serial(INPUT_PORT, 115200, timeout=1) +serialOutput = serial.Serial(OUTPUT_PORT, 115200, timeout=1) def lees(): - line = dataInput.readline() - dataOutput.write(line) + while True: + line = serialInput.readline() + print(line) def verzend(telegram): - for line in telegram: - print(line) - dataOutput.write(line) - sleep(1) + serialOutput.write(telegram.__str__().encode('ascii')) + print(telegram) + sleep(1) \ No newline at end of file diff --git a/Voorbeelden/Ontvang.txt b/Voorbeelden/Ontvang.txt deleted file mode 100644 index 6c3d98c..0000000 --- a/Voorbeelden/Ontvang.txt +++ /dev/null @@ -1,77 +0,0 @@ -b'\x00\x00/CTA5ZIV-METER\r\n' -b'\r\n' -b'1-3:0.2.8(50)\r\n' -b'0-0:1.0.0(250723212950S)\r\n' -b'0-0:96.1.1(4530303737303030373330383837373232)\r\n' -b'1-0:1.8.1(015903.376*kWh)\r\n' -b'1-0:1.8.2(003692.715*kWh)\r\n' -b'1-0:2.8.1(002268.443*kWh)\r\n' -b'1-0:2.8.2(005778.535*kWh)\r\n' -b'0-0:96.14.0(0001)\r\n' -b'1-0:1.7.0(00.468*kW)\r\n' -b'1-0:2.7.0(00.000*kW)\r\n' -b'0-0:96.7.21(00009)\r\n' -b'0-0:96.7.9(00003)\r\n' -b'1-0:99.97.0(1)(0-0:96.7.19)(240624104032S)(0000000215*s)\r\n' -b'1-0:32.32.0(00000)\r\n' -b'1-0:52.32.0(00000)\r\n' -b'1-0:72.32.0(00000)\r\n' -b'1-0:32.36.0(00005)\r\n' -b'1-0:52.36.0(00002)\r\n' -b'1-0:72.36.0(00003)\r\n' -b'0-0:96.13.0()\r\n' -b'1-0:32.7.0(231.0*V)\r\n' -b'1-0:52.7.0(232.0*V)\r\n' -b'1-0:72.7.0(233.0*V)\r\n' -b'1-0:31.7.0(001*A)\r\n' -b'1-0:51.7.0(000*A)\r\n' -b'1-0:71.7.0(000*A)\r\n' -b'1-0:21.7.0(00.262*kW)\r\n' -b'1-0:41.7.0(00.110*kW)\r\n' -b'1-0:61.7.0(00.089*kW)\r\n' -b'1-0:22.7.0(00.000*kW)\r\n' -b'1-0:42.7.0(00.000*kW)\r\n' -b'1-0:62.7.0(00.000*kW)\r\n' -b'0-2:24.1.0(003)\r\n' -b'0-2:96.1.0(4730303732303034323030333530343232)\r\n' -b'0-2:24.2.1(250723212500S)(02381.097*m3)\r\n' -b'!BE3F\r\n' -b'\x00' -b'/CTA5ZIV-METER\r\n' -b'\r\n' -b'1-3:0.2.8(50)\r\n' -b'0-0:1.0.0(250723212951S)\r\n' -b'0-0:96.1.1(4530303737303030373330383837373232)\r\n' -b'1-0:1.8.1(015903.377*kWh)\r\n' -b'1-0:1.8.2(003692.715*kWh)\r\n' -b'1-0:2.8.1(002268.443*kWh)\r\n' -b'1-0:2.8.2(005778.535*kWh)\r\n' -b'0-0:96.14.0(0001)\r\n' -b'1-0:1.7.0(00.461*kW)\r\n' -b'1-0:2.7.0(00.000*kW)\r\n' -b'0-0:96.7.21(00009)\r\n' -b'0-0:96.7.9(00003)\r\n' -b'1-0:99.97.0(1)(0-0:96.7.19)(240624104032S)(0000000215*s)\r\n' -b'1-0:32.32.0(00000)\r\n' -b'1-0:52.32.0(00000)\r\n' -b'1-0:72.32.0(00000)\r\n' -b'1-0:32.36.0(00005)\r\n' -b'1-0:52.36.0(00002)\r\n' -b'1-0:72.36.0(00003)\r\n' -b'0-0:96.13.0()\r\n' -b'1-0:32.7.0(231.0*V)\r\n' -b'1-0:52.7.0(231.0*V)\r\n' -b'1-0:72.7.0(232.0*V)\r\n' -b'1-0:31.7.0(001*A)\r\n' -b'1-0:51.7.0(000*A)\r\n' -b'1-0:71.7.0(000*A)\r\n' -b'1-0:21.7.0(00.261*kW)\r\n' -b'1-0:41.7.0(00.109*kW)\r\n' -b'1-0:61.7.0(00.090*kW)\r\n' -b'1-0:22.7.0(00.000*kW)\r\n' -b'1-0:42.7.0(00.000*kW)\r\n' -b'1-0:62.7.0(00.000*kW)\r\n' -b'0-2:24.1.0(003)\r\n' -b'0-2:96.1.0(4730303732303034323030333530343232)\r\n' -b'0-2:24.2.1(250723212500S)(02381.097*m3)\r\n' -b'!F2A0\r\n' \ No newline at end of file diff --git a/Voorbeelden/Ontvangen-1.txt b/Voorbeelden/Ontvangen-1.txt new file mode 100644 index 0000000..e8cd712 --- /dev/null +++ b/Voorbeelden/Ontvangen-1.txt @@ -0,0 +1,38 @@ +b'\x00\x00/CTA5ZIV-METER\r\n' +b'\r\n' +b'1-3:0.2.8(50)\r\n' +b'0-0:1.0.0(250825193604S)\r\n' +b'0-0:96.1.1(4530303737303030373330383837373232)\r\n' +b'1-0:1.8.1(016385.531*kWh)\r\n' +b'1-0:1.8.2(003918.328*kWh)\r\n' +b'1-0:2.8.1(002355.886*kWh)\r\n' +b'1-0:2.8.2(006117.256*kWh)\r\n' +b'0-0:96.14.0(0002)\r\n' +b'1-0:1.7.0(00.643*kW)\r\n' +b'1-0:2.7.0(00.021*kW)\r\n' +b'0-0:96.7.21(00009)\r\n' +b'0-0:96.7.9(00003)\r\n' +b'1-0:99.97.0(1)(0-0:96.7.19)(240624104032S)(0000000215*s)\r\n' +b'1-0:32.32.0(00000)\r\n' +b'1-0:52.32.0(00000)\r\n' +b'1-0:72.32.0(00000)\r\n' +b'1-0:32.36.0(00005)\r\n' +b'1-0:52.36.0(00002)\r\n' +b'1-0:72.36.0(00003)\r\n' +b'0-0:96.13.0()\r\n' +b'1-0:32.7.0(225.0*V)\r\n' +b'1-0:52.7.0(227.0*V)\r\n' +b'1-0:72.7.0(228.0*V)\r\n' +b'1-0:31.7.0(000*A)\r\n' +b'1-0:51.7.0(002*A)\r\n' +b'1-0:71.7.0(000*A)\r\n' +b'1-0:21.7.0(00.083*kW)\r\n' +b'1-0:41.7.0(00.560*kW)\r\n' +b'1-0:61.7.0(00.000*kW)\r\n' +b'1-0:22.7.0(00.000*kW)\r\n' +b'1-0:42.7.0(00.000*kW)\r\n' +b'1-0:62.7.0(00.021*kW)\r\n' +b'0-2:24.1.0(003)\r\n' +b'0-2:96.1.0(4730303732303034323030333530343232)\r\n' +b'0-2:24.2.1(250825193500S)(02412.308*m3)\r\n' +b'!E2FD\r\n' \ No newline at end of file diff --git a/Voorbeelden/Ontvangen-2.txt b/Voorbeelden/Ontvangen-2.txt new file mode 100644 index 0000000..ce7f205 --- /dev/null +++ b/Voorbeelden/Ontvangen-2.txt @@ -0,0 +1,39 @@ +b'\x00' +b'/CTA5ZIV-METER\r\n' +b'\r\n' +b'1-3:0.2.8(50)\r\n' +b'0-0:1.0.0(250825193605S)\r\n' +b'0-0:96.1.1(4530303737303030373330383837373232)\r\n' +b'1-0:1.8.1(016385.531*kWh)\r\n' +b'1-0:1.8.2(003918.328*kWh)\r\n' +b'1-0:2.8.1(002355.886*kWh)\r\n' +b'1-0:2.8.2(006117.256*kWh)\r\n' +b'0-0:96.14.0(0002)\r\n' +b'1-0:1.7.0(00.647*kW)\r\n' +b'1-0:2.7.0(00.022*kW)\r\n' +b'0-0:96.7.21(00009)\r\n' +b'0-0:96.7.9(00003)\r\n' +b'1-0:99.97.0(1)(0-0:96.7.19)(240624104032S)(0000000215*s)\r\n' +b'1-0:32.32.0(00000)\r\n' +b'1-0:52.32.0(00000)\r\n' +b'1-0:72.32.0(00000)\r\n' +b'1-0:32.36.0(00005)\r\n' +b'1-0:52.36.0(00002)\r\n' +b'1-0:72.36.0(00003)\r\n' +b'0-0:96.13.0()\r\n' +b'1-0:32.7.0(225.0*V)\r\n' +b'1-0:52.7.0(228.0*V)\r\n' +b'1-0:72.7.0(229.0*V)\r\n' +b'1-0:31.7.0(000*A)\r\n' +b'1-0:51.7.0(002*A)\r\n' +b'1-0:71.7.0(000*A)\r\n' +b'1-0:21.7.0(00.085*kW)\r\n' +b'1-0:41.7.0(00.561*kW)\r\n' +b'1-0:61.7.0(00.000*kW)\r\n' +b'1-0:22.7.0(00.000*kW)\r\n' +b'1-0:42.7.0(00.000*kW)\r\n' +b'1-0:62.7.0(00.022*kW)\r\n' +b'0-2:24.1.0(003)\r\n' +b'0-2:96.1.0(4730303732303034323030333530343232)\r\n' +b'0-2:24.2.1(250825193500S)(02412.308*m3)\r\n' +b'!7897\r\n' \ No newline at end of file diff --git a/Voorbeelden/Ontvanger-3.txt b/Voorbeelden/Ontvanger-3.txt new file mode 100644 index 0000000..ce7f205 --- /dev/null +++ b/Voorbeelden/Ontvanger-3.txt @@ -0,0 +1,39 @@ +b'\x00' +b'/CTA5ZIV-METER\r\n' +b'\r\n' +b'1-3:0.2.8(50)\r\n' +b'0-0:1.0.0(250825193605S)\r\n' +b'0-0:96.1.1(4530303737303030373330383837373232)\r\n' +b'1-0:1.8.1(016385.531*kWh)\r\n' +b'1-0:1.8.2(003918.328*kWh)\r\n' +b'1-0:2.8.1(002355.886*kWh)\r\n' +b'1-0:2.8.2(006117.256*kWh)\r\n' +b'0-0:96.14.0(0002)\r\n' +b'1-0:1.7.0(00.647*kW)\r\n' +b'1-0:2.7.0(00.022*kW)\r\n' +b'0-0:96.7.21(00009)\r\n' +b'0-0:96.7.9(00003)\r\n' +b'1-0:99.97.0(1)(0-0:96.7.19)(240624104032S)(0000000215*s)\r\n' +b'1-0:32.32.0(00000)\r\n' +b'1-0:52.32.0(00000)\r\n' +b'1-0:72.32.0(00000)\r\n' +b'1-0:32.36.0(00005)\r\n' +b'1-0:52.36.0(00002)\r\n' +b'1-0:72.36.0(00003)\r\n' +b'0-0:96.13.0()\r\n' +b'1-0:32.7.0(225.0*V)\r\n' +b'1-0:52.7.0(228.0*V)\r\n' +b'1-0:72.7.0(229.0*V)\r\n' +b'1-0:31.7.0(000*A)\r\n' +b'1-0:51.7.0(002*A)\r\n' +b'1-0:71.7.0(000*A)\r\n' +b'1-0:21.7.0(00.085*kW)\r\n' +b'1-0:41.7.0(00.561*kW)\r\n' +b'1-0:61.7.0(00.000*kW)\r\n' +b'1-0:22.7.0(00.000*kW)\r\n' +b'1-0:42.7.0(00.000*kW)\r\n' +b'1-0:62.7.0(00.022*kW)\r\n' +b'0-2:24.1.0(003)\r\n' +b'0-2:96.1.0(4730303732303034323030333530343232)\r\n' +b'0-2:24.2.1(250825193500S)(02412.308*m3)\r\n' +b'!7897\r\n' \ No newline at end of file diff --git a/__main__.py b/__main__.py index 62cff3f..05ddacc 100644 --- a/__main__.py +++ b/__main__.py @@ -1,9 +1,8 @@ from Telegram.Telegram import Telegram from Telegram.TelegramData import TelegramData -from Telegram.TelegramUtil import verzend, lees +from Telegram.TelegramUtil import verzend if __name__ == '__main__': telegram = Telegram() while True: - lees() - # verzend(telegram.__str__()) \ No newline at end of file + verzend(telegram) \ No newline at end of file