add untracked files

This commit is contained in:
2024-11-27 10:16:41 +01:00
parent 007bd1614a
commit 396053a94f
45 changed files with 3128 additions and 0 deletions

109
dsmr/dump.py Normal file
View File

@@ -0,0 +1,109 @@
import requests
import json
import django
from datetime import datetime
from django.dispatch import receiver
from django.dispatch import receiver
from django.core import serializers
from django.utils import timezone
from dsmr_datalogger.models.reading import DsmrReading
from dsmr_pvoutput.models.settings import PVOutputAddStatusSettings
from dsmr_pvoutput.signals import pvoutput_upload
@receiver(django.db.models.signals.post_save, sender=DsmrReading)
def handle_dsmr_reading(sender, instance, created, raw, **kwargs):
if not created or raw:
return
instance.timestamp = timezone.localtime(instance.timestamp)
if instance.extra_device_timestamp:
instance.extra_device_timestamp = timezone.localtime(instance.extra_device_timestamp)
serialized = json.loads(serializers.serialize('json', [instance]))
# {
# "timestamp": "2022-07-19T14:11:07.215912",
# "serialized": [
# {
# "model": "dsmr_datalogger.dsmrreading",
# "pk": 2577432,
# "fields": {
# "processed": false,
# "timestamp": "2022-07-19T14:11:11+02:00",
# "electricity_delivered_1": "5689.229",
# "electricity_returned_1": "366.707",
# "electricity_delivered_2": "5664.327",
# "electricity_returned_2": "688.836",
# "electricity_currently_delivered": "0.000",
# "electricity_currently_returned": "0.360",
# "phase_currently_delivered_l1": "0.000",
# "phase_currently_delivered_l2": null,
# "phase_currently_delivered_l3": null,
# "extra_device_timestamp": "2022-07-19T14:00:00+02:00",
# "extra_device_delivered": "3500.427",
# "phase_currently_returned_l1": "0.360",
# "phase_currently_returned_l2": null,
# "phase_currently_returned_l3": null,
# "phase_voltage_l1": null,
# "phase_voltage_l2": null,
# "phase_voltage_l3": null,
# "phase_power_current_l1": "2",
# "phase_power_current_l2": null,
# "phase_power_current_l3": null
# }
# }
# ]
# }
timestamp = datetime.today().isoformat()
data = {
'timestamp': timestamp,
'model': serialized[0]['model'],
'pk': serialized[0]['pk'],
'fields': serialized[0]['fields']
}
path = f'/dump/{timestamp}-reading.json'
json.dump(data, open(path, 'w'))
# json_string = json.dumps(serialized[0]['fields'])
# try:
# requests.post(
# 'https://YOUR-DSMR-HOST/api/endpoint/',
# data=json_string,
# # A low timeout prevents DSMR-reader from hanging, when the remote server is unreachable.
# timeout=5
# )
# except Exception as error:
# print('forward_json_dsmrreading_to_api:', error)
@receiver(pvoutput_upload)
def handle_pvoutput(**kwargs):
# print(' - Uploading the same data to PVOutput using plugin: {}'.format(kwargs['data']))
# - Uploading the same data to PVOutput using plugin: {'d': '20220719', 't': '14:15', 'v3': 3817, 'v4': -366, 'n': 1}
timestamp = datetime.today().isoformat()
data = {
'timestamp': timestamp,
'data': kwargs['data']
}
path = f'/dump/{timestamp}-pvoutput.json'
json.dump(data, open(path, 'w'))
# response = requests.post(
# PVOutputAddStatusSettings.API_URL,
# headers={
# 'X-Pvoutput-Apikey': 'XXXXX',
# 'X-Pvoutput-SystemId': 'YYYYY',
# },
# data=kwargs['data']
# )
#
# if response.status_code != 200:
# print(' [!] PVOutput upload failed (HTTP {}): {}'.format(response.status_code, response.text))