Compare commits
43 Commits
Author | SHA1 | Date | |
---|---|---|---|
ef33fd252f | |||
2cead40a74 | |||
ee8ca45a59 | |||
af04830dfb | |||
a8e70e793f | |||
0c07dcfd66 | |||
ef778c3e0a | |||
49eb1522b6 | |||
cdeeceeb55 | |||
64089ce72c | |||
7683ec29e9 | |||
285b3514a8 | |||
f32c007b3f | |||
014dc507cc | |||
cec151e564 | |||
26f1caa60e | |||
7092e69e6a | |||
b32bce956f | |||
22bb4e6bd3 | |||
49954d762b | |||
30504239e1 | |||
|
42799296a9 | ||
|
ac54b7cd0d | ||
|
1df2a42196 | ||
|
2909ea7ed4 | ||
|
f55d6c2e19 | ||
|
664b215f16 | ||
|
5fe756ce97 | ||
|
bf28862f1f | ||
|
fe29441d1d | ||
|
d0043f3f18 | ||
|
583997d64c | ||
|
04daf49b0a | ||
|
b19f5d9049 | ||
|
2052bfd2cc | ||
|
418d3e6041 | ||
|
08cd160713 | ||
|
da80bd93d9 | ||
|
61997df1f3 | ||
|
047bb783b7 | ||
|
281bbfdac4 | ||
|
bcd761653f | ||
|
f521992f58 |
166
.drone.yml
166
.drone.yml
@@ -1,166 +0,0 @@
|
|||||||
---
|
|
||||||
kind: pipeline
|
|
||||||
type: exec
|
|
||||||
name: CentOS7_test
|
|
||||||
|
|
||||||
platform:
|
|
||||||
os: linux
|
|
||||||
arch: amd64
|
|
||||||
variant: CentOS7
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Run unit test
|
|
||||||
environment:
|
|
||||||
PYTHONPATH: .
|
|
||||||
commands:
|
|
||||||
- python3 setup.py test
|
|
||||||
|
|
||||||
---
|
|
||||||
kind: pipeline
|
|
||||||
type: exec
|
|
||||||
name: CentOS8_test
|
|
||||||
|
|
||||||
platform:
|
|
||||||
os: linux
|
|
||||||
arch: amd64
|
|
||||||
variant: CentOS8
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Run unit test
|
|
||||||
environment:
|
|
||||||
PYTHONPATH: .
|
|
||||||
commands:
|
|
||||||
- python3 setup.py test
|
|
||||||
|
|
||||||
---
|
|
||||||
kind: pipeline
|
|
||||||
type: exec
|
|
||||||
name: Ubuntu1804_test
|
|
||||||
|
|
||||||
platform:
|
|
||||||
os: linux
|
|
||||||
arch: amd64
|
|
||||||
variant: Ubuntu1804
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Run unit test
|
|
||||||
environment:
|
|
||||||
PYTHONPATH: .
|
|
||||||
commands:
|
|
||||||
- python3 setup.py test
|
|
||||||
|
|
||||||
---
|
|
||||||
kind: pipeline
|
|
||||||
type: exec
|
|
||||||
name: Fedora_test
|
|
||||||
|
|
||||||
platform:
|
|
||||||
os: linux
|
|
||||||
arch: amd64
|
|
||||||
variant: Fedora
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Run unit test
|
|
||||||
environment:
|
|
||||||
PYTHONPATH: .
|
|
||||||
commands:
|
|
||||||
- python3 setup.py test
|
|
||||||
|
|
||||||
---
|
|
||||||
kind: pipeline
|
|
||||||
type: docker
|
|
||||||
name: docker_python:3.6
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Run unit test
|
|
||||||
image: python:3.6
|
|
||||||
environment:
|
|
||||||
PYTHONPATH: .
|
|
||||||
commands:
|
|
||||||
- pip install python-dateutil
|
|
||||||
- python setup.py test
|
|
||||||
|
|
||||||
---
|
|
||||||
kind: pipeline
|
|
||||||
type: docker
|
|
||||||
name: docker_python:latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Run unit test
|
|
||||||
image: python:latest
|
|
||||||
environment:
|
|
||||||
PYTHONPATH: .
|
|
||||||
commands:
|
|
||||||
- pip install python-dateutil
|
|
||||||
- python --version
|
|
||||||
- python setup.py test
|
|
||||||
|
|
||||||
---
|
|
||||||
kind: pipeline
|
|
||||||
type: exec
|
|
||||||
name: Build
|
|
||||||
|
|
||||||
platform:
|
|
||||||
os: linux
|
|
||||||
arch: amd64
|
|
||||||
variant: Fedora
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Build package files
|
|
||||||
commands:
|
|
||||||
- python3 setup.py sdist bdist_wheel
|
|
||||||
|
|
||||||
- name: Versie toevoegen aan download
|
|
||||||
environment:
|
|
||||||
DOWNLOADDIR: /usr/share/nginx/html/download/python/lmwsip
|
|
||||||
commands:
|
|
||||||
- mkdir -p "$${DOWNLOADDIR}"
|
|
||||||
- cd dist
|
|
||||||
- |
|
|
||||||
for f in *
|
|
||||||
do
|
|
||||||
if [ -f "$${DOWNLOADDIR}/$${f}" ]
|
|
||||||
then
|
|
||||||
echo version error
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
cp "$${f}" "$${DOWNLOADDIR}";
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
- ls -l "$${DOWNLOADDIR}"
|
|
||||||
when:
|
|
||||||
branch:
|
|
||||||
- master
|
|
||||||
|
|
||||||
depends_on:
|
|
||||||
- CentOS7_test
|
|
||||||
- CentOS8_test
|
|
||||||
- Ubuntu1804_test
|
|
||||||
- Fedora_test
|
|
||||||
- docker_python:latest
|
|
||||||
- docker_python:3.6
|
|
||||||
|
|
||||||
---
|
|
||||||
kind: pipeline
|
|
||||||
type: docker
|
|
||||||
name: installCheck
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: install Check
|
|
||||||
image: python:3.6
|
|
||||||
# Make sure we run the pip installed version
|
|
||||||
commands:
|
|
||||||
- rm -rf lmwsip
|
|
||||||
- pip install --extra-index-url https://marceln.org/download/python lmwsip
|
|
||||||
- python -c "import lmwsip"
|
|
||||||
- python -c "import lmwsip; print(lmwsip.__version__)"
|
|
||||||
- >
|
|
||||||
[ $(python -c "import lmwsip; print(lmwsip.__version__)") =
|
|
||||||
$(python setup.py --version) ]
|
|
||||||
- python -m unittest -v lmwsip.tests
|
|
||||||
when:
|
|
||||||
branch:
|
|
||||||
- master
|
|
||||||
|
|
||||||
depends_on:
|
|
||||||
- Build
|
|
21
.gitea/workflows/build.yml
Normal file
21
.gitea/workflows/build.yml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
name: build
|
||||||
|
on:
|
||||||
|
- push
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: fedora-builder
|
||||||
|
steps:
|
||||||
|
- name: Check out repository code
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
- name: Build package
|
||||||
|
run: python3 -m build
|
||||||
|
- name: run tox
|
||||||
|
run: tox
|
||||||
|
- name: Upload na pypi
|
||||||
|
env:
|
||||||
|
TWINE_USERNAME: ${{ secrets.PYPI_USER }}
|
||||||
|
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
|
||||||
|
if: github.ref_type == 'tag'
|
||||||
|
run: python3 -m twine upload dist/*
|
1
.gitignore
vendored
1
.gitignore
vendored
@@ -7,3 +7,4 @@ lmwsip_marceln.egg-info
|
|||||||
test/__pycache__
|
test/__pycache__
|
||||||
lmwsip.egg-info
|
lmwsip.egg-info
|
||||||
*.swp
|
*.swp
|
||||||
|
.tox
|
||||||
|
@@ -12,12 +12,10 @@ how to use it.
|
|||||||
|
|
||||||
## Installing
|
## Installing
|
||||||
|
|
||||||
The package is not available on [PyPI](https://pypi.org/).
|
Just install the package with 'pip':
|
||||||
At the moment the package is hosted at https://marceln.org/download/python.
|
|
||||||
|
|
||||||
You can install the package with pip:
|
|
||||||
```
|
```
|
||||||
pip install --extra-index-url https://marceln.org/download/python lmwsip
|
pip install lmwsip
|
||||||
```
|
```
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
@@ -2,9 +2,10 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
VERSION=$(grep version setup.py | sed -e 's/.*="//' -e 's/",//')
|
yamllint .gitea/workflows/*yml
|
||||||
sed -i "s/^__version__ = .*/__version__ = '${VERSION}'/" lmwsip/__init__.py
|
|
||||||
git add lmwsip/__init__.py
|
|
||||||
|
|
||||||
python setup.py test
|
VERSION=$(grep version setup.cfg | sed 's/.*= *//')
|
||||||
yamllint .drone.yml
|
sed -i "s/^__version__ = .*/__version__ = '${VERSION}'/" src/lmwsip/__init__.py
|
||||||
|
git add src/lmwsip/__init__.py
|
||||||
|
|
||||||
|
tox -p
|
||||||
|
6
pyproject.toml
Normal file
6
pyproject.toml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
[build-system]
|
||||||
|
requires = [
|
||||||
|
"setuptools>=42",
|
||||||
|
"wheel"
|
||||||
|
]
|
||||||
|
build-backend = "setuptools.build_meta"
|
25
setup.cfg
Normal file
25
setup.cfg
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
[metadata]
|
||||||
|
name = lmwsip
|
||||||
|
version = 0.9.10
|
||||||
|
author = Marcel Nijenhof
|
||||||
|
author_email = pypi@marceln.org
|
||||||
|
description = Interface for the lmw sip protocol
|
||||||
|
long_description = file: README.md
|
||||||
|
long_description_content_type = text/markdown
|
||||||
|
url = https://git.marceln.org/Werk/lmwsip
|
||||||
|
classifiers =
|
||||||
|
Programming Language :: Python :: 3
|
||||||
|
License :: OSI Approved :: MIT License
|
||||||
|
Operating System :: OS Independent
|
||||||
|
Development Status :: 4 - Beta
|
||||||
|
|
||||||
|
[options]
|
||||||
|
package_dir =
|
||||||
|
= src
|
||||||
|
install_requires =
|
||||||
|
python-dateutil
|
||||||
|
packages = find:
|
||||||
|
python_requires = >= 3.6
|
||||||
|
|
||||||
|
[options.packages.find]
|
||||||
|
where = src
|
28
setup.py
28
setup.py
@@ -1,26 +1,4 @@
|
|||||||
import setuptools
|
from setuptools import setup
|
||||||
|
|
||||||
with open("README.md", "r") as fh:
|
if __name__ == "__main__":
|
||||||
long_description = fh.read()
|
setup()
|
||||||
|
|
||||||
setuptools.setup(
|
|
||||||
name="lmwsip", # Replace with your own username
|
|
||||||
version="0.9.0",
|
|
||||||
author="Marcel Nijenhof",
|
|
||||||
author_email="pip@marceln.org",
|
|
||||||
description="Interface for the lmw sip protocol",
|
|
||||||
long_description=long_description,
|
|
||||||
long_description_content_type="text/markdown",
|
|
||||||
url="https://marceln.org/git/Werk/lmwsip",
|
|
||||||
packages=setuptools.find_packages(),
|
|
||||||
install_requires=[
|
|
||||||
'python-dateutil'
|
|
||||||
],
|
|
||||||
classifiers=[
|
|
||||||
"Programming Language :: Python :: 3",
|
|
||||||
"License :: OSI Approved :: MIT License",
|
|
||||||
"Operating System :: OS Independent",
|
|
||||||
"Topic :: Lmw sip interface"
|
|
||||||
],
|
|
||||||
python_requires='>=3.6',
|
|
||||||
)
|
|
||||||
|
@@ -12,7 +12,7 @@ from datetime import datetime, timedelta
|
|||||||
from dateutil import tz
|
from dateutil import tz
|
||||||
|
|
||||||
""" Version info changed by git hook """
|
""" Version info changed by git hook """
|
||||||
__version__ = '0.9.0'
|
__version__ = '0.9.10'
|
||||||
|
|
||||||
class LmwSip:
|
class LmwSip:
|
||||||
"""Class to connect to the LMW Standard Interface prototcol (sip)
|
"""Class to connect to the LMW Standard Interface prototcol (sip)
|
||||||
@@ -27,7 +27,12 @@ Support for:
|
|||||||
ti
|
ti
|
||||||
cmd(wn, vw, as)
|
cmd(wn, vw, as)
|
||||||
|
|
||||||
|
lmwParameters:
|
||||||
|
- Type: WN, VW, AS
|
||||||
|
- Array size: [1-201]
|
||||||
|
- Periode: 1, 10
|
||||||
"""
|
"""
|
||||||
|
|
||||||
lmwParameters = {
|
lmwParameters = {
|
||||||
'Tm02_MV': ('VW', 1, 0),
|
'Tm02_MV': ('VW', 1, 0),
|
||||||
'xH1': ('WN', 1, 1),
|
'xH1': ('WN', 1, 1),
|
||||||
@@ -489,7 +494,12 @@ Support for:
|
|||||||
'xH60': ('WN', 1, 60),
|
'xH60': ('WN', 1, 60),
|
||||||
'xNI60': ('WN', 1, 60),
|
'xNI60': ('WN', 1, 60),
|
||||||
'xQ60': ('WN', 1, 60),
|
'xQ60': ('WN', 1, 60),
|
||||||
'xH60R': ('WN', 1, 60)
|
'xH60R': ('WN', 1, 60),
|
||||||
|
'QfQStt10': ('WN', 1, 10),
|
||||||
|
'QfQTr10': ('WN', 1, 10),
|
||||||
|
'QfQSt10': ('WN', 1, 10),
|
||||||
|
'QfHYS10': ('WN', 1, 10),
|
||||||
|
'QfQSy10': ('WN', 1, 10)
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, user=None, password=None,
|
def __init__(self, user=None, password=None,
|
||||||
@@ -588,7 +598,7 @@ Opens the connection and logs in.
|
|||||||
"time_of_day": time.strftime("%H:%M", time.gmtime(now)) }
|
"time_of_day": time.strftime("%H:%M", time.gmtime(now)) }
|
||||||
|
|
||||||
def connect(self):
|
def connect(self):
|
||||||
"""connect()
|
"""Setup the network connection
|
||||||
|
|
||||||
connects to lmw with tcp using the values of the object creation.
|
connects to lmw with tcp using the values of the object creation.
|
||||||
"""
|
"""
|
||||||
@@ -624,7 +634,7 @@ connects to lmw with tcp using the values of the object creation.
|
|||||||
self._socket = None
|
self._socket = None
|
||||||
|
|
||||||
def send(self, sipcmd):
|
def send(self, sipcmd):
|
||||||
"""send(sipcmd)
|
"""Send a sip command to the server
|
||||||
|
|
||||||
send a sip command to the server
|
send a sip command to the server
|
||||||
"""
|
"""
|
||||||
@@ -654,7 +664,7 @@ send a sip command to the server
|
|||||||
raise LmwSipConnectError("LmwSip.telnetheader: Socket connection lost")
|
raise LmwSipConnectError("LmwSip.telnetheader: Socket connection lost")
|
||||||
|
|
||||||
def recv(self):
|
def recv(self):
|
||||||
"""recv()
|
"""Recieve the results
|
||||||
|
|
||||||
recieve a answer from the sip server
|
recieve a answer from the sip server
|
||||||
"""
|
"""
|
||||||
@@ -668,9 +678,9 @@ recieve a answer from the sip server
|
|||||||
if (len(bytebuf) == 0):
|
if (len(bytebuf) == 0):
|
||||||
c+=1
|
c+=1
|
||||||
self.log.debug("recv: bytebuf: %s" % bytebuf)
|
self.log.debug("recv: bytebuf: %s" % bytebuf)
|
||||||
if self.cleartelnet:
|
if self.cleartelnet:
|
||||||
if bytebuf[0] == 255:
|
if bytebuf[0] == 255:
|
||||||
bytebuf = b''
|
bytebuf = b''
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.log.error("SipLmw.recv: socket timeout: %s", e)
|
self.log.error("SipLmw.recv: socket timeout: %s", e)
|
||||||
self.closesocket()
|
self.closesocket()
|
||||||
@@ -697,7 +707,7 @@ recieve a answer from the sip server
|
|||||||
return(stringbuf)
|
return(stringbuf)
|
||||||
|
|
||||||
def login(self):
|
def login(self):
|
||||||
"""login()
|
"""Login the sip server
|
||||||
|
|
||||||
Login lmw using the object creation user, password.
|
Login lmw using the object creation user, password.
|
||||||
Raises a LmwLoginFailure exception on failure
|
Raises a LmwLoginFailure exception on failure
|
||||||
@@ -721,7 +731,7 @@ Raises a LmwLoginFailure exception on failure
|
|||||||
self.login()
|
self.login()
|
||||||
|
|
||||||
def reconnectcheck(self):
|
def reconnectcheck(self):
|
||||||
"""reconnectcheck()
|
"""Check if we need to reconnect.
|
||||||
|
|
||||||
Checks if a reconnect is nessecery.
|
Checks if a reconnect is nessecery.
|
||||||
|
|
||||||
@@ -739,7 +749,7 @@ There are two timeouts:
|
|||||||
self.reconnect()
|
self.reconnect()
|
||||||
|
|
||||||
def sendrecv(self, cmd):
|
def sendrecv(self, cmd):
|
||||||
"""sendrecv(cmd)
|
"""Send a a command and recieve the result.
|
||||||
|
|
||||||
send the command and recieve the answer.
|
send the command and recieve the answer.
|
||||||
retry on socket failure.
|
retry on socket failure.
|
||||||
@@ -768,7 +778,7 @@ retry on socket failure.
|
|||||||
return(ret)
|
return(ret)
|
||||||
|
|
||||||
def ti(self):
|
def ti(self):
|
||||||
"""ti()
|
"""Recieve the time from the sipserver.
|
||||||
|
|
||||||
Request the time from lmw and returns the string.
|
Request the time from lmw and returns the string.
|
||||||
|
|
||||||
@@ -780,7 +790,7 @@ Raises a LmwCmdWarn of failure
|
|||||||
|
|
||||||
def cmd(self, process, location, parameter, time_delta, day,
|
def cmd(self, process, location, parameter, time_delta, day,
|
||||||
time_of_day, cmd_type="DATA"):
|
time_of_day, cmd_type="DATA"):
|
||||||
"""cmd(process, location, parameter, time_delta, day, time_of_day)
|
"""Create a sip command from the paramters
|
||||||
|
|
||||||
Send a cmd to LMW and returns the lmw string
|
Send a cmd to LMW and returns the lmw string
|
||||||
|
|
||||||
@@ -812,9 +822,35 @@ Returns:
|
|||||||
raise LmwCmdWarn(cmdstr, d)
|
raise LmwCmdWarn(cmdstr, d)
|
||||||
return (d[2:-1])
|
return (d[2:-1])
|
||||||
|
|
||||||
|
def cmdWrite(self, process, location, parameter, time_delta, day,
|
||||||
|
time_of_day, values):
|
||||||
|
"""Write data to LMW
|
||||||
|
|
||||||
|
process: <WNT|VWT|AST>
|
||||||
|
location: <lmw location (e.g. HOEK)>
|
||||||
|
parameter: <lmw parameter (e.g. H10)>
|
||||||
|
time_delta: <Time windows (max 23:59, e.g. +01:00>
|
||||||
|
day: <Date>
|
||||||
|
time_of_day: <Time>
|
||||||
|
data: Values to be writen (e.g. 33/10;35/10).
|
||||||
|
|
||||||
|
Example:
|
||||||
|
lmw.cmdWrite("WNT", "HOEK", "H10", "+00:20", "13-08-2018", "16:00", "33/10;35/10")
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The LMW answer string
|
||||||
|
"""
|
||||||
|
cmdstr=process + " " + self.meetnet + "," + location + "," + \
|
||||||
|
parameter + "," + time_delta + "," + day + "," + \
|
||||||
|
time_of_day + "," + values + "\r"
|
||||||
|
d = self.sendrecv(cmdstr)
|
||||||
|
if (d[0] != '!'):
|
||||||
|
raise LmwCmdWarn(cmdstr, d)
|
||||||
|
return (d[2:-1])
|
||||||
|
|
||||||
def valueStr(self, process, location, parameter, day = None,
|
def valueStr(self, process, location, parameter, day = None,
|
||||||
time_of_day = None):
|
time_of_day = None):
|
||||||
"""value(process, location, parameter, [day], [time_of_day]):
|
"""Get string of values from sip
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
process: <WN|VW|AS>
|
process: <WN|VW|AS>
|
||||||
@@ -826,7 +862,7 @@ Parameters:
|
|||||||
The default returns the last value string including quality.
|
The default returns the last value string including quality.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
lmw.data_string("WN", "HOEK", "H10")
|
lmw.valueStr("WN", "HOEK", "H10")
|
||||||
|
|
||||||
Returns a single string value with quality
|
Returns a single string value with quality
|
||||||
"""
|
"""
|
||||||
@@ -841,7 +877,7 @@ Returns a single string value with quality
|
|||||||
|
|
||||||
def value(self, process, location, parameter, day = None,
|
def value(self, process, location, parameter, day = None,
|
||||||
time_of_day = None):
|
time_of_day = None):
|
||||||
"""value(process, location, parameter, [day], [time_of_day]):
|
"""Get one value from sip
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
process: <WN|VW|AS>
|
process: <WN|VW|AS>
|
||||||
@@ -853,7 +889,7 @@ Parameters:
|
|||||||
The default returns the last value.
|
The default returns the last value.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
lmw.data_string("WN", "HOEK", "H10")
|
lmw.value("WN", "HOEK", "H10")
|
||||||
|
|
||||||
Returns a single string value or None
|
Returns a single string value or None
|
||||||
"""
|
"""
|
||||||
@@ -868,6 +904,26 @@ Returns a single string value or None
|
|||||||
#
|
#
|
||||||
return(value)
|
return(value)
|
||||||
|
|
||||||
|
def stat(self, process, location, parameter):
|
||||||
|
"""Get the last measurement or the start en end of forecasts.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
process: <WN|VW|AS>
|
||||||
|
location: <lmw location (e.g. HOEK)>
|
||||||
|
parameter: <lmw parameter (e.g. H10)>
|
||||||
|
The default returns the last value.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
lmw.stat("WN", "HOEK", "H10")
|
||||||
|
|
||||||
|
Returns a single string value or None
|
||||||
|
"""
|
||||||
|
stat="%s %s,%s,%s,STAT\r" % (process, self.meetnet, location, parameter)
|
||||||
|
d = self.sendrecv(stat)
|
||||||
|
if d[0] != '!':
|
||||||
|
raise LmwCmdWarn(stat, d)
|
||||||
|
return (d[2:-1])
|
||||||
|
|
||||||
def _lmwdelta_(self, window):
|
def _lmwdelta_(self, window):
|
||||||
h = 24*window.days + window.seconds // 3600
|
h = 24*window.days + window.seconds // 3600
|
||||||
m = (window.seconds % 3600)//60
|
m = (window.seconds % 3600)//60
|
||||||
@@ -885,7 +941,7 @@ Returns a single string value or None
|
|||||||
|
|
||||||
def timeSerie(self, process, location, parameter,
|
def timeSerie(self, process, location, parameter,
|
||||||
startTime, endTime, cmd_type="DATB"):
|
startTime, endTime, cmd_type="DATB"):
|
||||||
"""timeSerie(process, location, parameter, startTime, endTime, cmd_type="DATA")
|
"""Get a python data structure with the results.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
process: <WN|VW|AS>
|
process: <WN|VW|AS>
|
||||||
@@ -902,7 +958,7 @@ The times should have correct timezone information. Otherwise local timezone
|
|||||||
is assumed. Timezones are converted to 'GMT+1' for the sip commands.
|
is assumed. Timezones are converted to 'GMT+1' for the sip commands.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
lmw.data_string("WN", "HOEK", "H10", ...)
|
lmw.timeSerie("WN", "HOEK", "H10", ...)
|
||||||
|
|
||||||
Returns a LmwtimeSerie object
|
Returns a LmwtimeSerie object
|
||||||
|
|
||||||
@@ -954,7 +1010,7 @@ Errors:
|
|||||||
return(res)
|
return(res)
|
||||||
|
|
||||||
def logout(self):
|
def logout(self):
|
||||||
"""logout()
|
"""Logut of the sip server,
|
||||||
|
|
||||||
Logs of
|
Logs of
|
||||||
"""
|
"""
|
||||||
@@ -978,7 +1034,7 @@ Note:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, start, delta, values=""):
|
def __init__(self, start, delta, values=""):
|
||||||
"""lmwTimeSerie(start, delta, values)
|
"""lmwTimeSerie init
|
||||||
|
|
||||||
Create a lmwTimeSerie object with:
|
Create a lmwTimeSerie object with:
|
||||||
start: Start time
|
start: Start time
|
||||||
@@ -991,7 +1047,7 @@ Create a lmwTimeSerie object with:
|
|||||||
self.addvalues(start, values)
|
self.addvalues(start, values)
|
||||||
|
|
||||||
def addvalues(self, start, values):
|
def addvalues(self, start, values):
|
||||||
"""addvalues(start, delta, values)
|
"""Add values
|
||||||
|
|
||||||
Add values to a timeserie
|
Add values to a timeserie
|
||||||
start: Start time
|
start: Start time
|
||||||
@@ -1064,4 +1120,4 @@ class LmwParmWarn(Warning):
|
|||||||
self.parameter = parameter
|
self.parameter = parameter
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return("Unknown parameter: %s" % parameter)
|
return("Unknown parameter: %s" % self.parameter)
|
@@ -4,10 +4,10 @@ import sys
|
|||||||
import io
|
import io
|
||||||
import unittest
|
import unittest
|
||||||
import lmwsip
|
import lmwsip
|
||||||
import lmwsip.tests.stubSipServer
|
import stubSipServer
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from lmwsip.tests.stubSipServer import sipServer
|
from stubSipServer import sipServer
|
||||||
from lmwsip.run import run
|
from lmwsip.run import run
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from dateutil import tz
|
from dateutil import tz
|
||||||
@@ -77,10 +77,22 @@ class lmwsipTest(unittest.TestCase):
|
|||||||
with self.assertRaises(lmwsip.LmwCmdWarn):
|
with self.assertRaises(lmwsip.LmwCmdWarn):
|
||||||
self.assertEqual(type(self.sip.cmd("NOP", "DUMMY", "H10", "+00:59", "2020-01-01", "00:00")), str)
|
self.assertEqual(type(self.sip.cmd("NOP", "DUMMY", "H10", "+00:59", "2020-01-01", "00:00")), str)
|
||||||
|
|
||||||
|
def test_cmdWrite(self):
|
||||||
|
self.login()
|
||||||
|
self.assertEqual(type(self.sip.cmdWrite("WNT", "DUMMY", "H10", "+00:20", "2020-01-01", "00:00", "35/10;33/10")), str)
|
||||||
|
|
||||||
def test_value(self):
|
def test_value(self):
|
||||||
self.login()
|
self.login()
|
||||||
self.assertEqual(type(self.sip.value("WN", "DUMMY", "H10")), str)
|
self.assertEqual(type(self.sip.value("WN", "DUMMY", "H10")), str)
|
||||||
|
|
||||||
|
def test_stat_wn(self):
|
||||||
|
self.login()
|
||||||
|
self.assertEqual(type(self.sip.stat("WN", "DUMMY", "H10")), str)
|
||||||
|
|
||||||
|
def test_stat_vw(self):
|
||||||
|
self.login()
|
||||||
|
self.assertEqual(type(self.sip.stat("VW", "DUMMY", "H10V")), str)
|
||||||
|
|
||||||
def test_value1min(self):
|
def test_value1min(self):
|
||||||
self.login()
|
self.login()
|
||||||
self.assertEqual(type(self.sip.value("WN", "DUMMY", "H1")), str)
|
self.assertEqual(type(self.sip.value("WN", "DUMMY", "H1")), str)
|
@@ -13,6 +13,15 @@ Implements the following commands:
|
|||||||
CMD> TI LMW
|
CMD> TI LMW
|
||||||
ANS< ! 20-JAN-01 00:00:00
|
ANS< ! 20-JAN-01 00:00:00
|
||||||
|
|
||||||
|
CMD> WNT LMW,DUMMY,H1,+HH:MM,yyyy-mm-dd,HH:MM,NN/NN;NN/NN
|
||||||
|
ANS< ! 1/10,;2/10;....
|
||||||
|
|
||||||
|
CMD> WN LMW,DUMMY,H10,STAT
|
||||||
|
ANS< ! 20-JAN-01 00:00
|
||||||
|
|
||||||
|
CMD> VW LMW,DUMMY,H10V,STAT
|
||||||
|
ANS< ! 20-JAN-01 00:00;20-JAN-01 01:00
|
||||||
|
|
||||||
CMD> WN LMW,DUMMY,H10,+HH:MM,yyyy-mm-dd,HH:MM,DATA
|
CMD> WN LMW,DUMMY,H10,+HH:MM,yyyy-mm-dd,HH:MM,DATA
|
||||||
ANS< ! 1/10,;2/10;....
|
ANS< ! 1/10,;2/10;....
|
||||||
|
|
||||||
@@ -48,7 +57,7 @@ logoutcount=0
|
|||||||
|
|
||||||
class sipProtocol(socketserver.BaseRequestHandler):
|
class sipProtocol(socketserver.BaseRequestHandler):
|
||||||
def match(self, m):
|
def match(self, m):
|
||||||
return(self.data.find(m.encode()) == 0)
|
return(self.data.find(m.encode()) != -1)
|
||||||
|
|
||||||
def send(self, a):
|
def send(self, a):
|
||||||
a = "%s\r" % a
|
a = "%s\r" % a
|
||||||
@@ -86,12 +95,21 @@ class sipProtocol(socketserver.BaseRequestHandler):
|
|||||||
global logoutcount
|
global logoutcount
|
||||||
self.read()
|
self.read()
|
||||||
while self.data:
|
while self.data:
|
||||||
if self.match("LI USER,PASS"):
|
if self.match("CLOSE"):
|
||||||
|
self.request.close()
|
||||||
|
elif self.match("LI USER,PASS"):
|
||||||
self.send("!")
|
self.send("!")
|
||||||
elif self.match("TI LMW"):
|
elif self.match("TI LMW"):
|
||||||
self.send("! 20-JAN-01 00:00:00")
|
self.send("! 20-JAN-01 00:00:00")
|
||||||
|
elif self.match("WNT LMW,DUMMY,H10,"):
|
||||||
|
self.send("!")
|
||||||
elif self.match("WN LMW,DUMMY,H10,"):
|
elif self.match("WN LMW,DUMMY,H10,"):
|
||||||
self.meting(10)
|
if self.match("STAT"):
|
||||||
|
self.send("! 20-JAN-01 00:00")
|
||||||
|
else:
|
||||||
|
self.meting(10)
|
||||||
|
elif self.match("VW LMW,DUMMY,H10V,STAT"):
|
||||||
|
self.send("! 20-JAN-01 00:00;20-JAN-01 01:00")
|
||||||
elif self.match("WN LMW,DUMMY,H1,"):
|
elif self.match("WN LMW,DUMMY,H1,"):
|
||||||
self.meting(1)
|
self.meting(1)
|
||||||
elif self.match("LOGOUTCOUNT"):
|
elif self.match("LOGOUTCOUNT"):
|
||||||
@@ -99,8 +117,6 @@ class sipProtocol(socketserver.BaseRequestHandler):
|
|||||||
elif self.match("LO"):
|
elif self.match("LO"):
|
||||||
logoutcount+=1
|
logoutcount+=1
|
||||||
self.send("!")
|
self.send("!")
|
||||||
elif self.match("CLOSE"):
|
|
||||||
self.request.close()
|
|
||||||
else:
|
else:
|
||||||
self.send("? ERROR")
|
self.send("? ERROR")
|
||||||
self.read()
|
self.read()
|
Reference in New Issue
Block a user