Add support for Samsung room air conditioners (ARTIK051_PRAC-class), the first device whose core controls map onto a single Home Assistant `climate` entity rather than a scatter of switches/selects/numbers. - New `climate` platform + `ClimateDesc`: one composite entity that reads power, HVAC mode, current/target temperature, fan (wind) strength, swing (wind direction) and the convenient-mode preset across several OCF resources and writes back to each. On/off folds into HVACMode.OFF / TURN_ON/OFF; convenient mode folds into preset_mode. The entity binds one primary resource (/mode/vs/0) and reads its siblings from the coordinator snapshot, reusing the cross-resource read pattern from number/select. - New `airconditioner` capability module + by_type registry, routed via the `_PRAC_` modelNum token. Reuses common ALARMS/ENERGY_METER, fridge.FIRMWARE_UPDATE and dishwasher.DIAGNOSIS; air purify and auto clean as config switches; air dust filter status/usage as diagnostics (usage normalized to a percentage of rated capacity). - Climate-consumed and all-zero/ambiguous resources (temperature/wind, /sensors, /humidity) are declared as AC-scoped coverage so every href in the dump binds or is covered -- no coverage-gap repair. - Fan/swing modes map onto HA standard constants (auto-localized); the custom fan `turbo`, presets `quiet/smart/speed`, and the filter-status enum get translations in strings.json + translations/en.json. - Scrubbed fixture, golden, and tests: registry routing, zero unbound hrefs, the climate write contract, and filter-% normalization.
221 lines
6.6 KiB
JSON
221 lines
6.6 KiB
JSON
{
|
|
"entity": {
|
|
"select": {
|
|
"door_alert": {
|
|
"state": {
|
|
"1": "Alarm 1",
|
|
"2": "Alarm 2",
|
|
"3": "Alarm 3",
|
|
"4": "Alarm 4"
|
|
}
|
|
},
|
|
"brightness_level": {
|
|
"state": {
|
|
"33": "Low",
|
|
"66": "Medium",
|
|
"100": "High"
|
|
}
|
|
},
|
|
"ice_type": {
|
|
"state": {
|
|
"off": "Off",
|
|
"whiskey_iceball_3": "3 Balls/Day",
|
|
"whiskey_iceball_6": "6 Balls/Day",
|
|
"whiskey_iceball_9": "9 Balls/Day"
|
|
}
|
|
},
|
|
"beverage_zone_mode": {
|
|
"state": {
|
|
"sp_ttype_beer_drinks": "Beverage",
|
|
"sp_ttype_wine_dessert": "Wine and Dessert"
|
|
}
|
|
},
|
|
"flex_zone_mode": {
|
|
"state": {
|
|
"cv_ttype_rf9000a_freeze": "Freeze",
|
|
"cv_ttype_rf9000a_softfreeze": "Soft Freeze",
|
|
"cv_ttype_rf9000a_meat_fish": "Meat/Fish",
|
|
"cv_ttype_rf9000a_fruit_veggies": "Fruit & Veggies",
|
|
"cv_ttype_rf9000a_beverage": "Beverage"
|
|
}
|
|
},
|
|
"dishwasher_cycle": {
|
|
"state": {
|
|
"0e": "AI Wash",
|
|
"07": "Pre blast",
|
|
"90": "Self clean",
|
|
"86": "Normal",
|
|
"83": "Express 60",
|
|
"84": "Heavy",
|
|
"8d": "Pots and pans",
|
|
"80": "Delicate",
|
|
"8e": "Plastic",
|
|
"8f": "Baby Care"
|
|
}
|
|
},
|
|
"washer_cycle": {
|
|
"state": {
|
|
"1c": "Eco 40-60",
|
|
"1d": "Super Speed",
|
|
"21": "Colours",
|
|
"1b": "Cotton",
|
|
"1e": "15' Quick Wash",
|
|
"29": "Drum Clean+",
|
|
"24": "Towels",
|
|
"33": "Bedding",
|
|
"28": "Drain/Spin",
|
|
"26": "Delicates",
|
|
"27": "Rinse+Spin",
|
|
"22": "Wool",
|
|
"20": "Hygiene Steam",
|
|
"23": "Outdoor",
|
|
"25": "Synthetics",
|
|
"32": "Shirts",
|
|
"2f": "Activewear",
|
|
"2e": "Baby Care",
|
|
"30": "Cloudy Day",
|
|
"66": "Denim",
|
|
"2d": "Silent Wash",
|
|
"8f": "Intense Cold",
|
|
"96": "Less Microfiber"
|
|
}
|
|
},
|
|
"dryer_cycle": {
|
|
"state": {
|
|
"16": "Cotton",
|
|
"18": "Synthetics",
|
|
"19": "Delicates",
|
|
"1a": "Wool",
|
|
"1b": "Bedding",
|
|
"1c": "Shirts",
|
|
"1d": "Towels",
|
|
"1e": "Outdoor",
|
|
"1f": "Mixed Load",
|
|
"20": "Iron Dry",
|
|
"23": "Quick Dry 35",
|
|
"24": "Cool Air",
|
|
"25": "Warm Air",
|
|
"27": "Time Dry"
|
|
}
|
|
},
|
|
"washer_dosing_quantity": {
|
|
"state": {
|
|
"00": "None",
|
|
"01": "Low",
|
|
"02": "Medium",
|
|
"03": "High"
|
|
}
|
|
},
|
|
"washer_detergent_water_hardness": {
|
|
"state": {
|
|
"01": "Soft",
|
|
"02": "Medium",
|
|
"03": "Hard"
|
|
}
|
|
},
|
|
"washer_softener_concentration": {
|
|
"state": {
|
|
"01": "1x",
|
|
"02": "2x",
|
|
"03": "3x"
|
|
}
|
|
}
|
|
},
|
|
"sensor": {
|
|
"ice_making_status": {
|
|
"state": {
|
|
"icestatus_stop": "Idle",
|
|
"icestatus_run": "Making ice"
|
|
}
|
|
},
|
|
"connection_mode": {
|
|
"state": {
|
|
"observe": "Push (observe)",
|
|
"poll": "Polling"
|
|
}
|
|
},
|
|
"machine_state": {
|
|
"state": {
|
|
"idle": "Idle",
|
|
"active": "Active",
|
|
"pause": "Paused"
|
|
}
|
|
},
|
|
"air_filter_status": {
|
|
"state": {
|
|
"normal": "Normal",
|
|
"wash": "Wash",
|
|
"replace": "Replace"
|
|
}
|
|
}
|
|
},
|
|
"climate": {
|
|
"airconditioner": {
|
|
"state_attributes": {
|
|
"fan_mode": {
|
|
"state": {
|
|
"auto": "Auto",
|
|
"low": "Low",
|
|
"medium": "Medium",
|
|
"high": "High",
|
|
"turbo": "Turbo"
|
|
}
|
|
},
|
|
"swing_mode": {
|
|
"state": {
|
|
"off": "Fixed",
|
|
"both": "All directions",
|
|
"vertical": "Up and down"
|
|
}
|
|
},
|
|
"preset_mode": {
|
|
"state": {
|
|
"none": "Off",
|
|
"sleep": "Sleep",
|
|
"quiet": "Quiet",
|
|
"smart": "Smart",
|
|
"speed": "Speed"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"config": {
|
|
"step": {
|
|
"user": {
|
|
"title": "Add Samsung Appliance",
|
|
"description": "Enter the IP address of your Samsung appliance and the AC14K_M CA credentials used to mint device certificates. {reuse_note}",
|
|
"data": {
|
|
"host": "IP Address",
|
|
"ca_cert_pem": "CA Certificate (PEM)",
|
|
"ca_key_pem": "CA Private Key (PEM)"
|
|
},
|
|
"data_description": {
|
|
"host": "Local IP address of your Samsung appliance (e.g. 192.168.1.50).",
|
|
"ca_cert_pem": "The PEM-encoded AC14K_M CA certificate chain. Paste the full contents of your fullchain PEM including all BEGIN/END CERTIFICATE blocks.",
|
|
"ca_key_pem": "The PEM-encoded AC14K_M private key. Paste the full contents including the BEGIN/END PRIVATE KEY header and footer."
|
|
}
|
|
},
|
|
"confirm_unknown_type": {
|
|
"title": "Appliance type not recognized",
|
|
"description": "This appliance reported oneUiVersion \"{one_ui_version}\", which isn't a recognized type. It'll still be added, but only with common capabilities (power, alarms, etc. where present) rather than the full set for its family. You can help add full support afterward by downloading diagnostics for this device (Settings > Devices & Services > this device > the menu > Download diagnostics) and filing them in a new issue. Submit to add it anyway."
|
|
}
|
|
},
|
|
"error": {
|
|
"cannot_connect": "Cannot connect to the device. Verify the IP address is reachable and the CA credentials are correct.",
|
|
"invalid_ca": "The CA certificate or private key could not be loaded. Verify the PEM contents are correct and the key matches the certificate.",
|
|
"unknown": "Unexpected error. Check the Home Assistant logs for details."
|
|
},
|
|
"abort": {
|
|
"already_configured": "This device is already configured."
|
|
}
|
|
},
|
|
"issues": {
|
|
"device_gap": {
|
|
"title": "Incomplete capability coverage for {device_name}",
|
|
"description": "This device is missing full capability coverage. Either its appliance type wasn't recognized, or some of the resources it exposes aren't modeled yet. It'll keep working with whatever is already supported. You can help expand support by going to Settings > Devices & Services > {device_name} > the menu (top right) > Download diagnostics, then filing it with the linked issue template."
|
|
}
|
|
}
|
|
}
|