Toevoeging timeSerie
This commit is contained in:
89
lmwsip.py
89
lmwsip.py
@@ -8,6 +8,8 @@ import select
|
|||||||
import time
|
import time
|
||||||
import re
|
import re
|
||||||
import logging
|
import logging
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
from dateutil import tz
|
||||||
|
|
||||||
class LmwSip:
|
class LmwSip:
|
||||||
"""Class to connect to the LMW Standard Interface prototcol (sip)
|
"""Class to connect to the LMW Standard Interface prototcol (sip)
|
||||||
@@ -272,6 +274,71 @@ Returns a single string value or None
|
|||||||
#
|
#
|
||||||
return(value)
|
return(value)
|
||||||
|
|
||||||
|
def _lmwdelta_(self, startTime, endTime):
|
||||||
|
d = endTime - startTime
|
||||||
|
h = 24*d.days + d.seconds // 3600
|
||||||
|
m = (d.seconds % 3600)//60
|
||||||
|
return("+%02i:%02i" % (h, m))
|
||||||
|
|
||||||
|
def timeSerie(self, process, location, parameter,
|
||||||
|
startTime, endTime, cmd_type="DATB"):
|
||||||
|
"""timeSerie(process, location, parameter, startTime, endTime, cmd_type="DATA")
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
process: <WN|VW|AS>
|
||||||
|
location: <lmw location (e.g. HOEK)>
|
||||||
|
parameter: <lmw parameter (e.g. H10)>
|
||||||
|
startTime: Start time (datetime)
|
||||||
|
endTime: End time (datetime)
|
||||||
|
cmd_type: [DATA|DATB]
|
||||||
|
|
||||||
|
startTime is rounded up to the next measurement time.
|
||||||
|
So 12:00:00.000001 --> 12:00:10.00.0
|
||||||
|
|
||||||
|
The times should have correct timezone information. Otherwise local timezone
|
||||||
|
is assumed. Timezones are converted to 'GMT+1' for the sip commands.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
lmw.data_string("WN", "HOEK", "H10", ...)
|
||||||
|
|
||||||
|
Returns a LmwtimeSerie object
|
||||||
|
|
||||||
|
Errors:
|
||||||
|
startTime > endTime
|
||||||
|
endTime - startTime > 24 hour
|
||||||
|
now - startTime < 30 days
|
||||||
|
"""
|
||||||
|
startTime = startTime.astimezone(tz.gettz('GMT+1'))
|
||||||
|
endTime = endTime.astimezone(tz.gettz('GMT+1'))
|
||||||
|
|
||||||
|
startTime += timedelta(microseconds=1000000-startTime.microsecond)
|
||||||
|
startTime += timedelta(seconds=60-startTime.second)
|
||||||
|
if (parameter.find("10") != -1):
|
||||||
|
if startTime.minute % 10 != 0:
|
||||||
|
delta = timedelta(minutes=10)
|
||||||
|
startTime += timedelta(minutes=(10-startTime.minute%10))
|
||||||
|
else:
|
||||||
|
delta = timedelta(minutes=1)
|
||||||
|
|
||||||
|
if startTime > endTime:
|
||||||
|
raise sipTimeSeriesError(startTime, endTime,
|
||||||
|
"starttime > endtime")
|
||||||
|
if endTime - startTime > timedelta(days=1):
|
||||||
|
raise sipTimeSeriesError(startTime, endTime,
|
||||||
|
"endtime - starttime > 24 hour")
|
||||||
|
if datetime.now(tz=tz.gettz('GMT+1')) - startTime > timedelta(days=30):
|
||||||
|
raise sipTimeSeriesError(startTime, endTime,
|
||||||
|
"now - starttime > 30 days")
|
||||||
|
if process == "VW":
|
||||||
|
cmd_type="DATA"
|
||||||
|
|
||||||
|
values = self.cmd(process, location, parameter,
|
||||||
|
self._lmwdelta_(startTime, endTime),
|
||||||
|
startTime.strftime("%d-%m-%Y"),
|
||||||
|
startTime.strftime("%H:%M"),
|
||||||
|
cmd_type)
|
||||||
|
return(lmwTimeSerie(startTime, delta, values))
|
||||||
|
|
||||||
def logout(self):
|
def logout(self):
|
||||||
"""logout()
|
"""logout()
|
||||||
|
|
||||||
@@ -280,6 +347,28 @@ Logs of
|
|||||||
self.send("LO\r")
|
self.send("LO\r")
|
||||||
self.closesocket()
|
self.closesocket()
|
||||||
|
|
||||||
|
class lmwTimeSerie:
|
||||||
|
def __init__(self, start, delta, values):
|
||||||
|
self.ts = []
|
||||||
|
self.addvalues(start, delta, values)
|
||||||
|
|
||||||
|
def addvalues(self, start, delta, values):
|
||||||
|
for e in values.split(";"):
|
||||||
|
a = [ start ]
|
||||||
|
a.append(e.split("/"))
|
||||||
|
self.ts.append(a)
|
||||||
|
start += delta
|
||||||
|
|
||||||
|
class sipTimeSeriesError(Exception):
|
||||||
|
"""Parameter errors for timeSeries"""
|
||||||
|
def __init__(self, startTime, endTime, message):
|
||||||
|
self.startTime = startTime
|
||||||
|
self.endTime = endTime
|
||||||
|
self.message = message
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return("%s\n starttime: %s\n end time: %s" %
|
||||||
|
(self.message, self.startTime, self.endTime))
|
||||||
|
|
||||||
class LmwSipConnectError(Exception):
|
class LmwSipConnectError(Exception):
|
||||||
"""Connection exceptions for LmwSip"""
|
"""Connection exceptions for LmwSip"""
|
||||||
|
Reference in New Issue
Block a user