diff --git a/.gitignore b/.gitignore index 702cd46..e36b312 100644 --- a/.gitignore +++ b/.gitignore @@ -174,3 +174,4 @@ prot.csv helpertils/serial.py helpertils/test.py helpertils/socker.py +helpertils/messagesFound.txt diff --git a/CustomLogger.py b/CustomLogger.py index b897c3a..4abedb3 100644 --- a/CustomLogger.py +++ b/CustomLogger.py @@ -30,29 +30,10 @@ class IndentFormatter(logging.Formatter): def __init__( self, fmt=None, datefmt=None ): - """ - Initializes the CustomLogger instance. - Args: - fmt (str, optional): The format string for the log messages. Defaults to None. - datefmt (str, optional): The format string for the date in log messages. Defaults to None. - Attributes: - baseline (int): The baseline stack depth when the logger is initialized. - """ logging.Formatter.__init__(self, fmt, datefmt) self.baseline = len(inspect.stack()) def format( self, rec ): - """ - Formats the log record by adding indentation and function name. - This method customizes the log record by adding an indentation level - based on the current stack depth and includes the name of the function - from which the log call was made. It then uses the base Formatter class - to format the record and returns the formatted string. - Args: - rec (logging.LogRecord): The log record to be formatted. - Returns: - str: The formatted log record string. - """ log_fmt = self.FORMATS.get(rec.levelno) formatter = logging.Formatter(log_fmt) @@ -76,11 +57,5 @@ logger.addHandler(handler) logger.setLevel(logging.INFO) def setDebugMode(): - """ - Set the logging level to DEBUG and log a message indicating that debug mode is enabled. - This function sets the logging level of the logger to DEBUG, which means that all messages - at the DEBUG level and above will be logged. It also logs a debug message to indicate that - debug mode has been activated. - """ logger.setLevel(logging.DEBUG) logger.debug("Debug mode is on...") diff --git a/EHSArguments.py b/EHSArguments.py index 95640f7..30689b4 100644 --- a/EHSArguments.py +++ b/EHSArguments.py @@ -24,34 +24,12 @@ class EHSArguments: _instance = None def __new__(cls, *args, **kwargs): - """ - Create and return a new instance of the class, ensuring that only one instance exists (singleton pattern). - This method overrides the default behavior of object creation to implement the singleton pattern. - It checks if an instance of the class already exists; if not, it creates a new instance and marks it as uninitialized. - Args: - *args: Variable length argument list. - **kwargs: Arbitrary keyword arguments. - Returns: - EHSArguments: The singleton instance of the EHSArguments class. - """ - if not cls._instance: cls._instance = super(EHSArguments, cls).__new__(cls, *args, **kwargs) cls._instance._initialized = False return cls._instance def __init__(self): - """ - Initializes the EHSArguments class, parses command-line arguments, and sets up configuration. - This method performs the following steps: - 1. Checks if the class has already been initialized to prevent re-initialization. - 2. Sets up an argument parser to handle command-line arguments. - 3. Parses the command-line arguments and validates them. - 4. Checks if the specified config file and dump file exist. - 5. Sets the class attributes based on the parsed arguments. - Raises: - ArgumentException: If the required arguments are not provided or if the specified files do not exist. - """ if self._initialized: return self._initialized = True diff --git a/EHSConfig.py b/EHSConfig.py index 5049e8d..2c5e3c6 100644 --- a/EHSConfig.py +++ b/EHSConfig.py @@ -11,15 +11,6 @@ class EHSConfig(): Singleton class to handle the configuration for the EHS Sentinel application. This class reads configuration parameters from a YAML file and validates them. It ensures that only one instance of the configuration exists throughout the application. - Attributes: - MQTT (dict): Configuration parameters for MQTT. - GENERAL (dict): General configuration parameters. - SERIAL (dict): Configuration parameters for serial communication. - NASA_REPO (dict): Configuration parameters for NASA repository. - Methods: - __new__(cls, *args, **kwargs): Ensures only one instance of the class is created. - __init__(self, *args, **kwargs): Initializes the configuration by reading and validating the YAML file. - validate(self): Validates the configuration parameters. """ _instance = None @@ -30,44 +21,15 @@ class EHSConfig(): NASA_REPO = None LOGGING = {} POLLING = None + NASA_VAL_STORE = {} def __new__(cls, *args, **kwargs): - """ - Create a new instance of the EHSConfig class if one does not already exist. - This method ensures that only one instance of the EHSConfig class is created - (singleton pattern). If an instance already exists, it returns the existing instance. - Args: - cls: The class being instantiated. - *args: Variable length argument list. - **kwargs: Arbitrary keyword arguments. - Returns: - EHSConfig: The single instance of the EHSConfig class. - """ - if not cls._instance: cls._instance = super(EHSConfig, cls).__new__(cls, *args, **kwargs) cls._instance._initialized = False return cls._instance def __init__(self, *args, **kwargs): - """ - Initialize the EHSConfig instance. - This method initializes the EHSConfig instance by loading configuration - settings from a YAML file specified in the EHSArguments. It ensures that - the initialization process is only performed once by checking the - _initialized attribute. If the instance is already initialized, the method - returns immediately. Otherwise, it proceeds to load the configuration and - validate it. - Args: - *args: Variable length argument list. - **kwargs: Arbitrary keyword arguments. - Attributes: - args (EHSArguments): An instance of EHSArguments containing the - configuration file path. - MQTT (dict): MQTT configuration settings loaded from the YAML file. - GENERAL (dict): General configuration settings loaded from the YAML file. - SERIAL (dict): Serial configuration settings loaded from the YAML file. - """ if self._initialized: return self._initialized = True @@ -101,16 +63,6 @@ class EHSConfig(): self.validate() def parse_time_string(self, time_str: str) -> int: - """ - Parses a time string like '10m' or '10s' and converts it to seconds. - - Supported formats: - - '10m' for 10 minutes - - '10s' for 10 seconds - - Returns: - - Equivalent time in seconds as an integer. - """ match = re.match(r'^(\d+)([smh])$', time_str.strip(), re.IGNORECASE) if not match: raise ValueError("Invalid time format. Use '10s', '10m', or '10h'.") @@ -126,15 +78,6 @@ class EHSConfig(): return value * conversion_factors[unit] def validate(self): - """ - Validates the configuration parameters for the EHS Sentinel application. - This method checks the presence and validity of various configuration parameters - such as NASA repository file, serial device, baudrate, MQTT broker URL, broker port, - and MQTT credentials. It raises a ConfigException if any required parameter is missing - or invalid. Additionally, it sets default values for optional parameters if they are not provided. - Raises: - ConfigException: If any required configuration parameter is missing or invalid. - """ if os.path.isfile(self.GENERAL['nasaRepositoryFile']): with open(self.GENERAL['nasaRepositoryFile'], mode='r') as file: self.NASA_REPO = yaml.safe_load(file) @@ -144,6 +87,9 @@ class EHSConfig(): if 'protocolFile' not in self.GENERAL: self.GENERAL['protocolFile'] = None + if 'allowControl' not in self.GENERAL: + self.GENERAL['allowControl'] = False + if self.SERIAL is None and self.TCP is None: raise ConfigException(argument="", message="define tcp or serial config parms") @@ -213,8 +159,8 @@ class EHSConfig(): if 'messageNotFound' not in self.LOGGING: self.LOGGING['messageNotFound'] = False - if 'messageNotFound' not in self.LOGGING: - self.LOGGING['messageNotFound'] = False + if 'invalidPacket' not in self.LOGGING: + self.LOGGING['invalidPacket'] = False if 'deviceAdded' not in self.LOGGING: self.LOGGING['deviceAdded'] = True @@ -228,6 +174,9 @@ class EHSConfig(): if 'pollerMessage' not in self.LOGGING: self.LOGGING['pollerMessage'] = False + if 'controlMessage' not in self.LOGGING: + self.LOGGING['controlMessage'] = False + logger.info(f"Logging Config:") for key, value in self.LOGGING.items(): logger.info(f" {key}: {value}") diff --git a/MQTTClient.py b/MQTTClient.py index e139a7a..2c2a2ca 100644 --- a/MQTTClient.py +++ b/MQTTClient.py @@ -10,6 +10,7 @@ import gmqtt from CustomLogger import logger from EHSArguments import EHSArguments from EHSConfig import EHSConfig +from MessageProducer import MessageProducer class MQTTClient: """ @@ -23,18 +24,6 @@ class MQTTClient: DEVICE_ID = "samsung_ehssentinel" def __new__(cls, *args, **kwargs): - """ - Create a new instance of the class if one does not already exist. - This method ensures that only one instance of the class is created (singleton pattern). - If an instance already exists, it returns the existing instance. - Otherwise, it creates a new instance, marks it as uninitialized, and returns it. - Args: - cls: The class being instantiated. - *args: Variable length argument list. - **kwargs: Arbitrary keyword arguments. - Returns: - An instance of the class. - """ if not cls._instance: cls._instance = super(MQTTClient, cls).__new__(cls) @@ -42,32 +31,12 @@ class MQTTClient: return cls._instance def __init__(self): - """ - Initializes the MQTTClient instance. - This constructor sets up the MQTT client with the necessary configuration - parameters, including broker URL, port, client ID, and authentication credentials. - It also assigns callback functions for various MQTT events such as connect, - disconnect, message, and subscribe. Additionally, it initializes topic-related - settings and a list to keep track of known topics. - Attributes: - config (EHSConfig): Configuration object for MQTT settings. - args (EHSArguments): Argument parser object. - broker (str): URL of the MQTT broker. - port (int): Port number of the MQTT broker. - client_id (str): Client ID for the MQTT connection. - client (gmqtt.Client): MQTT client instance. - topicPrefix (str): Prefix for MQTT topics. - homeAssistantAutoDiscoverTopic (str): Topic for Home Assistant auto-discovery. - useCamelCaseTopicNames (bool): Flag to use camel case for topic names. - initialized (bool): Flag indicating if the client has been initialized. - known_topics (list): List to keep track of known topics. - known_devices_topic (str): Topic for storing known devices. - """ if self._initialized: return self.config = EHSConfig() self.args = EHSArguments() + self.message_producer = None self._initialized = True self.broker = self.config.MQTT['broker-url'] self.port = self.config.MQTT['broker-port'] @@ -88,17 +57,6 @@ class MQTTClient: self.known_devices_topic = "known/devices" # Dedicated topic for storing known topics async def connect(self): - """ - Asynchronously connects to the MQTT broker and optionally clears the known devices topic. - This function logs the connection attempt, connects to the MQTT broker using the specified - broker address and port, and sets the keepalive interval. If the CLEAN_KNOWN_DEVICES argument - is set, it publishes an empty message to the known devices topic to clear it. - Args: - None - Returns: - None - """ - logger.info("[MQTT] Connecting to broker...") await self.client.connect(self.broker, self.port, keepalive=60, version=gmqtt.constants.MQTTv311) @@ -106,53 +64,21 @@ class MQTTClient: self._publish(f"{self.topicPrefix.replace('/', '')}/{self.known_devices_topic}", " ", retain=True) logger.info("Known Devices Topic have been cleared") - def subscribe_known_topics(self): - """ - Subscribe to predefined MQTT topics. - This method subscribes the MQTT client to a set of known topics, which include: - - A topic for known devices, constructed using the topic prefix and known devices topic. - - A status topic for Home Assistant auto-discovery. - The subscription is done with a QoS level of 1 for both topics. - Logging: - - Logs an info message indicating the subscription to known devices topic. - """ - + def subscribe_known_topics(self): logger.info("Subscribe to known devices topic") - self.client.subscribe( - [ + sublist = [ gmqtt.Subscription(f"{self.topicPrefix.replace('/', '')}/{self.known_devices_topic}", 1), gmqtt.Subscription(f"{self.homeAssistantAutoDiscoverTopic}/status", 1) ] - ) + if self.config.GENERAL['allowControl']: + sublist.append(gmqtt.Subscription(f"{self.topicPrefix.replace('/', '')}/entity/+/set", 1)) + + self.client.subscribe(sublist) def on_subscribe(self, client, mid, qos, properties): - """ - Callback function that is called when the client subscribes to a topic. - Args: - client (paho.mqtt.client.Client): The client instance for this callback. - mid (int): The message ID for the subscribe request. - qos (int): The Quality of Service level for the subscription. - properties (paho.mqtt.properties.Properties): The properties associated with the subscription. - Returns: - None - """ - logger.debug('SUBSCRIBED') - def on_message(self, client, topic, payload, qos, properties): - """ - Callback function that is triggered when a message is received on a subscribed topic. - Args: - client (paho.mqtt.client.Client): The MQTT client instance. - topic (str): The topic that the message was received on. - payload (bytes): The message payload. - qos (int): The quality of service level of the message. - properties (paho.mqtt.properties.Properties): The properties associated with the message. - This function performs the following actions: - - If the topic matches the known devices topic, it updates the known topics list with the retained message. - - If the topic matches the Home Assistant auto-discover status topic, it logs the status message and, if the payload indicates that Home Assistant is online, it clears the known devices topic. - """ - + def on_message(self, client, topic, payload, qos, properties): if self.known_devices_topic in topic: # Update the known devices set with the retained message self.known_topics = list(filter(None, [x.strip() for x in payload.decode().split(",")])) @@ -174,19 +100,15 @@ class MQTTClient: logger.info("Known Devices Topic have been cleared") self.clear_hass() logger.info("All configuration from HASS has been resetet") + + if topic.startswith(f"{self.topicPrefix.replace('/', '')}/entity"): + logger.info(f"HASS Set Entity Messages {topic} received: {payload.decode()}") + parts = topic.split("/") + if self.message_producer is None: + self.message_producer = MessageProducer(None) + asyncio.create_task(self.message_producer.write_request(parts[2], payload.decode(), read_request_after=True)) def on_connect(self, client, flags, rc, properties): - """ - Callback function for when the client receives a CONNACK response from the server. - Parameters: - client (paho.mqtt.client.Client): The client instance for this callback. - flags (dict): Response flags sent by the broker. - rc (int): The connection result. - properties (paho.mqtt.properties.Properties): The properties associated with the connection. - If the connection is successful (rc == 0), logs a success message and subscribes to known topics if any. - Otherwise, logs an error message with the return code. - """ - if rc == 0: logger.info(f"Connected to MQTT with result code {rc}") if len(self.homeAssistantAutoDiscoverTopic) > 0: @@ -194,18 +116,7 @@ class MQTTClient: else: logger.error(f"Failed to connect, return code {rc}") - def on_disconnect(self, client, packet, exc=None): - """ - Callback function that is called when the client disconnects from the MQTT broker. - This function logs the disconnection event and attempts to reconnect the client - in case of an unexpected disconnection. It will keep trying to reconnect every - 5 seconds until successful. - Args: - client (paho.mqtt.client.Client): The MQTT client instance that disconnected. - packet (paho.mqtt.packet.Packet): The disconnect packet. - exc (Exception, optional): The exception that caused the disconnection, if any. - """ - + def on_disconnect(self, client, packet, exc=None): logger.info(f"Disconnected with result code ") logger.warning("Unexpected disconnection. Reconnecting...") while True: @@ -216,31 +127,12 @@ class MQTTClient: logger.error(f"Reconnection failed: {e}") time.sleep(5) - def _publish(self, topic, payload, qos=0, retain=False): - """ - Publishes a message to a specified MQTT topic. - Args: - topic (str): The MQTT topic to publish to. - payload (str): The message payload to publish. - qos (int, optional): The Quality of Service level for the message. Defaults to 0. - retain (bool, optional): If True, the message will be retained by the broker. Defaults to False. - Returns: - None - """ - + def _publish(self, topic, payload, qos=0, retain=False): logger.debug(f"MQTT Publish Topic: {topic} payload: {payload}") self.client.publish(f"{topic}", payload, qos, retain) #time.sleep(0.1) def refresh_known_devices(self, devname): - """ - Refreshes the list of known devices by publishing the current known topics to the MQTT broker. - Args: - devname (str): The name of the device to refresh. - This function constructs a topic string by replacing '/' with an empty string in the topicPrefix, - then concatenates it with the known_devices_topic. It publishes the known topics as a comma-separated - string to this constructed topic with the retain flag set to True. - """ self.known_topics.append(devname) if self.config.LOGGING['deviceAdded']: logger.info(f"Device added no. {len(self.known_topics):<3}: {devname} ") @@ -248,20 +140,7 @@ class MQTTClient: logger.debug(f"Device added no. {len(self.known_topics):<3}: {devname} ") self._publish(f"{self.topicPrefix.replace('/', '')}/{self.known_devices_topic}", ",".join(self.known_topics), retain=True) - def publish_message(self, name, value): - """ - Publishes a message to an MQTT topic. - This function normalizes the given name, determines the appropriate MQTT topic, - and publishes the provided value to that topic. It also handles Home Assistant - auto-discovery if configured. - Args: - name (str): The name of the sensor or device. - value (int, float, bool, str): The value to be published. If the value is a float, - it will be rounded to two decimal places. - Raises: - ValueError: If the value type is not supported for publishing. - """ - + async def publish_message(self, name, value): newname = f"{self._normalize_name(name)}" if len(self.homeAssistantAutoDiscoverTopic) > 0: @@ -270,13 +149,10 @@ class MQTTClient: self.auto_discover_hass(name) self.refresh_known_devices(name) - time.sleep(1) - - sensor_type = "sensor" - if 'enum' in self.config.NASA_REPO[name]: - enum = [*self.config.NASA_REPO[name]['enum'].values()] - if all([en.lower() in ['on', 'off'] for en in enum]): - sensor_type = "binary_sensor" + if self.config.NASA_REPO[name]['hass_opts']['writable']: + sensor_type = self.config.NASA_REPO[name]['hass_opts']['platform']['type'] + else: + sensor_type = self.config.NASA_REPO[name]['hass_opts']['default_platform'] topicname = f"{self.config.MQTT['homeAssistantAutoDiscoverTopic']}/{sensor_type}/{self.DEVICE_ID}_{newname.lower()}/state" else: topicname = f"{self.topicPrefix.replace('/', '')}/{newname}" @@ -287,13 +163,13 @@ class MQTTClient: self._publish(topicname, value, qos=2, retain=False) def clear_hass(self): - """ - clears all entities/components fpr the HomeAssistant Device - """ entities = {} for nasa in self.config.NASA_REPO: namenorm = self._normalize_name(nasa) - sensor_type = self._get_sensor_type(nasa) + if self.config.NASA_REPO[nasa]['hass_opts']['writable']: + sensor_type = self.config.NASA_REPO[nasa]['hass_opts']['platform']['type'] + else: + sensor_type = self.config.NASA_REPO[nasa]['hass_opts']['default_platform'] entities[namenorm] = {"platform": sensor_type} device = { @@ -312,69 +188,47 @@ class MQTTClient: retain=True) def auto_discover_hass(self, name): - """ - Automatically discovers and configures Home Assistant entities based on the NASA_REPO configuration. - This function iterates through the NASA_REPO configuration to create and configure entities for Home Assistant. - It determines the type of sensor (binary_sensor or sensor) based on the configuration and sets various attributes - such as unit of measurement, device class, state class, and payloads for binary sensors. It then constructs a device - configuration payload and publishes it to the Home Assistant MQTT discovery topic. - The function performs the following steps: - 1. Iterates through the NASA_REPO configuration. - 2. Normalizes the name of each NASA_REPO entry. - 3. Determines the sensor type (binary_sensor or sensor) based on the 'enum' values. - 4. Configures the entity attributes such as unit of measurement, device class, state class, and payloads. - 5. Constructs a device configuration payload. - 6. Publishes the device configuration to the Home Assistant MQTT discovery topic. - Attributes: - entities (dict): A dictionary to store the configured entities. - device (dict): A dictionary to store the device configuration payload. - Logs: - Logs the constructed device configuration payload for debugging purposes. - Publishes: - Publishes the device configuration payload to the Home Assistant MQTT discovery topic with QoS 2 and retain flag set to True. - """ entity = {} namenorm = self._normalize_name(name) - sensor_type = self._get_sensor_type(name) entity = { - "name": f"{namenorm}","" + "name": f"{namenorm}", "object_id": f"{self.DEVICE_ID}_{namenorm.lower()}", "unique_id": f"{self.DEVICE_ID}_{name.lower()}", - "platform": sensor_type, + "force_update": True, #"expire_after": 86400, # 1 day (24h * 60m * 60s) - "value_template": "{{ value }}", + "value_template": "{{ value }}" #"value_template": "{{ value if value | length > 0 else 'unavailable' }}", - "state_topic": f"{self.config.MQTT['homeAssistantAutoDiscoverTopic']}/{sensor_type}/{self.DEVICE_ID}_{namenorm.lower()}/state", } - - if sensor_type == "sensor": - if len(self.config.NASA_REPO[name]['unit']) > 0: - entity['unit_of_measurement'] = self.config.NASA_REPO[name]['unit'] - if entity['unit_of_measurement'] == "\u00b0C": - entity['device_class'] = "temperature" - elif entity['unit_of_measurement'] == '%': - entity['state_class'] = "measurement" - elif entity['unit_of_measurement'] == 'kW': - entity['device_class'] = "power" - elif entity['unit_of_measurement'] == 'rpm': - entity['state_class'] = "measurement" - elif entity['unit_of_measurement'] == 'bar': - entity['device_class'] = "pressure" - elif entity['unit_of_measurement'] == 'HP': - entity['device_class'] = "power" - elif entity['unit_of_measurement'] == 'hz': - entity['device_class'] = "frequency" - else: - entity['device_class'] = None + if self.config.NASA_REPO[name]['hass_opts']['writable'] and self.config.GENERAL['allowControl']: + sensor_type = self.config.NASA_REPO[name]['hass_opts']['platform']['type'] + if sensor_type == 'select': + entity['options'] = self.config.NASA_REPO[name]['hass_opts']['platform']['options'] + if sensor_type == 'number': + entity['mode'] = self.config.NASA_REPO[name]['hass_opts']['platform']['mode'] + entity['min'] = self.config.NASA_REPO[name]['hass_opts']['platform']['min'] + entity['max'] = self.config.NASA_REPO[name]['hass_opts']['platform']['max'] + if 'step' in self.config.NASA_REPO[name]['hass_opts']['platform']: + entity['step'] = self.config.NASA_REPO[name]['hass_opts']['platform']['step'] + + entity['command_topic'] = f"{self.topicPrefix.replace('/', '')}/entity/{name}/set" + entity['optimistic'] = False else: - entity['payload_on'] = "ON" - entity['payload_off'] = "OFF" + sensor_type = self.config.NASA_REPO[name]['hass_opts']['default_platform'] - if 'state_class' in self.config.NASA_REPO[name]: - entity['state_class'] = self.config.NASA_REPO[name]['state_class'] - - if 'device_class' in self.config.NASA_REPO[name]: - entity['device_class'] = self.config.NASA_REPO[name]['device_class'] + if 'unit' in self.config.NASA_REPO[name]['hass_opts']: + entity['unit_of_measurement'] = self.config.NASA_REPO[name]['hass_opts']['unit'] + + entity['platform'] = sensor_type + entity['state_topic'] = f"{self.config.MQTT['homeAssistantAutoDiscoverTopic']}/{sensor_type}/{self.DEVICE_ID}_{namenorm.lower()}/state" + + if 'payload_off' in self.config.NASA_REPO[name]['hass_opts']['platform']: + entity['payload_off'] = "OFF" + if 'payload_on' in self.config.NASA_REPO[name]['hass_opts']['platform']: + entity['payload_on'] = "ON" + if 'state_class' in self.config.NASA_REPO[name]['hass_opts']: + entity['state_class'] = self.config.NASA_REPO[name]['hass_opts']['state_class'] + if 'device_class' in self.config.NASA_REPO[name]['hass_opts']: + entity['device_class'] = self.config.NASA_REPO[name]['hass_opts']['device_class'] device = { "device": self._get_device(), @@ -407,18 +261,6 @@ class MQTTClient: } def _normalize_name(self, name): - """ - Normalize the given name based on the specified naming convention. - If `useCamelCaseTopicNames` is True, the function will: - - Remove any of the following prefixes from the name: 'ENUM_', 'LVAR_', 'NASA_', 'VAR_'. - - Convert the name to CamelCase format. - If `useCamelCaseTopicNames` is False, the function will return the name as is. - Args: - name (str): The name to be normalized. - Returns: - str: The normalized name. - """ - if self.useCamelCaseTopicNames: prefix_to_remove = ['ENUM_', 'LVAR_', 'NASA_', 'VAR_'] # remove unnecessary prefixes of name @@ -436,19 +278,3 @@ class MQTTClient: tmpname = name return tmpname - - def _get_sensor_type(self, name): - """ - return the sensor type of given measurement - Args: - name (str): The name of the measurement. - Returns: - str: The sensor type: sensor or binary_sensor. - """ - sensor_type = "sensor" - if 'enum' in self.config.NASA_REPO[name]: - enum = [*self.config.NASA_REPO[name]['enum'].values()] - if all([en.lower() in ['on', 'off'] for en in enum]): - sensor_type = "binary_sensor" - - return sensor_type diff --git a/MessageProcessor.py b/MessageProcessor.py index 0583cf0..4f8a8d3 100644 --- a/MessageProcessor.py +++ b/MessageProcessor.py @@ -14,70 +14,27 @@ from NASAPacket import NASAPacket class MessageProcessor: """ The MessageProcessor class is responsible for handling and processing incoming messages for the EHS-Sentinel system. - It follows the singleton pattern to ensure only one instance is created. The class provides methods to process - messages, extract submessages, search for message definitions in a configuration repository, and determine the - value of message payloads based on predefined rules. It also includes logging for debugging and tracing the + The class provides methods to process messages, extract submessages, search for message definitions in a configuration repository, + and determine the value of message payloads based on predefined rules. It also includes logging for debugging and tracing the message processing steps. """ - _instance = None - tmpdict = {} - - def __new__(cls, *args, **kwargs): - """ - Create a new instance of the class if one does not already exist. - This method ensures that only one instance of the class is created (singleton pattern). - If an instance already exists, it returns the existing instance. - Args: - cls (type): The class being instantiated. - *args: Variable length argument list. - **kwargs: Arbitrary keyword arguments. - Returns: - MessageProcessor: The single instance of the MessageProcessor class. - """ - if not cls._instance: - cls._instance = super(MessageProcessor, cls).__new__(cls, *args, **kwargs) - cls._instance._initialized = False - return cls._instance - def __init__(self): - """ - Initializes the MessageProcessor instance. - This constructor checks if the instance has already been initialized to prevent reinitialization. - If not initialized, it sets the _initialized flag to True, logs the initialization process, - and initializes the configuration and argument handling components. - Attributes: - _initialized (bool): A flag indicating whether the instance has been initialized. - config (EHSConfig): An instance of the EHSConfig class for configuration management. - args (EHSArguments): An instance of the EHSArguments class for argument handling. - """ - if self._initialized: - return self._initialized = True self.config = EHSConfig() self.args = EHSArguments() self.mqtt = MQTTClient() - self.NASA_VAL_STORE = {} - def process_message(self, packet: NASAPacket): - """ - Processes an incoming packet . - Args: - message (list): A list of integers representing the message bytes. - Raises: - MessageWarningException: If the message is invalid due to missing end byte, incorrect length, or other processing errors. - Logs: - Various debug and info logs to trace the processing steps, including packet size, raw and hex message content, source address, capacity, and extracted message details. - """ + async def process_message(self, packet: NASAPacket): for msg in packet.packet_messages: - hexmsg = hex(msg.packet_message) + hexmsg = f"0x{msg.packet_message:04x}" #hex(msg.packet_message) msgname = self.search_nasa_table(hexmsg) if msgname is not None: try: - msgvalue = self.determine_value(msg.packet_payload, msgname) + msgvalue = self.determine_value(msg.packet_payload, msgname, msg.packet_message_type) except Exception as e: raise MessageWarningException(argument=f"{msg.packet_payload}/{[hex(x) for x in msg.packet_payload]}", message=f"Value of {hexmsg} couldn't be determinate, skip Message {e}") - self.protocolMessage(msg, msgname, msgvalue) + await self.protocolMessage(msg, msgname, msgvalue) else: packedval = int.from_bytes(msg.packet_payload, byteorder='big', signed=True) if self.config.LOGGING['messageNotFound']: @@ -85,25 +42,10 @@ class MessageProcessor: else: logger.debug(f"Message not Found in NASA repository: {hexmsg:<6} Type: {msg.packet_message_type} Payload: {msg.packet_payload} = {packedval}") - def protocolMessage(self, msg: NASAMessage, msgname, msgvalue): - """ - Processes a protocol message by logging, writing to a protocol file, publishing via MQTT, - and updating internal value store. Additionally, it calculates and processes specific - derived values based on certain message names. - Args: - msg (NASAMessage): The NASA message object containing packet information. - msgname (str): The name of the message. - msgvalue (Any): The value of the message. - Side Effects: - - Logs the message details. - - Appends the message details to a protocol file if configured. - - Publishes the message via MQTT. - - Updates the internal NASA value store with the message value. - - Calculates and processes derived values for specific message names. - """ + async def protocolMessage(self, msg: NASAMessage, msgname, msgvalue): if self.config.LOGGING['proccessedMessage']: - logger.info(f"Message number: {hex(msg.packet_message):<6} {msgname:<50} Type: {msg.packet_message_type} Payload: {msgvalue}") + logger.info(f"Message number: {hex(msg.packet_message):<6} {msgname:<50} Type: {msg.packet_message_type} Payload: {msgvalue} ({msg.packet_payload})") else: logger.debug(f"Message number: {hex(msg.packet_message):<6} {msgname:<50} Type: {msg.packet_message_type} Payload: {msgvalue}") @@ -111,87 +53,94 @@ class MessageProcessor: with open(self.config.GENERAL['protocolFile'], "a") as protWriter: protWriter.write(f"{hex(msg.packet_message):<6},{msg.packet_message_type},{msgname:<50},{msgvalue}\n") - self.mqtt.publish_message(msgname, msgvalue) + await self.mqtt.publish_message(msgname, msgvalue) - self.NASA_VAL_STORE[msgname] = msgvalue + self.config.NASA_VAL_STORE[msgname] = msgvalue if msgname in ['NASA_OUTDOOR_TW2_TEMP', 'NASA_OUTDOOR_TW1_TEMP', 'VAR_IN_FLOW_SENSOR_CALC']: - if all(k in self.NASA_VAL_STORE for k in ['NASA_OUTDOOR_TW2_TEMP', 'NASA_OUTDOOR_TW1_TEMP', 'VAR_IN_FLOW_SENSOR_CALC']): + if all(k in self.config.NASA_VAL_STORE for k in ['NASA_OUTDOOR_TW2_TEMP', 'NASA_OUTDOOR_TW1_TEMP', 'VAR_IN_FLOW_SENSOR_CALC']): value = round( abs( - (self.NASA_VAL_STORE['NASA_OUTDOOR_TW2_TEMP'] - self.NASA_VAL_STORE['NASA_OUTDOOR_TW1_TEMP']) * - (self.NASA_VAL_STORE['VAR_IN_FLOW_SENSOR_CALC']/60) + (self.config.NASA_VAL_STORE['NASA_OUTDOOR_TW2_TEMP'] - self.config.NASA_VAL_STORE['NASA_OUTDOOR_TW1_TEMP']) * + (self.config.NASA_VAL_STORE['VAR_IN_FLOW_SENSOR_CALC']/60) * 4190 ) , 4 ) if (value < 15000 and value > 0): # only if heater output between 0 und 15000 W - self.protocolMessage(NASAMessage(packet_message=0x9999, packet_message_type=1), + await self.protocolMessage(NASAMessage(packet_message=0x9999, packet_message_type=1, packet_payload=[0]), "NASA_EHSSENTINEL_HEAT_OUTPUT", value ) if msgname in ('NASA_EHSSENTINEL_HEAT_OUTPUT', 'NASA_OUTDOOR_CONTROL_WATTMETER_ALL_UNIT'): - if all(k in self.NASA_VAL_STORE for k in ['NASA_EHSSENTINEL_HEAT_OUTPUT', 'NASA_OUTDOOR_CONTROL_WATTMETER_ALL_UNIT']): - if (self.NASA_VAL_STORE['NASA_OUTDOOR_CONTROL_WATTMETER_ALL_UNIT'] > 0): - value = round((self.NASA_VAL_STORE['NASA_EHSSENTINEL_HEAT_OUTPUT'] / self.NASA_VAL_STORE['NASA_OUTDOOR_CONTROL_WATTMETER_ALL_UNIT']/1000.), 3) + if all(k in self.config.NASA_VAL_STORE for k in ['NASA_EHSSENTINEL_HEAT_OUTPUT', 'NASA_OUTDOOR_CONTROL_WATTMETER_ALL_UNIT']): + if (self.config.NASA_VAL_STORE['NASA_OUTDOOR_CONTROL_WATTMETER_ALL_UNIT'] > 0): + value = round((self.config.NASA_VAL_STORE['NASA_EHSSENTINEL_HEAT_OUTPUT'] / self.config.NASA_VAL_STORE['NASA_OUTDOOR_CONTROL_WATTMETER_ALL_UNIT']/1000.), 3) if (value < 20 and value > 0): - self.protocolMessage(NASAMessage(packet_message=0x9998, packet_message_type=1), + await self.protocolMessage(NASAMessage(packet_message=0x9998, packet_message_type=1, packet_payload=[0]), "NASA_EHSSENTINEL_COP", value ) if msgname in ('NASA_OUTDOOR_CONTROL_WATTMETER_ALL_UNIT_ACCUM', 'LVAR_IN_TOTAL_GENERATED_POWER'): - if all(k in self.NASA_VAL_STORE for k in ['NASA_OUTDOOR_CONTROL_WATTMETER_ALL_UNIT_ACCUM', 'LVAR_IN_TOTAL_GENERATED_POWER']): - if (self.NASA_VAL_STORE['NASA_OUTDOOR_CONTROL_WATTMETER_ALL_UNIT_ACCUM'] > 0): - value = round(self.NASA_VAL_STORE['LVAR_IN_TOTAL_GENERATED_POWER'] / self.NASA_VAL_STORE['NASA_OUTDOOR_CONTROL_WATTMETER_ALL_UNIT_ACCUM'], 3) + if all(k in self.config.NASA_VAL_STORE for k in ['NASA_OUTDOOR_CONTROL_WATTMETER_ALL_UNIT_ACCUM', 'LVAR_IN_TOTAL_GENERATED_POWER']): + if (self.config.NASA_VAL_STORE['NASA_OUTDOOR_CONTROL_WATTMETER_ALL_UNIT_ACCUM'] > 0): + value = round(self.config.NASA_VAL_STORE['LVAR_IN_TOTAL_GENERATED_POWER'] / self.config.NASA_VAL_STORE['NASA_OUTDOOR_CONTROL_WATTMETER_ALL_UNIT_ACCUM'], 3) if (value < 20 and value > 0): - self.protocolMessage(NASAMessage(packet_message=0x9997, packet_message_type=1), + await self.protocolMessage(NASAMessage(packet_message=0x9997, packet_message_type=1, packet_payload=[0]), "NASA_EHSSENTINEL_TOTAL_COP", value ) def search_nasa_table(self, address): - """ - Searches for a specific address in the NASA_REPO configuration and returns the corresponding key. - Args: - address (str): The address to search for in the NASA_REPO. - Returns: - str: The key associated with the given address if found, otherwise None. - """ for key, value in self.config.NASA_REPO.items(): if value['address'].lower() == address: return key - - def determine_value(self, rawvalue, msgname): - """ - Determines the processed value from a raw byte input based on the message name configuration. - Args: - rawvalue (bytes): The raw byte value to be processed. - msgname (str): The name of the message which determines the processing rules. - Returns: - float or str: The processed value, which could be a numerical value or an enumerated string. - Raises: - Warning: Logs a warning if the arithmetic function cannot be applied and uses the raw value instead. - """ - arithmetic = self.config.NASA_REPO[msgname]['arithmetic'].replace("value", 'packed_value') + + def is_valid_rawvalue(self, rawvalue: bytes) -> bool: + return all(0x20 <= b <= 0x7E or b in (0x00, 0xFF) for b in rawvalue) - packed_value = int.from_bytes(rawvalue, byteorder='big', signed=True) + def determine_value(self, rawvalue, msgname, packet_message_type): + if packet_message_type == 3: + value = "" - if len(arithmetic) > 0: - try: - value = eval(arithmetic) - except Exception as e: - logger.warning(f"Arithmetic Function couldn't been applied for Message {msgname}, using raw value: arithmetic = {arithmetic} {e}") - value = packed_value - else: - value = packed_value - - if self.config.NASA_REPO[msgname]['type'] == 'ENUM': - if 'enum' in self.config.NASA_REPO[msgname]: - value = self.config.NASA_REPO[msgname]['enum'][int.from_bytes(rawvalue, byteorder='big')].upper() + if self.is_valid_rawvalue(rawvalue[1:-1]): + for byte in rawvalue[1:-1]: + if byte != 0x00 and byte != 0xFF: + char = chr(byte) if 32 <= byte <= 126 else f"{byte}" + value += char + else: + value += " " + value = value.strip() else: - value = f"Unknown enum value: {value}" + value = "".join([f"{int(x)}" for x in rawvalue]) + + #logger.info(f"{msgname} Structure: {rawvalue} type of {value}") else: + if 'arithmetic' in self.config.NASA_REPO[msgname]: + arithmetic = self.config.NASA_REPO[msgname]['arithmetic'].replace("value", 'packed_value') + else: + arithmetic = '' + + packed_value = int.from_bytes(rawvalue, byteorder='big', signed=True) + + if len(arithmetic) > 0: + try: + value = eval(arithmetic) + except Exception as e: + logger.warning(f"Arithmetic Function couldn't been applied for Message {msgname}, using raw value: arithmetic = {arithmetic} {e} {packed_value} {rawvalue}") + value = packed_value + else: + value = packed_value + value = round(value, 3) + + if 'type' in self.config.NASA_REPO[msgname]: + if self.config.NASA_REPO[msgname]['type'] == 'ENUM': + if 'enum' in self.config.NASA_REPO[msgname]: + value = self.config.NASA_REPO[msgname]['enum'][int.from_bytes(rawvalue, byteorder='big')] + else: + value = f"Unknown enum value: {value}" + return value diff --git a/MessageProducer.py b/MessageProducer.py new file mode 100644 index 0000000..2f25dc9 --- /dev/null +++ b/MessageProducer.py @@ -0,0 +1,152 @@ +from CustomLogger import logger +from EHSArguments import EHSArguments +from EHSConfig import EHSConfig +from EHSExceptions import MessageWarningException +import asyncio + +from NASAMessage import NASAMessage +from NASAPacket import NASAPacket, AddressClassEnum, PacketType, DataType + +class MessageProducer: + """ + The MessageProducer class is responsible for sending messages to the EHS-Sentinel system. + It follows the singleton pattern to ensure only one instance is created. The class provides methods to request and write + messages and transforme the value of message payloads based on predefined rules. It also includes logging for debugging and tracing the + message producing steps. + """ + + _instance = None + _CHUNKSIZE = 10 # message requests list will be split into this chunks, experience have shown that more then 10 are too much for an packet + writer = None + + def __new__(cls, *args, **kwargs): + if not cls._instance: + cls._instance = super(MessageProducer, cls).__new__(cls) + cls._instance._initialized = False + return cls._instance + + def __init__(self, writer: asyncio.StreamWriter): + if self._initialized: + return + self._initialized = True + self.writer = writer + self.config = EHSConfig() + + async def read_request(self, list_of_messages: list): + chunks = [list_of_messages[i:i + self._CHUNKSIZE] for i in range(0, len(list_of_messages), self._CHUNKSIZE)] + for chunk in chunks: + await asyncio.sleep(0.5) + nasa_packet = self._build_default_read_packet() + nasa_packet.set_packet_messages([self._build_message(x) for x in chunk]) + await self._write_packet_to_serial(nasa_packet) + + if self.config.LOGGING['pollerMessage']: + logger.info(f"Polling following NASAPacket: {nasa_packet}") + else: + logger.debug(f"Sent data NASAPacket: {nasa_packet}") + + async def write_request(self, message: str, value: str | int, read_request_after=False): + nasa_packet = self._build_default_request_packet() + nasa_packet.set_packet_messages([self._build_message(message.strip(), self._decode_value(message.strip(), value.strip()))]) + nasa_packet.to_raw() + if self.config.LOGGING['controlMessage']: + logger.info(f"Write request for {message} with value: {value}") + logger.info(f"Sending NASA packet: {nasa_packet}") + else: + logger.debug(f"Write request for {message} with value: {value}") + logger.debug(f"Sending NASA packet: {nasa_packet}") + await self._write_packet_to_serial(nasa_packet) + await asyncio.sleep(1) + await self.read_request([message]) + + def _search_nasa_enumkey_for_value(self, message, value): + if 'type' in self.config.NASA_REPO[message] and self.config.NASA_REPO[message]['type'] == 'ENUM': + for key, val in self.config.NASA_REPO[message]['enum'].items(): + if val == value: + return key + + return None + + def is_number(self, s): + return s.replace('+','',1).replace('-','',1).replace('.','',1).isdigit() + + def _decode_value(self, message, value) -> int: + enumval = self._search_nasa_enumkey_for_value(message, value) + if enumval is None: + if self.is_number(value): + try: + value = int(value) + except ValueError as e: + value = float(value) + + if 'reverse-arithmetic' in self.config.NASA_REPO[message]: + arithmetic = self.config.NASA_REPO[message]['reverse-arithmetic'] + else: + arithmetic = '' + if len(arithmetic) > 0: + try: + return int(eval(arithmetic)) + except Exception as e: + logger.warning(f"Arithmetic Function couldn't been applied for Message {message}, using raw value: reverse-arithmetic = {arithmetic} {e} {value}") + return value + else: + value = int(enumval) + + return value + + def _build_message(self, message, value=None) -> NASAMessage: + tmpmsg = NASAMessage() + tmpmsg.set_packet_message(self._extract_address(message)) + if value is None: + value = 0 + if tmpmsg.packet_message_type == 0: + value_raw = value.to_bytes(1, byteorder='big', signed=True) + elif tmpmsg.packet_message_type == 1: + value_raw = value.to_bytes(2, byteorder='big', signed=True) + elif tmpmsg.packet_message_type == 2: + value_raw = value.to_bytes(4, byteorder='big', signed=True) + else: + raise MessageWarningException(argument=tmpmsg.packet_message_type, message=f"Unknown Type for {message} type:") + tmpmsg.set_packet_payload_raw(value_raw) + return tmpmsg + + def _extract_address(self, messagename) -> int: + return int(self.config.NASA_REPO[messagename]['address'], 16) + + def _build_default_read_packet(self) -> NASAPacket: + nasa_msg = NASAPacket() + nasa_msg.set_packet_source_address_class(AddressClassEnum.JIGTester) + nasa_msg.set_packet_source_channel(255) + nasa_msg.set_packet_source_address(0) + nasa_msg.set_packet_dest_address_class(AddressClassEnum.BroadcastSetLayer) + nasa_msg.set_packet_dest_channel(0) + nasa_msg.set_packet_dest_address(32) + nasa_msg.set_packet_information(True) + nasa_msg.set_packet_version(2) + nasa_msg.set_packet_retry_count(0) + nasa_msg.set_packet_type(PacketType.Normal) + nasa_msg.set_packet_data_type(DataType.Read) + nasa_msg.set_packet_number(166) + return nasa_msg + + def _build_default_request_packet(self) -> NASAPacket: + nasa_msg = NASAPacket() + nasa_msg.set_packet_source_address_class(AddressClassEnum.JIGTester) + nasa_msg.set_packet_source_channel(0) + nasa_msg.set_packet_source_address(255) + nasa_msg.set_packet_dest_address_class(AddressClassEnum.Indoor) + nasa_msg.set_packet_dest_channel(0) + nasa_msg.set_packet_dest_address(0) + nasa_msg.set_packet_information(True) + nasa_msg.set_packet_version(2) + nasa_msg.set_packet_retry_count(0) + nasa_msg.set_packet_type(PacketType.Normal) + nasa_msg.set_packet_data_type(DataType.Request) + nasa_msg.set_packet_number(166) + return nasa_msg + + async def _write_packet_to_serial(self, packet: NASAPacket): + final_packet = packet.to_raw() + self.writer.write(final_packet) + await self.writer.drain() + \ No newline at end of file diff --git a/NASAMessage.py b/NASAMessage.py index f2781fc..7b24544 100644 --- a/NASAMessage.py +++ b/NASAMessage.py @@ -2,48 +2,8 @@ class NASAMessage: """ A class to represent a NASA message. - Attributes - ---------- - packet_message : int - The message packet identifier. - packet_message_type : int - The type of the message packet. - packet_payload : bytes - The payload of the message packet in bytes. - Methods - ------- - __str__(): - Returns a string representation of the NASAMessage instance. - __repr__(): - Returns a string representation of the NASAMessage instance. """ - def __init__(self, packet_message=0x000, packet_message_type=0, packet_payload=[0]): - """ - Constructs all the necessary attributes for the NASAMessage object. - Parameters - ---------- - packet_message : int, optional - The message packet identifier (default is 0x000). - packet_message_type : int, optional - The type of the message packet (default is 0). - packet_payload : list, optional - The payload of the message packet as a list of integers (default is [0]). - """ - """ - Returns a string representation of the NASAMessage instance. - Returns - ------- - str - A string representation of the NASAMessage instance. - """ - """ - Returns a string representation of the NASAMessage instance. - Returns - ------- - str - A string representation of the NASAMessage instance. - """ - + def __init__(self, packet_message=0x000, packet_message_type=0, packet_payload=[0]): self.packet_message: int = packet_message self.packet_message_type: int = packet_message_type self.packet_payload: bytes = bytes([int(hex(x), 16) for x in packet_payload]) @@ -51,6 +11,7 @@ class NASAMessage: def set_packet_message(self, value: int): self.packet_message = value + self.packet_message_type = (value & 1536) >> 9 def set_packet_message_type(self, value: int): self.packet_message_type = value @@ -58,6 +19,9 @@ class NASAMessage: def set_packet_payload(self, value: list): self.packet_payload = bytes([int(hex(x), 16) for x in value]) + def set_packet_payload_raw(self, value: bytes): + self.packet_payload = value + def to_raw(self) -> bytearray: message_number_reconstructed = (self.packet_message_type << 9) | (self.packet_message & 0x1FF) @@ -88,6 +52,12 @@ class NASAMessage: (msgpayload >> 8) & 0xFF, msgpayload & 0xFF ] + elif self.packet_message_type == 3: + return [ + msg_rest_0, + msg_rest_1, + *[(msgpayload >> (8 * i)) & 0xFF for i in reversed(range(len(self.packet_payload)))] + ] def __str__(self): return ( diff --git a/NASAPacket.py b/NASAPacket.py index 535507f..921bb71 100644 --- a/NASAPacket.py +++ b/NASAPacket.py @@ -3,38 +3,11 @@ from NASAMessage import NASAMessage from EHSExceptions import SkipInvalidPacketException import binascii import struct +from CustomLogger import logger class AddressClassEnum(Enum): """ Enum class representing various address classes for NASA packets. - Attributes: - Outdoor (int): Address class for outdoor units (0x10). - HTU (int): Address class for HTU units (0x11). - Indoor (int): Address class for indoor units (0x20). - ERV (int): Address class for ERV units (0x30). - Diffuser (int): Address class for diffuser units (0x35). - MCU (int): Address class for MCU units (0x38). - RMC (int): Address class for RMC units (0x40). - WiredRemote (int): Address class for wired remote units (0x50). - PIM (int): Address class for PIM units (0x58). - SIM (int): Address class for SIM units (0x59). - Peak (int): Address class for peak units (0x5A). - PowerDivider (int): Address class for power divider units (0x5B). - OnOffController (int): Address class for on/off controller units (0x60). - WiFiKit (int): Address class for WiFi kit units (0x62). - CentralController (int): Address class for central controller units (0x65). - DMS (int): Address class for DMS units (0x6A). - JIGTester (int): Address class for JIG tester units (0x80). - BroadcastSelfLayer (int): Address class for broadcast self layer (0xB0). - BroadcastControlLayer (int): Address class for broadcast control layer (0xB1). - BroadcastSetLayer (int): Address class for broadcast set layer (0xB2). - BroadcastCS (int): Address class for broadcast CS (0xB3). - BroadcastControlAndSetLayer (int): Address class for broadcast control and set layer (0xB3). - BroadcastModuleLayer (int): Address class for broadcast module layer (0xB4). - BroadcastCSM (int): Address class for broadcast CSM (0xB7). - BroadcastLocalLayer (int): Address class for broadcast local layer (0xB8). - BroadcastCSML (int): Address class for broadcast CSML (0xBF). - Undefined (int): Address class for undefined units (0xFF). """ Outdoor = 0x10 @@ -68,12 +41,6 @@ class AddressClassEnum(Enum): class PacketType(Enum): """ Enum class representing different types of packets in the EHS-Sentinel system. - Attributes: - StandBy (int): Represents a standby packet type with a value of 0. - Normal (int): Represents a normal packet type with a value of 1. - Gathering (int): Represents a gathering packet type with a value of 2. - Install (int): Represents an install packet type with a value of 3. - Download (int): Represents a download packet type with a value of 4. """ StandBy = 0 @@ -85,15 +52,6 @@ class PacketType(Enum): class DataType(Enum): """ Enum representing different types of data operations. - Attributes: - Undefined (int): Represents an undefined data type (0). - Read (int): Represents a read operation (1). - Write (int): Represents a write operation (2). - Request (int): Represents a request operation (3). - Notification (int): Represents a notification operation (4). - Response (int): Represents a response operation (5). - Ack (int): Represents an acknowledgment (6). - Nack (int): Represents a negative acknowledgment (7). """ Undefined = 0 @@ -108,56 +66,6 @@ class DataType(Enum): class NASAPacket: """ A class to represent a NASA Packet. - Attributes - ---------- - _packet_raw : bytearray - Raw packet data. - packet_start : int - Start byte of the packet. - packet_size : int - Size of the packet. - packet_source_address_class : AddressClassEnum - Source address class of the packet. - packet_source_channel : int - Source channel of the packet. - packet_source_address : int - Source address of the packet. - packet_dest_address_class : AddressClassEnum - Destination address class of the packet. - packet_dest_channel : int - Destination channel of the packet. - packet_dest_address : int - Destination address of the packet. - packet_information : int - Information field of the packet. - packet_version : int - Version of the packet. - packet_retry_count : int - Retry count of the packet. - packet_type : PacketType - Type of the packet. - packet_data_type : DataType - Data type of the packet. - packet_number : int - Number of the packet. - packet_capacity : int - Capacity of the packet. - packet_messages : list[NASAMessage] - List of messages in the packet. - packet_crc16 : int - CRC16 checksum of the packet. - packet_end : int - End byte of the packet. - Methods - ------- - parse(packet: bytearray): - Parses the given packet data. - _extract_messages(depth: int, capacity: int, msg_rest: bytearray, return_list: list): - Recursively extracts messages from the packet. - __str__(): - Returns a string representation of the NASAPacket. - __repr__(): - Returns a string representation of the NASAPacket. """ def __init__(self): @@ -182,33 +90,6 @@ class NASAPacket: self.packet_end: int = None def parse(self, packet: bytearray): - """ - Parses a given bytearray packet and extracts various fields into the object's attributes. - Args: - packet (bytearray): The packet to be parsed. - Raises: - ValueError: If the packet length is less than 14 bytes. - Attributes: - packet_start (int): The start byte of the packet. - packet_size (int): The size of the packet. - packet_source_address_class (AddressClassEnum): The source address class of the packet. - packet_source_channel (int): The source channel of the packet. - packet_source_address (int): The source address of the packet. - packet_dest_address_class (AddressClassEnum): The destination address class of the packet. - packet_dest_channel (int): The destination channel of the packet. - packet_dest_address (int): The destination address of the packet. - packet_information (bool): Information flag of the packet. - packet_version (int): Version of the packet. - packet_retry_count (int): Retry count of the packet. - packet_type (PacketType): Type of the packet. - packet_data_type (DataType): Data type of the packet. - packet_number (int): Number of the packet. - packet_capacity (int): Capacity of the packet. - packet_crc16 (int): CRC16 checksum of the packet. - packet_end (int): The end byte of the packet. - packet_messages (list): Extracted messages from the packet. - """ - self._packet_raw = packet if len(packet) < 14: raise ValueError("Data too short to be a valid NASAPacket") @@ -217,6 +98,12 @@ class NASAPacket: self.packet_start = packet[0] self.packet_size = ((packet[1] << 8) | packet[2]) + + if self.packet_size+2 != len(packet): + logger.info(f"length not correct {self.packet_size+2} -> {len(packet)}") + logger.info(f"{packet.hex()}") + logger.info(f"{hex(packet[self.packet_size+1])}") + try: self.packet_source_address_class = AddressClassEnum(packet[3]) except ValueError as e: @@ -244,20 +131,6 @@ class NASAPacket: raise SkipInvalidPacketException(f"Checksum for package could not be validated. Calculated: {crc_checkusm} in packet: {self.packet_crc16}: packet:{self}") def _extract_messages(self, depth: int, capacity: int, msg_rest: bytearray, return_list: list): - """ - Recursively extracts messages from a bytearray and appends them to a list. - Args: - depth (int): The current depth of recursion. - capacity (int): The maximum allowed depth of recursion. - msg_rest (bytearray): The remaining bytes to be processed. - return_list (list): The list to which extracted messages are appended. - Returns: - list: The list of extracted messages. - Raises: - ValueError: If the message type is unknown, the capacity is invalid for a structure type message, - or the payload size exceeds 255 bytes. - """ - if depth > capacity or len(msg_rest) <= 2: return return_list @@ -358,11 +231,6 @@ class NASAPacket: self.packet_messages = value def to_raw(self) -> bytearray: - """ - Converts the NASAPacket object back to its raw byte representation. - Returns: - bytearray: The raw byte representation of the packet. - """ self.packet_start = 50 self.packet_end = 52 diff --git a/README.md b/README.md index fda9e40..418906f 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,15 @@ You need an MQTT Broker. For Homeassistant you need the MQTT Plugin there with enabled Auto Discovery with Discovery Topic Prefix and Birth-Messages on Discovery Topic Prefix with subtopic "status" with text "online". EHS-Sentinel subscribes /status Topic and if it receive an "online", then it cleans his intern known-devices topic and send the Auto Discovery Config again for any Measurment for Home Assistant. +# Upgrade instructions + +1. Stop EHS-Sentinel +2. *Optional* If you are using HASS: Delete the MQTT Device +3. git pull the new release or download and extract the release zip file +4. Look into Release Notes if there are some new configurations and check if you have to ajust your configfile +5. Start EHS-Sentinel (I recommend to use `--clean-known-devices` on the start so EHS-Sentinel will send Configuration messages for HASS Auto Discovery after every startup.) +6. *Optional* If you are using HASS: and not use the `--clean-known-devices` Parm on Startup, send a birthmessage manualy or restart the MQTT Adapter in HASS. + # Installation ## Simple @@ -23,7 +32,9 @@ EHS-Sentinel subscribes /status Topic and if it receive a `pip install -r requirements.txt` 3. Copy the `data/config.yml` and provide your Configuration 4. Start the Application: - `python3 startEHSSentinel.py --configfile config.yml` + `python3 startEHSSentinel.py --configfile config.yml --clean-known-devices` + + I recommend to use `--clean-known-devices` on the start so EHS-Sentinel will send Configuration messages for HASS Autodiscovery after every startup. ## Systemd Service @@ -36,7 +47,9 @@ EHS-Sentinel subscribes /status Topic and if it receive a `ExecStart = python3 ` <- provide here to path to your folder where startEHSSentinel.py is - sample: `ExecStart = python3 /root/EHS-Sentinel/startEHSSentinel.py --configfile /root/EHS-Sentinel/config.yml` + sample: `ExecStart = python3 /root/EHS-Sentinel/startEHSSentinel.py --configfile /root/EHS-Sentinel/config.yml --clean-known-devices` + + I recommend to use `--clean-known-devices` on the start so EHS-Sentinel will send Configuration messages for HASS Autodiscovery after every startup.` 5. Change your `config.yml` to absolut paths: `nasaRepositoryFile: /root/EHS-Sentinel/data/NasaRepository.yml` @@ -92,7 +105,9 @@ Some Distributions like debian 12 dont allow to use system wide pip package inst `ExecStart = ` <- provide here to path to your folder where startEHSSentinel.py is - sample: `ExecStart = /root/EHS-Sentinel/bin/python3 /root/EHS-Sentinel/startEHSSentinel.py --configfile /root/EHS-Sentinel/config.yml` + sample: `ExecStart = /root/EHS-Sentinel/bin/python3 /root/EHS-Sentinel/startEHSSentinel.py --configfile /root/EHS-Sentinel/config.yml --clean-known-devices` + + I recommend to use `--clean-known-devices` on the start so EHS-Sentinel will send Configuration messages for HASS Autodiscovery after every startup. 10. Change your `config.yml` to absolut paths: `nasaRepositoryFile: /root/EHS-Sentinel/data/NasaRepository.yml` @@ -121,16 +136,31 @@ Some Distributions like debian 12 dont allow to use system wide pip package inst # Home Assistant Dashboard -There is a rudimentary dasdboard for Homeassistant, this can be found at: [ressources/dashboard.yaml](ressources/dashboard.yaml) +There are two rudimentary dashboard templates for Homeassistant, +Read Only [ressources/dashboard_readonly_template.yaml](ressources/dashboard_readonly_template.yaml) + +Control mode [ressources/dashboard_controlmode_template.yaml](ressources/dashboard_controlmode_template.yaml) If you have good ideas and want to extend this feel free to create an issue or pull request, thanks! +## Read Only Mode + ![alt text](ressources/images/dashboard1.png) ![alt text](ressources/images/dashboard2.png) ![alt text](ressources/images/dashboard3.png) + +## Control Mode + +![alt text](ressources/images/dashboard_cm1.png) + +![alt text](ressources/images/dashboard_cm2.png) + +![alt text](ressources/images/dashboard_cm3.png) + + # Configuration ## Command-Line Arguments @@ -182,6 +212,16 @@ The `config.yml` file contains configuration settings for the EHS-Sentinel proje - Default: `data/NasaRepository.yml` - **protocolFile**: Path to the protocol file. (not set in Sample config.yml) - Example: `prot.csv` +- **allowControl**: Allows EHS-Sentinel to Control the Heatpump. HASS Entities are writable, EHS-Sentinel listents to set Topic and write published values to th Modbus Interface. + The Set Topic have following pattern: /entity//set sample: ehsSentinel/ENUM_IN_SG_READY_MODE_STATE/set + - Default: `False` + +> [!CAUTION] +> This functionality requires that EHS-Sentinel actively communicates with +> the Samsung EHS, so EHS-Sentinel intervenes here in the Modbus data +> traffic between the components (it sends its own messages). +> The activation of this functionality is exclusively at your own risk. +> I assume no liability for any damage caused. ### Logging Settings @@ -195,6 +235,10 @@ The `config.yml` file contains configuration settings for the EHS-Sentinel proje - Default: `False` - **pollerMessage**: set to true, prints out detailed poller NASAPackets - Default: `False` +- **controlMessage**: set to true, prints out detailed control Message NASAPackets + - Default: `False` +- **invalidPacket**: set to true, prints out invalid packets like length not ok or end byte not 0x34... + - Default: `False` ### Serial Connection Settings cannot be defined with TCP parm... @@ -267,6 +311,7 @@ The data points are defined in the groups section, the group is then enabled in ```yaml general: nasaRepositoryFile: data/NasaRepository.yml + allowControl: False # protocolFile: prot.csv logging: deviceAdded: True @@ -333,6 +378,30 @@ if you want to see how many uniquie Messages have been collected in the Dumpfile # Changelog +### v1.0.0 - 2025-03-13 +- EHS-Sentinel has been heavily modified to incorporate the control mechanism +- The read-in behavior of the modbus registers has been revised from chunks to single byte +- MessageProcessor now runs asynchronously +- MessageProducer added which takes over the writing communication with the WP +- Configuration of HASS entities has moved from hardcoded to NASA Repository +- NASA Repository has been fundamentally changed + - All FSV Values, NASA_POWER, VAR_IN_TEMP_WATER_LAW_TARGET_F, NASA_INDOOR_OPMODE are allowed for writing mode + - NASA_OUTDOOR_DEFROST_STEP DEFROST STEP 10 (b'0xa') added + - ENUM_IN_SG_READY_MODE_STATE ACTIVE (b'0x2') added +- New configuration point allowControl to allow control of the Samsung EHS heat pump (deactivated by default). + +> [!CAUTION] +> This functionality requires that EHS-Sentinel actively communicates with +> the Samsung EHS, so EHS-Sentinel intervenes here in the Modbus data +> traffic between the components (it sends its own messages). +> The activation of this functionality is exclusively at your own risk. +> I assume no liability for any damage caused. + +- new configuration points in logging + - controlMessage (default False) to print out the controlled mesagges + - invalidPacket (default False) prints out invalid messages (length not ok, x34 not at end...) +- Dashboard template has been split, [ressources/dashboard_readonly_template.yaml](ressources/dashboard_readonly_template.yaml) is for readonly mode and the [ressources/dashboard_controlmode_template.yaml](ressources/dashboard_controlmode_template.yaml) for control mode + ### v0.3.0 - 2025-02-27 - Added poller functionality. EHS-Sentinel can now actively request values via Modbus - fetch_intervals and groups can be defined in the config file diff --git a/data/NasaRepository.yml b/data/NasaRepository.yml index 98df1ee..4a7a5cf 100644 --- a/data/NasaRepository.yml +++ b/data/NasaRepository.yml @@ -1,3721 +1,4917 @@ ENUM_AD_MULTI_TENANT_NO: address: '0x0025' - arithmetic: '' description: WiFi Kit Multi Tenant No. - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: ENUM - unit: '' ENUM_IN_2WAY_VALVE: address: '0x408A' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'CV' - 0x03: 'BOILER' + 0: 'OFF' + 1: CV + 3: BOILER + hass_opts: + default_platform: sensor + platform: + options: + - 'OFF' + - CV + - BOILER + type: select + writable: false remarks: 0 Off, 2 CV, 3 Boiler - signed: '' type: ENUM - unit: '' ENUM_IN_3WAY_VALVE_2: address: '0x4113' - arithmetic: '' - description: '' - remarks: '' - signed: '' enum: - 0x00: 'ROOM' - 0x01: 'TANK' + 0: ROOM + 1: TANK + hass_opts: + default_platform: sensor + platform: + options: + - ROOM + - TANK + type: select + writable: false type: ENUM - unit: '' ENUM_IN_BACKUP_HEATER: address: '0x406C' - arithmetic: '' description: Backup heater mode enum: - 0x00: 'OFF' - 0x01: 'STEP 1' - 0x02: 'STEP 2' + 0: 'OFF' + 1: STEP 1 + 2: STEP 2 + hass_opts: + default_platform: sensor + platform: + options: + - 'OFF' + - STEP 1 + - STEP 2 + type: select + writable: false remarks: 0 Off, 1 Step 1, 2 Step 2 - signed: '' type: ENUM - unit: '' ENUM_IN_BOOSTER_HEATER: address: '0x4087' - arithmetic: '' description: Booster heater enum: - 0x00: 'OFF' - 0x01: 'ON' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false remarks: 0 Off, 1 On - signed: '' type: ENUM - unit: '' ENUM_IN_CHILLER_EXT_WATER_OUT_INPUT: address: '0x4101' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_IN_CHILLER_SETTING_DEMAND_LEVEL: address: '0x40FC' - arithmetic: '' - description: '' enum: - 0x00: '100 %' - 0x01: '95 %' - 0x02: '90 %' - 0x03: '85 %' - 0x04: '80 %' - 0x05: '75 %' - 0x06: '70 %' - 0x07: '65 %' - 0x08: '60 %' - 0x09: '55 %' - 0x0A: '50 %' - 0x0B: 'Not Apply' - remarks: '' - signed: '' + 0: 100 % + 1: 95 % + 2: 90 % + 3: 85 % + 4: 80 % + 5: 75 % + 6: 70 % + 7: 65 % + 8: 60 % + 9: 55 % + 10: 50 % + 11: Not Apply + hass_opts: + default_platform: sensor + platform: + options: + - 100 % + - 95 % + - 90 % + - 85 % + - 80 % + - 75 % + - 70 % + - 65 % + - 60 % + - 55 % + - 50 % + - Not Apply + type: select + writable: false type: ENUM - unit: '' ENUM_IN_CHILLER_WATERLAW_ON_OFF: address: '0x40F7' - arithmetic: '' - description: '' - remarks: '' - signed: '' enum: - 0x00: 'OFF' - 0x01: 'ON' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_IN_CHILLER_WATERLAW_SENSOR: address: '0x40E7' - arithmetic: '' description: DMV Chiller Option enum: - 0x00: 'OUTDOOR' - 0x01: 'ROOM' - remarks: '' - signed: '' + 0: OUTDOOR + 1: ROOM + hass_opts: + default_platform: sensor + platform: + options: + - OUTDOOR + - ROOM + type: select + writable: false type: ENUM - unit: '' ENUM_IN_CHILLLER_SETTING_SILENT_LEVEL: address: '0x40FB' - arithmetic: '' - description: '' enum: - 0x00: 'NONE' - 0x01: 'LEVEL 1' - 0x02: 'LEVEL 2' - 0x03: 'LEVEL 3' - remarks: '' - signed: '' + 0: NONE + 1: LEVEL 1 + 2: LEVEL 2 + 3: LEVEL 3 + hass_opts: + default_platform: sensor + platform: + options: + - NONE + - LEVEL 1 + - LEVEL 2 + - LEVEL 3 + type: select + writable: false type: ENUM - unit: '' ENUM_IN_DIFFUSER_OPERATION_POWER: address: '0x4149' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_IN_ENTER_ROOM_CONTROL_USED: address: '0x40D5' - arithmetic: '' - description: '' enum: - 0x00: 'DISABLE' - 0x01: 'ENABLE' - remarks: '' - signed: '' + 0: DISABLE + 1: ENABLE + hass_opts: + default_platform: sensor + platform: + options: + - DISABLE + - ENABLE + type: select + writable: false type: ENUM - unit: '' ENUM_IN_ENTHALPY_CONTROL_STATE: address: '0x4105' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_IN_ERROR_HISTORY_CLEAR_FOR_HASS: address: '0x40D6' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_IN_FAN_MODE_REAL: address: '0x4007' - arithmetic: '' description: Indoor unit current air volume enum: - 0x01: 'LOW' - 0x02: 'MID' - 0x03: 'HIGH' - 0x04: 'TURBO' - 0x0A: 'AUTOLOW' - 0x0B: 'AUTOMID' - 0x0C: 'AUTOHIGH' - 0x0D: 'UL' - 0x0E: 'LL' - 0x0F: 'HH' - 0x10: 'SPEED' - 0x11: 'NATURALLOW' - 0x12: 'NATURALMID' - 0x13: 'NATURALHIGH' - 0xFE: 'OFF' - remarks: '' - signed: '' + 1: LOW + 2: MID + 3: HIGH + 4: TURBO + 10: AUTOLOW + 11: AUTOMID + 12: AUTOHIGH + 13: UL + 14: LL + 15: HH + 16: SPEED + 17: NATURALLOW + 18: NATURALMID + 19: NATURALHIGH + 254: 'OFF' + hass_opts: + default_platform: sensor + platform: + options: + - LOW + - MID + - HIGH + - TURBO + - AUTOLOW + - AUTOMID + - AUTOHIGH + - UL + - LL + - HH + - SPEED + - NATURALLOW + - NATURALMID + - NATURALHIGH + - 'OFF' + type: select + writable: false type: ENUM - unit: '' -enum: - 0x00: 'OFF' - 0x01: 'ON' - address: '0x410D' - arithmetic: '' - description: '' - enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' - type: ENUM - unit: '' ENUM_IN_FSV_2041: address: '0x4093' - arithmetic: '' description: Heating - Heating WL Selection WL Type enum: - 0x00: 'Unknown' - 0x01: 'Floor' - 0x02: 'FCU' + 1: Floor + 2: FCU + hass_opts: + default_platform: sensor + platform: + options: + - Floor + - FCU + type: select + writable: true remarks: 1 Floor, 2 FCU - signed: '' type: ENUM - unit: '' ENUM_IN_FSV_2081: address: '0x4094' - arithmetic: '' description: Cooling - Cooling WL Selection WL Type enum: - 0x00: 'Unknown' - 0x01: 'Floor' - 0x02: 'FCU' + 1: Floor + 2: FCU + hass_opts: + default_platform: sensor + platform: + options: + - Floor + - FCU + type: select + writable: true remarks: 1 Floor, 2 FCU - signed: '' type: ENUM - unit: '' +ENUM_IN_FSV_2091: + address: '0x4095' + enum: + 0: 'No' + 1: one + 2: two + 3: three + 4: four + hass_opts: + default_platform: sensor + platform: + options: + - 'No' + - one + - two + - three + - four + type: select + writable: true + remarks: values 0="No" up to 4="4" + type: ENUM +ENUM_IN_FSV_2092: + address: '0x4096' + enum: + 0: 'No' + 1: one + 2: two + 3: three + 4: four + hass_opts: + default_platform: sensor + platform: + options: + - 'No' + - one + - two + - three + - four + type: select + writable: true + remarks: values 0="No" up to 4="4" + type: ENUM ENUM_IN_FSV_2093: address: '0x4127' - arithmetic: '' description: Remote Controller - Remote Controller Room Temp. Control enum: - 0x01: 'Off (1min delay) by Room Sensor' - 0x02: 'Off (1min delay) by Room Sensor or WL' - 0x03: 'On' - 0x04: 'Repeat 3min On/7min Off by Room Sensor or WL' + 1: Off (1min delay) by Room Sensor + 2: Off (1min delay) by Room Sensor or WL + 3: 'On' + 4: Repeat 3min On/7min Off by Room Sensor or WL + hass_opts: + default_platform: sensor + platform: + options: + - Off (1min delay) by Room Sensor + - Off (1min delay) by Room Sensor or WL + - 'On' + - Repeat 3min On/7min Off by Room Sensor or WL + type: select + writable: true remarks: Min = 1 Max = 4 - signed: '' type: ENUM - unit: '' ENUM_IN_FSV_2094: address: '0x412A' - arithmetic: '' - description: '' enum: - 0x00: 'no' - 0x01: 'one' - 0x02: 'two' - 0x03: 'three' - 0x04: 'four' - 0xFF: 'off' + 0: 'no' + 1: one + 2: two + 3: three + 4: four + 255: 'off' + hass_opts: + default_platform: sensor + platform: + options: + - 'no' + - one + - two + - three + - four + - 'off' + type: select + writable: true remarks: values 0="No" up to 4="4" - signed: '' type: ENUM - unit: '' +ENUM_IN_FSV_3011: + address: '0x4097' + enum: + 0: 'No' + 1: one + 2: two + hass_opts: + default_platform: sensor + platform: + options: + - 'No' + - one + - two + type: select + writable: true + remarks: values 0="No" up to 2="2" + type: ENUM +ENUM_IN_FSV_3031: + address: '0x4098' + enum: + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: true + remarks: 0 Off, 1 On + type: ENUM ENUM_IN_FSV_3041: address: '0x4099' - arithmetic: '' - description: DHW - Disinfection Application enum: - 0x00: 'Off' - 0x01: 'on' + 0: 'ON' + 1: 'OFF' + description: DHW - Disinfection Application + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: true remarks: 0 No, 1 Yes - signed: '' type: ENUM - unit: '' ENUM_IN_FSV_3042: address: '0x409A' - arithmetic: '' description: DHW - Disinfection Interval enum: - 0x00: 'Sunday' - 0x01: 'Monday' - 0x02: 'Tuesday' - 0x03: 'Wednesday' - 0x04: 'Thursday' - 0x05: 'Friday' - 0x06: 'Saturday' - 0x07: 'Everyday' + 0: Sunday + 1: Monday + 2: Tuesday + 3: Wednesday + 4: Thursday + 5: Friday + 6: Saturday + 7: Everyday + hass_opts: + default_platform: sensor + platform: + options: + - Sunday + - Monday + - Tuesday + - Wednesday + - Thursday + - Friday + - Saturday + - Everyday + type: select + writable: true remarks: Sunday=0, Monday=1 .. up to 7=Everyday - signed: '' type: ENUM - unit: '' ENUM_IN_FSV_3051: address: '0x409B' - arithmetic: '' description: DHW - Forced DHW Operation Timer OFF Function enum: - 0x00: 'No' - 0x01: 'Yes' + 0: 'No' + 1: 'Yes' + hass_opts: + default_platform: sensor + platform: + options: + - 'No' + - 'Yes' + type: select + writable: true remarks: 0 No, 1 Yes - signed: '' type: ENUM - unit: '' +ENUM_IN_FSV_3061: + address: '0x409C' + enum: + 0: 'No' + 1: one + 2: two + 3: three + hass_opts: + default_platform: sensor + platform: + options: + - 'No' + - one + - two + - three + type: select + writable: true + type: ENUM ENUM_IN_FSV_3071: address: '0x409D' - arithmetic: '' description: DHW - Direction of 3Way Valve DHW Tank enum: - 0x00: 'Room' - 0x01: 'Tank' - remarks: '' - signed: '' + 0: Room + 1: Tank + hass_opts: + default_platform: sensor + platform: + options: + - Room + - Tank + type: select + writable: true type: ENUM - unit: '' ENUM_IN_FSV_4011: address: '0x409E' - arithmetic: '' description: Heating - Heat Pump Heating/ DHW Priority enum: - 0x00: 'DHW' - 0x01: 'Heating' - remarks: '' - signed: '' + 0: DHW + 1: Heating + hass_opts: + default_platform: sensor + platform: + options: + - DHW + - Heating + type: select + writable: true type: ENUM - unit: '' ENUM_IN_FSV_4021: address: '0x409F' - arithmetic: '' description: Heating - Backup Heater Application enum: - 0x00: 'No' - 0x01: '2 Step BUH1+BUH2' - 0x02: '1 Step BUH2' - remarks: '' - signed: '' + 0: 'No' + 1: 2 Step BUH1+BUH2 + 2: 1 Step BUH2 + hass_opts: + default_platform: sensor + platform: + options: + - 'No' + - 2 Step BUH1+BUH2 + - 1 Step BUH2 + type: select + writable: true type: ENUM - unit: '' ENUM_IN_FSV_4022: address: '0x40A0' - arithmetic: '' description: Heating - Backup Heater BUH/BSH Priority enum: - 0x00: 'BUH_BSH_Both' - 0x01: 'BUH' - 0x02: 'BSH' - remarks: '' - signed: '' + 0: BUH_BSH_Both + 1: BUH + 2: BSH + hass_opts: + default_platform: sensor + platform: + options: + - BUH_BSH_Both + - BUH + - BSH + type: select + writable: true type: ENUM - unit: '' ENUM_IN_FSV_4023: address: '0x40A1' - arithmetic: '' description: Heating - Backup Heater Cold Weather Compensation enum: - 0x00: 'No' - 0x01: 'Yes' - remarks: '' - signed: '' + 0: 'No' + 1: 'Yes' + hass_opts: + default_platform: sensor + platform: + options: + - 'No' + - 'Yes' + type: select + writable: true type: ENUM - unit: '' ENUM_IN_FSV_4031: address: '0x40A2' - arithmetic: '' description: Heating - Backup Boiler Application enum: - 0x00: 'No' - 0x01: 'Yes' - remarks: '' - signed: '' + 0: 'No' + 1: 'Yes' + hass_opts: + default_platform: sensor + platform: + options: + - 'No' + - 'Yes' + type: select + writable: true type: ENUM - unit: '' ENUM_IN_FSV_4032: address: '0x40A3' - arithmetic: '' description: Heating - Backup Boiler Priority enum: - 0x00: 'No' - 0x01: 'Yes' - remarks: '' - signed: '' + 0: 'No' + 1: 'Yes' + hass_opts: + default_platform: sensor + platform: + options: + - 'No' + - 'Yes' + type: select + writable: true type: ENUM - unit: '' ENUM_IN_FSV_4041: address: '0x40C0' - arithmetic: '' description: Heating - Mixing Valve Application enum: - 0x00: 'No' - 0x01: 'FSV_TARGET_DELTA' - 0x02: 'WL' - remarks: '' - signed: '' + 0: 'No' + 1: FSV_TARGET_DELTA + 2: WL + hass_opts: + default_platform: sensor + platform: + options: + - 'No' + - FSV_TARGET_DELTA + - WL + type: select + writable: true type: ENUM - unit: '' ENUM_IN_FSV_4044: address: '0x40C1' - arithmetic: '' description: Heating - Mixing Valve Control Factor enum: - 0x01: '1' - 0x02: '2' - 0x03: '3' - 0x04: '4' - 0x05: '5' - remarks: '' - signed: '' + 1: '1' + 2: '2' + 3: '3' + 4: '4' + 5: '5' + hass_opts: + default_platform: sensor + platform: + options: + - '1' + - '2' + - '3' + - '4' + - '5' + type: select + writable: true type: ENUM - unit: '' ENUM_IN_FSV_4051: address: '0x40C2' - arithmetic: '' description: Heating - Inverter Pump Application enum: - 0x00: 'No' - 0x01: '100%' - 0x02: '70%' - remarks: '' - signed: '' + 0: 'No' + 1: 100% + 2: 70% + hass_opts: + default_platform: sensor + platform: + options: + - 'No' + - 100% + - 70% + type: select + writable: true type: ENUM - unit: '' ENUM_IN_FSV_4053: address: '0x40C3' - arithmetic: '' description: Heating - Inverter Pump Control Factor enum: - 0x01: '1' - 0x02: '2' - 0x03: '3' - remarks: '' - signed: '' + 1: '1' + 2: '2' + 3: '3' + hass_opts: + default_platform: sensor + platform: + options: + - '1' + - '2' + - '3' + type: select + writable: true type: ENUM - unit: '' ENUM_IN_FSV_4061: address: '0x411A' - arithmetic: '' description: Heating - Zone Control Application enum: - 0x00: 'No' - 0x01: 'Yes' - remarks: '' - signed: '' + 0: 'No' + 1: 'Yes' + hass_opts: + default_platform: sensor + platform: + options: + - 'No' + - 'Yes' + type: select + writable: true type: ENUM - unit: '' ENUM_IN_FSV_5022: address: '0x4128' - arithmetic: '' - description: DHW Saving - DHW Saving Mode enum: - 0x00: 'ON' - 0x01: 'OFF' + 0: 'ON' + 1: 'OFF' + description: DHW Saving - DHW Saving Mode + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: true remarks: Min = 0 Max = 1 - signed: '' type: ENUM - unit: '' ENUM_IN_FSV_5033: address: '0x4107' - arithmetic: '' - description: '' enum: - 0x00: 'A2A' - 0x01: 'DHW' - remarks: '' - signed: '' + 0: A2A + 1: DHW + hass_opts: + default_platform: sensor + platform: + options: + - A2A + - DHW + type: select + writable: false type: ENUM - unit: '' ENUM_IN_FSV_5041: address: '0x40A4' - arithmetic: '' description: Power Peak Control - Application enum: - 0x00: 'No' - 0x01: 'Yes' - remarks: '' - signed: '' + 0: 'No' + 1: 'Yes' + hass_opts: + default_platform: sensor + platform: + options: + - 'No' + - 'Yes' + type: select + writable: true type: ENUM - unit: '' ENUM_IN_FSV_5042: address: '0x40A5' - arithmetic: '' description: Power Peak Control - Select Forced Off Parts enum: - 0x00: 'COMP_PER_BUH_OFF_BSH_PER' - 0x01: 'COMP_PER_BUH_OFF_BSH_OFF' - 0x02: 'COMP_OFF_BUH_OFF_BSH_PER' - 0x03: 'COMP_OFF_BUH_OFF_BSH_OFF' - remarks: '' - signed: '' + 0: COMP_PER_BUH_OFF_BSH_PER + 1: COMP_PER_BUH_OFF_BSH_OFF + 2: COMP_OFF_BUH_OFF_BSH_PER + 3: COMP_OFF_BUH_OFF_BSH_OFF + hass_opts: + default_platform: sensor + platform: + options: + - COMP_PER_BUH_OFF_BSH_PER + - COMP_PER_BUH_OFF_BSH_OFF + - COMP_OFF_BUH_OFF_BSH_PER + - COMP_OFF_BUH_OFF_BSH_OFF + type: select + writable: true type: ENUM - unit: '' ENUM_IN_FSV_5043: address: '0x40A6' - arithmetic: '' description: Power Peak Control - Using Input Voltage enum: - 0x00: 'Low' - 0x01: 'High' - remarks: '' - signed: '' + 0: Low + 1: High + hass_opts: + default_platform: sensor + platform: + options: + - Low + - High + type: select + writable: true type: ENUM - unit: '' ENUM_IN_FSV_5051: address: '0x40A7' - arithmetic: '' description: Frequency Ratio Control enum: - 0x00: 'Disable' - 0x01: 'Use' - remarks: '' - signed: '' + 0: Disable + 1: Use + hass_opts: + default_platform: sensor + platform: + options: + - Disable + - Use + type: select + writable: true type: ENUM - unit: '' ENUM_IN_FSV_5061: address: '0x40B4' - arithmetic: '' - description: 'Ratio of hot water supply compare to heating' + description: Ratio of hot water supply compare to heating enum: - 0x01: "1" - 0x02: "2" - 0x03: "3" - 0x04: "4" - 0x05: "5" - 0x06: "6" - 0x07: "7" - remarks: '' - signed: '' + 1: '1' + 2: '2' + 3: '3' + 4: '4' + 5: '5' + 6: '6' + 7: '7' + hass_opts: + default_platform: sensor + platform: + options: + - '1' + - '2' + - '3' + - '4' + - '5' + - '6' + - '7' + type: select + writable: true type: ENUM - unit: '' ENUM_IN_FSV_5081: address: '0x411B' - arithmetic: '' description: PV Control - Application enum: - 0x00: 'No' - 0x01: 'Yes' - remarks: '' - signed: '' + 0: 'No' + 1: 'Yes' + hass_opts: + default_platform: sensor + platform: + options: + - 'No' + - 'Yes' + type: select + writable: true type: ENUM - unit: '' ENUM_IN_FSV_5091: address: '0x411C' - arithmetic: '' description: Smart Grid Control - Application enum: - 0x00: 'No' - 0x01: 'Yes' - remarks: '' - signed: '' + 0: 'No' + 1: 'Yes' + hass_opts: + default_platform: sensor + platform: + options: + - 'No' + - 'Yes' + type: select + writable: true type: ENUM - unit: '' ENUM_IN_FSV_5094: address: '0x411D' - arithmetic: '' - description: Smart Grid Control - DHW Mode + description: Smart Grid Control - DHW Mode enum: - 0x00: "55\u00b0 by HP" - 0x01: "70\u00b0 by HP and BSH" - remarks: '' - signed: '' + 0: "55\xB0 by HP" + 1: "70\xB0 by HP and BSH" + hass_opts: + default_platform: sensor + platform: + options: + - "55\xB0 by HP" + - "70\xB0 by HP and BSH" + type: select + writable: true type: ENUM - unit: '' ENUM_IN_FSV_LOAD_SAVE: address: '0x412D' - arithmetic: '' - description: '' enum: - 0x00: 'min' - 0x01: 'max' + 0: min + 1: max + hass_opts: + default_platform: sensor + platform: + options: + - min + - max + type: select + writable: false remarks: Min = 0 Max = 1, similar name as 0x4125 in NASA.ptc - signed: '' type: ENUM - unit: '' ENUM_IN_GAS_LEVEL: address: '0x4147' - arithmetic: '' - description: '' - ernum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: ENUM - unit: '' ENUM_IN_LOUVER_HL_PART_SWING: address: '0x4012' - arithmetic: '' description: Up and down wind direction setting/status enum: - 0x00: 'Sing_Off' - 0x01: 'LOUVER_1' - 0x02: 'LOUVER_2' - 0x03: 'LOUVER_1_2' - 0x04: 'LOUVER_3' - 0x05: 'LOUVER_1_3' - 0x06: 'LOUVER_2_3' - 0x07: 'LOUVER_1_2_3' - 0x08: 'LOUVER_4' - 0x09: 'LOUVER_1_4' - 0x0A: 'LOUVER_2_4' - 0x0B: 'LOUVER_1_2_4' - 0x0C: 'LOUVER_3_4' - 0x0D: 'LOUVER_1_3_4' - 0x0E: 'LOUVER_2_3_4' - 0x0F: 'Swing_On' - 0x40: 'H_H_H' - 0x41: 'M_H_H' - 0x42: 'V_H_H' - 0x44: 'H_M_H' - 0x45: 'M_M_H' - 0x46: 'V_M_H' - 0x48: 'H_V_H' - 0x49: 'M_V_H' - 0x4A: 'V_V_H' - 0x50: 'H_H_M' - 0x51: 'M_H_M' - 0x52: 'V_H_M' - 0x54: 'H_M_M' - 0x55: 'M_M_M' - 0x56: 'V_M_M' - 0x58: 'H_V_M' - 0x59: 'M_V_M' - 0x5A: 'V_V_M' - 0x60: 'H_H_V' - 0x61: 'M_H_V' - 0x62: 'V_H_V' - 0x64: 'H_M_V' - 0x65: 'M_M_V' - 0x66: 'V_M_V' - 0x68: 'H_V_V' - 0x69: 'M_V_V' - 0x6A: 'V_V_V' - remarks: '' - signed: '' + 0: Sing_Off + 1: LOUVER_1 + 2: LOUVER_2 + 3: LOUVER_1_2 + 4: LOUVER_3 + 5: LOUVER_1_3 + 6: LOUVER_2_3 + 7: LOUVER_1_2_3 + 8: LOUVER_4 + 9: LOUVER_1_4 + 10: LOUVER_2_4 + 11: LOUVER_1_2_4 + 12: LOUVER_3_4 + 13: LOUVER_1_3_4 + 14: LOUVER_2_3_4 + 15: Swing_On + 64: H_H_H + 65: M_H_H + 66: V_H_H + 68: H_M_H + 69: M_M_H + 70: V_M_H + 72: H_V_H + 73: M_V_H + 74: V_V_H + 80: H_H_M + 81: M_H_M + 82: V_H_M + 84: H_M_M + 85: M_M_M + 86: V_M_M + 88: H_V_M + 89: M_V_M + 90: V_V_M + 96: H_H_V + 97: M_H_V + 98: V_H_V + 100: H_M_V + 101: M_M_V + 102: V_M_V + 104: H_V_V + 105: M_V_V + 106: V_V_V + hass_opts: + default_platform: sensor + platform: + options: + - Sing_Off + - LOUVER_1 + - LOUVER_2 + - LOUVER_1_2 + - LOUVER_3 + - LOUVER_1_3 + - LOUVER_2_3 + - LOUVER_1_2_3 + - LOUVER_4 + - LOUVER_1_4 + - LOUVER_2_4 + - LOUVER_1_2_4 + - LOUVER_3_4 + - LOUVER_1_3_4 + - LOUVER_2_3_4 + - Swing_On + - H_H_H + - M_H_H + - V_H_H + - H_M_H + - M_M_H + - V_M_H + - H_V_H + - M_V_H + - V_V_H + - H_H_M + - M_H_M + - V_H_M + - H_M_M + - M_M_M + - V_M_M + - H_V_M + - M_V_M + - V_V_M + - H_H_V + - M_H_V + - V_H_V + - H_M_V + - M_M_V + - V_M_V + - H_V_V + - M_V_V + - V_V_V + type: select + writable: false type: ENUM - unit: '' ENUM_IN_MTFC: address: '0x402F' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_IN_OPERATION_POWER_ZONE1: address: '0x4119' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_IN_OPERATION_POWER_ZONE2: address: '0x411E' - arithmetic: '' description: Zone2 Normal Power enum: - 0x00: 'min' - 0x01: 'max' + 0: min + 1: max + hass_opts: + default_platform: sensor + platform: + options: + - min + - max + type: select + writable: false remarks: Min = 0 Max = 1 - signed: '' type: ENUM - unit: '' ENUM_IN_PV_CONTACT_STATE: address: '0x4123' - arithmetic: '' description: PV Control enum: - 0x00: 'OFF' - 0x01: 'ON' - 0xFF: 'DISABLED' - remarks: '' - signed: '' + 0: 'OFF' + 1: 'ON' + 255: DISABLED + hass_opts: + default_platform: sensor + platform: + options: + - 'OFF' + - 'ON' + - DISABLED + type: select + writable: false type: ENUM - unit: '' ENUM_IN_QUIET_MODE: address: '0x406E' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_IN_ROOM_TEMP_SENSOR: address: '0x4076' - arithmetic: '' enum: - 0x00: 'Idiom_IndoorUnit' - 0x01: 'Idiom_WiredRemocon' + 0: Idiom_IndoorUnit + 1: Idiom_WiredRemocon + hass_opts: + default_platform: sensor + platform: + options: + - Idiom_IndoorUnit + - Idiom_WiredRemocon + type: select + writable: false remarks: 'It tells the room sensor is present for zone #1 (EHS Mono R290 AE050CXYBEK).' - signed: '' type: ENUM - unit: '' ENUM_IN_ROOM_TEMP_SENSOR_ZONE2: address: '0x4118' - arithmetic: '' - description: '' enum: - 0x00: 'Idiom_IndoorUnit' - 0x01: 'Idiom_WiredRemocon' + 0: Idiom_IndoorUnit + 1: Idiom_WiredRemocon + hass_opts: + default_platform: sensor + platform: + options: + - Idiom_IndoorUnit + - Idiom_WiredRemocon + type: select + writable: false remarks: 'It tells the room sensor is present for zone #2 (EHS Mono R290 AE050CXYBEK).' - signed: '' type: ENUM - unit: '' ENUM_IN_SG_READY_MODE_STATE: address: '0x4124' - arithmetic: '' description: Smart Grid enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'OFF' + 1: 'ON' + 2: ACTIVE + hass_opts: + default_platform: sensor + platform: + options: + - 'OFF' + - 'ON' + - ACTIVE + type: select + writable: false type: ENUM - unit: '' ENUM_IN_STATE_AUTO_STATIC_PRESSURE_RUNNING: address: '0x40BB' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'Complete' - 0x02: 'Running' - remarks: '' - signed: '' + 0: 'OFF' + 1: Complete + 2: Running + hass_opts: + default_platform: sensor + platform: + options: + - 'OFF' + - Complete + - Running + type: select + writable: false type: ENUM - unit: '' ENUM_IN_STATE_FLOW_CHECK: address: '0x4102' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_IN_STATE_THERMO: address: '0x4028' - arithmetic: '' - description: Thermo On/Off enum: - 0x00: 'OFF' - 0x01: 'ON' + 0: 'ON' + 1: 'OFF' + description: Thermo On/Off + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false remarks: 0 Off, 1 On - signed: '' type: ENUM - unit: '' ENUM_IN_STATE_WATER_PUMP: address: '0x4089' - arithmetic: '' - description: Water pump enum: - 0x00: 'OFF' - 0x01: 'ON' + 0: 'ON' + 1: 'OFF' + description: Water pump + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false remarks: 0 Off, 1 On - signed: '' type: ENUM - unit: '' ENUM_IN_TDM_INDOOR_TYPE: address: '0x4108' - arithmetic: '' - description: '' enum: - 0x00: 'A2A' - 0x01: 'A2W' - remarks: '' - signed: '' + 0: A2A + 1: A2W + hass_opts: + default_platform: sensor + platform: + options: + - A2A + - A2W + type: select + writable: false type: ENUM - unit: '' ENUM_IN_THERMOSTAT1: address: '0x4069' - arithmetic: '' description: Hydro_ExternalThermostat enum: - 0x00: 'OFF' - 0x01: 'Cool' - 0x02: 'Heat' + 0: 'OFF' + 1: Cool + 2: Heat + hass_opts: + default_platform: sensor + platform: + options: + - 'OFF' + - Cool + - Heat + type: select + writable: false remarks: 0 Off, 1 Cool, 2 Heat - signed: '' type: ENUM - unit: '' ENUM_IN_THERMOSTAT2: address: '0x406A' - arithmetic: '' description: Hydro_ExternalThermostat2 enum: - 0x00: 'OFF' - 0x01: 'Cool' - 0x02: 'Heat' + 0: 'OFF' + 1: Cool + 2: Heat + hass_opts: + default_platform: sensor + platform: + options: + - 'OFF' + - Cool + - Heat + type: select + writable: false remarks: 0 Off, 1 Cool, 2 Heat - signed: '' type: ENUM - unit: '' ENUM_IN_THERMOSTAT_WATER_HEATER: address: '0x40C5' - arithmetic: '' description: Hydro_WaterHeaterThermostat - enumy: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: ENUM - unit: '' ENUM_IN_WATERPUMP_PWM_VALUE: address: '0x40C4' - arithmetic: '' description: Water pump speed + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + state_class: measurement + unit: '%' + writable: false remarks: "unit\xC2\_%" - signed: '' type: VAR - unit: '%' ENUM_IN_WATER_VALVE_1_ON_OFF: address: '0x4103' - arithmetic: '' - description: FCU Kit enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + description: FCU Kit + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_IN_WATER_VALVE_2_ON_OFF: address: '0x4104' - arithmetic: '' - description: '' - remarks: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_OUT_CHECK_REF_RESULT: address: '0x809C' - arithmetic: '' description: Refrigerant amount determination result enum: - 0x00: 'RefResult_NotInspect' - 0x01: 'Normal_Completion' - 0x02: 'RefResult_NotJudgment' - 0x03: 'Unable_To_Secure_Supercooling' - 0x04: 'RefResult_Normal' - 0x05: 'RefResult_Insufficient' - 0x06: 'Judgment_Not_Possible' - 0x07: 'Temperature_Range_Exceeded' - remarks: '' - signed: '' + 0: RefResult_NotInspect + 1: Normal_Completion + 2: RefResult_NotJudgment + 3: Unable_To_Secure_Supercooling + 4: RefResult_Normal + 5: RefResult_Insufficient + 6: Judgment_Not_Possible + 7: Temperature_Range_Exceeded + hass_opts: + default_platform: sensor + platform: + options: + - RefResult_NotInspect + - Normal_Completion + - RefResult_NotJudgment + - Unable_To_Secure_Supercooling + - RefResult_Normal + - RefResult_Insufficient + - Judgment_Not_Possible + - Temperature_Range_Exceeded + type: select + writable: false type: ENUM - unit: '' ENUM_OUT_CONTROL_FAN_NUM: address: '0x8099' - arithmetic: '' description: Number of outdoor fans - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: ENUM - unit: '' ENUM_OUT_EHS_WATEROUT_TYPE: address: '0x80D8' - arithmetic: '' - description: '' enum: - 0x00: 'Default' - 0x01: '70 %' + 0: Default + 1: 70 % + hass_opts: + default_platform: sensor + platform: + options: + - Default + - 70 % + type: select + writable: false remarks: "0 Default, 1 70\xC2\xB0C" - signed: '' type: ENUM - unit: '' ENUM_OUT_INSTALL_ODU_COUNT: address: '0x8092' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: 'false' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false + signed: false type: ENUM - unit: '' ENUM_OUT_LOAD_A2A_VALVE: address: '0x80C1' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_OUT_LOAD_OIL_BYPASS1: address: '0x80B8' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_OUT_LOAD_OIL_BYPASS2: address: '0x80B9' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_OUT_LOAD_PHEHEATER: address: '0x80D7' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_OUT_MCU_LOAD_COOL_A: address: '0x8049' - arithmetic: '' - description: MCU enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + description: MCU + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_OUT_MCU_LOAD_COOL_B: address: '0x804B' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_OUT_MCU_LOAD_COOL_C: address: '0x804D' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_OUT_MCU_LOAD_COOL_D: address: '0x804F' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_OUT_MCU_LOAD_COOL_E: address: '0x8051' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_OUT_MCU_LOAD_COOL_F: address: '0x8053' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_OUT_MCU_LOAD_HEAT_A: address: '0x804A' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_OUT_MCU_LOAD_HEAT_B: address: '0x804C' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_OUT_MCU_LOAD_HEAT_C: address: '0x804E' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_OUT_MCU_LOAD_HEAT_D: address: '0x8050' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_OUT_MCU_LOAD_HEAT_E: address: '0x8052' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_OUT_MCU_LOAD_HEAT_F: address: '0x8054' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_OUT_MCU_LOAD_LIQUID: address: '0x8055' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_OUT_MCU_PORT0_INDOOR_ADDR: address: '0x8058' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_OUT_MCU_PORT1_INDOOR_ADDR: address: '0x8059' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_OUT_MCU_PORT2_INDOOR_ADDR: address: '0x805A' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_OUT_MCU_PORT3_INDOOR_ADDR: address: '0x805B' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_OUT_MCU_PORT4_INDOOR_ADDR: address: '0x805C' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_OUT_MCU_PORT5_INDOOR_ADDR: address: '0x805D' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_OUT_OPERATION_AUTO_INSPECT_STEP: address: '0x803C' - arithmetic: '' - description: Automatic check step enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + description: Automatic check step + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' ENUM_OUT_OPERATION_SERVICE_OP: address: '0x8000' - arithmetic: '' description: Indoor unit service operation steps enum: - 0x00: 'OFF' - 0x02: 'Heating_Test_Run' - 0x03: 'Pump_Out' - 0x0D: 'Cooling_Test_Run' - 0x0E: 'Pump_Down' + 0: 'OFF' + 2: Heating_Test_Run + 3: Pump_Out + 13: Cooling_Test_Run + 14: Pump_Down + hass_opts: + default_platform: sensor + platform: + options: + - 'OFF' + - Heating_Test_Run + - Pump_Out + - Cooling_Test_Run + - Pump_Down + type: select + writable: false remarks: 2 Heating test run, 3 Pump out, 13 Cooling test run, 14 Pump down - signed: '' type: ENUM - unit: '' ENUM_OUT_OP_A2_CURRENTMODE: address: '0x80BE' - arithmetic: '' - description: '' enum: - 0x00: 'Null' - 0x01: 'A2W' - 0x02: 'A2A' - remarks: '' - signed: '' + 0: 'Null' + 1: A2W + 2: A2A + hass_opts: + default_platform: sensor + platform: + options: + - 'Null' + - A2W + - A2A + type: select + writable: false type: ENUM - unit: '' ENUM_OUT_OP_CHECK_REF_STEP: address: '0x808E' arithmetic: value & 0x0F description: Refrigerant amount level + enum: + 0: RefStep_0 + 1: RefStep_1 + 2: RefStep_2 + 3: RefStep_3 + 4: RefStep_4 + 5: RefStep_5 + 6: RefStep_6 + 7: RefStep_7 + 8: RefStep_8 + 255: 'off' + hass_opts: + default_platform: sensor + platform: + options: + - RefStep_0 + - RefStep_1 + - RefStep_2 + - RefStep_3 + - RefStep_4 + - RefStep_5 + - RefStep_6 + - RefStep_7 + - RefStep_8 + - 'off' + type: select + writable: false remarks: This is Enum in definition. But we need operation, so just consider this as variable. Min = 0, Max = 8 - enum: - 0x00: 'RefStep_0' - 0x01: 'RefStep_1' - 0x02: 'RefStep_2' - 0x03: 'RefStep_3' - 0x04: 'RefStep_4' - 0x05: 'RefStep_5' - 0x06: 'RefStep_6' - 0x07: 'RefStep_7' - 0x08: 'RefStep_8' - 0xFF: 'off' - signed: 'false' + signed: false type: ENUM - unit: '' ENUM_OUT_STATE_ACCUM_VALVE_ONOFF: address: '0x80B4' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' LVAR_AD_MCU_PORT_SETUP: address: '0x0448' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: LVAR - unit: '' LVAR_IN_AUTO_STATIC_PRESSURE: address: '0x4415' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: LVAR - unit: '' LVAR_IN_DEVICE_STAUS_HEATPUMP_BOILER: address: '0x440A' arithmetic: (value & 0x00000002) / 2 description: Switch_HyrdoFlow - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: LVAR - unit: '' LVAR_IN_ENTER_ROOM_CONTROL_DATA: address: '0x441B' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: LVAR - unit: '' LVAR_IN_ETO_COOL_CONTROL_DATA: address: '0x441F' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: LVAR - unit: '' LVAR_IN_ETO_HEAT_CONTROL_DATA: address: '0x4420' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: LVAR - unit: '' -LVAR_IN_MINUTES_SINCE_INSTALLATION: - address: '0x4423' - arithmetic: '' - description: Minutes since installation - remarks: - state_class: total_increasing - device_class: duration - signed: 'false' - type: LVAR - unit: 'min' -LVAR_IN_MINUTES_ACTIVE: - address: '0x4424' - arithmetic: '' - description: Minutes active - remarks: - state_class: total_increasing - device_class: duration - signed: 'false' - type: LVAR - unit: 'min' LVAR_IN_GENERATED_POWER_LAST_MINUTE: address: '0x4426' arithmetic: value / 1000 description: Generated power last minute + hass_opts: + default_platform: sensor + device_class: energy + platform: + type: number + mode: slider + unit: kWh + writable: false remarks: value is kWh, so do div 1000 - device_class: energy - signed: 'false' + signed: false + type: LVAR +LVAR_IN_MINUTES_ACTIVE: + address: '0x4424' + description: Minutes active + hass_opts: + default_platform: sensor + device_class: duration + platform: + type: number + mode: slider + state_class: total_increasing + unit: min + writable: false + signed: false + type: LVAR +LVAR_IN_MINUTES_SINCE_INSTALLATION: + address: '0x4423' + description: Minutes since installation + hass_opts: + default_platform: sensor + device_class: duration + platform: + type: number + mode: slider + state_class: total_increasing + unit: min + writable: false + signed: false type: LVAR - unit: kWh LVAR_IN_TOTAL_GENERATED_POWER: address: '0x4427' arithmetic: value / 1000 description: Total generated power + hass_opts: + default_platform: sensor + device_class: energy + platform: + type: number + mode: slider + state_class: total_increasing + unit: kWh + writable: false remarks: value is kWh, so do div 1000 - state_class: total_increasing - device_class: energy - signed: 'false' + signed: false type: LVAR - unit: kWh LVAR_OUT_AUTO_INSPECT_RESULT0: address: '0x840B' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: LVAR - unit: '' LVAR_OUT_AUTO_INSPECT_RESULT1: address: '0x840C' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: LVAR - unit: '' NASA_ADDRESSING: address: '0x2003' - arithmetic: '' - description: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false remarks: seen in NASA data from EHS Mono HT Quiet - signed: '' - type: '' - unit: '' NASA_ADDRESSING_ASSIGN_CONFIRM_ADDRESS: address: '0x2002' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_AHUPANEL_AHUKIT_ADDRESS: address: '0x461C' - arithmetic: '' - description: '' - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: STR - unit: '' NASA_AHUPANEL_CO2_CONTROL: address: '0x40CA' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_AHUPANEL_DUTY_CONTROL: address: '0x40C8' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_AHUPANEL_EA_RATE: address: '0x4294' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_AHUPANEL_ENERGYMANAGE_CONTROL: address: '0x40CB' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_AHUPANEL_ENTHALPY_CONTROL: address: '0x40C7' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_AHUPANEL_ERROR_STATUS: address: '0x40CF' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_AHUPANEL_HEATER_ONOFF_STATUS: address: '0x40D0' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_AHUPANEL_MIXING_RATE: address: '0x429B' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_AHUPANEL_MIXING_TEMP: address: '0x429A' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_AHUPANEL_OA_DAMPER_TARGET_RATE: address: '0x4291' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_AHUPANEL_OA_HUMIDITY: address: '0x4296' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_AHUPANEL_OA_TEMP: address: '0x4295' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_AHUPANEL_PANEL_OPTION: address: '0x461D' - arithmetic: '' - description: '' - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: STR - unit: '' NASA_AHUPANEL_POINT_STATUS: address: '0x429C' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_AHUPANEL_RA_FAN_ONOFF_STATUS: address: '0x40CE' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_AHUPANEL_RA_HUMIDITY: address: '0x4293' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_AHUPANEL_RA_SMOKE_DECTION_STATUS: address: '0x40CC' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_AHUPANEL_RA_TEMP: address: '0x4292' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_AHUPANEL_SA_FAN_ONOFF_STATUS: address: '0x40D1' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_AHUPANEL_SA_FAN_STATUS: address: '0x40CD' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_AHUPANEL_SA_HUMIDITY: address: '0x4298' - arithmetic: '' - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: true type: VAR - unit: '' NASA_AHUPANEL_SA_TEMP: address: '0x4297' - arithmetic: '' - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: true type: VAR - unit: '' NASA_AHUPANEL_SMOKE_DECTION_CONTROL: address: '0x40D2' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_AHUPANEL_STATIC_PRESSURE: address: '0x4299' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_AHUPANEL_SUMMERNIGHT_CONTROL: address: '0x40C9' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_AHUPANEL_TARGET_HUMIDITY: address: '0x4290' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_AIRFLOW_LEFTRIGHT: address: '0x407E' - arithmetic: '' - description: Left and right wind direction settings/status enum: - 0x00: 'OFF' - 0x01: 'ON' + 0: 'ON' + 1: 'OFF' + description: Left and right wind direction settings/status + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false remarks: 0 Off, 1 On - signed: '' type: ENUM - unit: '' NASA_AIRFLOW_UPDOWN: address: '0x4011' - arithmetic: '' - description: Up and down wind direction setting/status enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + description: Up and down wind direction setting/status + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_ALL_LAYER_DEVICE_COUNT: address: '0x2400' - arithmetic: '' - description: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false remarks: seen in NASA data from EHS Mono HT Quiet - signed: '' type: LVAR - unit: '' NASA_ALL_POWER_CONSUMPTION_CUMULATIVE: address: '0x0407' - arithmetic: '' description: Total cumulative power consumption - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_ALL_POWER_CONSUMPTION_SET: address: '0x0406' - arithmetic: '' description: Total instantaneous power consumption - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_ALL_REMOTE_LEVEL: address: '0x0409' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: LVAR - unit: '' NASA_ALTERNATIVE_MODE: address: '0x4060' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false remarks: 0 Off, 9 On - signed: '' type: ENUM - unit: '' NASA_CHANGE_ALL_NETWORK_STATUS: address: '0x200A' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_CHANGE_CONTROL_NETWORK_STATUS: address: '0x2006' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_CHANGE_LOCAL_NETWORK_STATUS: address: '0x2008' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_CHANGE_MODULE_NETWORK_STATUS: address: '0x2009' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_CHANGE_POLAR: address: '0x2001' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_CHANGE_SET_NETWORK_STATUS: address: '0x2007' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_COMMU_MICOM_BUTTON: address: '0x2018' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_COMMU_MICOM_LED: address: '0x2017' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_CONFIRM_ADDRESS: address: '0x0401' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: LVAR - unit: '' NASA_CONTROL_AUTO_CLEAN: address: '0x4042' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_CONTROL_DESIRED_HUMIDITY: address: '0x405E' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_CONTROL_HUMIDIFICATION: address: '0x4041' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_CONTROL_MDS: address: '0x403F' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_CONTROL_OAINTAKE: address: '0x403D' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_CONTROL_OUTER_COOL: address: '0x405C' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_CONTROL_SILENCE: address: '0x4046' - arithmetic: '' - description: Silence mode enum: - 0x00: 'OFF' - 0x01: 'ON' + 0: 'ON' + 1: 'OFF' + description: Silence mode + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: False remarks: 0 Off, 1 On - signed: '' type: ENUM - unit: '' NASA_CONTROL_SILENCT: address: '0x4050' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_CONTROL_SPI: address: '0x4043' - arithmetic: '' - description: '' - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: ENUM - unit: '' NASA_COOL_SET_DISCHARGE: address: '0x422A' arithmetic: value / 10 description: User limitation - Water Cooling Temperature Max. - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_CURRENT_DISCHARGE: address: '0x420B' arithmetic: value / 10 description: Indoor Discharge Temp(Duct, AHU) - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_CURRENT_TEMP: address: '0x4203' arithmetic: value / 10 description: Room Temperature + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false remarks: 'Room temperature for zone #1' - signed: 'true' + signed: true type: VAR - unit: "\u00b0C" NASA_CYCLEOPTION: address: '0x0603' - arithmetic: '' - description: '' - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: STR - unit: '' NASA_DEMAND_SYNC_TIME: address: '0x0213' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_DETECTION_TYPE: address: '0x000D' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' -VAR_IN_FSV_1051: - address: '0x4252' - arithmetic: value / 10 - description: User limitation - Hot Water Temperature Max. - remarks: '' - signed: 'true' - type: VAR - unit: "\u00b0C" -VAR_IN_FSV_1052: - address: '0x4253' - arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' - type: VAR - unit: "\u00b0C" + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_DHW_OPMODE: address: '0x4066' - arithmetic: '' description: Water heater mode enum: - 0x00: 'Eco' - 0x01: 'Standard' - 0x02: 'Power' - 0x03: 'Force' + 0: Eco + 1: Standard + 2: Power + 3: Force + hass_opts: + default_platform: sensor + platform: + options: + - Eco + - Standard + - Power + - Force + type: select + writable: false remarks: 0 Eco, 1 Standard, 2 Power, 3 Force - signed: '' type: ENUM - unit: '' NASA_DHW_OPMODE_SUPPORT: address: '0x40B1' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_DHW_POWER: address: '0x4065' - arithmetic: '' - description: Water heater power enum: - 0x00: 'OFF' - 0x01: 'ON' + 0: 'ON' + 1: 'OFF' + description: Water heater power + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false remarks: 0 Off, 1 On - signed: '' type: ENUM - unit: '' NASA_DHW_REFERENCE_TEMP: address: '0x406F' - arithmetic: '' description: Hydro_ControlChoice_RoomTemp enum: - 0x00: 'ROOM' - 0x01: 'Water out' + 0: ROOM + 1: Water out + hass_opts: + default_platform: sensor + platform: + options: + - ROOM + - Water out + type: select + writable: false remarks: 0 Room, 1 Water out. Variable isEhsSetTempWaterOut. See 0x4201 and 0x4247. - signed: '' type: ENUM - unit: '' NASA_DHW_VALVE: address: '0x4067' - arithmetic: '' description: Hydro_3Way enum: - 0x00: 'ROOM' - 0x01: 'TANK' + 0: ROOM + 1: TANK + hass_opts: + default_platform: sensor + platform: + options: + - ROOM + - TANK + type: select + writable: false remarks: 0 Room, 1 Tank - signed: '' type: ENUM - unit: '' NASA_DISCHARGE_TEMP_ENABLE: address: '0x4070' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false remarks: '0 Off, 1 On (rem: "DISCHAGE" is typo in NASA.ptc)' - signed: '' type: ENUM - unit: '' NASA_EEPROM_CODE: address: '0x060C' - arithmetic: '' description: OutdoorTableEEPROMDBCodeVersion - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: STR - unit: '' +NASA_EHSSENTINEL_COP: + address: '0x9998' + description: Current COP + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + state_class: measurement + writable: false + remarks: Custom Measurment + signed: true + type: VAR +NASA_EHSSENTINEL_HEAT_OUTPUT: + address: '0x9999' + description: Current generated Heat Output + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + state_class: measurement + unit: W + writable: false + remarks: Custom Measurment + signed: true + type: VAR +NASA_EHSSENTINEL_TOTAL_COP: + address: '0x9997' + description: Total COP of lifetime + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + state_class: measurement + writable: false + remarks: Custom Measurment + signed: true + type: VAR NASA_EHS_FSV_SETTING_MIN_MAX_TEMP: address: '0x461A' - arithmetic: '' - description: '' - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: STR - unit: '' NASA_EHS_INDOOR_OPMODE: address: '0x4064' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_EHS_INDOOR_POWER: address: '0x4063' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_EHS_SETTING_MIN_MAX_TEMP: address: '0x4619' - arithmetic: '' - description: '' - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: STR - unit: '' NASA_ENABLEDOWNLOAD: address: '0x000A' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' -ENUM_IN_FSV_3011: - address: '0x4097' - arithmetic: '' - description: '' - enum: - 0x00: 'No' - 0x01: 'one' - 0x02: 'two' - remarks: values 0="No" up to 2="2" - signed: '' - type: ENUM - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_ERROR_CODE1: address: '0x0202' - arithmetic: '' description: Error code - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' NASA_ERROR_CODE2: address: '0x0203' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_ERROR_CODE3: address: '0x0204' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_ERROR_CODE4: address: '0x0205' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_ERROR_CODE5: address: '0x0206' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_ERROR_INOUT: address: '0x440F' - arithmetic: '' - description: '' - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: LVAR - unit: '' NASA_ERV_FANSPEED: address: '0x4008' - arithmetic: '' description: Indoor unit current air volume enum: - 0x00: 'Auto' - 0x01: 'Low' - 0x02: 'Mid' - 0x03: 'High' - 0x04: 'Turbo' - remarks: '' - signed: '' + 0: Auto + 1: Low + 2: Mid + 3: High + 4: Turbo + hass_opts: + default_platform: sensor + platform: + options: + - Auto + - Low + - Mid + - High + - Turbo + type: select + writable: false type: ENUM - unit: '' NASA_ERV_OPMODE: address: '0x4004' - arithmetic: '' - description: '' - remarks: '' - signed: '' enum: - 0x00: 'Normal' - 0x01: 'HeatEx' - 0x02: 'Bypass' - 0x03: 'Normal_Purify' - 0x04: 'HeatEx_Purify' - 0x05: 'Purify' - 0x06: 'Sleep' - 0x07: 'Bypass_Purify' + 0: Normal + 1: HeatEx + 2: Bypass + 3: Normal_Purify + 4: HeatEx_Purify + 5: Purify + 6: Sleep + 7: Bypass_Purify + hass_opts: + default_platform: sensor + platform: + options: + - Normal + - HeatEx + - Bypass + - Normal_Purify + - HeatEx_Purify + - Purify + - Sleep + - Bypass_Purify + type: select + writable: false type: ENUM - unit: '' NASA_ERV_POWER: address: '0x4003' - arithmetic: '' - description: Ventilation operation mode - remarks: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - signed: '' + 0: 'ON' + 1: 'OFF' + description: Ventilation operation mode + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_EVA_INHOLE_TEMP: address: '0x4208' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_EVA_IN_TEMP: address: '0x4205' arithmetic: value / 10 description: Indoor Eva In Temperature - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_EVA_OUT_TEMP: address: '0x4206' arithmetic: value / 10 description: Indoor Eva Out Temperature - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_FANSPEED: address: '0x4006' - arithmetic: '' - description: '' - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: ENUM - unit: '' NASA_FILTER_CLEAN: address: '0x4025' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_FILTER_WARNING: address: '0x4027' - arithmetic: '' - description: '' - remarks: '' - signed: '' enum: - 0x00: 'OFF' - 0x01: 'ON' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_GATHER_INFORMATION: address: '0x0007' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_GATHER_INFORMATION_COUNT: address: '0x0008' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_GROUPCONTROL_BIT1: address: '0x4405' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_GROUPCONTROL_BIT2: address: '0x4406' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_GROUPCONTROL_BIT3: address: '0x4407' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_HEAT_SET_DISCHARGE: address: '0x422B' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_HUMIDITY_PERCENT: address: '0x4038' - arithmetic: '' - description: '' - remarks: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_IM_MASTER: address: '0x2000' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_IM_MASTER_NOTIFY: address: '0x0000' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_INDOOR_ABLE_FUNCTION: address: '0x4604' - arithmetic: '' - description: '' - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: STR - unit: '' NASA_INDOOR_ABSOLUTE_CAPACITY: address: '0x4212' arithmetic: value / 8.5 - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + device_class: power + platform: + type: number + mode: slider + unit: kW + writable: false + signed: false type: VAR - unit: kW NASA_INDOOR_AIRCLEANFAN_CURRENT_RPM: address: '0x4220' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: 'rpm' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + state_class: measurement + unit: rpm + writable: false NASA_INDOOR_CAPACITY: address: '0x4211' arithmetic: value / 8.5 description: Capacity - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + device_class: power + platform: + type: number + mode: slider + unit: kW + writable: false + signed: false type: VAR - unit: kW -VAR_IN_FSV_1021: - address: '0x424C' - arithmetic: value / 10 - description: User limitation - Room Cooling Temperature Max. - remarks: '' - signed: 'true' - type: VAR - unit: "\u00b0C" -VAR_IN_FSV_1011: - address: '0x424A' - arithmetic: value / 10 - description: User limitation - Water Cooling Temperature Max. - remarks: '' - signed: 'true' - type: VAR - unit: "\u00b0C" -VAR_IN_FSV_1022: - address: '0x424D' - arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' - type: VAR - unit: "\u00b0C" -VAR_IN_FSV_1012: - address: '0x424B' - arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' - type: VAR - unit: "\u00b0C" NASA_INDOOR_CURRENT_EEV2: address: '0x4218' - arithmetic: '' description: Current EEV2 development level - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' NASA_INDOOR_CURRENT_EEV3: address: '0x4219' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_INDOOR_CURRENT_EEV4: address: '0x421A' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_INDOOR_DEFROST_STATUS: address: '0x402E' - arithmetic: '' - description: Defrost mode - remarks: 0 Off, 1 On - signed: '' enum: - 0x00: 'OFF' - 0x01: 'ON' + 0: 'ON' + 1: 'OFF' + description: Defrost mode + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false + remarks: 0 Off, 1 On type: ENUM - unit: '' NASA_INDOOR_DHW_CURRENT_TEMP: address: '0x4237' arithmetic: value / 10 description: DHW tank current temperature - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_INDOOR_DHW_SET_TEMP: address: '0x4235' arithmetic: value / 10 description: DHW target temperature - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" -VAR_IN_FSV_1041: - address: '0x4250' - arithmetic: value / 10 - description: User limitation - Room heating Temperature Max. - remarks: '' - signed: 'true' - type: VAR - unit: "\u00b0C" -VAR_IN_FSV_1031: - address: '0x424E' - arithmetic: value / 10 - description: User limitation - Water Heating Temperature Max. - remarks: '' - signed: 'true' - type: VAR - unit: "\u00b0C" -VAR_IN_FSV_1042: - address: '0x4251' - arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' - type: VAR - unit: "\u00b0C" -VAR_IN_FSV_1032: - address: '0x424F' - arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' - type: VAR - unit: "\u00b0C" NASA_INDOOR_MODEL_INFORMATION: address: '0x4229' - arithmetic: '' description: Indoor unit model information - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: VAR - unit: '' NASA_INDOOR_OPMODE: address: '0x4001' - arithmetic: '' description: Indoor unit control mode enum: - 0x00: 'Auto' - 0x01: 'Cool' - 0x02: 'Dry' - 0x03: 'Fan' - 0x04: 'Heat' - 0x15: 'Cool Storage' - 0x18: 'Hot water' + 0: Auto + 1: Cool + 2: Dry + 3: Fan + 4: Heat + 21: Cool Storage + 24: Hot water + hass_opts: + default_platform: sensor + platform: + options: + - Auto + - Cool + - Dry + - Fan + - Heat + - Cool Storage + - Hot water + type: select + writable: True remarks: 0 Auto, 1 Cool, 2 Dry, 3 Fan, 4 Heat, 21 Cool Storage, 24 Hot water - signed: '' type: ENUM - unit: '' NASA_INDOOR_OUTER_TEMP: address: '0x420C' arithmetic: value / 10 - description: '' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false remarks: same value as 0x8204 (sensor_airout) ? - signed: 'true' + signed: true type: VAR - unit: "\u00b0C" NASA_INDOOR_OUT_GOING: address: '0x406D' - arithmetic: '' - description: Outing mode enum: - 0x00: 'OFF' - 0x01: 'ON' + 0: 'ON' + 1: 'OFF' + description: Outing mode + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false remarks: 0 Off, 1 On - signed: '' type: ENUM - unit: '' NASA_INDOOR_POWER_CONSUMPTION: address: '0x4284' - arithmetic: '' description: Indoor unit power consumption - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_INDOOR_REAL_OPMODE: address: '0x4002' - arithmetic: '' description: Indoor unit current operation mode enum: - 0x00: 'Auto' - 0x01: 'Cool' - 0x02: 'Dry' - 0x03: 'Fan' - 0x04: 'Heat' - 0x0B: 'Auto Cool' - 0x0C: 'Auto Dry' - 0x0D: 'Auto Fan' - 0x0E: 'Auto Heat' - 0x15: 'Cool Storage' - 0x18: 'Hot water' - 0xFF: 'NULL mode' + 0: Auto + 1: Cool + 2: Dry + 3: Fan + 4: Heat + 11: Auto Cool + 12: Auto Dry + 13: Auto Fan + 14: Auto Heat + 21: Cool Storage + 24: Hot water + 255: NULL mode + hass_opts: + default_platform: sensor + platform: + options: + - Auto + - Cool + - Dry + - Fan + - Heat + - Auto Cool + - Auto Dry + - Auto Fan + - Auto Heat + - Cool Storage + - Hot water + - NULL mode + type: select + writable: False remarks: 0 Auto, 1 Cool, 2 Dry, 3 Fan, 4 Heat, 11 Auto Cool, 12 Auto Dry, 13 Auto Fan, 14 Auto Heat, 21 Cool Storage, 24 Hot water, 255 NULL mode - signed: '' type: ENUM - unit: '' NASA_INDOOR_SETTEMP_WATEROUT: address: '0x4247' arithmetic: value / 10 description: Hydro_WaterOutletTargetF + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false remarks: variable waterOutSetTemp - signed: 'true' + signed: true type: VAR - unit: "\u00b0C" NASA_INDOOR_SETTING_MIN_MAX_TEMP: address: '0x4608' - arithmetic: '' - description: '' - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: STR - unit: '' NASA_INDOOR_WATER_IN_TEMP: address: '0x4236' arithmetic: value / 10 description: Hydro_WaterIn - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_INDOOR_WATER_OUT_TEMP: address: '0x4238' arithmetic: value / 10 description: Hydro_WaterOut - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_INODDR_CURRENT_EEV1: address: '0x4217' - arithmetic: '' description: Current EEV development level - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' NASA_INSPECTION_MODE: address: '0x0004' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_INSTALLOPTION2: address: '0x0602' - arithmetic: '' - description: '' - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: STR - unit: '' NASA_INSTALL_OPTION: address: '0x0601' - arithmetic: '' - description: '' - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: STR - unit: '' NASA_LAYER: address: '0x200F' - arithmetic: '' description: Enumeration Type - remarks: '' - signed: '' - enumy: - 0x00: 'Control_Layer' - 0x01: 'Set_Layer' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: ENUM - unit: '' NASA_LEVEL_AIRSWING: address: '0x040D' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: LVAR - unit: '' NASA_LEVEL_COOL_HIGH_TEMP_LIMIT: address: '0x0411' arithmetic: (value & 0xFFFF0000u) >> 16) / 10.0 - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: false type: LVAR - unit: "\u00b0C" NASA_LEVEL_COOL_LOW_TEMP_LIMIT: address: '0x0412' arithmetic: (value & 0xFFFF0000u) >> 16) / 10.0 - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: false type: LVAR - unit: "\u00b0C" NASA_LEVEL_FANSPEED: address: '0x040C' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: LVAR - unit: '' NASA_LEVEL_HEAT_HIGH_TEMP_LIMIT: address: '0x0413' arithmetic: (value & 0xFFFF0000u) >> 16) / 10.0 - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: false type: LVAR - unit: "\u00b0C" NASA_LEVEL_HEAT_LOW_TEMP_LIMIT: address: '0x0414' arithmetic: (value & 0xFFFF0000u) >> 16) / 10.0 - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: false type: LVAR - unit: "\u00b0C" NASA_LEVEL_KEEP_ALTERNATIVE_MODE: address: '0x040F' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: LVAR - unit: '' NASA_LEVEL_KEY_INPUT: address: '0x0416' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: LVAR - unit: '' NASA_LEVEL_OPMODE: address: '0x040B' arithmetic: value & 0xFF - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: LVAR - unit: '' NASA_LEVEL_OPMODE_LIMIT: address: '0x0410' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: LVAR - unit: '' NASA_LEVEL_OUT_POINT_INPUT: address: '0x0415' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: LVAR - unit: '' NASA_LEVEL_POWER: address: '0x040A' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: LVAR - unit: '' NASA_LEVEL_SETTEMP: address: '0x040E' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: LVAR - unit: '' NASA_MICOM_CODE: address: '0x0608' - arithmetic: '' description: OutdoorUnitMainDBCodeVersion + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false remarks: VariableAssign Identifier="dbCode" - signed: '' type: STR - unit: '' NASA_MODIFIED_CURRENT_TEMP: address: '0x4204' arithmetic: value / 10 description: Temperature - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_NAME: address: '0x0605' - arithmetic: '' - description: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false remarks: appears when using S-NET pro 2 software - signed: '' type: STR - unit: '' NASA_NET_ADDRESS: address: '0x0210' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_OUTDOOR_4WAY2_VALVE: address: '0x802A' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_OUTDOOR_4WAY_VALVE: address: '0x801A' - arithmetic: '' - description: 4Way On/Off enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + description: 4Way On/Off + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_OUTDOOR_ACCUMULATOR_CCH: address: '0x8016' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_OUTDOOR_ACCUM_RETURN2_VALVE: address: '0x80AC' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_OUTDOOR_ACCUM_RETURN_VALVE: address: '0x8037' - arithmetic: '' - description: ARV On/Off enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + description: ARV On/Off + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_OUTDOOR_ACCUM_TEMP: address: '0x82C8' arithmetic: value / 10 description: Accumulator outlet temperature - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_OUTDOOR_APPEARANCE_RPM: address: '0x82D0' arithmetic: value / 10 description: Appearance RPM - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + state_class: measurement + unit: rpm + writable: false + signed: false type: VAR - unit: rpm NASA_OUTDOOR_BACKUP_OPERATION: address: '0x80A5' - arithmetic: '' - description: Backup operation operation status On/Off enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + description: Backup operation operation status On/Off + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_OUTDOOR_BASE_HEATER: address: '0x80AF' - arithmetic: '' - description: Base heater On/Off state for EHS enum: - 0x00: 'OFF' - 0x01: 'ON' + 0: 'ON' + 1: 'OFF' + description: Base heater On/Off state for EHS + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false remarks: 0 Off, 1 On - signed: '' type: ENUM - unit: '' NASA_OUTDOOR_CBOX_COOLING_FAN: address: '0x809E' - arithmetic: '' - description: DC Fan enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + description: DC Fan + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_OUTDOOR_CBOX_TEMP: address: '0x82BE' arithmetic: value / 10 description: Contor Box Temp - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_OUTDOOR_CCH1_STATUS: address: '0x8013' - arithmetic: '' - description: CCH1 On/Off enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + description: CCH1 On/Off + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_OUTDOOR_CCH2_STATUS: address: '0x8014' - arithmetic: '' - description: CCH2 On/Off enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + description: CCH2 On/Off + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_OUTDOOR_CCH3_STATUS: address: '0x8015' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_OUTDOOR_CH_SWITCH_VALUE: address: '0x80B2' - arithmetic: '' - description: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false remarks: seen in NASA data from EHS Mono HT Quiet - signed: '' type: ENUM - unit: '' NASA_OUTDOOR_COMP1_ORDER_HZ: address: '0x8236' - arithmetic: '' description: Instruction frequency 1 - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + unit: Hz + writable: false + signed: false type: VAR - unit: 'Hz' NASA_OUTDOOR_COMP1_RUNNING_TIME: address: '0x8405' - arithmetic: '' description: OutdoorTableCompressorRunningTime 1 + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false remarks: hours - signed: 'false' + signed: false type: LVAR - unit: '' NASA_OUTDOOR_COMP1_RUN_HZ: address: '0x8238' - arithmetic: '' description: Current frequency 1 - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + unit: Hz + writable: false + signed: false type: VAR - unit: 'Hz' NASA_OUTDOOR_COMP1_STATUS: address: '0x8010' - arithmetic: '' - description: Comp#1 On/Off enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + description: Comp#1 On/Off + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_OUTDOOR_COMP1_TARGET_HZ: address: '0x8237' - arithmetic: '' description: Target frequency 1 - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + unit: Hz + writable: false + signed: false type: VAR - unit: 'Hz' NASA_OUTDOOR_COMP2_ORDER_HZ: address: '0x8274' - arithmetic: '' description: Instruction frequency 2 - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + unit: Hz + writable: false + signed: false type: VAR - unit: 'Hz' NASA_OUTDOOR_COMP2_RUNNING_TIME: address: '0x8406' - arithmetic: '' description: OutdoorTableCompressorRunningTime 2 - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: LVAR - unit: '' NASA_OUTDOOR_COMP2_RUN_HZ: address: '0x8276' - arithmetic: '' description: Current frequency 2 - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + unit: Hz + writable: false + signed: false type: VAR - unit: 'Hz' NASA_OUTDOOR_COMP2_STATUS: address: '0x8011' - arithmetic: '' - description: Comp#2 On/Off enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + description: Comp#2 On/Off + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_OUTDOOR_COMP2_TARGET_HZ: address: '0x8275' - arithmetic: '' description: Target frequency 2 - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + unit: Hz + writable: false + signed: false type: VAR - unit: 'Hz' NASA_OUTDOOR_COMP3_ORDER_HZ: address: '0x82C0' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: 'Hz' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + unit: Hz + writable: false NASA_OUTDOOR_COMP3_RUNNING_TIME: address: '0x840E' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_OUTDOOR_COMP3_RUN_HZ: address: '0x82C2' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: 'Hz' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + unit: Hz + writable: false NASA_OUTDOOR_COMP3_STATUS: address: '0x8012' - arithmetic: '' - description: Comp#3 On/Off enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + description: Comp#3 On/Off + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_OUTDOOR_COMP3_TARGET_HZ: address: '0x82C1' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: 'Hz' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + unit: Hz + writable: false NASA_OUTDOOR_COMPENSATE_COOL_CAPA: address: '0x829C' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_OUTDOOR_COMPENSATE_HEAT_CAPA: address: '0x829D' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_OUTDOOR_COM_PROTECT_OPERATIOIN: address: '0x80A6' - arithmetic: '' - description: Compressor protection control operation status On/Off enum: - 0x00: 'OFF' - 0x01: 'ON' + 0: 'ON' + 1: 'OFF' + description: Compressor protection control operation status On/Off + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false remarks: 0 Off, 1 On - signed: '' type: ENUM - unit: '' NASA_OUTDOOR_COND_OUT1: address: '0x8218' arithmetic: value / 10 description: Main heat exchanger outlet temperature - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_OUTDOOR_COND_OUT2: address: '0x82BF' arithmetic: value / 10 description: Sub heat exchanger outlet temperature - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_OUTDOOR_COND_OVER_COOL: address: '0x82CE' arithmetic: value / 10 description: Outdoor heat exchanger subcooling degree - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' NASA_OUTDOOR_CONTROL_PRIME_UNIT: address: '0x823F' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' NASA_OUTDOOR_CONTROL_WATTMETER_1UNIT: address: '0x8411' - arithmetic: '' description: Instantaneous power consumption of outdoor unit. One outdoor unit. Not used by the controller. + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false remarks: appears about every 135 seconds, so less often than 0x8413 - signed: '' type: LVAR - unit: '' NASA_OUTDOOR_CONTROL_WATTMETER_1UNIT_ACCUM: address: '0x8412' - arithmetic: '' description: Cumulative power consumption of outdoor unit. One outdoor unit. Not used by the controller. + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false remarks: never seen in NASA data from EHS Mono HT Quiet - signed: '' - type: '' - unit: '' NASA_OUTDOOR_CONTROL_WATTMETER_ALL_UNIT: address: '0x8413' arithmetic: value / 1000 description: Outdoor unit instantaneous power consumption. Sum of modules + hass_opts: + default_platform: sensor + device_class: power + platform: + type: number + mode: slider + unit: kW + writable: false remarks: appears about every 30 seconds, not once in a minute - signed: 'false' + signed: false type: LVAR - unit: kW NASA_OUTDOOR_CONTROL_WATTMETER_ALL_UNIT_ACCUM: address: '0x8414' arithmetic: value / 1000 description: Outdoor unit cumulative power consumption. Sum of modules + hass_opts: + default_platform: sensor + device_class: energy + platform: + type: number + mode: slider + state_class: total_increasing + unit: kWh + writable: false remarks: value is Wh, so do div 1000 - state_class: total_increasing - device_class: energy - signed: 'false' + signed: false type: LVAR - unit: kWh NASA_OUTDOOR_CONTROL_WATTMETER_TOTAL_SUM: address: '0x8415' - arithmetic: '' description: Total (indoor + outdoor) instantaneous power consumption + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false remarks: never seen in NASA data from EHS Mono HT Quiet - signed: '' type: LVAR - unit: '' NASA_OUTDOOR_CONTROL_WATTMETER_TOTAL_SUM_ACCUM: address: '0x8416' - arithmetic: '' description: Total (indoor + outdoor) cumulative power consumption + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false remarks: never seen in NASA data from EHS Mono HT Quiet - signed: '' type: LVAR - unit: '' NASA_OUTDOOR_COOLONLY_MODEL: address: '0x809D' - arithmetic: '' - description: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false remarks: seen in NASA data from EHS Mono HT Quiet (value always = 0) - signed: '' type: ENUM - unit: '' NASA_OUTDOOR_COOL_SUM_CAPA: address: '0x8298' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_OUTDOOR_CT1: address: '0x8217' arithmetic: value / 10 description: Compressor 1 current + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false remarks: very unprecise, just 1 fractional digit - signed: 'false' + signed: false type: VAR - unit: '' NASA_OUTDOOR_CT2: address: '0x8277' - arithmetic: '' description: Compressor 2 current - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' NASA_OUTDOOR_CT3: address: '0x82A3' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_OUTDOOR_CT_RESTRICT_OPTION: address: '0x829B' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_OUTDOOR_DCLINK1_VOLT: address: '0x823B' - arithmetic: '' description: DC Link1 (Inverter DC voltage input) + hass_opts: + default_platform: sensor + device_class: voltage + platform: + type: number + mode: slider + unit: V + writable: false remarks: Min 0, Max 1000 - signed: 'false' + signed: false type: VAR - unit: '' NASA_OUTDOOR_DCLINK2_VOLT: address: '0x82B3' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_OUTDOOR_DCLINK3_VOLT: address: '0x82C3' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_OUTDOOR_DEFROST_STEP: address: '0x8247' - arithmetic: '' description: Outdoor unit defrost operation steps enum: - 0x01: 'Defrost stage 1' - 0x02: 'Defrost stage 2' - 0x03: 'Defrost stage 3' - 0x04: 'Defrost stage 4' - 0x05: 'Defrost stage 5' - 0x06: 'Defrost stage 6' - 0x07: 'Defrost operation end stage' - 0x08: 'Defrost stage 8' - 0x09: 'Defrost stage 9' - 0xFF: 'No defrost operation' + 1: Defrost stage 1 + 2: Defrost stage 2 + 3: Defrost stage 3 + 4: Defrost stage 4 + 5: Defrost stage 5 + 6: Defrost stage 6 + 7: Defrost operation end stage + 8: Defrost stage 8 + 9: Defrost stage 9 + 9: Defrost stage 9 + 10: Defrost stage 10 + 255: No defrost operation + hass_opts: + default_platform: sensor + platform: + options: + - Defrost stage 1 + - Defrost stage 2 + - Defrost stage 3 + - Defrost stage 4 + - Defrost stage 5 + - Defrost stage 6 + - Defrost operation end stage + - Defrost stage 8 + - Defrost stage 9 + - No defrost operation + type: select + writable: false remarks: 1 Defrost stage 1, 2 Defrost stage 2, 3 Defrost stage 3, 4 Defrost stage 4, 7 Defrost operation end stage, 255 No defrost operation - signed: '' type: ENUM - unit: '' NASA_OUTDOOR_DISCHARGE_TEMP1: address: '0x820A' arithmetic: value / 10 description: Discharge1 + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false remarks: The discharge temperature in a heat pump refers to the temperature of the refrigerant as it exits the compressor and enters the condenser. - signed: 'true' + signed: true type: VAR - unit: "\u00b0C" NASA_OUTDOOR_DISCHARGE_TEMP2: address: '0x820C' arithmetic: value / 10 description: Discharge2 - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_OUTDOOR_DISCHARGE_TEMP3: address: '0x820E' arithmetic: value / 10 description: Discharge3 - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_OUTDOOR_DOUBLE_TUBE: address: '0x821C' arithmetic: value / 10 description: Liquid pipe temperature - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_OUTDOOR_DRED_LEVEL: address: '0x80A7' - arithmetic: '' - description: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false remarks: seen in NASA data from EHS Mono HT Quiet - signed: '' type: ENUM - unit: '' NASA_OUTDOOR_EHSCOUNT: address: '0x0209' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_OUTDOOR_ENGINE_RPM: address: '0x82CF' - arithmetic: '' description: Engine RPM - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + state_class: measurement + unit: rpm + writable: false + signed: false type: VAR - unit: 'rpm' NASA_OUTDOOR_ENGINE_WATER_TEMP: address: '0x82C9' arithmetic: value / 10 description: Engine water temperature - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_OUTDOOR_ERVCOUNT: address: '0x0208' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_OUTDOOR_EVA_IN: address: '0x82DE' arithmetic: value / 10 description: Eva In for EHS - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_OUTDOOR_EVIEEV: address: '0x822E' - arithmetic: '' description: EVI EEV - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' NASA_OUTDOOR_EVI_BYPASS_VALVE: address: '0x8021' - arithmetic: '' - description: EVI ByPass On/Off enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + description: EVI ByPass On/Off + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_OUTDOOR_EVI_IN: address: '0x821E' arithmetic: value / 10 description: EVI IN - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_OUTDOOR_EVI_OUT: address: '0x8220' arithmetic: value / 10 description: EVI OUT - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_OUTDOOR_EVI_SOL1_VALVE: address: '0x8022' - arithmetic: '' - description: EVI Sol1 On/Off enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + description: EVI Sol1 On/Off + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_OUTDOOR_EVI_SOL2_VALVE: address: '0x8023' - arithmetic: '' - description: EVI Sol2 On/Off enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + description: EVI Sol2 On/Off + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_OUTDOOR_EVI_SOL3_VALVE: address: '0x8024' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_OUTDOOR_EXT_CMD_OPERATION: address: '0x8081' - arithmetic: '' - description: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false remarks: seen in NASA data from EHS Mono HT Quiet - signed: '' type: ENUM - unit: '' NASA_OUTDOOR_FAN_CT1: address: '0x82B9' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_OUTDOOR_FAN_CT2: address: '0x82BA' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_OUTDOOR_FAN_IPM1_TEMP: address: '0x82A6' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: "\u00b0C" + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false NASA_OUTDOOR_FAN_IPM2_TEMP: address: '0x82A7' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: "\u00b0C" + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false NASA_OUTDOOR_FAN_RPM1: address: '0x823D' - arithmetic: '' description: Outdoor Fan1 RPM - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + state_class: measurement + unit: rpm + writable: false + signed: false type: VAR - unit: 'rpm' NASA_OUTDOOR_FAN_RPM2: address: '0x823E' - arithmetic: '' description: Outdoor Fan2 RPM - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + state_class: measurement + unit: rpm + writable: false + signed: false type: VAR - unit: 'rpm' NASA_OUTDOOR_FAN_STEP1: address: '0x8226' - arithmetic: '' description: Outdoor Fan Step + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false remarks: Min 0, Max 10000 - signed: 'false' + signed: false type: VAR - unit: '' NASA_OUTDOOR_FAN_STEP2: address: '0x8227' - arithmetic: '' - description: '' - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: VAR - unit: '' NASA_OUTDOOR_FLOW_SWITCH: address: '0x803B' - arithmetic: '' - description: Flow Switch enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + description: Flow Switch + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_OUTDOOR_FLUX_VARIABLE_VALVE: address: '0x82BD' - arithmetic: '' description: Flow Control - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: true type: VAR - unit: '' NASA_OUTDOOR_GAS_CHARGE: address: '0x8025' - arithmetic: '' - description: Hot Gas Chargin enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + description: Hot Gas Chargin + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_OUTDOOR_HEATING_PERCENT: address: '0x8231' - arithmetic: '' - description: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false remarks: seen in NASA data from EHS Mono HT Quiet - signed: '' type: VAR - unit: '' NASA_OUTDOOR_HIGH_PRESS: address: '0x8206' arithmetic: (value / 10) * 0.980665 description: High pressure - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: pressure + platform: + type: number + mode: slider + unit: bar + writable: false + signed: true type: VAR - unit: bar NASA_OUTDOOR_HIGH_PRESS_TEMP: address: '0x829F' arithmetic: value / 10 description: High pressure saturation temperature - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_OUTDOOR_HOTGAS1: address: '0x8017' - arithmetic: '' - description: HotGas1 On/Off enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + description: HotGas1 On/Off + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_OUTDOOR_HOTGAS2: address: '0x8018' - arithmetic: '' - description: HotGas2 On/Off enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + description: HotGas2 On/Off + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_OUTDOOR_HP: address: '0x8287' - arithmetic: 'value * 0.7457' + arithmetic: value * 0.7457 description: Outdoor unit horsepower (in kw) + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + unit: kw + writable: false remarks: unknown UNIT "HP" - signed: 'false' + signed: false type: VAR - unit: kw NASA_OUTDOOR_HREEV: address: '0x822F' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_OUTDOOR_INDOORCOUNT: address: '0x0207' - arithmetic: '' description: Number of indoor units connected - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' NASA_OUTDOOR_INDOOR_DEFROST_STEP: address: '0x8061' - arithmetic: '' description: Indoor unit defrost operation steps enum: - 0x01: 'Defrost stage 1' - 0x02: 'Defrost stage 2' - 0x03: 'Defrost stage 3' - 0x04: 'Defrost stage 4' - 0x07: 'Defrost operation end stage' - 0xFF: 'No defrost operation' + 1: Defrost stage 1 + 2: Defrost stage 2 + 3: Defrost stage 3 + 4: Defrost stage 4 + 7: Defrost operation end stage + 255: No defrost operation + hass_opts: + default_platform: sensor + platform: + options: + - Defrost stage 1 + - Defrost stage 2 + - Defrost stage 3 + - Defrost stage 4 + - Defrost operation end stage + - No defrost operation + type: select + writable: false remarks: 1 Defrost stage 1, 2 Defrost stage 2, 3 Defrost stage 3, 4 Defrost stage 4, 7 Defrost operation end stage, 255 No defrost operation - signed: '' type: ENUM - unit: '' NASA_OUTDOOR_IPM_TEMP1: address: '0x8254' arithmetic: value / 10 description: IPM1 Temperature + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false remarks: Min -41, Max 150. The IPM is a component within the inverter system. It is responsible for converting the incoming direct current (DC) power from the power supply into alternating current (AC) power that drives the compressor motor. The term "intelligent" is often used because the IPM includes sophisticated electronics and control algorithms that optimize the motor's performance. - signed: 'true' + signed: true type: VAR - unit: "\u00b0C" NASA_OUTDOOR_IPM_TEMP2: address: '0x8255' arithmetic: value / 10 description: IPM2 Temperature - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_OUTDOOR_IPM_TEMP3: address: '0x82C4' - arithmetic: 'value / 10' - description: 'IPM 3 Temperartur' - remarks: '' - signed: '' - type: '' - unit: "\u00b0C" + arithmetic: value / 10 + description: IPM 3 Temperartur + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false NASA_OUTDOOR_LIQUID_BYPASS_VALVE: address: '0x8019' - arithmetic: '' - description: Liquid On/Off enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + description: Liquid On/Off + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_OUTDOOR_LIQUID_TUBE_VALVE: address: '0x8034' - arithmetic: '' - description: Liquid tube enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + description: Liquid tube + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_OUTDOOR_LOADINGTIME: address: '0x8228' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_OUTDOOR_LOGICAL_DEFROST_STEP: address: '0x8062' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_OUTDOOR_LOW_PRESS: address: '0x8208' arithmetic: (value / 10) * 0.980665 description: low pressure - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: pressure + platform: + type: number + mode: slider + unit: bar + writable: false + signed: true type: VAR - unit: bar NASA_OUTDOOR_LOW_PRESS_TEMP: address: '0x82A0' arithmetic: value / 10 description: Low pressure saturation temperature - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_OUTDOOR_MAINEEV1: address: '0x8229' - arithmetic: '' description: Main EEV1 + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false remarks: "An Electronic Expansion Valve, or EEV for short, is\xC2\_installed before\ \ the evaporator in an air handler/coil and after the condenser in a heat pump.\ \ It regulates the refrigerant flow rate to control superheat at the evaporator\ \ outlet by opening and closing." - signed: 'false' + signed: false type: VAR - unit: '' NASA_OUTDOOR_MAINEEV2: address: '0x822A' - arithmetic: '' description: Main EEV2 - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' NASA_OUTDOOR_MAINEEV3: address: '0x822B' - arithmetic: '' description: Main EEV3 - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' NASA_OUTDOOR_MAINEEV4: address: '0x822C' - arithmetic: '' description: Main EEV4 - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' NASA_OUTDOOR_MAINEEV5: address: '0x822D' - arithmetic: '' description: Main EEV5 - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' NASA_OUTDOOR_MAIN_COOL_VALVE: address: '0x801F' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_OUTDOOR_MCUCOUNT: address: '0x0211' - arithmetic: '' description: Number of connected MCUs - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' NASA_OUTDOOR_MID_PRESS: address: '0x82B8' arithmetic: (value / 10) * 0.980665 description: medium pressure - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: pressure + platform: + type: number + mode: slider + unit: bar + writable: false + signed: true type: VAR - unit: bar NASA_OUTDOOR_MODELINFORMATION: address: '0x860D' - arithmetic: '' description: Structure Type - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: STR - unit: '' NASA_OUTDOOR_OCT1: address: '0x8278' - arithmetic: '' description: Compressor OCT1 - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' NASA_OUTDOOR_OCT2: address: '0x8279' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_OUTDOOR_OCT3: address: '0x82A4' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_OUTDOOR_ODU_CAPA1: address: '0x8240' - arithmetic: '' description: current electric capacity of outdoor unit + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false remarks: value in percent, appears about every 140 seconds, not a reliable number - signed: '' - type: '' - unit: '' NASA_OUTDOOR_ODU_CAPA2: address: '0x8241' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_OUTDOOR_ODU_CAPA3: address: '0x827E' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_OUTDOOR_ODU_CAPA4: address: '0x827F' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_OUTDOOR_OD_EEV_VALVE: address: '0x8020' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_OUTDOOR_OIL_BALANCE_STEP: address: '0x8245' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_OUTDOOR_OIL_BYPASS_VALVE: address: '0x82CA' - arithmetic: '' description: Oil Bypass Valve - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' NASA_OUTDOOR_OIL_RECOVERY_STEP: address: '0x8244' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_OUTDOOR_OLP_TEMP: address: '0x8222' - arithmetic: '' - description: '' - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false type: VAR - unit: "\u00b0C" NASA_OUTDOOR_OPERATION_CAPA_SUM: address: '0x8233' arithmetic: value / 8.5 - description: '' + hass_opts: + default_platform: sensor + device_class: power + platform: + type: number + mode: slider + unit: kW + writable: false remarks: "/ 8.6 (better 8.5\xC2\_?). Does NOT show nominal Power Capacity, instead\ \ shows current ACTIVE Power Capacity" - signed: '' type: VAR - unit: 'kW' NASA_OUTDOOR_OPERATION_MODE: address: '0x8003' - arithmetic: '' description: Outdoor unit cooling/heating mode enum: - 0x00: 'Undefined' - 0x01: 'Cool' - 0x02: 'Heat' - 0x03: 'CoolMain' - 0x04: 'HeatMain' + 0: Undefined + 1: Cool + 2: Heat + 3: CoolMain + 4: HeatMain + hass_opts: + default_platform: sensor + platform: + options: + - Undefined + - Cool + - Heat + - CoolMain + - HeatMain + type: select + writable: False remarks: 0 Undefined, 1 Cool, 2 Heat, 3 CoolMain, 4 HeatMain - signed: '' type: ENUM - unit: '' NASA_OUTDOOR_OPERATION_STATUS: address: '0x8001' - arithmetic: '' description: Outdoor Driving Mode enum: - 0x00: 'OP_STOP' - 0x01: 'OP_SAFETY' - 0x02: 'OP_NORMAL' - 0x03: 'OP_BALANCE' - 0x04: 'OP_RECOVERY' - 0x05: 'OP_DEICE' - 0x06: 'OP_COMPDOWN' - 0x07: 'OP_PROHIBIT' - 0x08: 'OP_LINEJIG' - 0x09: 'OP_PCBJIG' - 0x0A: 'OP_TEST' - 0x0B: 'OP_CHARGE' - 0x0C: 'OP_PUMPDOWN' - 0x0D: 'OP_PUMPOUT' - 0x0E: 'OP_VACCUM' - 0x0F: 'OP_CALORYJIG' - 0x10: 'OP_PUMPDOWNSTOP' - 0x11: 'OP_SUBSTOP' - 0x12: 'OP_CHECKPIPE' - 0x13: 'OP_CHECKREF' - 0x14: 'OP_FPTJIG' - 0x15: 'OP_NONSTOP_HEAT_COOL_CHANGE' - 0x16: 'OP_AUTO_INSPECT' - 0x17: 'OP_ELECTRIC_DISCHARGE' - 0x18: 'OP_SPLIT_DEICE' - 0x19: 'OP_INVETER_CHECK' - 0x1A: 'OP_NONSTOP_DEICE' - 0x1B: 'OP_REM_TEST' - 0x1C: 'OP_RATING' - 0x1D: 'OP_PC_TEST' - 0x1E: 'OP_PUMPDOWN_THERMOOFF' - 0x1F: 'OP_3PHASE_TEST' - 0x20: 'OP_SMARTINSTALL_TEST' - 0x21: 'OP_DEICE_PERFORMANCE_TEST' - 0x22: 'OP_INVERTER_FAN_PBA_CHECK' - 0x23: 'OP_AUTO_PIPE_PAIRING' - 0x24: 'OP_AUTO_CHARGE' + 0: OP_STOP + 1: OP_SAFETY + 2: OP_NORMAL + 3: OP_BALANCE + 4: OP_RECOVERY + 5: OP_DEICE + 6: OP_COMPDOWN + 7: OP_PROHIBIT + 8: OP_LINEJIG + 9: OP_PCBJIG + 10: OP_TEST + 11: OP_CHARGE + 12: OP_PUMPDOWN + 13: OP_PUMPOUT + 14: OP_VACCUM + 15: OP_CALORYJIG + 16: OP_PUMPDOWNSTOP + 17: OP_SUBSTOP + 18: OP_CHECKPIPE + 19: OP_CHECKREF + 20: OP_FPTJIG + 21: OP_NONSTOP_HEAT_COOL_CHANGE + 22: OP_AUTO_INSPECT + 23: OP_ELECTRIC_DISCHARGE + 24: OP_SPLIT_DEICE + 25: OP_INVETER_CHECK + 26: OP_NONSTOP_DEICE + 27: OP_REM_TEST + 28: OP_RATING + 29: OP_PC_TEST + 30: OP_PUMPDOWN_THERMOOFF + 31: OP_3PHASE_TEST + 32: OP_SMARTINSTALL_TEST + 33: OP_DEICE_PERFORMANCE_TEST + 34: OP_INVERTER_FAN_PBA_CHECK + 35: OP_AUTO_PIPE_PAIRING + 36: OP_AUTO_CHARGE + hass_opts: + default_platform: sensor + platform: + options: + - OP_STOP + - OP_SAFETY + - OP_NORMAL + - OP_BALANCE + - OP_RECOVERY + - OP_DEICE + - OP_COMPDOWN + - OP_PROHIBIT + - OP_LINEJIG + - OP_PCBJIG + - OP_TEST + - OP_CHARGE + - OP_PUMPDOWN + - OP_PUMPOUT + - OP_VACCUM + - OP_CALORYJIG + - OP_PUMPDOWNSTOP + - OP_SUBSTOP + - OP_CHECKPIPE + - OP_CHECKREF + - OP_FPTJIG + - OP_NONSTOP_HEAT_COOL_CHANGE + - OP_AUTO_INSPECT + - OP_ELECTRIC_DISCHARGE + - OP_SPLIT_DEICE + - OP_INVETER_CHECK + - OP_NONSTOP_DEICE + - OP_REM_TEST + - OP_RATING + - OP_PC_TEST + - OP_PUMPDOWN_THERMOOFF + - OP_3PHASE_TEST + - OP_SMARTINSTALL_TEST + - OP_DEICE_PERFORMANCE_TEST + - OP_INVERTER_FAN_PBA_CHECK + - OP_AUTO_PIPE_PAIRING + - OP_AUTO_CHARGE + type: select + writable: false remarks: 0 OP_STOP, 1 OP_SAFETY, 2 OP_NORMAL, 3 OP_BALANCE, 4 OP_RECOVERY, 5 OP_DEICE, 6 OP_COMPDOWN, 7 OP_PROHIBIT, 8 OP_LINEJIG, 9 OP_PCBJIG, 10 OP_TEST, 11 OP_CHARGE, 12 OP_PUMPDOWN, 13 OP_PUMPOUT, 14 OP_VACCUM, 15 OP_CALORYJIG, 16 OP_PUMPDOWNSTOP, @@ -3724,2168 +4920,3307 @@ NASA_OUTDOOR_OPERATION_STATUS: 26 OP_NONSTOP_DEICE, 27 OP_REM_TEST, 28 OP_RATING, 29 OP_PC_TEST, 30 OP_PUMPDOWN_THERMOOFF, 31 OP_3PHASE_TEST, 32 OP_SMARTINSTALL_TEST, 33 OP_DEICE_PERFORMANCE_TEST, 34 OP_INVERTER_FAN_PBA_CHECK, 35 OP_AUTO_PIPE_PAIRING, 36 OP_AUTO_CHARGE - signed: '' type: ENUM - unit: '' NASA_OUTDOOR_OPMODELIMIT: address: '0x8066' - arithmetic: '' - description: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false remarks: seen in NASA data from EHS Mono HT Quiet - signed: '' type: ENUM - unit: '' NASA_OUTDOOR_OPMODE_OPTION: address: '0x8200' - arithmetic: '' - description: '' - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: VAR - unit: '' NASA_OUTDOOR_OUT_TEMP: address: '0x8204' arithmetic: value / 10 description: Outdoor temperature - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_OUTDOOR_OVER_COOL: address: '0x82CD' - arithmetic: '' description: Outdoor unit supercooling - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' NASA_OUTDOOR_PHASE_CURRENT: address: '0x82DB' - arithmetic: '' description: Phase current value - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' NASA_OUTDOOR_PROJECT_CODE: address: '0x82BC' - arithmetic: '' description: Project code - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: true type: VAR - unit: '' NASA_OUTDOOR_PUMPOUT_VALVE: address: '0x8027' - arithmetic: '' - description: Pump Out enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + description: Pump Out + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_OUTDOOR_RUNNING_SUM_CAPA: address: '0x8230' - arithmetic: '' - description: '' - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: VAR - unit: '' NASA_OUTDOOR_SAFETY_START: address: '0x8248' - arithmetic: '' - description: '' - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: VAR - unit: '' NASA_OUTDOOR_SERVICEOPERATION: address: '0x8047' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_OUTDOOR_SETUP_INFO: address: '0x860F' - arithmetic: '' description: Structure Type - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: STR - unit: '' NASA_OUTDOOR_SNOW_LEVEL: address: '0x82D3' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_OUTDOOR_SUBMICOM: address: '0x8601' - arithmetic: '' description: Structure Type - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: STR - unit: '' NASA_OUTDOOR_SUB_COND_EEV_STEP: address: '0x82D2' - arithmetic: '' description: Sub EEV - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' NASA_OUTDOOR_SUB_COND_OVER_HEAT: address: '0x82CC' arithmetic: value / 10 description: Sub heat exchanger outlet superheat - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' NASA_OUTDOOR_SUCTION1_TEMP: address: '0x821A' arithmetic: value / 10 description: Suction temperature - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_OUTDOOR_SUCTION2_TEMP: address: '0x829A' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_OUTDOOR_SUCTION_OVER_HEAT: address: '0x82CB' arithmetic: value / 10 description: Suction superheat - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' NASA_OUTDOOR_SUMPTEMP: address: '0x8210' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: "\u00b0C" + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false NASA_OUTDOOR_SYSTEM_RESET: address: '0x8065' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_OUTDOOR_TARGET_DISCHARGE: address: '0x8223' arithmetic: value / 10 description: Target discharge temperature - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_OUTDOOR_TEST_OP_COMPLETE: address: '0x8046' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_OUTDOOR_TOP_SENSOR_TEMP1: address: '0x8280' arithmetic: value / 10 description: Top1 - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_OUTDOOR_TOP_SENSOR_TEMP2: address: '0x8281' arithmetic: value / 10 description: Top2 - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_OUTDOOR_TOP_SENSOR_TEMP3: address: '0x8282' - arithmetic: 'value / 10' - description: '' - remarks: '' - signed: '' - type: '' - unit: "\u00b0C" + arithmetic: value / 10 + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false NASA_OUTDOOR_TW1_TEMP: address: '0x82DF' arithmetic: value / 10 description: Water In 1 for EHS - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_OUTDOOR_TW2_TEMP: address: '0x82E0' arithmetic: value / 10 description: Water In 2 for EHS - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_OUTDOOR_UPL_TP_COOL: address: '0x82D5' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_OUTDOOR_UPL_TP_HEAT: address: '0x82D6' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_OUTDOOR_VARIABLE_SETUP_INFO: address: '0x8417' - arithmetic: '' - description: '' - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: LVAR - unit: '' NASA_OUTDOOR_WATER_TEMP: address: '0x825E' arithmetic: value / 10 description: Water Temperature - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" NASA_OUTDOOR_WATER_VALVE: address: '0x8026' - arithmetic: '' - description: 2Way Valve enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + description: 2Way Valve + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_PBAOPTION: address: '0x0604' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_PEAK_CONTROL_PERIOD: address: '0x0010' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_PEAK_CURRENT_DEMAND: address: '0x0444' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_PEAK_CURRENT_TARGET_DEMAND: address: '0x0437' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_PEAK_FORCAST_DEMAND: address: '0x0438' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_PEAK_LEVEL: address: '0x000E' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_PEAK_MODE: address: '0x000F' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_PEAK_RATIO_CURRENT: address: '0x0434' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_PEAK_RATIO_POTENTIAL: address: '0x0435' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_PEAK_REAL_VALUE: address: '0x0445' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_PEAK_SYNC_TIME: address: '0x0443' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_PEAK_TARGET_DEMAND: address: '0x0214' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_PEAK_TARGET_POWER: address: '0x043A' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_PEAK_TOP_DEMAND: address: '0x0439' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_PEAK_TOTAL_POWER: address: '0x0436' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_PNP: address: '0x2004' - arithmetic: '' - description: '' - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: ENUM - unit: '' NASA_PNP_CONFIRM_ADDRESS: address: '0x0417' - arithmetic: '' description: PNP only - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: LVAR - unit: '' NASA_PNP_NET_ADDRESS: address: '0x0217' - arithmetic: '' description: PNP only - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_PNP_RANDOM_ADDRESS: address: '0x0418' - arithmetic: '' description: PNP only - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: LVAR - unit: '' NASA_PNP_SETUP_ADDRESS: address: '0x0419' - arithmetic: '' description: PNP only - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: LVAR - unit: '' NASA_POWER: address: '0x4000' - arithmetic: '' description: Indoor unit power on/off enum: - 0x00: 'OFF' - 0x01: 'ON' - 0x02: 'On Alternate' + 0: 'OFF' + 1: 'ON' + 2: On Alternate + hass_opts: + default_platform: sensor + platform: + options: + - 'OFF' + - 'ON' + - On Alternate + type: select + writable: true remarks: 0 Off, 1 On, 2 On - signed: '' type: ENUM - unit: '' NASA_POWER_CHANNEL1_ELECTRIC_VALUE: address: '0x041C' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL1_PULSEVALUE: address: '0x043B' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL1_TYPE: address: '0x0012' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL1_USED: address: '0x001A' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL2_ELECTRIC_VALUE: address: '0x041D' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL2_PULSEVALUE: address: '0x043C' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL2_TYPE: address: '0x0013' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL2_USED: address: '0x001B' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL3_ELECTRIC_VALUE: address: '0x041E' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL3_PULSEVALUE: address: '0x043D' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL3_TYPE: address: '0x0014' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL3_USED: address: '0x001C' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL4_ELECTRIC_VALUE: address: '0x041F' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL4_PULSEVALUE: address: '0x043E' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL4_TYPE: address: '0x0015' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL4_USED: address: '0x001D' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL5_ELECTRIC_VALUE: address: '0x0420' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL5_PULSEVALUE: address: '0x043F' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL5_TYPE: address: '0x0016' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL5_USED: address: '0x001E' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL6_ELECTRIC_VALUE: address: '0x0421' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL6_PULSEVALUE: address: '0x0440' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL6_TYPE: address: '0x0017' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL6_USED: address: '0x001F' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL7_ELECTRIC_VALUE: address: '0x0422' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL7_PULSEVALUE: address: '0x0441' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL7_TYPE: address: '0x0018' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL7_USED: address: '0x0020' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL8_ELECTRIC_VALUE: address: '0x0423' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL8_PULSEVALUE: address: '0x0442' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL8_TYPE: address: '0x0019' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_CHANNEL8_USED: address: '0x0021' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_POWER_MANUFACTURE: address: '0x0011' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_PRODUCT_MODEL_NAME: address: '0x061A' - arithmetic: '' - description: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false remarks: appears when using S-NET pro 2 software - signed: '' type: STR - unit: '' NASA_PRODUCT_OPTION: address: '0x0600' - arithmetic: '' - description: '' - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: STR - unit: '' NASA_RANDOM_ADDRESS: address: '0x0403' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_RMCADDRESS: address: '0x0402' - arithmetic: '' - description: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false remarks: LogicalAnd 0xFF - signed: 'false' + signed: false type: LVAR - unit: '' NASA_SERIAL_NO: address: '0x0607' - arithmetic: '' description: OutdoorTableSerialNumber - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: STR - unit: '' NASA_SETUP_ADDRESS: address: '0x0408' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: LVAR - unit: '' NASA_SET_DISCHARGE: address: '0x4209' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_SET_TEMP: address: '0x4201' arithmetic: value / 10 description: Indoor unit set temperature + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false remarks: if isEhsSetTempWaterOut (406F) ==1 , use value of variable waterOutSetTemp = 4247 - signed: 'true' + signed: true type: VAR - unit: "\u00b0C" NASA_SIMPIM_PASSWORD: address: '0x0619' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_SIMPIM_SYNC_DATETIME: address: '0x0613' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_SMART_GRID: address: '0x406B' - arithmetic: '' - description: Smart Grid enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + description: Smart Grid + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_SOLAR_PUMP: address: '0x4068' - arithmetic: '' - description: Hydro_SolarPump enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + description: Hydro_SolarPump + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_STANDBY_MODE: address: '0x0023' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_TRACKING_RESULT: address: '0x2010' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' -ENUM_IN_FSV_3031: - address: '0x4098' - arithmetic: '' - description: '' - enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: 0 Off, 1 On - signed: '' - type: ENUM - unit: '' NASA_USE_CENTUAL_CONTROL: address: '0x401B' - arithmetic: '' description: Income from InstallOption information. - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: ENUM - unit: '' NASA_USE_DESIRED_HUMIDITY: address: '0x405D' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' -ENUM_IN_FSV_3061: - address: '0x409C' - arithmetic: '' - description: '' - enum: - 0x00: 'No' - 0x01: 'one' - 0x02: 'two' - 0x03: 'three' - remarks: '' - signed: '' - type: ENUM - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_USE_DISCHARGE_TEMP: address: '0x4019' - arithmetic: 'value ' - description: This value is a value that cannot be controlled by the upper controller. enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + description: This value is a value that cannot be controlled by the upper controller. + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: "" NASA_USE_FILTER_WARNING_TIME: address: '0x4024' - arithmetic: '' - description: '' - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: ENUM - unit: '' NASA_USE_HUMIDIFICATION: address: '0x4040' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_USE_MDS: address: '0x403E' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_USE_OUTER_COOL: address: '0x405B' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_USE_SILENCE: address: '0x4045' - arithmetic: '' - description: '' - remarks: '' - signed: '' - type: '' - unit: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false NASA_USE_SPI: address: '0x4023' - arithmetic: '' - description: '' - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: ENUM - unit: '' -ENUM_IN_FSV_2091: - address: '0x4095' - arithmetic: '' - description: '' - enum: - 0x00: 'No' - 0x01: 'one' - 0x02: 'two' - 0x03: 'three' - 0x04: 'four' - remarks: values 0="No" up to 4="4" - signed: '' - type: ENUM - unit: '' -ENUM_IN_FSV_2092: - address: '0x4096' - arithmetic: '' - description: '' - enum: - 0x00: 'No' - 0x01: 'one' - 0x02: 'two' - 0x03: 'three' - 0x04: 'four' - remarks: values 0="No" up to 4="4" - signed: '' - type: ENUM - unit: '' NASA_USE_VACANCY_STATUS: address: '0x40BD' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_USE_WIREDREMOTE: address: '0x4018' - arithmetic: '' - description: '' enum: - 0x00: 'OFF' - 0x01: 'ON' - remarks: '' - signed: '' + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false type: ENUM - unit: '' NASA_VACANCY_SETTING: address: '0x4418' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: LVAR - unit: '' NASA_VACANCY_STATUS: address: '0x40BC' - arithmetic: '' description: Vacancy control enum: - 0x00: 'Unoccupied' - 0x01: 'Occupied' - remarks: '' - signed: '' + 0: Unoccupied + 1: Occupied + hass_opts: + default_platform: sensor + platform: + options: + - Unoccupied + - Occupied + type: select + writable: false type: ENUM - unit: '' STR_AD_ID_MODEL_NAME: address: '0x061F' - arithmetic: '' description: Model Name + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false remarks: appears when using S-NET pro 2 software - signed: '' type: STR - unit: '' STR_AD_PRODUCT_MAC_ADDRESS: address: '0x061C' - arithmetic: '' description: WiFi Kit MAC Address - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: STR - unit: '' STR_IN_ERROR_HISTORY_FOR_HASS: address: '0x461E' - arithmetic: '' description: Structure Type - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: STR - unit: '' STR_OUT_BASE_OPTION: address: '0x860A' - arithmetic: '' description: Structure Type - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: STR - unit: '' STR_OUT_REF_CHECK_INFO: address: '0x8613' - arithmetic: '' description: Structure Type - remarks: '' - signed: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false type: STR - unit: '' VAR_IN_CAPACITY_VENTILATION_REQUEST: address: '0x4302' arithmetic: value / 8.5 - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + device_class: power + platform: + type: number + mode: slider + unit: kW + writable: false + signed: false type: VAR - unit: kW VAR_IN_CHILLER_EXTERNAL_TEMPERATURE: address: '0x42C9' arithmetic: value / 10 description: External sensor-Room temperature - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_IN_CHILLER_PHE_IN_P: address: '0x42C4' arithmetic: (value / 100) * 0.980665 description: Inlet pressure - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: pressure + platform: + type: number + mode: slider + unit: bar + writable: false + signed: true type: VAR - unit: bar VAR_IN_CHILLER_PHE_OUT_P: address: '0x42C5' arithmetic: (value / 100) * 0.980665 description: Outlet pressure - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: pressure + platform: + type: number + mode: slider + unit: bar + writable: false + signed: true type: VAR - unit: bar VAR_IN_DUST_SENSOR_PM10_0_VALUE: address: '0x42D1' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' VAR_IN_DUST_SENSOR_PM1_0_VALUE: address: '0x42D3' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' VAR_IN_DUST_SENSOR_PM2_5_VALUE: address: '0x42D2' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' VAR_IN_ENTHALPY_SENSOR_OUTPUT: address: '0x42CF' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + unit: H + writable: false + signed: false type: VAR - unit: H VAR_IN_EXT_VARIABLE_DAMPER_OUTPUT: address: '0x42D0' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' VAR_IN_FAN_CURRENT_RPM_SUCTION1: address: '0x429F' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + state_class: measurement + unit: rpm + writable: false + signed: false type: VAR - unit: 'rpm' VAR_IN_FAN_CURRENT_RPM_SUCTION2: address: '0x42A1' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + state_class: measurement + unit: rpm + writable: false + signed: false type: VAR - unit: 'rpm' VAR_IN_FAN_CURRENT_RPM_SUCTION3: address: '0x42A3' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + state_class: measurement + unit: rpm + writable: false + signed: false type: VAR - unit: 'rpm' VAR_IN_FLOW_SENSOR_CALC: address: '0x42E9' arithmetic: value / 10 description: Flow Sensor + hass_opts: + default_platform: sensor + device_class: volume_flow_rate + platform: + type: number + mode: slider + unit: L/min + writable: false remarks: value appears about every 90 seconds - signed: 'true' + signed: true type: VAR - unit: '' VAR_IN_FLOW_SENSOR_VOLTAGE: address: '0x42E8' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'false' + reverse-arithmetic: value * 10 + hass_opts: + default_platform: sensor + device_class: voltage + platform: + type: number + mode: slider + unit: V + writable: false + signed: false + type: VAR +VAR_IN_FSV_1011: + address: '0x424A' + arithmetic: value / 10 + reverse-arithmetic: value * 10 + description: User limitation - Water Cooling Temperature Max. + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 25 + min: 18 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true + type: VAR +VAR_IN_FSV_1012: + address: '0x424B' + arithmetic: value / 10 + reverse-arithmetic: value * 10 + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 18 + min: 5 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true + type: VAR +VAR_IN_FSV_1021: + address: '0x424C' + arithmetic: value / 10 + reverse-arithmetic: value * 10 + description: User limitation - Room Cooling Temperature Max. + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 30 + min: 28 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true + type: VAR +VAR_IN_FSV_1022: + address: '0x424D' + arithmetic: value / 10 + reverse-arithmetic: value * 10 + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 28 + min: 18 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true + type: VAR +VAR_IN_FSV_1031: + address: '0x424E' + arithmetic: value / 10 + reverse-arithmetic: value * 10 + description: User limitation - Water Heating Temperature Max. + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 70 + min: 37 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true + type: VAR +VAR_IN_FSV_1032: + address: '0x424F' + arithmetic: value / 10 + reverse-arithmetic: value * 10 + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 37 + min: 15 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true + type: VAR +VAR_IN_FSV_1041: + address: '0x4250' + arithmetic: value / 10 + reverse-arithmetic: value * 10 + description: User limitation - Room heating Temperature Max. + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 30 + min: 18 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true + type: VAR +VAR_IN_FSV_1042: + address: '0x4251' + arithmetic: value / 10 + reverse-arithmetic: value * 10 + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 18 + min: 16 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true + type: VAR +VAR_IN_FSV_1051: + address: '0x4252' + arithmetic: value / 10 + reverse-arithmetic: value * 10 + description: User limitation - Hot Water Temperature Max. + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 70 + min: 50 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true + type: VAR +VAR_IN_FSV_1052: + address: '0x4253' + arithmetic: value / 10 + reverse-arithmetic: value * 10 + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 40 + min: 30 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: '' VAR_IN_FSV_2011: address: '0x4254' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Heating - Outdoor Temp. for WL Max. - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 5 + min: -20 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_2012: address: '0x4255' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Heating - Outdoor Temp. for WL Min. - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 20 + min: 10 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_2021: address: '0x4256' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Heating - Water out Temp. UFH Max. - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 65 + min: 17 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_2022: address: '0x4257' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Heating - Water out Temp. UFH Min. - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 65 + min: 17 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_2031: address: '0x4258' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Heating - Water out Temp. FCU Max. - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 65 + min: 17 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_2032: address: '0x4259' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Heating - Water out Temp. FCU Min. - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 65 + min: 17 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_2051: address: '0x425A' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Cooling - Outdoor Temp. for WL Max. - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 35 + min: 25 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_2052: address: '0x425B' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Cooling - Outdoor Temp. for WL Min. - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 45 + min: 35 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_2061: address: '0x425C' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Cooling - Water out Temp. UFH Max. - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 25 + min: 5 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_2062: address: '0x425D' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Cooling - Water out Temp. UFH Min. - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 25 + min: 5 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_2071: address: '0x425E' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Cooling - Water out Temp. FCU Max. - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 25 + min: 5 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_2072: address: '0x425F' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Cooling - Water out Temp. FCU Min. - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 25 + min: 5 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_3021: address: '0x4260' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: DHW - Heat Pump Max. temp. - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 63 + min: 45 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_3022: address: '0x4261' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: DHW - Heat Pump Stop - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 10 + min: 0 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_3023: address: '0x4262' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: DHW - Heat Pump Start - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 30 + min: 5 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_3024: address: '0x4263' - arithmetic: '' description: DHW - Heat Pump Min. Space heating operation time - device_class: duration - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + device_class: duration + platform: + max: 20 + min: 1 + step: 1 + type: number + mode: slider + unit: min + writable: true + signed: false type: VAR - unit: 'min' VAR_IN_FSV_3025: address: '0x4264' - arithmetic: '' description: DHW - Heat Pump Max. DHW operation time - device_class: duration - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + device_class: duration + platform: + max: 95 + min: 5 + step: 5 + type: number + mode: slider + unit: min + writable: true + signed: false type: VAR - unit: 'min' VAR_IN_FSV_3026: address: '0x4265' - arithmetic: '' description: DHW - Heat Pump Max. Space heating operation time - device_class: duration - remarks: '' - signed: 'false' + arithmetic: value / 60 + reverse-arithmetic: value * 60 + hass_opts: + default_platform: sensor + device_class: duration + platform: + max: 10 + min: 0.5 + step: 0.5 + type: number + mode: slider + unit: h + writable: true + signed: false type: VAR - unit: 'h' VAR_IN_FSV_3032: address: '0x4266' - arithmetic: '' description: DHW - Booster Heat Delay Time - device_class: duration - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + device_class: duration + platform: + max: 95 + min: 20 + step: 5 + type: number + mode: slider + unit: min + writable: true + signed: false type: VAR - unit: 'min' VAR_IN_FSV_3033: address: '0x4267' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: DHW - Booster Heat Overshoot - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 4 + min: 0 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_3034: address: '0x4268' arithmetic: value / 10 - description: '' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false remarks: not for EHS Mono HT Quiet - signed: 'true' + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_3043: address: '0x4269' - arithmetic: '' description: DHW - Disinfection Start Time - device_class: duration - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + device_class: duration + platform: + max: 23 + min: 0 + step: 1 + type: number + mode: slider + unit: h + writable: true + signed: false type: VAR - unit: 'h' VAR_IN_FSV_3044: address: '0x426A' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: DHW - Disinfection Target Temp. - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 70 + min: 40 + step: 5 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_3045: address: '0x426B' - arithmetic: '' description: DHW - Disinfection Duration - device_class: duration - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: duration + platform: + max: 60 + min: 5 + step: 5 + type: number + mode: slider + unit: min + writable: true + signed: true type: VAR - unit: 'min' VAR_IN_FSV_3046: address: '0x42CE' arithmetic: value / 60 + reverse-arithmetic: value * 60 description: DHW - Disinfection Max time + hass_opts: + default_platform: sensor + device_class: duration + platform: + max: 24 + min: 1 + step: 1 + type: number + mode: slider + unit: h + writable: true remarks: NASA Value is [minutes], not [hours] - device_class: duration - signed: 'false' + signed: false type: VAR - unit: 'h' VAR_IN_FSV_3052: address: '0x426C' arithmetic: value / 0.1 + reverse-arithmetic: value / 10 description: DHW - Forced DHW Operation Time Duration - device_class: duration - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: duration + platform: + max: 300 + min: 30 + step: 10 + type: number + mode: slider + unit: min + writable: true + signed: true type: VAR - unit: 'min' VAR_IN_FSV_3081: address: '0x42ED' - arithmetic: '' description: DHW - Energy Metering BUH 1 step capacity - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: power + platform: + max: 6 + min: 1 + step: 1 + type: number + mode: slider + unit: kW + writable: true + signed: true type: VAR - unit: 'kW' VAR_IN_FSV_3082: address: '0x42EE' - arithmetic: '' description: DHW - Energy Metering BUH 2 step capacity - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: power + platform: + max: 6 + min: 0 + step: 1 + type: number + mode: slider + unit: kW + writable: true + signed: true type: VAR - unit: 'kW' VAR_IN_FSV_3083: address: '0x42EF' - arithmetic: '' description: DHW - Energy Metering BSH capacity - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: power + platform: + max: 6 + min: 1 + step: 1 + type: number + mode: slider + unit: kW + writable: true + signed: true type: VAR - unit: 'kW' VAR_IN_FSV_4012: address: '0x426D' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Heating - Heat Pump Outdoor Temp. for Priority - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 20 + min: -15 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_4013: address: '0x426E' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Heating - Heat Pump Outdoor Heat OFF - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 35 + min: 14 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_4014: address: '0x426F' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_4024: address: '0x4270' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Heating - Backup Heater Threshold Temp. - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 35 + min: -25 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_4025: address: '0x4271' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Heating - Backup Heater Defrost Backup Temp. - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 55 + min: 10 + step: 5 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_4033: address: '0x4272' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Heating - Backup Boiler Threshold Temp. - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 5 + min: -20 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_4042: address: '0x4286' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Heating - Mixing Valve Target Delta Heating - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 15 + min: 5 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: false type: VAR - unit: "\u00b0C" VAR_IN_FSV_4043: address: '0x4287' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Heating - Mixing Valve Target Delta Cooling - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 15 + min: 5 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: false type: VAR - unit: "\u00b0C" VAR_IN_FSV_4045: address: '0x4288' - arithmetic: '' description: Heating - Mixing Valve Control Interval - device_class: duration - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + device_class: duration + platform: + max: 30 + min: 1 + step: 1 + type: number + mode: slider + unit: min + writable: true + signed: false type: VAR - unit: 'min' VAR_IN_FSV_4046: address: '0x4289' arithmetic: value / 0.1 + reverse-arithmetic: value / 10 description: Heating - Mixing Valve Running Time - device_class: duration - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + device_class: duration + platform: + max: 240 + min: 60 + step: 30 + type: number + mode: slider + unit: s + writable: true + signed: false type: VAR - unit: 's' VAR_IN_FSV_4052: address: '0x428A' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Heating - Inverter Pump Target Delta - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 8 + min: 2 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: false type: VAR - unit: "\u00b0C" VAR_IN_FSV_5011: address: '0x4273' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Outing Mode - Water Out Temp. for Cooling - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 25 + min: 5 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_5012: address: '0x4274' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Outing mode - Room Temp. for Cooling - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 30 + min: 18 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_5013: address: '0x4275' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Outing mode - Water Out Temp. for Heating - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 55 + min: 15 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_5014: address: '0x4276' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Outing mode - Room Temp. for Heating - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 30 + min: 16 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_5015: address: '0x4277' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Outing mode - Auto Cooling WL1 Temp. - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 25 + min: 5 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_5016: address: '0x4278' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Outing mode - Auto Cooling WL2 Temp. - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 25 + min: 5 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_5017: address: '0x4279' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Outing mode - Auto Heating WL1 Temp - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 55 + min: 15 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_5018: address: '0x427A' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Outing mode - Auto Heating WL2 Temp - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 55 + min: 15 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_5019: address: '0x427B' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Outing mode - Target Tank Temp - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 70 + min: 30 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_5021: address: '0x427C' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: DHW Saving - DHW Saving Temp. - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 40 + min: 0 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_5023: address: '0x42F0' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: DHW Saving - DHW Saving Thermo on Temp. - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 40 + min: 0 + step: 1 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_FSV_5031: address: '0x427D' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' VAR_IN_FSV_5032: address: '0x427E' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' VAR_IN_FSV_5082: address: '0x42DB' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: PV Control - Setting Temp. Shift Value (Cool) - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 5 + min: 0 + step: 0.5 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: false type: VAR - unit: "\u00b0C" VAR_IN_FSV_5083: address: '0x42DC' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: PV Control - Setting Temp. Shift Value (Heat) - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 5 + min: 0 + step: 0.5 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: false type: VAR - unit: "\u00b0C" VAR_IN_FSV_5092: address: '0x42DD' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Smart Grid Control - Setting Temp. Shift Value (Heat) - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 5 + min: 2 + step: 0.5 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: false type: VAR - unit: "\u00b0C" VAR_IN_FSV_5093: address: '0x42DE' arithmetic: value / 10 + reverse-arithmetic: value * 10 description: Smart Grid Control - Setting Temp. Shift Value (DHW) - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + max: 5 + min: 2 + step: 0.5 + type: number + mode: slider + unit: "\xB0C" + writable: true + signed: false type: VAR - unit: "\u00b0C" VAR_IN_MCC_GROUP_MAIN: address: '0x42B2' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' VAR_IN_MCC_GROUP_MODULE_ADDRESS: address: '0x42B1' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' VAR_IN_MCC_MODULE_MAIN: address: '0x42B3' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' VAR_IN_MODULATING_FAN: address: '0x42CC' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' VAR_IN_MODULATING_VALVE_1: address: '0x42CA' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' VAR_IN_MODULATING_VALVE_2: address: '0x42CB' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' VAR_IN_SENSOR_CO2_PPM: address: '0x421B' - arithmetic: '' description: CO2 sensor detection ppm - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' VAR_IN_TEMP_ELECTRIC_HEATER_F: address: '0x4207' arithmetic: subtract 55 description: Electric heater temperature value - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_IN_TEMP_EVA2_IN_F: address: '0x42C2' arithmetic: value / 10 description: Indoor Eva2 In temperature - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_IN_TEMP_EVA2_OUT_F: address: '0x42C3' arithmetic: value / 10 description: Indoor Eva2 Out Temperature - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_IN_TEMP_MIXING_VALVE_F: address: '0x428C' arithmetic: value / 10 description: Hydro_MixingValve - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_IN_TEMP_PANEL_AIR_COOL1_F: address: '0x42A5' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_IN_TEMP_PANEL_AIR_COOL2_F: address: '0x42A6' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_IN_TEMP_PANEL_AIR_HEAT1_F: address: '0x42AB' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_IN_TEMP_PANEL_AIR_HEAT2_F: address: '0x42AC' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_IN_TEMP_PANEL_ROOM_COOL1_F: address: '0x42A7' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_IN_TEMP_PANEL_ROOM_COOL2_F: address: '0x42A8' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_IN_TEMP_PANEL_ROOM_HEAT1_F: address: '0x42AD' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_IN_TEMP_PANEL_ROOM_HEAT2_F: address: '0x42AE' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_IN_TEMP_PANEL_TARGET_COOL1_F: address: '0x42A9' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_IN_TEMP_PANEL_TARGET_COOL2_F: address: '0x42AA' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_IN_TEMP_PANEL_TARGET_HEAT1_F: address: '0x42AF' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_IN_TEMP_PANEL_TARGET_HEAT2_F: address: '0x42B0' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_IN_TEMP_TARGET_ZONE2_F: address: '0x42D6' arithmetic: value / 10 description: Zone2 Room Set Temp. - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_IN_TEMP_WATER_IN2_F: address: '0x42CD' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_IN_TEMP_WATER_LAW_F: address: '0x427F' arithmetic: value / 10 description: Hydro_WaterLawTargetF - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_IN_TEMP_WATER_LAW_TARGET_F: address: '0x4248' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' + reverse-arithmetic: value * 10 + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + min: -5 + max: +5 + step: 0.5 + mode: slider + unit: "\xB0C" + writable: true + signed: true type: VAR - unit: "\u00b0C" VAR_IN_TEMP_WATER_OUT2_F: address: '0x4239' arithmetic: value / 10 description: Hydro_HeaterOut - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_IN_TEMP_WATER_OUTLET_TARGET_ZONE2_F: address: '0x42D7' arithmetic: value / 10 description: Water Outlet2 Set Temp. - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_IN_TEMP_WATER_OUTLET_ZONE1_F: address: '0x42D8' arithmetic: value / 10 description: Zone1 WaterOut Temp - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_IN_TEMP_WATER_OUTLET_ZONE2_F: address: '0x42D9' arithmetic: value / 10 description: Zone2 WaterOut Temp - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_IN_TEMP_ZONE2_F: address: '0x42D4' arithmetic: value / 10 description: Idiom_RoomTemp_Zone2 + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false remarks: 'Room temperature for zone #2' - signed: 'true' + signed: true type: VAR - unit: "\u00b0C" VAR_OUT_COMP_FREQ_RATE_CONTROL: address: '0x42F1' - arithmetic: '' - description: '' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false remarks: undocumented, taken from Pyton code - signed: '' type: VAR - unit: '' VAR_OUT_CONTROL_DSH1: address: '0x827A' arithmetic: value / 10 description: Just for EHS HTU - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_OUT_CONTROL_IDU_TOTAL_ABSCAPA: address: '0x82A8' arithmetic: value / 8.5 - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: true type: VAR - unit: '' VAR_OUT_CONTROL_REFRIGERANTS_VOLUME: address: '0x824F' arithmetic: value / 10 description: Refrigerant amount - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' VAR_OUT_ERROR_CODE: address: '0x8235' - arithmetic: '' description: HTU error code - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' VAR_OUT_HIGH_OVERLOAD_DETECT: address: '0x82F5' - arithmetic: '' description: PFCM#1 element temperature - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' VAR_OUT_INSTALL_COMP_NUM: address: '0x8202' - arithmetic: '' description: Number of outdoor unit compressors - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' VAR_OUT_INSTALL_COND_SIZE: address: '0x82AF' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' VAR_OUT_LOAD_EVI_SOL_EEV: address: '0x82FC' - arithmetic: '' description: EVI SOL EEV - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: true type: VAR - unit: '' VAR_OUT_LOAD_MCU_HR_BYPASS_EEV: address: '0x82E8' - arithmetic: '' description: MCU HR Bypass EEV opening diagram - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' VAR_OUT_MCU_CHANGE_OVER_EEV1: address: '0x826E' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' VAR_OUT_MCU_CHANGE_OVER_EEV2: address: '0x826F' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' VAR_OUT_MCU_CHANGE_OVER_EEV3: address: '0x8270' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' VAR_OUT_MCU_CHANGE_OVER_EEV4: address: '0x8271' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' VAR_OUT_MCU_CHANGE_OVER_EEV5: address: '0x8272' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' VAR_OUT_MCU_CHANGE_OVER_EEV6: address: '0x8273' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' VAR_OUT_MCU_SENSOR_SUBCOOLER_IN: address: '0x826B' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_OUT_MCU_SENSOR_SUBCOOLER_OUT: address: '0x826C' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_OUT_MCU_SUBCOOLER_EEV: address: '0x826D' - arithmetic: '' - description: '' - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + platform: + type: number + mode: slider + writable: false + signed: false type: VAR - unit: '' VAR_OUT_PRODUCT_OPTION_CAPA: address: '0x82E3' arithmetic: value / 10.0 description: Outdoor unit product option capacity (based on 0.1Kw) for EHS - remarks: '' - signed: 'false' + hass_opts: + default_platform: sensor + device_class: power + platform: + type: number + mode: slider + unit: kW + writable: false + signed: false type: VAR - unit: kW VAR_OUT_SENSOR_PFCM1: address: '0x82E9' arithmetic: value / 10 description: PFCM#1 element temperature + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false remarks: Min -54, Max 3000 - signed: 'true' + signed: true type: VAR - unit: "\u00b0C" VAR_OUT_SENSOR_PIPEIN1: address: '0x825F' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_OUT_SENSOR_PIPEIN2: address: '0x8260' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_OUT_SENSOR_PIPEIN3: address: '0x8261' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_OUT_SENSOR_PIPEIN4: address: '0x8262' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_OUT_SENSOR_PIPEIN5: address: '0x8263' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_OUT_SENSOR_PIPEOUT1: address: '0x8264' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_OUT_SENSOR_PIPEOUT2: address: '0x8265' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_OUT_SENSOR_PIPEOUT3: address: '0x8266' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_OUT_SENSOR_PIPEOUT4: address: '0x8267' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_OUT_SENSOR_PIPEOUT5: address: '0x8268' arithmetic: value / 10 - description: '' - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_OUT_SENSOR_SUCTION3_1SEC: address: '0x82F9' arithmetic: value / 10 description: Suction3 temperature - remarks: '' - signed: 'true' + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false + signed: true type: VAR - unit: "\u00b0C" VAR_OUT_SENSOR_TOTAL_SUCTION: address: '0x82E7' arithmetic: value / 10.0 description: Total Suction Sensor + hass_opts: + default_platform: sensor + device_class: temperature + platform: + type: number + mode: slider + unit: "\xB0C" + writable: false remarks: Min -41, Max 150 - signed: 'true' + signed: true type: VAR - unit: "\u00b0C" -NASA_EHSSENTINEL_TOTAL_COP: - address: '0x9997' - arithmetic: '' - description: Total COP of lifetime - remarks: Custom Measurment - state_class: measurement - signed: 'true' - type: VAR - unit: '' -NASA_EHSSENTINEL_COP: - address: '0x9998' - arithmetic: '' - description: Current COP - remarks: Custom Measurment - state_class: measurement - signed: 'true' - type: VAR - unit: '' -NASA_EHSSENTINEL_HEAT_OUTPUT: - address: '0x9999' - arithmetic: '' - description: Current generated Heat Output - remarks: Custom Measurment - state_class: measurement - signed: 'true' - type: VAR - unit: "W" \ No newline at end of file +enum: + address: '0x410D' + enum: + 0: 'ON' + 1: 'OFF' + hass_opts: + default_platform: binary_sensor + platform: + payload_off: 'OFF' + payload_on: 'ON' + type: switch + writable: false + type: ENUM diff --git a/data/config.yml b/data/config.yml index 6295518..e607745 100644 --- a/data/config.yml +++ b/data/config.yml @@ -1,11 +1,14 @@ general: nasaRepositoryFile: data/NasaRepository.yml + allowControl: False logging: deviceAdded: True messageNotFound: False packetNotFromIndoorOutdoor: False proccessedMessage: False pollerMessage: False + controlMessage: False + invalidPacket: False #serial: # device: /dev/ttyUSB0 # baudrate: 9600 diff --git a/helpertils/TestPacketGenerator.py b/helpertils/TestPacketGenerator.py index 76d5c46..4d66d4e 100644 --- a/helpertils/TestPacketGenerator.py +++ b/helpertils/TestPacketGenerator.py @@ -1,4 +1,13 @@ import json + +import os +import sys +import inspect + +currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) +parentdir = os.path.dirname(currentdir) +sys.path.insert(0, parentdir) + import NASAPacket import NASAMessage @@ -8,6 +17,7 @@ encode_raw = "[50, 0, 60, 16, 0, 0, 176, 0, 255, 192, 20, 196, 13, 2, 2, 255, 25 encode_raw = "[50, 0, 56, 98, 0, 144, 178, 0, 32, 192, 17, 3, 11, 64, 147, 0, 64, 148, 0, 66, 115, 0, 0, 66, 116, 0, 0, 66, 117, 0, 0, 66, 118, 0, 0, 66, 119, 0, 0, 66, 120, 0, 0, 66, 121, 0, 0, 66, 122, 0, 0, 66, 123, 0, 0, 221, 200, 52]" encode_raw = "[50, 0, 56, 98, 0, 144, 178, 0, 32, 192, 17, 240, 11, 64, 147, 0, 64, 148, 0, 66, 115, 0, 0, 66, 116, 0, 0, 66, 117, 0, 0, 66, 118, 0, 0, 66, 119, 0, 0, 66, 120, 0, 0, 66, 121, 0, 0, 66, 122, 0, 0, 66, 123, 0, 0, 76, 33, 52]" #encode_raw ="[50, 0, 48, 98, 0, 144, 178, 0, 32, 192, 17, 240, 11, 64, 147, 0, 64, 148, 0, 66, 115, 0, 0, 66, 116, 0, 66, 117, 0, 66, 118, 0, 66, 119, 0, 66, 120, 0, 66, 121, 0, 66, 122, 0, 66, 123, 0, 7, 180, 52]" +encode_raw = "['0x32', '0x00', '0x1A', '0x80', '0xFF', '0x00', '0x20', '0x00', '0x00', '0xC0', '0x11', '0xB0', '0x01', '0x06', '0x07', '0x00', '0x00', '0x00', '0x00', '0x00', '0x00', '0x00', '0x00', '0x00', '0x00', '0xBD', '0xBC', '0x34']" try: encode_bytearray = json.loads(encode_raw.strip()) # for [12, 234, 456 ,67] except: @@ -23,10 +33,10 @@ encoded_nasa = NASAPacket.NASAPacket() encoded_nasa.parse(encode_bytearray) print(f"encode NASA Object: {encoded_nasa}") - +exit() # time to reverse that thing! decoded_nasa = NASAPacket.NASAPacket() -decoded_nasa.set_packet_source_address_class(NASAPacket.AddressClassEnum.Outdoor) +decoded_nasa.set_packet_source_address_class(NASAPacket.AddressClassEnum.JIGTester) decoded_nasa.set_packet_source_channel(0) decoded_nasa.set_packet_source_address(0) decoded_nasa.set_packet_dest_address_class(NASAPacket.AddressClassEnum.BroadcastSelfLayer) diff --git a/helpertils/messageFinder.py b/helpertils/messageFinder.py new file mode 100644 index 0000000..137c340 --- /dev/null +++ b/helpertils/messageFinder.py @@ -0,0 +1,159 @@ +import os +import sys +import inspect +import asyncio +import yaml +import traceback + +currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) +parentdir = os.path.dirname(currentdir) +sys.path.insert(0, parentdir) + +from NASAPacket import NASAPacket, AddressClassEnum, DataType, PacketType +from NASAMessage import NASAMessage + +# Generate a list of all possible 2-byte hex values, always padded to 4 characters +two_byte_hex_values = [f"0x{i:04X}" for i in range(0x0000, 0xFFFF)] +send_message_list = [] +seen_message_list = [] + +with open('data/NasaRepository.yml', mode='r') as file: + NASA_REPO = yaml.safe_load(file) + +async def main(): + + # load config + with open('config.yml', mode='r') as file: + config = yaml.safe_load(file) + + # Print the total count to confirm all values are included + print(f"Total values: {len(two_byte_hex_values)}") + + reader, writer = await asyncio.open_connection('172.19.2.240', 4196) + print(" serial_connection fertig") + await asyncio.gather( + serial_read(reader, config), + serial_write(writer, config), + ) + +async def serial_write(writer: asyncio.StreamWriter, config): + _CHUNKSIZE=10 + chunks = [two_byte_hex_values[i:i + _CHUNKSIZE] for i in range(0, len(two_byte_hex_values), _CHUNKSIZE)] + for chunk in chunks: + nasa_msg = NASAPacket() + nasa_msg.set_packet_source_address_class(AddressClassEnum.JIGTester) + nasa_msg.set_packet_source_channel(240) + nasa_msg.set_packet_source_address(0) + nasa_msg.set_packet_dest_address_class(AddressClassEnum.BroadcastSetLayer) + nasa_msg.set_packet_dest_channel(0) + nasa_msg.set_packet_dest_address(32) + nasa_msg.set_packet_information(True) + nasa_msg.set_packet_version(2) + nasa_msg.set_packet_retry_count(0) + nasa_msg.set_packet_type(PacketType.Normal) + nasa_msg.set_packet_data_type(DataType.Read) + nasa_msg.set_packet_number(166) + msglist=[] + for msg in chunk: + if msg not in send_message_list and msg not in seen_message_list: + tmpmsg = NASAMessage() + tmpmsg.set_packet_message(int(msg, 16)) + value = 0 + if tmpmsg.packet_message_type == 0: + value_raw = value.to_bytes(1, byteorder='big') + elif tmpmsg.packet_message_type == 1: + value_raw = value.to_bytes(2, byteorder='big') + elif tmpmsg.packet_message_type == 2: + value_raw = value.to_bytes(4, byteorder='big') + else: + value_raw = value.to_bytes(1, byteorder='big') + + tmpmsg.set_packet_payload_raw(value_raw) + msglist.append(tmpmsg) + nasa_msg.set_packet_messages(msglist) + raw = nasa_msg.to_raw() + writer.write(raw) + await writer.drain() + send_message_list.extend(chunk) + if len(send_message_list) % 100 == 0: + print(f"Sended count: {len(send_message_list)}") + await asyncio.sleep(1) + +async def serial_read(reader: asyncio.StreamReader, config): + prev_byte = 0x00 + packet_started = False + data = bytearray() + packet_size = 0 + + while True: + current_byte = await reader.read(1) # read bitewise + + #data = await reader.read(1024) + #data = await reader.readuntil(b'\x34fd') + if current_byte: + if packet_started: + data.extend(current_byte) + if len(data) == 3: + packet_size = ((data[1] << 8) | data[2]) + 2 + + if packet_size <= len(data): + asyncio.create_task(process_packet(data, config)) + data = bytearray() + packet_started = False + + # identify packet start + if current_byte == b'\x00' and prev_byte == b'\x32': + packet_started = True + data.extend(prev_byte) + data.extend(current_byte) + + prev_byte = current_byte + +def search_nasa_table(address): + for key in NASA_REPO: + if NASA_REPO[key]['address'].lower() == address.lower(): + return key + +def is_valid_rawvalue(rawvalue: bytes) -> bool: + return all(0x20 <= b <= 0x7E or b in (0x00, 0xFF) for b in rawvalue) + +async def process_packet(buffer, config): + try: + nasa_packet = NASAPacket() + nasa_packet.parse(buffer) + for msg in nasa_packet.packet_messages: + if msg.packet_message not in seen_message_list: + seen_message_list.append(msg.packet_message) + msgkey = search_nasa_table(f"0x{msg.packet_message:04X}") + if msgkey is None: + msgkey = "" + msgvalue = None + if msg.packet_message_type == 3: + msgvalue = "" + + if is_valid_rawvalue(msg.packet_payload[1:-1]): + for byte in msg.packet_payload[1:-1]: + if byte != 0x00 and byte != 0xFF: + char = chr(byte) if 32 <= byte <= 126 else f"{byte}" + msgvalue += char + else: + msgvalue += " " + msgvalue = msgvalue.strip() + else: + msgvalue = "".join([f"{int(x)}" for x in msg.packet_payload]) + else: + msgvalue = int.from_bytes(msg.packet_payload, byteorder='big', signed=True) + + line = f"| {len(seen_message_list):<6} | {hex(msg.packet_message):<6} | {msgkey:<50} | {msg.packet_message_type} | {msgvalue:<20} | {msg.packet_payload} |" + with open('helpertils/messagesFound.txt', "a") as dumpWriter: + dumpWriter.write(f"{line}\n") + + except Exception as e: + pass + +if __name__ == "__main__": + try: + loop = asyncio.get_event_loop() + loop.run_until_complete(main()) + except RuntimeError as e: + print(f"Runtime error: {e}") \ No newline at end of file diff --git a/helpertils/messageFinderAnalyser.py b/helpertils/messageFinderAnalyser.py new file mode 100644 index 0000000..f37aea9 --- /dev/null +++ b/helpertils/messageFinderAnalyser.py @@ -0,0 +1,169 @@ +import os +import sys +import inspect +import asyncio +import yaml +import traceback +import pprint + +currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) +parentdir = os.path.dirname(currentdir) +sys.path.insert(0, parentdir) + +from NASAPacket import NASAPacket, AddressClassEnum, DataType, PacketType +from NASAMessage import NASAMessage + +# Generate a list of all possible 2-byte hex values, always padded to 4 characters +found_repo = {} + +with open('data/NasaRepository.yml', mode='r') as file: + NASA_REPO = yaml.safe_load(file) + +async def main(): + + # load finder file and anylse it + with open('helpertils/messagesFound.txt', mode='r') as file: + lines = file.read() + for line in lines.splitlines(): + nix, nr, msgnr, msgname, type, packedval, rawval, nix2 = line.split("|") + if type.strip() != '3': + packedval = int(packedval.strip()) + if len(msgname.strip()) == 0 and packedval != -1: + found_repo[msgnr.strip()] = { + "type": type.strip(), + "raw_value": rawval.strip(), + "packed_value": packedval + } + + pprint.pprint(found_repo) + + # load config + with open('config.yml', mode='r') as file: + config = yaml.safe_load(file) + + # Print the total count to confirm all values are included + print(f"Total values: {len(found_repo)}") + + reader, writer = await asyncio.open_connection('172.19.2.240', 4196) + print(" serial_connection fertig") + await asyncio.gather( + serial_read(reader, config), + serial_write(writer, config), + ) + +async def serial_write(writer: asyncio.StreamWriter, config): + _CHUNKSIZE=10 + keys = list(found_repo.keys()) + chunks = [keys[i:i + _CHUNKSIZE] for i in range(0, len(keys), _CHUNKSIZE)] + while True: + print("Start Writing") + for chunk in chunks: + nasa_msg = NASAPacket() + nasa_msg.set_packet_source_address_class(AddressClassEnum.JIGTester) + nasa_msg.set_packet_source_channel(240) + nasa_msg.set_packet_source_address(0) + nasa_msg.set_packet_dest_address_class(AddressClassEnum.BroadcastSetLayer) + nasa_msg.set_packet_dest_channel(0) + nasa_msg.set_packet_dest_address(32) + nasa_msg.set_packet_information(True) + nasa_msg.set_packet_version(2) + nasa_msg.set_packet_retry_count(0) + nasa_msg.set_packet_type(PacketType.Normal) + nasa_msg.set_packet_data_type(DataType.Read) + nasa_msg.set_packet_number(166) + msglist=[] + for msg in chunk: + tmpmsg = NASAMessage() + tmpmsg.set_packet_message(int(msg, 16)) + value = 0 + if tmpmsg.packet_message_type == 0: + value_raw = value.to_bytes(1, byteorder='big') + elif tmpmsg.packet_message_type == 1: + value_raw = value.to_bytes(2, byteorder='big') + elif tmpmsg.packet_message_type == 2: + value_raw = value.to_bytes(4, byteorder='big') + else: + value_raw = value.to_bytes(1, byteorder='big') + + tmpmsg.set_packet_payload_raw(value_raw) + msglist.append(tmpmsg) + nasa_msg.set_packet_messages(msglist) + raw = nasa_msg.to_raw() + writer.write(raw) + await writer.drain() + await asyncio.sleep(1) + print("End Writing") + await asyncio.sleep(120) + +async def serial_read(reader: asyncio.StreamReader, config): + prev_byte = 0x00 + packet_started = False + data = bytearray() + packet_size = 0 + + while True: + current_byte = await reader.read(1) # read bitewise + + #data = await reader.read(1024) + #data = await reader.readuntil(b'\x34fd') + if current_byte: + if packet_started: + data.extend(current_byte) + if len(data) == 3: + packet_size = ((data[1] << 8) | data[2]) + 2 + + if packet_size <= len(data): + asyncio.create_task(process_packet(data, config)) + data = bytearray() + packet_started = False + + # identify packet start + if current_byte == b'\x00' and prev_byte == b'\x32': + packet_started = True + data.extend(prev_byte) + data.extend(current_byte) + + prev_byte = current_byte + +def search_nasa_table(address): + for key in NASA_REPO: + if NASA_REPO[key]['address'].lower() == address.lower(): + return key + +def is_valid_rawvalue(rawvalue: bytes) -> bool: + return all(0x20 <= b <= 0x7E or b in (0x00, 0xFF) for b in rawvalue) + +async def process_packet(buffer, config): + try: + nasa_packet = NASAPacket() + nasa_packet.parse(buffer) + for msg in nasa_packet.packet_messages: + if f"0x{msg.packet_message:04X}" in found_repo: + msgvalue = None + if msg.packet_message_type == 3: + msgvalue = "" + + if is_valid_rawvalue(msg.packet_payload[1:-1]): + for byte in msg.packet_payload[1:-1]: + if byte != 0x00 and byte != 0xFF: + char = chr(byte) if 32 <= byte <= 126 else f"{byte}" + msgvalue += char + else: + msgvalue += " " + msgvalue = msgvalue.strip() + else: + msgvalue = "".join([f"{int(x)}" for x in msg.packet_payload]) + else: + msgvalue = int.from_bytes(msg.packet_payload, byteorder='big', signed=True) + if msgvalue != found_repo[f"0x{msg.packet_message:04X}"]['packed_value']: + line = f" {hex(msg.packet_message):<6} | {msg.packet_message_type} | {found_repo[f"0x{msg.packet_message:04X}"]['packed_value']} -> {msgvalue} |" + print(line) + except Exception as e: + pass + +if __name__ == "__main__": + try: + loop = asyncio.get_event_loop() + loop.run_until_complete(main()) + except RuntimeError as e: + print(f"Runtime error: {e}") \ No newline at end of file diff --git a/helpertils/refreshNasaRepository.py b/helpertils/refreshNasaRepository.py new file mode 100644 index 0000000..3b3f074 --- /dev/null +++ b/helpertils/refreshNasaRepository.py @@ -0,0 +1,97 @@ +import argparse +import yaml + +def replace_empty_with_null(d): + + if isinstance(d, dict): + return {k: replace_empty_with_null(v) for k, v in d.items()} + elif isinstance(d, list): + return [replace_empty_with_null(v) for v in d] + elif d is None: + return None # Ensure `None` stays as YAML `null` + elif len(d.strip()) == 0: + return None + return d + +def main(): + with open('data/NasaRepository.yml', 'r') as nasarepo: + old_yaml = yaml.safe_load(nasarepo) + + ele = {} + + for key, value in old_yaml.items(): + print(key) + ele[key] = {} + ele[key]['hass_opts'] = {} + ele[key]['hass_opts']['platform'] = {} + ele[key]['address'] = replace_empty_with_null(old_yaml[key]['address']) + if replace_empty_with_null(old_yaml[key]['arithmetic']) is not None: + ele[key]['arithmetic'] = old_yaml[key]['arithmetic'] + if 'description' in old_yaml[key] and replace_empty_with_null(old_yaml[key]['description']) is not None: + ele[key]['description'] = old_yaml[key]['description'] + ele[key]['hass_opts']['default_platform'] = "sensor" + if 'writable' in old_yaml[key]: + ele[key]['hass_opts']['writable'] = old_yaml[key]['writable'] + else: + ele[key]['hass_opts']['writable'] = False + if 'enum' in old_yaml[key]: + new_values = [x.replace("'", "") for x in old_yaml[key]['enum'].values()] + if all([en.lower() in ['on', 'off'] for en in new_values]): + ele[key]['enum'] = old_yaml[key]['enum'] + ele[key]['hass_opts']['default_platform'] = "binary_sensor" + ele[key]['hass_opts']['platform']['payload_off'] = 'OFF' + ele[key]['hass_opts']['platform']['payload_on'] = 'ON' + ele[key]['hass_opts']['platform']['type'] = 'switch' + else: + ele[key]['enum'] = old_yaml[key]['enum'] + ele[key]['hass_opts']['platform']['options'] = new_values + ele[key]['hass_opts']['platform']['type'] = 'select' + else: + if 'min' in old_yaml[key]: + ele[key]['hass_opts']['platform']['min'] = old_yaml[key]['min'] + if 'max' in old_yaml[key]: + ele[key]['hass_opts']['platform']['max'] = old_yaml[key]['max'] + if 'step' in old_yaml[key]: + ele[key]['hass_opts']['platform']['step'] = old_yaml[key]['step'] + ele[key]['hass_opts']['platform']['type'] = 'number' + if replace_empty_with_null(old_yaml[key]['remarks']) is not None: + ele[key]['remarks'] = old_yaml[key]['remarks'] + if replace_empty_with_null(old_yaml[key]['signed']) is not None: + ele[key]['signed'] = old_yaml[key]['signed'] + if replace_empty_with_null(old_yaml[key]['type']) is not None: + ele[key]['type'] = old_yaml[key]['type'] + + if 'state_class' in old_yaml[key]: + ele[key]['hass_opts']['state_class'] = old_yaml[key]['state_class'] + if 'device_class' in old_yaml[key]: + ele[key]['hass_opts']['device_class'] = old_yaml[key]['device_class'] + + if 'unit' in old_yaml[key]: + if replace_empty_with_null(old_yaml[key]['unit']) is not None: + ele[key]['hass_opts']['unit'] = old_yaml[key]['unit'] + if ele[key]['hass_opts']['unit'] == "\u00b0C": + ele[key]['hass_opts']['device_class'] = "temperature" + elif ele[key]['hass_opts']['unit'] == '%': + ele[key]['hass_opts']['state_class'] = "measurement" + elif ele[key]['hass_opts']['unit'] == 'kW': + ele[key]['hass_opts']['device_class'] = "power" + elif ele[key]['hass_opts']['unit'] == 'rpm': + ele[key]['hass_opts']['state_class'] = "measurement" + elif ele[key]['hass_opts']['unit'] == 'bar': + ele[key]['hass_opts']['device_class'] = "pressure" + elif ele[key]['hass_opts']['unit'] == 'HP': + ele[key]['hass_opts']['device_class'] = "power" + elif ele[key]['hass_opts']['unit'] == 'hz': + ele[key]['hass_opts']['device_class'] = "frequency" + elif ele[key]['hass_opts']['unit'] == 'min': + ele[key]['hass_opts']['device_class'] = "duration" + elif ele[key]['hass_opts']['unit'] == 'h': + ele[key]['hass_opts']['device_class'] = "duration" + elif ele[key]['hass_opts']['unit'] == 's': + ele[key]['hass_opts']['device_class'] = "duration" + + with open('data/NasaRepository.yml', 'w') as newyaml: + yaml.dump(ele, newyaml, default_flow_style=False) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/helpertils/smartthings.http b/helpertils/smartthings.http new file mode 100644 index 0000000..feb8398 --- /dev/null +++ b/helpertils/smartthings.http @@ -0,0 +1,16 @@ + +### list devices +GET https://api.smartthings.com/v1/devices +Authorization: Bearer xx + +### "deviceId": "xx" "id": "samsungce.ehsFsvSettings", "version": 1 +GET https://api.smartthings.com/v1/capabilities/samsungce.ehsFsvSettings/1 +Authorization: Bearer xx + +### "locationId": "xx" "name": "Mein Zuhause" +GET https://api.smartthings.com/v1/locations +Authorization: Bearer xx + +### +GET https://api.smartthings.com/v1/capabilities/samsungce.ehsFsvSettings/1/i18n/en +Authorization: Bearer xx \ No newline at end of file diff --git a/ressources/dashboard_controlmode_template.yaml b/ressources/dashboard_controlmode_template.yaml new file mode 100644 index 0000000..baf6e51 --- /dev/null +++ b/ressources/dashboard_controlmode_template.yaml @@ -0,0 +1,462 @@ +views: + - title: Overview + type: sections + max_columns: 4 + subview: false + sections: + - type: grid + cards: + - type: entities + entities: + - entity: select.samsung_ehssentinel_power + name: Heatpump Power + secondary_info: last-updated + icon: mdi:power + - entity: number.samsung_ehssentinel_intempwaterlawtargetf + name: Adjust heating curve + secondary_info: last-updated + - entity: select.samsung_ehssentinel_indooropmode + name: Operation Mode + secondary_info: last-updated + title: Control Heatpump + - type: entities + entities: + - entity: sensor.samsung_ehssentinel_outdooroperationstatus + name: Operation Status + secondary_info: last-updated + - entity: binary_sensor.samsung_ehssentinel_dhwpower + secondary_info: last-updated + name: DHW Power + - entity: sensor.samsung_ehssentinel_outdoordefroststep + name: Defrost Step + secondary_info: last-updated + - entity: binary_sensor.samsung_ehssentinel_controlsilence + name: Silent Mode + secondary_info: last-updated + - entity: sensor.samsung_ehssentinel_ehssentinelheatoutput + name: Heat Output + secondary_info: last-updated + icon: mdi:heat-wave + - entity: sensor.samsung_ehssentinel_ingeneratedpowerlastminute + name: Generated Power Last Minute + secondary_info: last-updated + - entity: sensor.samsung_ehssentinel_inflowsensorcalc + secondary_info: last-changed + name: Water Flow Speed + - entity: sensor.samsung_ehssentinel_ehssentinelcop + name: COP + secondary_info: last-updated + - entity: sensor.samsung_ehssentinel_outdoortw1temp + name: Return Temperature + secondary_info: last-updated + icon: mdi:waves-arrow-left + - entity: sensor.samsung_ehssentinel_outdoortw2temp + name: Flow Temperature + secondary_info: last-updated + icon: mdi:waves-arrow-right + - entity: sensor.samsung_ehssentinel_indoordhwcurrenttemp + name: DHW Tank Temperature + secondary_info: last-updated + icon: mdi:water-boiler + - entity: sensor.samsung_ehssentinel_outdoorouttemp + secondary_info: last-updated + name: Outdoor Temperatur + - entity: sensor.samsung_ehssentinel_outdoorcomp1targethz + name: Compressor Target Frequence + secondary_info: last-updated + icon: mdi:sine-wave + - entity: sensor.samsung_ehssentinel_outdoorcomp1runhz + name: Compressor Run Frequence + secondary_info: last-updated + - entity: sensor.samsung_ehssentinel_outdoorcomp1orderhz + name: Compressor Order Frequence + secondary_info: last-updated + title: Current Data + - type: entities + entities: + - entity: sensor.samsung_ehssentinel_intotalgeneratedpower + name: Total Generated Heat Output + secondary_info: last-updated + icon: mdi:heat-wave + - entity: sensor.samsung_ehssentinel_outdoorcontrolwattmeterallunitaccum + name: Total Consumed Power + secondary_info: last-updated + - entity: sensor.samsung_ehssentinel_ehssentineltotalcop + name: Total COP + secondary_info: last-updated + - entity: sensor.samsung_ehssentinel_inminutessinceinstallation + name: Total Minutes Since Installation + secondary_info: last-updated + - entity: sensor.samsung_ehssentinel_inminutesactive + name: Total Minutes Active + secondary_info: last-updated + title: Life Cycle Data + - type: grid + cards: + - type: history-graph + entities: + - entity: sensor.samsung_ehssentinel_outdoorcomp1orderhz + name: Compressor freq. + - entity: sensor.samsung_ehssentinel_outdoorfanrpm1 + name: Outdoor FAN Speed + logarithmic_scale: false + title: Outdoor Unit + hours_to_show: 6 + grid_options: + columns: full + rows: 10 + - type: history-graph + entities: + - entity: sensor.samsung_ehssentinel_outdoortw1temp + name: Return Temperature + - entity: sensor.samsung_ehssentinel_outdoortw2temp + name: Flow Temperature + logarithmic_scale: false + hours_to_show: 6 + grid_options: + columns: full + rows: 10 + title: Water Law + - type: history-graph + entities: + - entity: sensor.samsung_ehssentinel_ehssentinelheatoutput + name: Heat Output + - entity: sensor.samsung_ehssentinel_outdoorcontrolwattmeterallunit + name: Power Input + - entity: sensor.samsung_ehssentinel_ehssentinelcop + name: COP + logarithmic_scale: false + hours_to_show: 6 + grid_options: + columns: full + rows: 16 + title: Efficiency + column_span: 3 + - type: sections + max_columns: 6 + title: Field Setting Value + path: field-setting-value + sections: + - type: grid + cards: + - type: entities + entities: + - entity: number.samsung_ehssentinel_infsv1011 + name: Water Out Temp. for Cooling Max. + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv1012 + name: Water Out Temp. for Cooling Min. + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv1021 + name: Room Temp. for Cooling Max. + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv1022 + name: Room Temp. for Cooling Min. + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv1031 + name: Water Out Temp. for Heating Max. + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv1032 + name: Water Out Temp. for Heating Min. + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv1041 + name: Room Temp. for Heating Max. + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv1042 + name: Room Temp. for Heating Min. + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv1051 + name: DHW tank Temp. Max. + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv1052 + name: DHW tank Temp. Min. + secondary_info: last-updated + title: FSV 10** - Remote Controller + show_header_toggle: false + state_color: false + grid_options: + columns: full + column_span: 2 + - type: grid + cards: + - type: entities + entities: + - entity: number.samsung_ehssentinel_infsv2011 + name: Heating Outdoor Temp. for WL Max. + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv2012 + name: Heating Outdoor Temp. for WL Min. + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv2021 + name: Heating Water out Temp. UFH/WL1 Max. + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv2022 + name: Heating Water out Temp. UFH/WL1 Min. + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv2031 + name: Heating Water out Temp. FCU/WL2 Max. + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv2032 + name: Heating Water out Temp. FCU/WL2 Min. + secondary_info: last-updated + - entity: select.samsung_ehssentinel_infsv2041 + name: Heating WL Selection + icon: mdi:heating-coil + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv2051 + name: Cooling Outdoor Temp. for WL Max. + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv2052 + name: Cooling Outdoor Temp. for WL Min. + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv2061 + name: Cooling Water out Temp UFH/WL1 Max. + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv2062 + name: Cooling Water out Temp. UFH/WL1 Min. + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv2071 + name: Cooling Water out Temp. FCU/WL2 Max. + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv2072 + name: Cooling Water out Temp. FCU/WL2 Min. + secondary_info: last-updated + - entity: select.samsung_ehssentinel_infsv2081 + name: Cooling WL Selection + secondary_info: last-updated + icon: mdi:snowflake + - entity: select.samsung_ehssentinel_infsv2091 + name: External Room Thermostat UFH + secondary_info: last-updated + - entity: select.samsung_ehssentinel_infsv2092 + name: External Room Thermostat FCU + secondary_info: last-updated + title: FSV 20** - Water Law + grid_options: + columns: full + column_span: 2 + - type: grid + cards: + - type: entities + entities: + - entity: select.samsung_ehssentinel_infsv3011 + secondary_info: last-updated + name: DHW Application + icon: mdi:water-boiler + - entity: number.samsung_ehssentinel_infsv3021 + secondary_info: last-updated + name: Heat Pump Max. Temperature + - entity: number.samsung_ehssentinel_infsv3022 + name: Heat Pump Stop + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv3023 + name: Heat Pump Start + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv3024 + name: Heat Pump Min. Space heating operation time + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv3025 + name: Heat Pump Max. DHW operation time + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv3026 + name: Heat Pump Max. Space heating operation time + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv3032 + name: Booster Heat Delay Time + secondary_info: last-updated + - entity: switch.samsung_ehssentinel_infsv3041 + name: Disinfection Application + secondary_info: last-updated + - entity: select.samsung_ehssentinel_infsv3042 + name: Disinfection Interval + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv3043 + name: Disinfection Start Time + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv3044 + name: Disinfection Target Temp. + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv3045 + name: Disinfection Duration + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv3046 + name: Disinfection Max Time + secondary_info: last-updated + - entity: select.samsung_ehssentinel_infsv3051 + name: Forced DHW Operation Time OFF Function + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv3052 + name: Farced DHW Operation Time Duration + secondary_info: last-updated + - entity: select.samsung_ehssentinel_infsv3061 + name: Solar Panel/DHW Thermostat H/P Combination + secondary_info: last-updated + - entity: select.samsung_ehssentinel_infsv3071 + name: Direction of 3Way Valve DHW Tank + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv3081 + name: Energy Metering BUH 1 step capacity + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv3082 + name: Energy Metering BUH 2 step capacity + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv3083 + name: Energy Metering BSH capacity + secondary_info: last-updated + title: FSV 30** - DHW code + grid_options: + columns: full + column_span: 2 + - type: grid + cards: + - type: entities + entities: + - entity: select.samsung_ehssentinel_infsv4011 + secondary_info: last-updated + name: Heat Pump Heating/DHW Priority + - entity: number.samsung_ehssentinel_infsv4012 + name: Heat Pump Outdoor Temp. for Priority + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv4013 + name: Heat Pump Heat OFF + secondary_info: last-updated + - entity: select.samsung_ehssentinel_infsv4021 + name: Backup Heater Application + secondary_info: last-updated + - entity: select.samsung_ehssentinel_infsv4022 + name: Backup Heater BUH/BSH Priority + secondary_info: last-updated + - entity: select.samsung_ehssentinel_infsv4023 + name: Backup Heater Cold Weather Compensation + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv4024 + name: Backup Heater Threshold Temp. + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv4025 + name: Backup Heater Defrost Backup Temp. + secondary_info: last-updated + - entity: select.samsung_ehssentinel_infsv4031 + name: Backup Boiler Application + secondary_info: last-updated + - entity: select.samsung_ehssentinel_infsv4032 + name: Backup Boiler Boiler Priority + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv4033 + name: Backup Boiler Threshold Power + secondary_info: last-updated + - entity: select.samsung_ehssentinel_infsv4041 + name: Mixing Valve Application + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv4042 + name: Mixing Valve Target △T (Heating) + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv4043 + secondary_info: last-updated + name: Mixing Valve Target △T (Cooling) + - entity: select.samsung_ehssentinel_infsv4044 + name: Mixing Valve Control Factor + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv4045 + name: Mixing Valve Control Factor + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv4046 + name: Mixing Valve Running Time + secondary_info: last-updated + - entity: select.samsung_ehssentinel_infsv4051 + name: Inverter Pump Application + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv4052 + name: Inverter Pump Target △T + secondary_info: last-updated + - entity: select.samsung_ehssentinel_infsv4053 + name: Inverter Pump Control Factor + secondary_info: last-updated + - entity: select.samsung_ehssentinel_infsv4061 + name: Zone Control Application + secondary_info: last-updated + title: FSV 40** - Heating code + state_color: false + grid_options: + columns: full + column_span: 2 + - type: grid + cards: + - type: entities + entities: + - entity: number.samsung_ehssentinel_infsv5011 + secondary_info: last-updated + name: Outing Mode Water Out Temp. for Cooling + - entity: number.samsung_ehssentinel_infsv5012 + name: Outing Mode Room Temp. for Cooling + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv5013 + name: Outing Mode Water Out Temp. for Heating + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv5014 + name: Outing Mode Room Temp. for Heating + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv5015 + name: Outing Mode Auto Cooling WL1 Temp. + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv5016 + name: Outing Mode Auto Cooling WL2 Temp. + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv5017 + name: Outing Mode Auto Heating WL1 Temp. + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv5018 + name: Outing Mode Auto Heating WL2 Temp. + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv5019 + name: Outing Mode Target Tank Temp. + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv5021 + name: DHW Saving Temp. + secondary_info: last-updated + - entity: switch.samsung_ehssentinel_infsv5022 + name: DHW Saving Mode + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv5023 + name: DHW Saving Thermo on Temp. + secondary_info: last-updated + - entity: select.samsung_ehssentinel_infsv5041 + name: Power Peak Control Application + secondary_info: last-updated + - entity: select.samsung_ehssentinel_infsv5042 + name: Power Peak Control Select Forced Off Parts + secondary_info: last-updated + - entity: select.samsung_ehssentinel_infsv5043 + name: Power Peak Control Using Input Voltage + secondary_info: last-updated + - entity: select.samsung_ehssentinel_infsv5051 + name: Frequency Ratio Control + - entity: select.samsung_ehssentinel_infsv5061 + name: Ratio of hot water supply compare to heating + secondary_info: last-updated + - entity: select.samsung_ehssentinel_infsv5081 + name: PV Control Application + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv5082 + name: PV Control Setting Temp. Shift Value (Cool) + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv5083 + name: PV Control Setting Temp. Shift Value (Heat) + secondary_info: last-updated + - entity: select.samsung_ehssentinel_infsv5091 + name: Smart Grid Control Application + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv5092 + name: Smart Grid Control Setting Temp. Shift Value (Heat) + secondary_info: last-updated + - entity: number.samsung_ehssentinel_infsv5093 + name: Smart Grid Control Setting Temp. Shift Value (DHW) + secondary_info: last-updated + - entity: select.samsung_ehssentinel_infsv5094 + name: Smart Grid Control DHW Mode + secondary_info: last-updated + title: FSV 50** - Others code + grid_options: + columns: full + column_span: 2 + cards: [] + dense_section_placement: true diff --git a/ressources/dashboard.yaml b/ressources/dashboard_readonly_template.yaml similarity index 93% rename from ressources/dashboard.yaml rename to ressources/dashboard_readonly_template.yaml index 6164709..b66b0ad 100644 --- a/ressources/dashboard.yaml +++ b/ressources/dashboard_readonly_template.yaml @@ -6,38 +6,23 @@ views: sections: - type: grid cards: - - type: tile - name: Operation mode - vertical: true - hide_state: false - show_entity_picture: false - grid_options: - columns: 6 - rows: 2 - entity: sensor.samsung_ehssentinel_outdooroperationstatus - - type: tile - entity: binary_sensor.samsung_ehssentinel_controlsilence - name: Silent Mode - vertical: true - hide_state: false - show_entity_picture: false - - type: tile - name: DHW Power - vertical: true - hide_state: false - show_entity_picture: false - entity: binary_sensor.samsung_ehssentinel_dhwpower - grid_options: - columns: 6 - rows: 2 - - type: tile - name: Defrost Status - vertical: true - hide_state: false - show_entity_picture: false - entity: sensor.samsung_ehssentinel_outdoordefroststep - type: entities entities: + - entity: sensor.samsung_ehssentinel_power + name: Heatpump Power + secondary_info: last-updated + - entity: sensor.samsung_ehssentinel_outdooroperationstatus + name: Operation Mode + secondary_info: last-updated + - entity: binary_sensor.samsung_ehssentinel_dhwpower + name: DHW Power + secondary_info: last-updated + - entity: binary_sensor.samsung_ehssentinel_controlsilence + name: Silence Mode + secondary_info: last-updated + - entity: sensor.samsung_ehssentinel_outdoordefroststep + name: Defrost Step + secondary_info: last-updated - entity: sensor.samsung_ehssentinel_ehssentinelheatoutput name: Heat Output secondary_info: last-updated @@ -45,6 +30,9 @@ views: - entity: sensor.samsung_ehssentinel_ingeneratedpowerlastminute name: Generated Power Last Minute secondary_info: last-updated + - entity: sensor.samsung_ehssentinel_inflowsensorcalc + secondary_info: last-changed + name: Water Flow Speed - entity: sensor.samsung_ehssentinel_ehssentinelcop name: COP secondary_info: last-updated @@ -64,9 +52,15 @@ views: secondary_info: last-updated name: Outdoor Temperatur - entity: sensor.samsung_ehssentinel_outdoorcomp1targethz - name: Compressor Frequence + name: Compressor Target Frequence secondary_info: last-updated icon: mdi:sine-wave + - entity: sensor.samsung_ehssentinel_outdoorcomp1runhz + name: Compressor Run Frequence + secondary_info: last-updated + - entity: sensor.samsung_ehssentinel_outdoorcomp1orderhz + name: Compressor Order Frequence + secondary_info: last-updated title: Current Data - type: entities entities: diff --git a/ressources/images/dashboard1.png b/ressources/images/dashboard1.png index cecba01..38458a1 100644 Binary files a/ressources/images/dashboard1.png and b/ressources/images/dashboard1.png differ diff --git a/ressources/images/dashboard2.png b/ressources/images/dashboard2.png index 0cee393..aabfff0 100644 Binary files a/ressources/images/dashboard2.png and b/ressources/images/dashboard2.png differ diff --git a/ressources/images/dashboard3.png b/ressources/images/dashboard3.png index 1f9c67f..5e24cc5 100644 Binary files a/ressources/images/dashboard3.png and b/ressources/images/dashboard3.png differ diff --git a/ressources/images/dashboard_cm1.png b/ressources/images/dashboard_cm1.png new file mode 100644 index 0000000..ff86ad2 Binary files /dev/null and b/ressources/images/dashboard_cm1.png differ diff --git a/ressources/images/dashboard_cm2.png b/ressources/images/dashboard_cm2.png new file mode 100644 index 0000000..5d1d442 Binary files /dev/null and b/ressources/images/dashboard_cm2.png differ diff --git a/ressources/images/dashboard_cm3.png b/ressources/images/dashboard_cm3.png new file mode 100644 index 0000000..ba9ea18 Binary files /dev/null and b/ressources/images/dashboard_cm3.png differ diff --git a/startEHSSentinel.py b/startEHSSentinel.py index 2d95cac..f5615cb 100644 --- a/startEHSSentinel.py +++ b/startEHSSentinel.py @@ -3,6 +3,7 @@ import serial import serial_asyncio import traceback from MessageProcessor import MessageProcessor +from MessageProducer import MessageProducer from EHSArguments import EHSArguments from EHSConfig import EHSConfig from EHSExceptions import MessageWarningException, SkipInvalidPacketException @@ -16,7 +17,7 @@ from CustomLogger import logger from NASAPacket import NASAPacket, AddressClassEnum, PacketType, DataType from NASAMessage import NASAMessage -version = "0.3.0 Stable" +version = "1.0.0 Stable" async def main(): """ @@ -76,28 +77,6 @@ async def main(): await serial_connection(config, args) async def process_buffer(buffer, args, config): - """ - Processes a buffer of data asynchronously, identifying and handling packets based on specific criteria. - Args: - buffer (list): A list of bytes representing the buffer to be processed. - args (Any): Additional arguments to be passed to the packet processing function. - Notes: - - The function continuously checks the buffer for data. - - If the first byte of the buffer is 0x32, it is considered a start byte. - - The packet size is determined by combining the second and third bytes of the buffer. - - If the buffer contains enough data for a complete packet, the packet is processed. - - If the buffer does not contain enough data, the function waits and checks again. - - Non-start bytes are removed from the buffer. - - The function sleeps for 0.03 seconds between iterations to avoid busy-waiting. - Logging: - - Logs the buffer size when data is present. - - Logs when the start byte is recognized. - - Logs the calculated packet size. - - Logs the complete packet and the last byte read when a packet is processed. - - Logs if the buffer is too small to read a complete packet. - - Logs if a received byte is not a start byte. - """ - if buffer: if (len(buffer) > 14): for i in range(0, len(buffer)): @@ -111,18 +90,6 @@ async def process_buffer(buffer, args, config): logger.debug(f"Buffer to short for NASA {len(buffer)}") async def serial_connection(config, args): - """ - Asynchronously reads data from a serial connection and processes it. - Args: - config (object): Configuration object containing serial or tcp connection parameters. - args (object): Additional arguments for buffer processing. - This function establishes a serial or tcp connection using parameters from the config object, - reads data from the serial port or tcp port until a specified delimiter (0x34) is encountered, - and appends the received data to a buffer. It also starts an asynchronous task to - process the buffer. - The function runs an infinite loop to continuously read data from the serial port/tcp port. - """ - buffer = [] loop = asyncio.get_running_loop() @@ -139,109 +106,92 @@ async def serial_connection(config, args): rtscts=True, timeout=1 ) - + await asyncio.gather( serial_read(reader, args, config), - serial_write(writer, reader, args, config), + serial_write(writer, config), ) +async def serial_read(reader: asyncio.StreamReader, args, config): + prev_byte = 0x00 + packet_started = False + data = bytearray() + packet_size = 0 -async def serial_read(reader, args, config): while True: - data = await reader.readuntil(b'\x34') # Read up to end of next message 0x34 - if data: - asyncio.create_task(process_buffer(data, args, config)) - #buffer.extend(data) - logger.debug(f"Received: {data}") - logger.debug(f"Received: {data!r}") - logger.debug(f"Received: {[hex(x) for x in data]}") + current_byte = await reader.read(1) # read bitewise + #data = await reader.read(1024) + #data = await reader.readuntil(b'\x34fd') + if current_byte: + if packet_started: + data.extend(current_byte) + if len(data) == 3: + packet_size = ((data[1] << 8) | data[2]) + 2 + + if packet_size <= len(data): + if current_byte == b'\x34': + asyncio.create_task(process_buffer(data, args, config)) + logger.debug(f"Received int: {data}") + logger.debug(f"Received hex: {[hex(x) for x in data]}") + data = bytearray() + packet_started = False + else: + if config.LOGGING['invalidPacket']: + logger.warning(f"Packet does not end with an x34. Size {packet_size} length {len(data)}") + logger.warning(f"Received hex: {[hex(x) for x in data]}") + logger.warning(f"Received raw: {data}") + else: + logger.debug(f"Packet does not end with an x34. Size {packet_size} length {len(data)}") + logger.debug(f"Received hex: {[hex(x) for x in data]}") + logger.debug(f"Received raw: {data}") + + data = bytearray() + packet_started = False - await asyncio.sleep(0.1) # Yield control to other tasks + # identify packet start + if current_byte == b'\x00' and prev_byte == b'\x32': + packet_started = True + data.extend(prev_byte) + data.extend(current_byte) -async def serial_write(writer:asyncio.StreamWriter, reader: asyncio.StreamReader, args, config): - """ - TODO Not used yet, only for future use... + prev_byte = current_byte + + #await asyncio.sleep(0.001) # Yield control to other tasks - Asynchronously writes data to the serial port. - This function sends data through the serial port at regular intervals. - Args: - transport: The serial transport object. - args: Additional arguments. - Returns: - None - """ +async def serial_write(writer:asyncio.StreamWriter, config): + producer = MessageProducer(writer=writer) + + # Wait 20s befor initial polling + await asyncio.sleep(20) + if config.POLLING is not None: for poller in config.POLLING['fetch_interval']: if poller['enable']: - await asyncio.sleep(3) - asyncio.create_task(make_default_request_packet(writer=writer, config=config, poller=poller)) + await asyncio.sleep(1) + asyncio.create_task(make_default_request_packet(producer=producer, config=config, poller=poller)) -async def make_default_request_packet(writer, config, poller): +async def make_default_request_packet(producer: MessageProducer, config: EHSConfig, poller): logger.info(f"Setting up Poller {poller['name']} every {poller['schedule']} seconds") message_list = [] for message in config.POLLING['groups'][poller['name']]: - tmp_msg = NASAMessage() - tmp_msg.set_packet_message(int(config.NASA_REPO[message]['address'], 16)) - if config.NASA_REPO[message]['type'] == 'ENUM': - tmp_msg.set_packet_message_type(0) - tmp_msg.set_packet_payload([0]) - elif config.NASA_REPO[message]['type'] == 'VAR': - tmp_msg.set_packet_message_type(1) - tmp_msg.set_packet_payload([0, 0]) - elif config.NASA_REPO[message]['type'] == 'LVAR': - tmp_msg.set_packet_message_type(2) - tmp_msg.set_packet_payload([0, 0, 0, 0]) - else: - logger.warning(f"Unknown Type for {message} type: {config.NASA_REPO[message]['type']}") - break - message_list.append(tmp_msg) + message_list.append(message) while True: - chunk_size = 10 - chunks = [message_list[i:i + chunk_size] for i in range(0, len(message_list), chunk_size)] - for chunk in chunks: - await asyncio.sleep(1) - nasa_msg = NASAPacket() - nasa_msg.set_packet_source_address_class(AddressClassEnum.WiFiKit) - nasa_msg.set_packet_source_channel(0) - nasa_msg.set_packet_source_address(144) - nasa_msg.set_packet_dest_address_class(AddressClassEnum.BroadcastSetLayer) - nasa_msg.set_packet_dest_channel(0) - nasa_msg.set_packet_dest_address(32) - nasa_msg.set_packet_information(True) - nasa_msg.set_packet_version(2) - nasa_msg.set_packet_retry_count(0) - nasa_msg.set_packet_type(PacketType.Normal) - nasa_msg.set_packet_data_type(DataType.Read) - nasa_msg.set_packet_number(len(chunk)) - nasa_msg.set_packet_messages(chunk) - final_packet = nasa_msg.to_raw() - writer.write(final_packet) - await writer.drain() - if config.LOGGING['pollerMessage']: - logger.info(f"Polling following raw: {[hex(x) for x in final_packet]}") - logger.info(f"Polling following NASAPacket: {nasa_msg}") - else: - logger.debug(f"Sent data raw: {final_packet}") - logger.debug(f"Sent data raw: {nasa_msg}") - logger.debug(f"Sent data raw: {[hex(x) for x in final_packet]}") - logger.debug(f"Sent data raw: {[x for x in final_packet]}") - + try: + await producer.read_request(message_list) + except MessageWarningException as e: + logger.warning("Polling Messages was not successfull") + logger.warning(f"Error processing message: {e}") + logger.warning(f"Message List: {message_list}") + except Exception as e: + logger.error("Error Accured, Polling will be skipped") + logger.error(f"Error processing message: {e}") + logger.error(traceback.format_exc()) await asyncio.sleep(poller['schedule']) logger.info(f"Refresh Poller {poller['name']}") async def process_packet(buffer, args, config): - """ - Asynchronously processes a packet buffer. - If `dumpWriter` is `None`, it attempts to process the packet using `MessageProcessor`. - If a `MessageWarningException` is raised, it logs a warning and skips the packet. - If any other exception is raised, it logs an error, skips the packet, and logs the stack trace. - If `dumpWriter` is not `None`, it writes the buffer to `dumpWriter`. - Args: - buffer (bytes): The packet buffer to be processed. - """ - if args.DUMPFILE and not args.DRYRUN: async with aiofiles.open(args.DUMPFILE, "a") as dumpWriter: await dumpWriter.write(f"{buffer}\n") @@ -254,7 +204,7 @@ async def process_packet(buffer, args, config): logger.debug(nasa_packet) if nasa_packet.packet_source_address_class in (AddressClassEnum.Outdoor, AddressClassEnum.Indoor): messageProcessor = MessageProcessor() - messageProcessor.process_message(nasa_packet) + await messageProcessor.process_message(nasa_packet) elif nasa_packet.packet_source_address_class == AddressClassEnum.WiFiKit and \ nasa_packet.packet_dest_address_class == AddressClassEnum.BroadcastSelfLayer and \ nasa_packet.packet_data_type == DataType.Notification: @@ -274,14 +224,17 @@ async def process_packet(buffer, args, config): logger.warning("Value Error on parsing Packet, Packet will be skipped") logger.warning(f"Error processing message: {e}") logger.warning(f"Complete Packet: {[hex(x) for x in buffer]}") + logger.warning(traceback.format_exc()) except SkipInvalidPacketException as e: logger.debug("Warnung accured, Packet will be skipped") logger.debug(f"Error processing message: {e}") logger.debug(f"Complete Packet: {[hex(x) for x in buffer]}") + logger.debug(traceback.format_exc()) except MessageWarningException as e: logger.warning("Warnung accured, Packet will be skipped") logger.warning(f"Error processing message: {e}") logger.warning(f"Complete Packet: {[hex(x) for x in buffer]}") + logger.warning(traceback.format_exc()) except Exception as e: logger.error("Error Accured, Packet will be skipped") logger.error(f"Error processing message: {e}")