Source code for noctua.devices.siemens

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# System modules
from urllib.parse import urlencode

# Third-party modules
import requests

# Other templates
from ..utils import check
from ..utils.logger import log


[docs] class Switch: '''Base wrapper class for the Siemens PLC switch managing the Telescope cabinet.''' def __init__(self, url, id=0): '''Constructor. id for compatibility with other switches''' self.id = id self.url = url self.addr = self.url self.timeout = 3 self.error = None @check.request_errors def get(self, method): '''Send a HTTP GET request to request information from the device address.''' res = requests.get(f"{self.addr}/{method}", timeout=self.timeout) res.raise_for_status() try: return res except AttributeError as e: return res except KeyError as e: return res @check.request_errors def put(self, method, params={}): '''Send a HTTP GET request to put information at the device address.''' res = requests.get(f"{self.addr}/{method}", params=params, timeout=self.timeout) res.raise_for_status() return res @property def all(self): '''Requesting all the avaible status information.''' res = self.get("vstatus") if not self.error: vstatus = res.text.split("<br>")[:-1] # cutting last empty line vdict = dict([v.split(" is ") for v in vstatus]) return vdict @property def state(self): '''Requesting just the state information: the cabinet is on or off?''' res = self.all if not res: return res self._state = True if res["Cabinet"] == 'ON' else False return self._state @state.setter def state(self, s): '''Switch the on/off state of the cabinet.''' start_stop = "on" if s else "off" params = {"startstop": start_stop} # params = {"tstart": start_stop} # Temp 17h self.put("apikey=bigrip", params=params) self._state = self.state