"""Constants for the PyISY Module."""
from __future__ import annotations
import datetime
from enum import StrEnum
UPDATE_INTERVAL = 0.5
# Time Constants / Strings
EMPTY_TIME = datetime.datetime(year=1, month=1, day=1)
ISY_EPOCH_OFFSET = 36524
MILITARY_TIME = "%Y/%m/%d %H:%M:%S"
STANDARD_TIME = "%Y/%m/%d %I:%M:%S %p"
XML_STRPTIME = "%Y%m%d %H:%M:%S"
XML_STRPTIME_YY = "%y%m%d %H:%M:%S"
XML_TRUE = "true"
XML_FALSE = "false"
XML_ON = "<on />"
XML_OFF = "<off />"
POLL_TIME = 10
RECONNECT_DELAY = 60
SOCKET_BUFFER_SIZE = 4096
THREAD_SLEEP_TIME = 30.0
[docs]
class EventStreamStatus(StrEnum):
"""Connection / lifecycle status values published on `ISY.connection_events`."""
LOST_STREAM_CONNECTION = "lost_stream_connection"
CONNECTED = "connected"
DISCONNECTED = "disconnected"
START_UPDATES = "start_updates"
STOP_UPDATES = "stop_updates"
INITIALIZING = "stream_initializing"
LOADED = "stream_loaded"
RECONNECT_FAILED = "reconnect_failed"
RECONNECTING = "reconnecting"
DISCONNECTING = "stream_disconnecting"
NOT_STARTED = "not_started"
# Back-compat module-level aliases. Home Assistant Core and other downstream
# consumers import these names directly; the StrEnum members compare equal to
# their string values, so existing `== ES_CONNECTED` checks keep working.
ES_LOST_STREAM_CONNECTION = EventStreamStatus.LOST_STREAM_CONNECTION
ES_CONNECTED = EventStreamStatus.CONNECTED
ES_DISCONNECTED = EventStreamStatus.DISCONNECTED
ES_START_UPDATES = EventStreamStatus.START_UPDATES
ES_STOP_UPDATES = EventStreamStatus.STOP_UPDATES
ES_INITIALIZING = EventStreamStatus.INITIALIZING
ES_LOADED = EventStreamStatus.LOADED
ES_RECONNECT_FAILED = EventStreamStatus.RECONNECT_FAILED
ES_RECONNECTING = EventStreamStatus.RECONNECTING
ES_DISCONNECTING = EventStreamStatus.DISCONNECTING
ES_NOT_STARTED = EventStreamStatus.NOT_STARTED
ISY_VALUE_UNKNOWN = -1 * float("inf")
ISY_PROP_NOT_SET = "-1"
# Dictionary of X10 commands.
X10_COMMANDS = {"all_off": 1, "all_on": 4, "on": 3, "off": 11, "bright": 7, "dim": 15}
ACTION_EVENT_STATUS = "0"
ACTION_GET_STATUS = "1"
ACTION_KEY_CHANGED = "2"
ACTION_INFO_STRING = "3"
ACTION_IR_LEARN = "4"
ACTION_SCHEDULE = "5"
ACTION_VAR_STATUS = "6"
ACTION_VAR_INIT = "7"
ACTION_KEY = "8"
ATTR_ACTION = "action"
ATTR_CONTROL = "control"
ATTR_DESC = "desc"
ATTR_FLAG = "flag"
ATTR_FORMATTED = "formatted"
ATTR_ID = "id"
ATTR_INIT = "init"
ATTR_INSTANCE = "instance"
ATTR_LAST_CHANGED = "last_changed"
ATTR_LAST_UPDATE = "last_update"
ATTR_NODE_DEF_ID = "nodeDefId"
ATTR_PARENT = "parentId"
ATTR_PRECISION = "prec"
ATTR_SET = "set"
ATTR_STATUS = "status"
ATTR_STREAM_ID = "sid"
ATTR_TS = "ts"
ATTR_UNIT_OF_MEASURE = "uom"
ATTR_VAL = "val" # Used for Variables.
ATTR_VALUE = "value" # Used for everything else.
ATTR_VAR = "var"
DEFAULT_PRECISION = "0"
DEFAULT_UNIT_OF_MEASURE = ""
CONFIG_NETWORKING = "Networking Module"
CONFIG_PORTAL = "Portal Integration - UDI"
TAG_ADDRESS = "address"
TAG_CATEGORY = "cat"
TAG_CONFIG = "config"
TAG_DESC = "desc"
TAG_DESCRIPTION = "description"
TAG_DEVICE_TYPE = "devtype"
TAG_DST = "DST"
TAG_ENABLED = "enabled"
TAG_EVENT_INFO = "eventInfo"
TAG_FAMILY = "family"
TAG_FEATURE = "feature"
TAG_FIRMWARE = "app_full_version"
TAG_FOLDER = "folder"
TAG_FORMATTED = "fmtAct"
TAG_GENERIC = "gen"
TAG_GROUP = "group"
TAG_INSTALLED = "isInstalled"
TAG_IS_LOAD = "isLoad"
TAG_LATITUDE = "Lat"
TAG_LINK = "link"
TAG_LOCATION = "location"
TAG_LONGITUDE = "Long"
TAG_MFG = "mfg"
TAG_MILIATRY_TIME = "IsMilitary"
TAG_NAME = "name"
TAG_NET_RULE = "NetRule"
TAG_NODE = "node"
TAG_NODE_DEFS = "nodedefs"
TAG_NTP = "NTP"
TAG_PARENT = "parent"
TAG_PARAMETER = "parameter"
TAG_PRGM_FINISH = "f"
TAG_PRGM_RUN = "r"
TAG_PRGM_RUNNING = "running"
TAG_PRGM_STATUS = "s"
TAG_PRIMARY_NODE = "pnode"
TAG_PRODUCT = "product"
TAG_PROGRAM = "program"
TAG_PROPERTY = "property"
TAG_ROOT = "root"
TAG_SIZE = "size"
TAG_SPOKEN = "spoken"
TAG_SUNRISE = "Sunrise"
TAG_SUNSET = "Sunset"
TAG_TYPE = "type"
TAG_TZ_OFFSET = "TMZOffset"
TAG_VALUE = "value"
TAG_VARIABLE = "e"
TAG_VARIABLES = "variables"
PROTO_FOLDER = "program_folder"
PROTO_GROUP = "group"
PROTO_INSTEON = "insteon"
PROTO_INT_VAR = "integer_variable"
PROTO_ISY = "isy"
PROTO_NETWORK = "network"
PROTO_NODE_SERVER = "node_server"
PROTO_PROGRAM = "program"
PROTO_STATE_VAR = "state_variable"
PROTO_ZIGBEE = "zigbee"
PROTO_ZWAVE = "zwave"
FAMILY_CORE = "0"
FAMILY_INSTEON = "1"
FAMILY_UPB = "2"
FAMILY_RCS = "3"
FAMILY_ZWAVE = "4"
FAMILY_AUTO = "5"
FAMILY_GENERIC = "6"
FAMILY_UDI = "7"
FAMILY_BRULTECH = "8"
FAMILY_NCD = "9"
FAMILY_NODESERVER = "10"
FAMILY_ZMATTER_ZWAVE = "12"
PROP_BATTERY_LEVEL = "BATLVL"
PROP_BUSY = "BUSY"
PROP_COMMS_ERROR = "ERR"
PROP_ENERGY_MODE = "CLIEMD"
PROP_HEAT_COOL_STATE = "CLIHCS"
PROP_HUMIDITY = "CLIHUM"
PROP_ON_LEVEL = "OL"
PROP_RAMP_RATE = "RR"
PROP_SCHEDULE_MODE = "CLISMD"
PROP_SETPOINT_COOL = "CLISPC"
PROP_SETPOINT_HEAT = "CLISPH"
PROP_STATUS = "ST"
PROP_TEMPERATURE = "CLITEMP"
PROP_UOM = "UOM"
PROP_ZWAVE_PREFIX = "ZW_"
METHOD_COMMAND = "cmd"
METHOD_GET = "get"
METHOD_SET = "set"
URL_CHANGE = "change"
URL_CLOCK = "time"
URL_CONFIG = "config"
URL_DEFINITIONS = "definitions"
URL_MEMBERS = "members"
URL_NETWORK = "networking"
URL_NODE = "node"
URL_NODES = "nodes"
URL_NOTES = "notes"
URL_PING = "ping"
URL_PROGRAMS = "programs"
URL_QUERY = "query"
URL_RESOURCES = "resources"
URL_STATUS = "status"
URL_SUBFOLDERS = "subfolders"
URL_VARIABLES = "vars"
URL_ZWAVE = "zwave"
URL_PROFILE_NS = "profiles/ns"
URL_ZMATTER_ZWAVE = "zmatter/zwave"
VAR_INTEGER = "1"
VAR_STATE = "2"
CLIMATE_SETPOINT_MIN_GAP = 2
CMD_BACKLIGHT = "BL"
CMD_BEEP = "BEEP"
CMD_BRIGHTEN = "BRT"
CMD_CLIMATE_FAN_SETTING = "CLIFS"
CMD_CLIMATE_MODE = "CLIMD"
CMD_DIM = "DIM"
CMD_DISABLE = "disable"
CMD_DISABLE_RUN_AT_STARTUP = "disableRunAtStartup"
CMD_ENABLE = "enable"
CMD_ENABLE_RUN_AT_STARTUP = "enableRunAtStartup"
CMD_FADE_DOWN = "FDDOWN"
CMD_FADE_STOP = "FDSTOP"
CMD_FADE_UP = "FDUP"
CMD_MANUAL_DIM_BEGIN = "BMAN" # Depreciated, use Fade
CMD_MANUAL_DIM_STOP = "SMAN" # Depreciated, use Fade
CMD_MODE = "MODE"
CMD_OFF = "DOF"
CMD_OFF_FAST = "DFOF"
CMD_ON = "DON"
CMD_ON_FAST = "DFON"
CMD_RESET = "RESET"
CMD_RUN = "run"
CMD_RUN_ELSE = "runElse"
CMD_RUN_THEN = "runThen"
CMD_SECURE = "SECMD"
CMD_STOP = "stop"
CMD_X10 = "X10"
COMMAND_FRIENDLY_NAME = {
"ADRPST": "auto_dr_processing_state",
"AIRFLOW": "air_flow",
"ALARM": "alarm",
"ANGLE": "angle_position",
"ANGLPOS": "angle_position",
"ATMPRES": "atmospheric_pressure",
"AWAKE": "awake",
"BARPRES": "barometric_pressure",
"CC": "current",
"CLIFRS": "fan_running_state",
"CLIFSO": "fan_setting_override",
"CO2LVL": "co2_level",
"CPW": "power",
"CTL": "controller_action",
"CV": "voltage",
"DELAY": "delay",
"DEWPT": "dew_point",
"DISTANC": "distance",
"DOF3": "off_3x_key_presses",
"DOF4": "off_4x_key_presses",
"DOF5": "off_5x_key_presses",
"DON3": "on_3x_key_presses",
"DON4": "on_4x_key_presses",
"DON5": "on_5x_key_presses",
"ELECCON": "electrical_conductivity",
"ELECRES": "electrical_resistivity",
PROP_COMMS_ERROR: "device_communication_errors",
"ETO": "evapotranspiration",
"FATM": "fat_mass",
"FREQ": "frequency",
"GPV": "general_purpose",
"GUST": "gust",
"GV0": "custom_control_0",
"GV1": "custom_control_1",
"GV2": "custom_control_2",
"GV3": "custom_control_3",
"GV4": "custom_control_4",
"GV5": "custom_control_5",
"GV6": "custom_control_6",
"GV7": "custom_control_7",
"GV8": "custom_control_8",
"GV9": "custom_control_9",
"GV10": "custom_control_10",
"GV11": "custom_control_11",
"GV12": "custom_control_12",
"GV13": "custom_control_13",
"GV14": "custom_control_14",
"GV15": "custom_control_15",
"GV16": "custom_control_16",
"GV17": "custom_control_17",
"GV18": "custom_control_18",
"GV19": "custom_control_19",
"GV20": "custom_control_20",
"GV21": "custom_control_21",
"GV22": "custom_control_22",
"GV23": "custom_control_23",
"GV24": "custom_control_24",
"GV25": "custom_control_25",
"GV26": "custom_control_26",
"GV27": "custom_control_27",
"GV28": "custom_control_28",
"GV29": "custom_control_29",
"GV30": "custom_control_30",
"GVOL": "gas_volume",
"HAIL": "hail",
"HEATIX": "heat_index",
"HR": "heart_rate",
"LUMIN": "luminance",
"METHANE": "methane_density",
"MOIST": "moisture",
"MOON": "moon_phase",
"MUSCLEM": "muscle_mass",
"OZONE": "ozone",
"PCNT": "pulse_count",
"PF": "power_factor",
"PM10": "particulate_matter_10",
"PM25": "particulate_matter_2.5",
"POP": "percent_chance_of_precipitation",
"PPW": "polarized_power",
"PRECIP": "precipitation",
"PULSCNT": "pulse_count",
"RADON": "radon_concentration",
"RAINRT": "rain_rate",
"RELMOD": "relative_modulation_level",
"RESPR": "respiratory_rate",
"RFSS": "rf_signal_strength",
"ROTATE": "rotation",
"RR": "ramp_rate",
"SEISINT": "seismic_intensity",
"SEISMAG": "seismic_magnitude",
"SMOKED": "smoke_density",
"SOILH": "soil_humidity",
"SOILR": "soil_reactivity",
"SOILS": "soil_salinity",
"SOILT": "soil_temperature",
"SOLRAD": "solar_radiation",
"SPEED": "speed",
"SVOL": "sound_volume",
"TANKCAP": "tank_capacity",
"TEMPEXH": "exhaust_temperature",
"TEMPOUT": "outside_temperature",
"TIDELVL": "tide_level",
"TIME": "time",
"TIMEREM": "time_remaining",
"TPW": "total_energy_used",
"UAC": "user_number",
"USRNUM": "user_number",
"UV": "uv_light",
"VOCLVL": "voc_level",
"WATERF": "water_flow",
"WATERP": "water_pressure",
"WATERT": "water_temperature",
"WATERTB": "boiler_water_temperature",
"WATERTD": "domestic_hot_water_temperature",
"WEIGHT": "weight",
"WINDCH": "wind_chill",
"WINDDIR": "wind_direction",
"WVOL": "water_volume",
CMD_BACKLIGHT: "backlight",
CMD_BEEP: "beep",
CMD_BRIGHTEN: "bright",
CMD_CLIMATE_FAN_SETTING: "fan_state",
CMD_CLIMATE_MODE: "climate_mode",
CMD_DIM: "dim",
CMD_FADE_DOWN: "fade_down",
CMD_FADE_STOP: "fade_stop",
CMD_FADE_UP: "fade_up",
CMD_MANUAL_DIM_BEGIN: "brighten_manual",
CMD_MANUAL_DIM_STOP: "stop_manual",
CMD_MODE: "mode",
CMD_OFF: "off",
CMD_OFF_FAST: "fastoff",
CMD_ON: "on",
CMD_ON_FAST: "faston",
CMD_RESET: "reset",
CMD_SECURE: "secure",
CMD_X10: "x10_command",
PROP_BATTERY_LEVEL: "battery_level",
PROP_BUSY: "busy",
PROP_ENERGY_MODE: "energy_saving_mode",
PROP_HEAT_COOL_STATE: "heat_cool_state",
PROP_HUMIDITY: "humidity",
PROP_ON_LEVEL: "on_level",
PROP_SCHEDULE_MODE: "schedule_mode",
PROP_SETPOINT_COOL: "cool_setpoint",
PROP_SETPOINT_HEAT: "heat_setpoint",
PROP_STATUS: "status",
PROP_TEMPERATURE: "temperature",
PROP_UOM: "unit_of_measure",
}
EVENT_PROPS_IGNORED = [
CMD_BEEP,
CMD_BRIGHTEN,
CMD_DIM,
CMD_MANUAL_DIM_BEGIN,
CMD_MANUAL_DIM_STOP,
CMD_FADE_UP,
CMD_FADE_DOWN,
CMD_FADE_STOP,
CMD_OFF,
CMD_OFF_FAST,
CMD_ON,
CMD_ON_FAST,
CMD_RESET,
CMD_X10,
PROP_BUSY,
PROP_STATUS,
]
COMMAND_NAME = {val: key for key, val in COMMAND_FRIENDLY_NAME.items()}
# Referenced from ISY-WSDK-5.0.4\WSDL\family.xsd
NODE_FAMILY_ID = {
FAMILY_CORE: "Default",
FAMILY_INSTEON: "Insteon",
FAMILY_UPB: "UPB",
FAMILY_RCS: "RCS",
FAMILY_ZWAVE: "Z-Wave",
FAMILY_AUTO: "Auto_DR",
FAMILY_GENERIC: "Group",
FAMILY_UDI: "UDI",
FAMILY_BRULTECH: "Brultech",
FAMILY_NCD: "NCD",
FAMILY_NODESERVER: "Node_Server",
FAMILY_ZMATTER_ZWAVE: "ZMatter_Z-Wave",
}
UOM_CLIMATE_MODES = "98"
UOM_CLIMATE_MODES_ZWAVE = "67"
UOM_DOUBLE_TEMP = "101"
UOM_FAN_MODES = "99"
UOM_INDEX = "25"
UOM_PERCENTAGE = "51"
UOM_SECONDS = "57"
UOM_FRIENDLY_NAME = {
"1": "A",
"2": "", # Binary / On-Off
"3": "btu/h",
"4": "°C",
"5": "cm",
"6": "ft³",
"7": "ft³/min",
"8": "m³",
"9": "day",
"10": "days",
"12": "dB",
"13": "dB A",
"14": "°",
"16": "macroseismic",
"17": "°F",
"18": "ft",
"19": "hour",
"20": "hours",
"21": "%AH",
"22": "%RH",
"23": "inHg",
"24": "in/hr",
UOM_INDEX: "index",
"26": "K",
"27": "keyword",
"28": "kg",
"29": "kV",
"30": "kW",
"31": "kPa",
"32": "KPH",
"33": "kWh",
"34": "liedu",
"35": "L",
"36": "lx",
"37": "mercalli",
"38": "m",
"39": "m³/hr",
"40": "m/s",
"41": "mA",
"42": "ms",
"43": "mV",
"44": "min",
"45": "min",
"46": "mm/hr",
"47": "month",
"48": "MPH",
"49": "m/s",
"50": "Ω",
UOM_PERCENTAGE: "%",
"52": "lbs",
"53": "pf",
"54": "ppm",
"55": "pulse count",
"57": "s",
"58": "s",
"59": "S/m",
"60": "m_b",
"61": "M_L",
"62": "M_w",
"63": "M_S",
"64": "shindo",
"65": "SML",
"69": "gal",
"71": "UV index",
"72": "V",
"73": "W",
"74": "W/m²",
"75": "weekday",
"76": "°",
"77": "year",
"82": "mm",
"83": "km",
"85": "Ω",
"86": "kΩ",
"87": "m³/m³",
"88": "Water activity",
"89": "RPM",
"90": "Hz",
"91": "°",
"92": "° South",
"100": "",
"101": "° (x2)",
"102": "kWs",
"103": "$",
"104": "¢",
"105": "in",
"106": "mm/day",
"107": "", # raw 1-byte unsigned value
"108": "", # raw 2-byte unsigned value
"109": "", # raw 3-byte unsigned value
"110": "", # raw 4-byte unsigned value
"111": "", # raw 1-byte signed value
"112": "", # raw 2-byte signed value
"113": "", # raw 3-byte signed value
"114": "", # raw 4-byte signed value
"116": "mi",
"117": "mbar",
"118": "hPa",
"119": "Wh",
"120": "in/day",
}
UOM_TO_STATES = {
"11": { # Deadbolt Status
"0": "unlocked",
"100": "locked",
"101": "unknown",
"102": "problem",
},
"15": { # Door Lock Alarm
"1": "master code changed",
"2": "tamper code entry limit",
"3": "escutcheon removed",
"4": "key-manually locked",
"5": "locked by touch",
"6": "key-manually unlocked",
"7": "remote locking jammed bolt",
"8": "remotely locked",
"9": "remotely unlocked",
"10": "deadbolt jammed",
"11": "battery too low to operate",
"12": "critical low battery",
"13": "low battery",
"14": "automatically locked",
"15": "automatic locking jammed bolt",
"16": "remotely power cycled",
"17": "lock handling complete",
"19": "user deleted",
"20": "user added",
"21": "duplicate pin",
"22": "jammed bolt by locking with keypad",
"23": "locked by keypad",
"24": "unlocked by keypad",
"25": "keypad attempt outside schedule",
"26": "hardware failure",
"27": "factory reset",
"28": "manually not fully locked",
"29": "all user codes deleted",
"30": "new user code not added-duplicate code",
"31": "keypad temporarily disabled",
"32": "keypad busy",
"33": "new program code entered",
"34": "rf unlock with invalid user code",
"35": "rf lock with invalid user codes",
"36": "window-door is open",
"37": "window-door is closed",
"38": "window-door handle is open",
"39": "window-door handle is closed",
"40": "user code entered on keypad",
"41": "power cycled",
},
"66": { # Thermostat Heat/Cool State
"0": "idle",
"1": "heating",
"2": "cooling",
"3": "fan_only",
"4": "pending heat",
"5": "pending cool",
"6": "vent",
"7": "aux heat",
"8": "2nd stage heating",
"9": "2nd stage cooling",
"10": "2nd stage aux heat",
"11": "3rd stage aux heat",
},
"67": { # Thermostat Mode
"0": "off",
"1": "heat",
"2": "cool",
"3": "auto",
"4": "aux/emergency heat",
"5": "resume",
"6": "fan_only",
"7": "furnace",
"8": "dry air",
"9": "moist air",
"10": "auto changeover",
"11": "energy save heat",
"12": "energy save cool",
"13": "away",
"14": "program auto",
"15": "program heat",
"16": "program cool",
},
"68": { # Thermostat Fan Mode
"0": "auto",
"1": "on",
"2": "auto high",
"3": "high",
"4": "auto medium",
"5": "medium",
"6": "circulation",
"7": "humidity circulation",
"8": "left-right circulation",
"9": "up-down circulation",
"10": "quiet",
},
"78": {"0": "off", "100": "on"}, # 0-Off 100-On
"79": {"0": "open", "100": "closed"}, # 0-Open 100-Close
"80": { # Thermostat Fan Run State
"0": "off",
"1": "on",
"2": "on high",
"3": "on medium",
"4": "circulation",
"5": "humidity circulation",
"6": "right/left circulation",
"7": "up/down circulation",
"8": "quiet circulation",
},
"84": {"0": "unlock", "1": "lock"}, # Secure Mode
"93": { # Power Management Alarm
"1": "power applied",
"2": "ac mains disconnected",
"3": "ac mains reconnected",
"4": "surge detection",
"5": "volt drop or drift",
"6": "over current detected",
"7": "over voltage detected",
"8": "over load detected",
"9": "load error",
"10": "replace battery soon",
"11": "replace battery now",
"12": "battery is charging",
"13": "battery is fully charged",
"14": "charge battery soon",
"15": "charge battery now",
},
"94": { # Appliance Alarm
"1": "program started",
"2": "program in progress",
"3": "program completed",
"4": "replace main filter",
"5": "failure to set target temperature",
"6": "supplying water",
"7": "water supply failure",
"8": "boiling",
"9": "boiling failure",
"10": "washing",
"11": "washing failure",
"12": "rinsing",
"13": "rinsing failure",
"14": "draining",
"15": "draining failure",
"16": "spinning",
"17": "spinning failure",
"18": "drying",
"19": "drying failure",
"20": "fan failure",
"21": "compressor failure",
},
"95": { # Home Health Alarm
"1": "leaving bed",
"2": "sitting on bed",
"3": "lying on bed",
"4": "posture changed",
"5": "sitting on edge of bed",
},
"96": { # VOC Level
"1": "clean",
"2": "slightly polluted",
"3": "moderately polluted",
"4": "highly polluted",
},
"97": { # Barrier Status
"0": "closed",
"100": "open",
"101": "unknown",
"102": "stopped",
"103": "closing",
"104": "opening",
**{str(b): f"{b} %" for a, b in enumerate(list(range(1, 100)))}, # 1-99 are percentage open
},
"98": { # Insteon Thermostat Mode
"0": "off",
"1": "heat",
"2": "cool",
"3": "auto",
"4": "fan_only",
"5": "program_auto",
"6": "program_heat",
"7": "program_cool",
},
"99": {"7": "on", "8": "auto"}, # Insteon Thermostat Fan Mode
"115": { # Most recent On style action taken for lamp control
"0": "on",
"1": "off",
"2": "fade up",
"3": "fade down",
"4": "fade stop",
"5": "fast on",
"6": "fast off",
"7": "triple press on",
"8": "triple press off",
"9": "4x press on",
"10": "4x press off",
"11": "5x press on",
"12": "5x press off",
},
}
# Translate the "RR" Property to Seconds
INSTEON_RAMP_RATES = {
"0": 540,
"1": 480,
"2": 420,
"3": 360,
"4": 300,
"5": 270,
"6": 240,
"7": 210,
"8": 180,
"9": 150,
"10": 120,
"11": 90,
"12": 60,
"13": 47,
"14": 43,
"15": 38.5,
"16": 34,
"17": 32,
"18": 30,
"19": 28,
"20": 26,
"21": 23.5,
"22": 21.5,
"23": 19,
"24": 8.5,
"25": 6.5,
"26": 4.5,
"27": 2,
"28": 0.5,
"29": 0.3,
"30": 0.2,
"31": 0.1,
}
# Thermostat Types/Categories. 4.8 Trane, 5.3 venstar, 5.10 Insteon Wireless,
# 5.0x0B, 0x0F, 0x10, 0x13, 0x14, 0x15 - Insteon (alt. frequencies)
INSTEON_TYPE_THERMOSTAT = [
"4.8",
"5.3",
"5.10",
"5.11",
"5.14",
"5.15",
"5.16",
"5.17",
"5.18",
"5.19",
"5.20",
"5.21",
]
INSTEON_TYPE_THERMOSTAT_TUP = tuple(INSTEON_TYPE_THERMOSTAT)
ZWAVE_CAT_THERMOSTAT = ["140"]
# Other special categories or types
INSTEON_TYPE_LOCK = ["15.", "4.64"]
INSTEON_TYPE_LOCK_TUP = tuple(INSTEON_TYPE_LOCK)
ZWAVE_CAT_LOCK = ["111"]
INSTEON_TYPE_DIMMABLE = ["1."]
INSTEON_TYPE_DIMMABLE_TUP = tuple(INSTEON_TYPE_DIMMABLE)
INSTEON_SUBNODE_DIMMABLE = " 1"
ZWAVE_CAT_DIMMABLE = ["109", "119", "186"]
# Insteon Battery Devices - States are ignored when checking the status of a group.
INSTEON_STATELESS_TYPE = ["0.16.", "0.17.", "0.18.", "16."] # Not Used
INSTEON_STATELESS_NODEDEFID = [
"BinaryAlarm",
"BinaryAlarm_ADV",
"BinaryControl",
"BinaryControl_ADV",
"RemoteLinc2",
"RemoteLinc2_ADV",
"DimmerSwitchOnly",
]
# Referenced from ISY-WSDK 4_fam.xml
# Included for user translations in external modules.
# This is the Node.zwave_props.category property.
DEVTYPE_CATEGORIES = {
"0": "uninitialized",
"101": "unknown",
"102": "alarm",
"103": "av control point",
"104": "binary sensor",
"105": "class a motor control",
"106": "class b motor control",
"107": "class c motor control",
"108": "controller",
"109": "dimmer switch",
"110": "display",
"111": "door lock",
"112": "doorbell",
"113": "entry control",
"114": "gateway",
"115": "installer tool",
"116": "motor multiposition",
"117": "climate sensor",
"118": "multilevel sensor",
"119": "multilevel switch",
"120": "on/off power strip",
"121": "on/off power switch",
"122": "on/off scene switch",
"123": "open/close valve",
"124": "pc controller",
"125": "remote",
"126": "remote control",
"127": "av remote control",
"128": "simple remote control",
"129": "repeater",
"130": "residential hrv",
"131": "satellite receiver",
"132": "satellite receiver",
"133": "scene controller",
"134": "scene switch",
"135": "security panel",
"136": "set-top box",
"137": "siren",
"138": "smoke alarm",
"139": "subsystem controller",
"140": "thermostat",
"141": "toggle",
"142": "television",
"143": "energy meter",
"144": "pulse meter",
"145": "water meter",
"146": "gas meter",
"147": "binary switch",
"148": "binary alarm",
"149": "aux alarm",
"150": "co2 alarm",
"151": "co alarm",
"152": "freeze alarm",
"153": "glass break alarm",
"154": "heat alarm",
"155": "motion sensor",
"156": "smoke alarm",
"157": "tamper alarm",
"158": "tilt alarm",
"159": "water alarm",
"160": "door/window alarm",
"161": "test alarm",
"162": "low battery alarm",
"163": "co end of life alarm",
"164": "malfunction alarm",
"165": "heartbeat",
"166": "overheat alarm",
"167": "rapid temp rise alarm",
"168": "underheat alarm",
"169": "leak detected alarm",
"170": "level drop alarm",
"171": "replace filter alarm",
"172": "intrusion alarm",
"173": "tamper code alarm",
"174": "hardware failure alarm",
"175": "software failure alarm",
"176": "contact police alarm",
"177": "contact fire alarm",
"178": "contact medical alarm",
"179": "wakeup alarm",
"180": "timer",
"181": "power management",
"182": "appliance",
"183": "home health",
"184": "barrier",
"185": "notification sensor",
"186": "color switch",
"187": "multilevel switch off on",
"188": "multilevel switch down up",
"189": "multilevel switch close open",
"190": "multilevel switch ccw cw",
"191": "multilevel switch left right",
"192": "multilevel switch reverse forward",
"193": "multilevel switch pull push",
"194": "basic set",
"195": "wall controller",
"196": "barrier handle",
"197": "sound switch",
}
# Referenced from ISY-WSDK cat.xml
# Included for user translations in external modules.
# This is the first part of the Node.type property (before the first ".")
NODE_CATEGORIES = {
"0": "generic controller",
"1": "dimming control",
"2": "switch/relay control",
"3": "network bridge",
"4": "irrigation control",
"5": "climate control",
"6": "pool control",
"7": "sensors/actuators",
"8": "home entertainment",
"9": "energy management",
"10": "appliance control",
"11": "plumbing",
"12": "communications",
"13": "computer",
"14": "windows/shades",
"15": "access control",
"16": "security/health/safety",
"17": "surveillance",
"18": "automotive",
"19": "pet care",
"20": "toys",
"21": "timers/clocks",
"22": "holiday",
"113": "a10/x10",
"127": "virtual",
"254": "unknown",
}
# Node Change Actions
NC_CLEAR_ERROR = "CE"
NC_FOLDER_ADDED = "FD"
NC_FOLDER_REMOVED = "FR"
NC_FOLDER_RENAMED = "FN"
NC_GROUP_ADDED = "GD"
NC_GROUP_REMOVED = "GR"
NC_GROUP_RENAMED = "GN"
NC_NET_RENAMED = "WR"
NC_NODE_ADDED = "ND"
NC_NODE_ENABLED = "EN"
NC_NODE_ERROR = "NE"
NC_NODE_MOVED = "MV"
NC_NODE_REMOVE_FROM_GROUP = "RG"
NC_NODE_REMOVED = "NR"
NC_NODE_RENAMED = "NN"
NC_NODE_REVISED = "RV"
NC_PARENT_CHANGED = "PC"
NC_PENDING_DEVICE_OP = "WH"
NC_PROGRAMMING_DEVICE = "WD"
DEV_WRITING = "_7A"
DEV_MEMORY = "_7M"
# Node Change Code: (Description, EventInfo Tags)
NODE_CHANGED_ACTIONS = {
NC_CLEAR_ERROR: ("Node Comm. Errors Cleared", []),
NC_FOLDER_ADDED: ("Folder Added", []),
NC_FOLDER_REMOVED: ("Folder Removed", []),
NC_FOLDER_RENAMED: ("Folder Renamed", ["newName"]),
NC_GROUP_ADDED: ("Group Added", ["groupName", "groupType"]),
NC_GROUP_REMOVED: ("Group Removed", []),
NC_GROUP_RENAMED: ("Group Renamed", ["newName"]),
NC_NET_RENAMED: ("Network Renamed", []),
NC_NODE_ADDED: ("Node Added", ["nodeName", "nodeType"]),
NC_NODE_ENABLED: ("Enabled/Disabled", ["enabled"]),
NC_NODE_ERROR: ("Node Comm. Errors", []),
NC_NODE_MOVED: ("Node moved into a Scene", ["movedNode", "linkType"]),
NC_NODE_REMOVE_FROM_GROUP: ("Removed from Group (Scene)", ["removedNode"]),
NC_NODE_REMOVED: ("Node Removed", []),
NC_NODE_RENAMED: ("Node Renamed", ["newName"]),
NC_NODE_REVISED: ("Node Revised (UPB)", []),
NC_PARENT_CHANGED: ("Parent Changed", ["node", "nodeType", "parent", "parentType"]),
NC_PENDING_DEVICE_OP: ("Pending Device Operation", []),
NC_PROGRAMMING_DEVICE: ("Programming Device", []),
DEV_WRITING: ("Progress Report", ["message"]),
DEV_MEMORY: ("Memory Write", ["memory", "cmd1", "cmd2", "value"]),
}
SYSTEM_NOT_BUSY = "0"
SYSTEM_BUSY = "1"
SYSTEM_IDLE = "2"
SYSTEM_SAFE_MODE = "3"
SYSTEM_STATUS = {
SYSTEM_NOT_BUSY: "Not Busy",
SYSTEM_BUSY: "Busy",
SYSTEM_IDLE: "Idle",
SYSTEM_SAFE_MODE: "Safe Mode",
}
# Node Link Types
NODE_IS_CONTROLLER = 0x10
# Node operations flags
NODE_IS_INIT = 0x01 # needs to be initialized
NODE_TO_SCAN = 0x02 # needs to be scanned
NODE_IS_A_GROUP = 0x04 # it’s a group!
NODE_IS_ROOT = 0x08 # it’s the root group
NODE_IS_IN_ERR = 0x10 # it’s in error!
NODE_IS_NEW = 0x20 # brand new node
NODE_TO_DELETE = 0x40 # has to be deleted later
NODE_IS_DEVICE_ROOT = 0x80 # root device such as KPL load
DEV_CMD_MEMORY_WRITE = "0x2E"
DEV_BL_ADDR = "0x0264"
DEV_OL_ADDR = "0x0032"
DEV_RR_ADDR = "0x0021"
BACKLIGHT_SUPPORT = {
"DimmerMotorSwitch": UOM_PERCENTAGE,
"DimmerMotorSwitch_ADV": UOM_PERCENTAGE,
"DimmerLampSwitch": UOM_PERCENTAGE,
"DimmerLampSwitch_ADV": UOM_PERCENTAGE,
"DimmerSwitchOnly": UOM_PERCENTAGE,
"DimmerSwitchOnly_ADV": UOM_PERCENTAGE,
"KeypadDimmer": UOM_INDEX,
"KeypadDimmer_ADV": UOM_INDEX,
"RelayLampSwitch": UOM_PERCENTAGE,
"RelayLampSwitch_ADV": UOM_PERCENTAGE,
"RelaySwitchOnlyPlusQuery": UOM_PERCENTAGE,
"RelaySwitchOnlyPlusQuery_ADV": UOM_PERCENTAGE,
"RelaySwitchOnly": UOM_PERCENTAGE,
"RelaySwitchOnly_ADV": UOM_PERCENTAGE,
"KeypadRelay": UOM_INDEX,
"KeypadRelay_ADV": UOM_INDEX,
"KeypadButton": UOM_INDEX,
"KeypadButton_ADV": UOM_INDEX,
}
BACKLIGHT_INDEX = [
"On 0 / Off 0",
"On 1 / Off 0",
"On 2 / Off 0",
"On 3 / Off 0",
"On 4 / Off 0",
"On 5 / Off 0",
"On 6 / Off 0",
"On 7 / Off 0",
"On 8 / Off 0",
"On 9 / Off 0",
"On 10 / Off 0",
"On 11 / Off 0",
"On 12 / Off 0",
"On 13 / Off 0",
"On 14 / Off 0",
"On 15 / Off 0",
"On 0 / Off 1",
"On 1 / Off 1",
"On 2 / Off 1",
"On 3 / Off 1",
"On 4 / Off 1",
"On 5 / Off 1",
"On 6 / Off 1",
"On 7 / Off 1",
"On 8 / Off 1",
"On 9 / Off 1",
"On 10 / Off 1",
"On 11 / Off 1",
"On 12 / Off 1",
"On 13 / Off 1",
"On 14 / Off 1",
"On 15 / Off 1",
"On 0 / Off 2",
"On 1 / Off 2",
"On 2 / Off 2",
"On 3 / Off 2",
"On 4 / Off 2",
"On 5 / Off 2",
"On 6 / Off 2",
"On 7 / Off 2",
"On 8 / Off 2",
"On 9 / Off 2",
"On 10 / Off 2",
"On 11 / Off 2",
"On 12 / Off 2",
"On 13 / Off 2",
"On 14 / Off 2",
"On 15 / Off 2",
"On 0 / Off 3",
"On 1 / Off 3",
"On 2 / Off 3",
"On 3 / Off 3",
"On 4 / Off 3",
"On 5 / Off 3",
"On 6 / Off 3",
"On 7 / Off 3",
"On 8 / Off 3",
"On 9 / Off 3",
"On 10 / Off 3",
"On 11 / Off 3",
"On 12 / Off 3",
"On 13 / Off 3",
"On 14 / Off 3",
"On 15 / Off 3",
"On 0 / Off 4",
"On 1 / Off 4",
"On 2 / Off 4",
"On 3 / Off 4",
"On 4 / Off 4",
"On 5 / Off 4",
"On 6 / Off 4",
"On 7 / Off 4",
"On 8 / Off 4",
"On 9 / Off 4",
"On 10 / Off 4",
"On 11 / Off 4",
"On 12 / Off 4",
"On 13 / Off 4",
"On 14 / Off 4",
"On 15 / Off 4",
"On 0 / Off 5",
"On 1 / Off 5",
"On 2 / Off 5",
"On 3 / Off 5",
"On 4 / Off 5",
"On 5 / Off 5",
"On 6 / Off 5",
"On 7 / Off 5",
"On 8 / Off 5",
"On 9 / Off 5",
"On 10 / Off 5",
"On 11 / Off 5",
"On 12 / Off 5",
"On 13 / Off 5",
"On 14 / Off 5",
"On 15 / Off 5",
"On 0 / Off 6",
"On 1 / Off 6",
"On 2 / Off 6",
"On 3 / Off 6",
"On 4 / Off 6",
"On 5 / Off 6",
"On 6 / Off 6",
"On 7 / Off 6",
"On 8 / Off 6",
"On 9 / Off 6",
"On 10 / Off 6",
"On 11 / Off 6",
"On 12 / Off 6",
"On 13 / Off 6",
"On 14 / Off 6",
"On 15 / Off 6",
"On 0 / Off 7",
"On 1 / Off 7",
"On 2 / Off 7",
"On 3 / Off 7",
"On 4 / Off 7",
"On 5 / Off 7",
"On 6 / Off 7",
"On 7 / Off 7",
"On 8 / Off 7",
"On 9 / Off 7",
"On 10 / Off 7",
"On 11 / Off 7",
"On 12 / Off 7",
"On 13 / Off 7",
"On 14 / Off 7",
"On 15 / Off 7",
]