Compare commits

..

5 Commits

Author SHA1 Message Date
Juul 95454b069d doorstroom functie voor gemak 2025-08-25 20:20:52 +02:00
Juul 90ab29a064 Wat veranderingen, maar geen progressie 2025-08-25 20:17:25 +02:00
Juul ab3e04ab57 bugfixes 2025-07-23 22:28:03 +02:00
Juul 4151c7cf5a Makefile bug 2025-07-21 13:54:15 +02:00
Juul 073e957c9d Refactor 2025-07-21 13:50:03 +02:00
11 changed files with 194 additions and 70 deletions
+2
View File
@@ -6,3 +6,5 @@ build/*
dist/* dist/*
*.pyz *.pyz
*.spec *.spec
Voorbeelden/Verzend.txt
+1 -1
View File
@@ -2,4 +2,4 @@ run:
python3 __main__.py python3 __main__.py
package: package:
rm p1-fopper.pyz && python3 -m zipapp . -o p1-fopper.pyz [ -f "p1-fopper.pyz" ] && rm p1-fopper.pyz & python3 -m zipapp . -o p1-fopper.pyz
+44 -43
View File
@@ -1,7 +1,7 @@
import binascii import binascii
import datetime import datetime
from TelegramData import TelegramData from Telegram.TelegramData import TelegramData
class Telegram: class Telegram:
@@ -44,52 +44,53 @@ class Telegram:
def getDatumTijd(self): def getDatumTijd(self):
return datetime.datetime.now().strftime('%y%m%d%H%M%SS') # TODO: change 'S' to actual season return datetime.datetime.now().strftime('%y%m%d%H%M%SS') # TODO: change 'S' to actual season
def berekenCrc(self, telegram): def voegCrcToe(self, telegram):
bericht = b''.join(telegram) bericht = ''.join(telegram)
crc = binascii.crc_hqx(telegram, 0x0000) crc = binascii.crc_hqx(bericht.encode('ascii'), 0x0000)
return f'!{crc:04X}\r\n' return (bericht + f'!{crc}\r\n')
def maakTelegram(self): def maakTelegram(self):
return [ return [
f'{TelegramData.P1_KENMERK}\r\n'.encode(), f'{TelegramData.P1_KENMERK.value}\r\n',
f'\r\n'.encode(), f'\r\n',
f'{TelegramData.FIRMWARE_VERSIE}(50)\r\n'.encode(), f'{TelegramData.FIRMWARE_VERSIE.value}(50)\r\n',
f'{TelegramData.DATUM_TIJD}({self.getDatumTijd()})\r\n'.encode(), f'{TelegramData.DATUM_TIJD.value}({self.getDatumTijd()})\r\n',
f'{TelegramData.METER_ID}({self.meterId})\r\n'.encode(), f'{TelegramData.METER_ID.value}({self.meterId})\r\n',
f'{TelegramData.TOTAAL_VERBRUIK_TARIEF1}({self.totaalVerbruikTarief1})\r\n'.encode(), f'{TelegramData.TOTAAL_VERBRUIK_TARIEF1.value}({self.totaalVerbruikTarief1})\r\n',
f'{TelegramData.TOTAAL_VERBRUIK_TARIEF2}({self.totaalVerbruikTarief2})\r\n'.encode(), f'{TelegramData.TOTAAL_VERBRUIK_TARIEF2.value}({self.totaalVerbruikTarief2})\r\n',
f'{TelegramData.TOTAAL_TERUGLEVERING_TARIEF1}({self.totaalTerugleveringTarief1})\r\n'.encode(), f'{TelegramData.TOTAAL_TERUGLEVERING_TARIEF1.value}({self.totaalTerugleveringTarief1})\r\n',
f'{TelegramData.TOTAAL_TERUGLEVERING_TARIEF2}({self.totaalTerugleveringTarief2})\r\n'.encode(), f'{TelegramData.TOTAAL_TERUGLEVERING_TARIEF2.value}({self.totaalTerugleveringTarief2})\r\n',
f'{TelegramData.TARIEF_INDICATOR}({self.tariefIndicator})\r\n'.encode(), f'{TelegramData.TARIEF_INDICATOR.value}({self.tariefIndicator})\r\n',
f'{TelegramData.ACTUEEL_VERBRUIK}({self.actueelVerbruik})\r\n'.encode(), f'{TelegramData.ACTUEEL_VERBRUIK.value}({self.actueelVerbruik})\r\n',
f'{TelegramData.ACTUEELE_TERUGLEVERING}({self.actueleTeruglevering})\r\n'.encode(), f'{TelegramData.ACTUEELE_TERUGLEVERING.value}({self.actueleTeruglevering})\r\n',
f'{TelegramData.STATUSCODE2}({self.statuscode2})\r\n'.encode(), f'{TelegramData.STATUSCODE2.value}({self.statuscode2})\r\n',
f'{TelegramData.STATUSCODE1}({self.statuscode1})\r\n'.encode(), f'{TelegramData.STATUSCODE1.value}({self.statuscode1})\r\n',
f'{TelegramData.ONDERBREKINGSLOG}({self.onderbrekingslog})\r\n'.encode(), f'{TelegramData.ONDERBREKINGSLOG.value}({self.onderbrekingslog})\r\n',
f'{TelegramData.TELLER_ELEKTRICITEITSMETERSTAND1}({self.tellerElektriciteitsMeterstand1})\r\n'.encode(), f'{TelegramData.TELLER_ELEKTRICITEITSMETERSTAND1.value}({self.tellerElektriciteitsMeterstand1})\r\n',
f'{TelegramData.TELLER_ELEKTRICITEITSMETERSTAND2}({self.tellerElektriciteitsMeterstand2})\r\n'.encode(), f'{TelegramData.TELLER_ELEKTRICITEITSMETERSTAND2.value}({self.tellerElektriciteitsMeterstand2})\r\n',
f'{TelegramData.TELLER_ELEKTRICITEITSMETERSTAND3}({self.tellerElektriciteitsMeterstand3})\r\n'.encode(), f'{TelegramData.TELLER_ELEKTRICITEITSMETERSTAND3.value}({self.tellerElektriciteitsMeterstand3})\r\n',
f'{TelegramData.SPANNINGSONDERBREKINGEN_fASE1}({self.spanningsOnderbrekingenFase1})\r\n'.encode(), f'{TelegramData.SPANNINGSONDERBREKINGEN_fASE1.value}({self.spanningsOnderbrekingenFase1})\r\n',
f'{TelegramData.SPANNINGSONDERBREKINGEN_fASE2}({self.spanningsOnderbrekingenFase2})\r\n'.encode(), f'{TelegramData.SPANNINGSONDERBREKINGEN_fASE2.value}({self.spanningsOnderbrekingenFase2})\r\n',
f'{TelegramData.SPANNINGSONDERBREKINGEN_fASE3}({self.spanningsOnderbrekingenFase3})\r\n'.encode(), f'{TelegramData.SPANNINGSONDERBREKINGEN_fASE3.value}({self.spanningsOnderbrekingenFase3})\r\n',
f'{TelegramData.BEPAALDE_EVENTS}({self.bepaaldeEvents})\r\n'.encode(), f'{TelegramData.BEPAALDE_EVENTS.value}({self.bepaaldeEvents})\r\n',
f'{TelegramData.SPANNING_FASE1}({self.spanningFase1})\r\n'.encode(), f'{TelegramData.SPANNING_FASE1.value}({self.spanningFase1})\r\n',
f'{TelegramData.SPANNING_FASE2}({self.spanningFase2})\r\n'.encode(), f'{TelegramData.SPANNING_FASE2.value}({self.spanningFase2})\r\n',
f'{TelegramData.SPANNING_FASE3}({self.spanningFase3})\r\n'.encode(), f'{TelegramData.SPANNING_FASE3.value}({self.spanningFase3})\r\n',
f'{TelegramData.STROOM_FASE1}({self.stroomFase1})\r\n'.encode(), f'{TelegramData.STROOM_FASE1.value}({self.stroomFase1})\r\n',
f'{TelegramData.STROOM_FASE2}({self.stroomFase2})\r\n'.encode(), f'{TelegramData.STROOM_FASE2.value}({self.stroomFase2})\r\n',
f'{TelegramData.STROOM_FASE3}({self.stroomFase3})\r\n'.encode(), f'{TelegramData.STROOM_FASE3.value}({self.stroomFase3})\r\n',
f'{TelegramData.VERMOGEN_FASE_1}({self.vermogenFase1})\r\n'.encode(), f'{TelegramData.VERMOGEN_FASE_1.value}({self.vermogenFase1})\r\n',
f'{TelegramData.VERMOGEN_FASE_2}({self.vermogenFase2})\r\n'.encode(), f'{TelegramData.VERMOGEN_FASE_2.value}({self.vermogenFase2})\r\n',
f'{TelegramData.VERMOGEN_FASE_3}({self.vermogenFase3})\r\n'.encode(), f'{TelegramData.VERMOGEN_FASE_3.value}({self.vermogenFase3})\r\n',
f'{TelegramData.TERUGLEVERING_FASE1}({self.terugleveringFase1})\r\n'.encode(), f'{TelegramData.TERUGLEVERING_FASE1.value}({self.terugleveringFase1})\r\n',
f'{TelegramData.TERUGLEVERING_FASE2}({self.terugleveringFase2})\r\n'.encode(), f'{TelegramData.TERUGLEVERING_FASE2.value}({self.terugleveringFase2})\r\n',
f'{TelegramData.TERUGLEVERING_FASE3}({self.terugleveringFase3})\r\n'.encode(), f'{TelegramData.TERUGLEVERING_FASE3.value}({self.terugleveringFase3})\r\n',
f'{TelegramData.GASMETER_TELEGRAM}({self.gasmeterTelegram})\r\n'.encode(), f'{TelegramData.GASMETER_TELEGRAM.value}({self.gasmeterTelegram})\r\n',
f'{TelegramData.GASMETER_ID}({self.gasmeterId})\r\n'.encode(), f'{TelegramData.GASMETER_ID.value}({self.gasmeterId})\r\n',
f'{TelegramData.GASVERBRUIK}({self.gasverbruik})\r\n'.encode(), f'{TelegramData.GASVERBRUIK.value}({self.gasverbruik})\r\n',
] ]
def __str__(self): def __str__(self):
telegram = self.maakTelegram() telegram = self.maakTelegram()
return telegram.append(self.berekenCrc(telegram)) volledigeTelegram = self.voegCrcToe(telegram)
return volledigeTelegram
+24
View File
@@ -0,0 +1,24 @@
from time import sleep
import serial
INPUT_PORT = '/dev/ttyUSB1'
OUTPUT_PORT = '/dev/ttyUSB0'
serialInput = serial.Serial(INPUT_PORT, 115200, timeout=1)
serialOutput = serial.Serial(OUTPUT_PORT, 115200, timeout=1)
def lees():
while True:
line = serialInput.readline()
print(line)
def verzend(telegram):
serialOutput.write(telegram.__str__().encode('ascii'))
print(telegram)
sleep(1)
def doorstroom():
line = serialInput.readline()
serialOutput.write(line)
print(line)
-21
View File
@@ -1,21 +0,0 @@
from time import sleep
import serial
INPUT_PORT = '/dev/ttyUSB0'
OUTPUT_PORT = '/dev/ttyUSB0'
dataInput = serial.Serial(INPUT_PORT, 115200, timeout=1)
dataOutput = serial.Serial(OUTPUT_PORT, 115200, timeout=1)
def lees():
while True:
line = dataInput.readline()
print(line)
def verzend(telegram):
while True:
for line in telegram:
print(line)
dataOutput.write(line)
sleep(1)
+38
View File
@@ -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'
+39
View File
@@ -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'
+39
View File
@@ -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'
View File
+6 -2
View File
@@ -1,4 +1,8 @@
import hello from Telegram.Telegram import Telegram
from Telegram.TelegramData import TelegramData
from Telegram.TelegramUtil import verzend, doorstroom
if __name__ == '__main__': if __name__ == '__main__':
print(hello.helloWorld()) telegram = Telegram()
while True:
doorstroom()
-2
View File
@@ -1,2 +0,0 @@
def helloWorld():
return 'Hello, juul!'