46045-syslab/syslab/physical/Battery.py

86 lines
3.0 KiB
Python

from ..core.SyslabUnit import SyslabUnit
from ..core.datatypes.FlowBatteryState import FlowBatteryState
from ..core.datatypes.BattOpMode import BattOpMode
class Battery(SyslabUnit):
"""The Battery class represents a battery in SYSLAB.
The Battery class is instantiated using a string with the unique name of the battery, ie. 'which'
A full list of available batteries can be found by calling 'Battery.getAvailableBatteries()'
Alternatively, the user may specify a host and port to connect to via the *host* and *port* arguments.
"""
__BATTERIES = {
'batt1': ('syslab-12.syslab.dk', '8080', 'batt1'),
'battemu': ('syslab-31.syslab.dk', '8080', 'battemu'),
'battfh1': ('syslab-s01.syslab.dk', '8080', 'battfh1'),
'simlab-15': ('192.168.0.115', '8080', 'batt1'),
'vbatt1': ('simlab-12', '8080', 'batt1'),
}
def __init__(self, which=None, host=None, port=None, unitname=None):
baseurl = 'http://{host}:{port}/typebased_WebService_Battery/VRBBatteryWebService/{unit_name}/'
super().__init__(
baseurl=baseurl,
which=which,
units=self.__BATTERIES,
host=host,
port=port,
unit_name=unitname,
unit_type="Battery")
def startBattery(self):
return self._request_resource('startBattery', (), 'put')
def stopBattery(self):
return self._request_resource('stopBattery', (), 'put')
def getActivePower(self):
return self._request_resource('getACActivePower')
def setActivePower(self, setPoint):
P_UpperLimit = 15.0
P_LowerLimit = -15.0
return self._request_resource('setP', (max(P_LowerLimit, min(setPoint, P_UpperLimit))), 'put')
def getReactivePower(self):
return self._request_resource('getACReactivePower')
def setReactivePower(self, setPoint):
return self._request_resource('setQ', (setPoint), 'put')
def getFrequency(self):
return self._request_resource('getACFrequency')
def getRemainingFloodTime(self):
return min(self._request_resource('getRemainingFloodTime'), self._request_resource('getRemainingDrainTime'))
def getCurrentOperatingMode(self):
return self._request_resource('getCurrentOperatingMode')
def getCurrentOperatingState(self):
return self._request_resource('getCurrentOperatingState')
def setOperatingMode(self, mode):
return self._request_resource('setOperatingMode', (), 'put', BattOpMode(mode).parseToJSON())
def getSOC(self):
return self._request_resource('getSOC')
def getRatedActivePower(self):
return self._request_resource('getRatedP')
def getRatedReactivePower(self):
return self._request_resource('getRatedQ')
def getName(self):
return self._request_resource('getBatteryName')
@staticmethod
def getAvailableBatteries():
return list(Battery.__BATTERIES.keys())