diff --git a/admin/views/settings/datasource/datasource.html b/admin/views/settings/datasource/datasource.html index e83bb3d4..b4583f82 100644 --- a/admin/views/settings/datasource/datasource.html +++ b/admin/views/settings/datasource/datasource.html @@ -28,7 +28,7 @@ {{ datasource.gateway.name }} {{ datasource.protocol }} {{ datasource.connection }} - {{ datasource.last_seen_datetime | date:'yyyy-MM-dd HH:mm:ss'}} + {{ datasource.last_seen_datetime }} {{'SETTING.EDIT' | translate}} diff --git a/myems-api/README.md b/myems-api/README.md index 1053428b..ee33ecef 100644 --- a/myems-api/README.md +++ b/myems-api/README.md @@ -312,7 +312,7 @@ Result in JSON | uuid | string | Data Source UUID | | protocol | string | Protocol Type Supported: 'modbus-tcp', 'modbus-rtu', 'bacnet-ip', 's7', 'profibus', 'profinet', 'opc-ua', 'lora', 'simulation', 'controllogix', 'weather', 'mysql', 'sqlserver', 'postgresql', 'oracle', 'mongodb', 'influxdb' | | connection | json | Connection data in JSON. BACnet/IP example: {"host":"10.1.2.88"}, Modbus TCP example: {"host":"10.1.2.88", "port":502}, S7 example: {"host":"10.1.2.202", "port":102, "rack": 0, "slot": 2}, ControlLogix example: {"host":"10.1.2.88","port":44818,"processorslot":3} OPC UA example: {"url":"opc.tcp://10.1.2.5:49320/OPCUA/SimulationServer/"} | -| last_seen_datetime| float | Indicates the last time when the data source was seen in a number of milliseconds since January 1, 1970, 00:00:00, universal time | +| last_seen_datetime| string | Indicates the last time when the data source was seen in local timezone | | status | string | 'online' or 'offline' determined by last seen datetime| * GET all Data Sources diff --git a/myems-api/core/datasource.py b/myems-api/core/datasource.py index 54d5961c..836bf888 100644 --- a/myems-api/core/datasource.py +++ b/myems-api/core/datasource.py @@ -3,7 +3,7 @@ import simplejson as json import mysql.connector import config import uuid -from datetime import datetime, timezone +from datetime import datetime, timezone, timedelta from core.userlogger import user_logger @@ -41,18 +41,26 @@ class DataSourceCollection: cursor.close() cnx.disconnect() + timezone_offset = int(config.utc_offset[1:3]) * 60 + int(config.utc_offset[4:6]) + if config.utc_offset[0] == '-': + timezone_offset = -timezone_offset + result = list() if rows is not None and len(rows) > 0: for row in rows: + if isinstance(row['last_seen_datetime_utc'], datetime): + last_seen_datetime_local = row['last_seen_datetime_utc'].replace(tzinfo=timezone.utc) + \ + timedelta(minutes=timezone_offset) + last_seen_datetime = last_seen_datetime_local.strftime('%Y-%m-%dT%H:%M:%S') + else: + last_seen_datetime = None meta_result = {"id": row['id'], "name": row['name'], "uuid": row['uuid'], "gateway": gateway_dict.get(row['gateway_id']), "protocol": row['protocol'], "connection": row['connection'], - "last_seen_datetime": - row['last_seen_datetime_utc'].replace(tzinfo=timezone.utc).timestamp()*1000 - if isinstance(row['last_seen_datetime_utc'], datetime) else None + "last_seen_datetime": last_seen_datetime } result.append(meta_result) @@ -192,15 +200,24 @@ class DataSourceItem: raise falcon.HTTPError(falcon.HTTP_404, title='API.NOT_FOUND', description='API.DATA_SOURCE_NOT_FOUND') + timezone_offset = int(config.utc_offset[1:3]) * 60 + int(config.utc_offset[4:6]) + if config.utc_offset[0] == '-': + timezone_offset = -timezone_offset + + if isinstance(row['last_seen_datetime_utc'], datetime): + last_seen_datetime_local = row['last_seen_datetime_utc'].replace(tzinfo=timezone.utc) + \ + timedelta(minutes=timezone_offset) + last_seen_datetime = last_seen_datetime_local.strftime('%Y-%m-%dT%H:%M:%S') + else: + last_seen_datetime = None + result = {"id": row['id'], "name": row['name'], "uuid": row['uuid'], "gateway": gateway_dict.get(row['gateway_id']), "protocol": row['protocol'], "connection": row['connection'], - "last_seen_datetime": - row['last_seen_datetime_utc'].replace(tzinfo=timezone.utc).timestamp()*1000 - if isinstance(row['last_seen_datetime_utc'], datetime) else None + "last_seen_datetime": last_seen_datetime } resp.body = json.dumps(result)