2023-10-29 15:10:06 +01:00
|
|
|
#!/usr/bin/env python
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
#
|
2024-09-05 07:13:59 +02:00
|
|
|
from devices.base import base, base_output
|
2023-10-29 15:10:06 +01:00
|
|
|
import logging
|
|
|
|
|
|
|
|
|
2024-09-05 07:13:59 +02:00
|
|
|
class powerplug(base_output):
|
2023-10-29 15:10:06 +01:00
|
|
|
""" Communication (MQTT)
|
|
|
|
|
|
|
|
my_powerplug
|
|
|
|
+- output
|
|
|
|
+- 1 [True, False] <- status
|
|
|
|
| +- set [True, False, "toggle"] <- command
|
|
|
|
+- 2 [True, False] <- status
|
|
|
|
| +- set [True, False, "toggle"] <- command
|
|
|
|
+- 3 [True, False] <- status
|
|
|
|
| +- set [True, False, "toggle"] <- command
|
|
|
|
+- 4 [True, False] <- status
|
|
|
|
| +- set [True, False, "toggle"] <- command
|
|
|
|
+- all
|
|
|
|
+- set [True, False, "toggle"] <- command
|
|
|
|
"""
|
|
|
|
KEY_OUTPUT_0 = "output/1"
|
|
|
|
KEY_OUTPUT_1 = "output/2"
|
|
|
|
KEY_OUTPUT_2 = "output/3"
|
|
|
|
KEY_OUTPUT_3 = "output/4"
|
|
|
|
KEY_OUTPUT_ALL = "output/all"
|
|
|
|
KEY_OUTPUT_LIST = [KEY_OUTPUT_0, KEY_OUTPUT_1, KEY_OUTPUT_2, KEY_OUTPUT_3]
|
|
|
|
#
|
|
|
|
TX_TYPE = base.TX_VALUE
|
|
|
|
#
|
|
|
|
RX_KEYS = [KEY_OUTPUT_0, KEY_OUTPUT_1, KEY_OUTPUT_2, KEY_OUTPUT_3]
|
|
|
|
|
2023-10-31 09:04:19 +01:00
|
|
|
def __state_logging__(self, inst, key, data):
|
|
|
|
if key in self.KEY_OUTPUT_LIST:
|
|
|
|
self.logger.info("State change of '%s' to '%s'", key, repr(data))
|
2023-10-29 15:10:06 +01:00
|
|
|
|
|
|
|
#
|
|
|
|
# RX
|
|
|
|
#
|
|
|
|
@property
|
|
|
|
def output_0(self):
|
|
|
|
"""rv: [True, False]"""
|
|
|
|
return self.get(self.KEY_OUTPUT_0)
|
|
|
|
|
|
|
|
@property
|
|
|
|
def output_1(self):
|
|
|
|
"""rv: [True, False]"""
|
|
|
|
return self.get(self.KEY_OUTPUT_1)
|
|
|
|
|
|
|
|
@property
|
|
|
|
def output_2(self):
|
|
|
|
"""rv: [True, False]"""
|
|
|
|
return self.get(self.KEY_OUTPUT_2)
|
|
|
|
|
|
|
|
@property
|
|
|
|
def output_3(self):
|
|
|
|
"""rv: [True, False]"""
|
|
|
|
return self.get(self.KEY_OUTPUT_3)
|
|
|
|
|
|
|
|
#
|
|
|
|
# TX
|
|
|
|
#
|
|
|
|
def set_output(self, key, state):
|
|
|
|
if key in self.KEY_OUTPUT_LIST:
|
|
|
|
self.send_command(key, state)
|
|
|
|
else:
|
|
|
|
logging.error("Unknown key to set the output!")
|
|
|
|
|
|
|
|
def set_output_0(self, state):
|
|
|
|
"""state: [True, False]"""
|
|
|
|
self.send_command(self.KEY_OUTPUT_0, state)
|
|
|
|
|
|
|
|
def set_output_0_mcb(self, device, key, data):
|
|
|
|
self.set_output_0(data)
|
|
|
|
|
|
|
|
def toggle_output_0_mcb(self, device, key, data):
|
|
|
|
self.set_output_0(not self.output_0)
|
|
|
|
|
|
|
|
def set_output_1(self, state):
|
|
|
|
"""state: [True, False]"""
|
|
|
|
self.send_command(self.KEY_OUTPUT_1, state)
|
|
|
|
|
|
|
|
def set_output_1_mcb(self, device, key, data):
|
|
|
|
self.set_output_1(data)
|
|
|
|
|
|
|
|
def toggle_output_1_mcb(self, device, key, data):
|
|
|
|
self.set_output_1(not self.output_1)
|
|
|
|
|
|
|
|
def set_output_2(self, state):
|
|
|
|
"""state: [True, False]"""
|
|
|
|
self.send_command(self.KEY_OUTPUT_2, state)
|
|
|
|
|
|
|
|
def set_output_2_mcb(self, device, key, data):
|
|
|
|
self.set_output_2(data)
|
|
|
|
|
|
|
|
def toggle_output_2_mcb(self, device, key, data):
|
|
|
|
self.set_output_2(not self.output_2)
|
|
|
|
|
|
|
|
def set_output_3(self, state):
|
|
|
|
"""state: [True, False]"""
|
|
|
|
self.send_command(self.KEY_OUTPUT_3, state)
|
|
|
|
|
|
|
|
def set_output_3_mcb(self, device, key, data):
|
|
|
|
self.set_output_3(data)
|
|
|
|
|
|
|
|
def toggle_output_3_mcb(self, device, key, data):
|
|
|
|
self.set_output_3(not self.output_3)
|
|
|
|
|
|
|
|
def set_output_all(self, state):
|
|
|
|
"""state: [True, False, 'toggle']"""
|
|
|
|
self.send_command(self.KEY_OUTPUT_ALL, state)
|
|
|
|
|
|
|
|
def set_output_all_mcb(self, device, key, data):
|
|
|
|
self.set_output_all(data)
|
|
|
|
|
2024-09-05 07:13:59 +02:00
|
|
|
def __all_off__(self):
|
2023-10-29 15:10:06 +01:00
|
|
|
self.set_output_all(False)
|
|
|
|
|
|
|
|
|
|
|
|
class remote(base):
|
|
|
|
""" Communication (MQTT)
|
|
|
|
|
|
|
|
remote (RAS5) <- command
|
|
|
|
+- CD [dc]
|
|
|
|
+- LINE1 [dc]
|
|
|
|
+- LINE2 [dc]
|
|
|
|
+- LINE3 [dc]
|
|
|
|
+- MUTE [dc]
|
|
|
|
+- POWER [dc]
|
|
|
|
+- VOLDOWN [dc]
|
|
|
|
+- VOLUP [dc]
|
|
|
|
+- PHONO [dc]
|
|
|
|
+- DOCK [dc]
|
|
|
|
|
|
|
|
remote (EUR642100) <- command
|
|
|
|
+- OPEN_CLOSE [dc]
|
|
|
|
+- VOLDOWN [dc]
|
|
|
|
+- VOLUP [dc]
|
|
|
|
+- ONE [dc]
|
|
|
|
+- TWO [dc]
|
|
|
|
+- THREE [dc]
|
|
|
|
+- FOUR [dc]
|
|
|
|
+- FIVE [dc]
|
|
|
|
+- SIX [dc]
|
|
|
|
+- SEVEN [dc]
|
|
|
|
+- EIGHT [dc]
|
|
|
|
+- NINE [dc]
|
|
|
|
+- ZERO [dc]
|
|
|
|
+- TEN [dc]
|
|
|
|
+- TEN_PLUS [dc]
|
|
|
|
+- PROGRAM [dc]
|
|
|
|
+- CLEAR [dc]
|
|
|
|
+- RECALL [dc]
|
|
|
|
+- TIME_MODE [dc]
|
|
|
|
+- A_B_REPEAT [dc]
|
|
|
|
+- REPEAT [dc]
|
|
|
|
+- RANDOM [dc]
|
|
|
|
+- AUTO_CUE [dc]
|
|
|
|
+- TAPE_LENGTH [dc]
|
|
|
|
+- SIDE_A_B [dc]
|
|
|
|
+- TIME_FADE [dc]
|
|
|
|
+- PEAK_SEARCH [dc]
|
|
|
|
+- SEARCH_BACK [dc]
|
|
|
|
+- SEARCH_FOR [dc]
|
|
|
|
+- TRACK_NEXT [dc]
|
|
|
|
+- TRACK_PREV [dc]
|
|
|
|
+- STOP [dc]
|
|
|
|
+- PAUSE [dc]
|
|
|
|
+- PLAY [dc]
|
|
|
|
"""
|
|
|
|
KEY_CD = "CD"
|
|
|
|
KEY_LINE1 = "LINE1"
|
2024-07-05 14:34:13 +02:00
|
|
|
KEY_LINE2 = "LINE2"
|
2023-10-29 15:10:06 +01:00
|
|
|
KEY_LINE3 = "LINE3"
|
2024-07-05 14:34:13 +02:00
|
|
|
KEY_PHONO = "PHONO"
|
2023-10-29 15:10:06 +01:00
|
|
|
KEY_MUTE = "MUTE"
|
|
|
|
KEY_POWER = "POWER"
|
|
|
|
KEY_VOLDOWN = "VOLDOWN"
|
|
|
|
KEY_VOLUP = "VOLUP"
|
|
|
|
#
|
|
|
|
TX_TOPIC = ''
|
|
|
|
TX_TYPE = base.TX_VALUE
|
|
|
|
#
|
2024-07-05 14:34:13 +02:00
|
|
|
RX_IGNORE_TOPICS = [KEY_CD, KEY_LINE1, KEY_LINE2, KEY_LINE3, KEY_PHONO, KEY_MUTE, KEY_POWER, KEY_VOLUP, KEY_VOLDOWN]
|
2023-10-29 15:10:06 +01:00
|
|
|
|
2023-10-31 09:04:19 +01:00
|
|
|
def __state_logging__(self, inst, key, data):
|
|
|
|
pass # This is just a TX device using self.set_*
|
|
|
|
|
2023-10-29 15:10:06 +01:00
|
|
|
def set_cd(self, device=None, key=None, data=None):
|
2023-10-31 09:04:19 +01:00
|
|
|
self.logger.info("Changing amplifier source to CD")
|
2023-10-29 15:10:06 +01:00
|
|
|
self.send_command(self.KEY_CD, None)
|
|
|
|
|
|
|
|
def set_line1(self, device=None, key=None, data=None):
|
2023-10-31 09:04:19 +01:00
|
|
|
self.logger.info("Changing amplifier source to LINE1")
|
2023-10-29 15:10:06 +01:00
|
|
|
self.send_command(self.KEY_LINE1, None)
|
|
|
|
|
2024-07-05 14:34:13 +02:00
|
|
|
def set_line2(self, device=None, key=None, data=None):
|
|
|
|
self.logger.info("Changing amplifier source to LINE2")
|
|
|
|
self.send_command(self.KEY_LINE2, None)
|
|
|
|
|
2023-10-29 15:10:06 +01:00
|
|
|
def set_line3(self, device=None, key=None, data=None):
|
2023-10-31 09:04:19 +01:00
|
|
|
self.logger.info("Changing amplifier source to LINE3")
|
2023-10-29 15:10:06 +01:00
|
|
|
self.send_command(self.KEY_LINE3, None)
|
|
|
|
|
2024-07-05 14:34:13 +02:00
|
|
|
def set_phono(self, device=None, key=None, data=None):
|
|
|
|
self.logger.info("Changing amplifier source to PHONO")
|
|
|
|
self.send_command(self.KEY_PHONO, None)
|
|
|
|
|
2023-10-29 15:10:06 +01:00
|
|
|
def set_mute(self, device=None, key=None, data=None):
|
2023-10-31 09:04:19 +01:00
|
|
|
self.logger.info("Muting / Unmuting amplifier")
|
2023-10-29 15:10:06 +01:00
|
|
|
self.send_command(self.KEY_MUTE, None)
|
|
|
|
|
|
|
|
def set_power(self, device=None, key=None, data=None):
|
2023-10-31 09:04:19 +01:00
|
|
|
self.logger.info("Power on/off amplifier")
|
2023-10-29 15:10:06 +01:00
|
|
|
self.send_command(self.KEY_POWER, None)
|
|
|
|
|
|
|
|
def set_volume_up(self, data=False):
|
|
|
|
"""data: [True, False]"""
|
2023-10-31 09:04:19 +01:00
|
|
|
self.logger.info("Increasing amplifier volume")
|
2023-10-29 15:10:06 +01:00
|
|
|
self.send_command(self.KEY_VOLUP, data)
|
|
|
|
|
|
|
|
def set_volume_down(self, data=False):
|
|
|
|
"""data: [True, False]"""
|
2023-10-31 09:04:19 +01:00
|
|
|
self.logger.info("Decreasing amplifier volume")
|
2023-10-29 15:10:06 +01:00
|
|
|
self.send_command(self.KEY_VOLDOWN, data)
|
|
|
|
|
|
|
|
def default_inc(self, device=None, key=None, data=None):
|
|
|
|
self.set_volume_up(True)
|
|
|
|
|
|
|
|
def default_dec(self, device=None, key=None, data=None):
|
|
|
|
self.set_volume_down(True)
|
|
|
|
|
|
|
|
def default_stop(self, device=None, key=None, data=None):
|
|
|
|
self.set_volume_up(False)
|
|
|
|
|
|
|
|
|
|
|
|
class audio_status(base):
|
|
|
|
""" Communication (MQTT)
|
|
|
|
|
|
|
|
audio_status
|
|
|
|
+- state [True, False] <- status
|
|
|
|
+- title [text] <- status
|
|
|
|
"""
|
|
|
|
KEY_STATE = "state"
|
|
|
|
KEY_TITLE = "title"
|
|
|
|
#
|
|
|
|
TX_TYPE = base.TX_VALUE
|
|
|
|
#
|
|
|
|
RX_KEYS = [KEY_STATE, KEY_TITLE]
|
|
|
|
|
2023-10-31 09:04:19 +01:00
|
|
|
def __state_logging__(self, inst, key, data):
|
|
|
|
if key in [self.KEY_STATE, self.KEY_TITLE]:
|
|
|
|
self.logger.info("State change of '%s' to '%s'", key, repr(data))
|
|
|
|
|
2023-10-29 15:10:06 +01:00
|
|
|
def set_state(self, num, data):
|
|
|
|
"""data: [True, False]"""
|
|
|
|
self.send_command(self.KEY_STATE + "/" + str(num), data)
|
|
|
|
|
|
|
|
def set_state_mcb(self, device, key, data):
|
|
|
|
self.set_state(data)
|