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())