Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 39 additions & 1 deletion pyreemote/pyreemote/telemeasure.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import iec870ree.ip
import iec870ree.protocol
import iec870ree_moxa.moxa
from iec870ree.events import get_event_description

TIMEZONE = timezone('Europe/Madrid')

Expand Down Expand Up @@ -149,6 +150,26 @@ def parse_profiles(profiles, meter_serial, datefrom, dateto):
res['Records'].append(record)
return res

def parse_events(values, meter_serial, d_from, d_to):
res = {
'SerialNumber': str(meter_serial),
'Events': []
}
for event_info in values:
for event in event_info.content.valores:
event_desc = get_event_description(event)
record = {
'Date': event.date.datetime.strftime('%Y-%m-%d %H:%M:%S'),
'Season': {'1': 'S', '0': 'W'}[str(event.date.SU)],
'SPA': event.SPA,
'SPI': event.SPI,
'SPQ': event.SPQ,
'Description': event_desc,
'RegisterDir': event_info.dir_registro
}
res['Events'].append(record)

return res

def parse_powers_and_tariffs(values):
res = {
Expand Down Expand Up @@ -307,6 +328,7 @@ def __init__(self, ipaddr, port, link, mpoint, passwrd, datefrom, dateto,
else:
self.contract = []
self.delay = delay
self.event_groups = (52, 53, 54, 55, 128, 129, 131, 132, 133)

if 'REEMOTE_PATH' in os.environ:
reemote_url = os.environ['REEMOTE_PATH']
Expand Down Expand Up @@ -348,6 +370,8 @@ def handle_file_request(self):
output = self.get_instant_values()
elif self.option == 'pt':
output = self.get_power_and_tariff_info()
elif self.option == 'e':
output = self.get_events()
except Exception as e:
exception_txt = '{}'.format(e)
exception = True
Expand Down Expand Up @@ -504,6 +528,20 @@ def sync_datetime(self):
res['updated'] = True
return res

def get_events(self):
logging.info('Requesting events to device')
values = []
for event_group in self.event_groups:
try:
for resp in self.app_layer.read_events(event_group):
values.append(resp)
except:
logging.info("WARNING: event {} not available".format(event_group))
return parse_events(
values, self.meter_serial,
self.datefrom.strftime('%Y-%m-%d %H:%M:%S'),
self.dateto.strftime('%Y-%m-%d %H:%M:%S'))

def get_power_and_tariff_info(self):
logging.info(
'Requesting contracted powers and tariff info values to device')
Expand Down Expand Up @@ -535,7 +573,7 @@ def get_instant_values(self):
logger.info('Requesting instant values to device')
instant_objects = ['totalizadores', 'potencias', 'I_V']
resp = self.app_layer.ext_read_instant_values(objects=instant_objects)
return parse_instant_values(resp.content.valores, self.meter_serial)
return parse_instant_values(resp.content, self.meter_serial)

def establish_connection(self):
try:
Expand Down