cyclic state publish via mqtt
This commit is contained in:
parent
1ccc230b50
commit
587de798c2
31
powerplug.py
31
powerplug.py
@ -35,39 +35,39 @@ class sispmctl(object):
|
|||||||
return output
|
return output
|
||||||
|
|
||||||
def set_out_state(self, output, state):
|
def set_out_state(self, output, state):
|
||||||
|
output = self.__filter_output_parameter__(output)
|
||||||
if output == "all":
|
if output == "all":
|
||||||
state = [state, state, state, state]
|
state = [state, state, state, state]
|
||||||
|
|
||||||
if self.get_out_state(output) != state:
|
if self.__state__[output - 1] != state:
|
||||||
try:
|
try:
|
||||||
out_txt = subprocess.check_output(["sudo", "sispmctl", "-o" if state == True or state == [True, True, True, True] else "-f", output]).decode('UTF-8')
|
out_txt = subprocess.check_output(["sudo", "sispmctl", "-o" if state == True or state == [True, True, True, True] else "-f", str(output)]).decode('UTF-8')
|
||||||
except subprocess.CalledProcessError as grepexc:
|
except subprocess.CalledProcessError as grepexc:
|
||||||
logger.error("sispm error code %d", grepexc.returncode)
|
logger.error("sispm error code %d", grepexc.returncode)
|
||||||
else:
|
else:
|
||||||
logger.info('sispmctl channel %s changed to %s', output, state)
|
logger.info('sispmctl channel %s changed to %s', output, state)
|
||||||
self.publish_states()
|
self.publish_states()
|
||||||
|
|
||||||
def publish_states(self):
|
def get_out_states(self):
|
||||||
try:
|
try:
|
||||||
out_txt = subprocess.check_output(["sudo", "sispmctl", "-g", "all"])
|
out_txt = subprocess.check_output(["sudo", "sispmctl", "-g", "all"])
|
||||||
except subprocess.CalledProcessError as grepexc:
|
except subprocess.CalledProcessError as grepexc:
|
||||||
logger.error("sispm error code %d", grepexc.returncode)
|
logger.error("sispm error code %d", grepexc.returncode)
|
||||||
else:
|
else:
|
||||||
print(out_txt)
|
rv = []
|
||||||
for i in range(1, 5):
|
for i in range(1, 5):
|
||||||
self.__state__[i-1] = out_txt.decode("UTF-8").split("\n")[i].split("\t")[1] == "on"
|
rv.append(out_txt.decode("UTF-8").split("\n")[i].split("\t")[1] == "on")
|
||||||
self.send_state(i)
|
return rv
|
||||||
|
|
||||||
|
def publish_states(self):
|
||||||
|
self.__state__ = self.get_out_states()
|
||||||
|
for i in range(1, 5):
|
||||||
|
self.send_state(i)
|
||||||
|
|
||||||
def send_state(self, output):
|
def send_state(self, output):
|
||||||
topic = config.MQTT_TOPIC + "/status/" + str(output)
|
topic = config.MQTT_TOPIC + "/status/" + str(output)
|
||||||
logger.info("Sending Powerplug status information of plug %s to mqtt %s = %s", str(output), topic, str(self.get_out_state(output)))
|
logger.info("Sending Powerplug status information of plug %s to mqtt %s = %s", str(output), topic, str(self.__state__[output - 1]))
|
||||||
self.__mqtt_client__.publish(topic, "true" if self.get_out_state(output) else "false")
|
self.__mqtt_client__.publish(topic, "true" if self.__state__[output - 1] else "false")
|
||||||
|
|
||||||
def get_out_state(self, output):
|
|
||||||
if output in range(1,5):
|
|
||||||
return self.__state__[int(output) - 1]
|
|
||||||
else:
|
|
||||||
return self.__state__
|
|
||||||
|
|
||||||
|
|
||||||
class mqtt_powerplug(object):
|
class mqtt_powerplug(object):
|
||||||
@ -110,4 +110,5 @@ if __name__ == '__main__':
|
|||||||
mp = mqtt_powerplug()
|
mp = mqtt_powerplug()
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
time.sleep(2)
|
time.sleep(30)
|
||||||
|
mp.__sc__.publish_states()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user