Merge Luma launcher fork into monorepo
Move trampoline files (boot-hook, watcher, overlay) into trampoline/ subdirectory. Add upstream Luma v2.3.1 source at repo root with our additions: - Page::Ha (4th nav tab) with placeholder empty state - HA tab config schema and default entity mapping (ha-home/) - Nav keys renamed: "home" → "start", new "ha" tab between Apps and Settings - All state.rs/view.rs/main.rs/tests.rs updated for 4-tab navigation Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
bc3ca0f3b9
commit
cbea5a322f
204 files changed
+25056
-65
No files matched your search
@@ -0,0 +1,148 @@
|
||||
{
|
||||
"version": 1,
|
||||
"ha": {
|
||||
"url": "wss://ha.xtrm-lab.org/api/websocket",
|
||||
"token": ""
|
||||
},
|
||||
"weather": {
|
||||
"entity_id": "weather.forecast_home"
|
||||
},
|
||||
"vacuum": {
|
||||
"entity_id": "vacuum.living_room_roborock_s7_pro_ultra",
|
||||
"cleaning_mode_entity": "select.living_room_roborock_s7_pro_ultra_cleaning_mode",
|
||||
"rooms": {
|
||||
"16": "Kitchen",
|
||||
"17": "Bedroom",
|
||||
"18": "Dining Room",
|
||||
"19": "Corridor",
|
||||
"20": "Bathroom",
|
||||
"21": "Living Room",
|
||||
"22": "Master Bedroom",
|
||||
"23": "Corridor 2",
|
||||
"24": "Bedroom 2"
|
||||
}
|
||||
},
|
||||
"rooms": [
|
||||
{
|
||||
"id": "living_room",
|
||||
"name": "Living Room",
|
||||
"background": "living-room.jpg",
|
||||
"sensors": [
|
||||
"sensor.living_room_thermostat_temperature",
|
||||
"sensor.living_room_thermostat_humidity"
|
||||
],
|
||||
"cards": [
|
||||
{ "type": "climate", "entity_id": "climate.living_room_thermostat", "name": "Thermostat" },
|
||||
{ "type": "climate", "entity_id": "climate.living_room_radiator", "name": "Radiator" },
|
||||
{ "type": "range", "entity_id": "light.living_room_light", "name": "Ceiling Light" },
|
||||
{ "type": "range", "entity_id": "light.tv_lights", "name": "TV Lights" },
|
||||
{ "type": "range", "entity_id": "light.rgbic_strip_lights_z1", "name": "LED Strip 1" },
|
||||
{ "type": "range", "entity_id": "light.rgbic_strip_lights_z2", "name": "LED Strip 2" },
|
||||
{ "type": "toggle", "entity_id": "light.picture_frame_lamp", "name": "Picture Lamp" },
|
||||
{ "type": "toggle", "entity_id": "cover.living_room_curtain", "name": "Curtain" },
|
||||
{ "type": "vacuum", "entity_id": "vacuum.living_room_roborock_s7_pro_ultra", "name": "Roborock" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "kitchen",
|
||||
"name": "Kitchen",
|
||||
"background": "kitchen.jpg",
|
||||
"sensors": [
|
||||
"sensor.kitchen_termostat_temperature",
|
||||
"sensor.kitchen_termostat_humidity"
|
||||
],
|
||||
"cards": [
|
||||
{ "type": "climate", "entity_id": "climate.kitchen_termostat", "name": "Thermostat" },
|
||||
{ "type": "toggle", "entity_id": "switch.dishwasher_power", "name": "Dishwasher" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "bedroom",
|
||||
"name": "Dad's Bedroom",
|
||||
"background": "bedroom.jpg",
|
||||
"sensors": [],
|
||||
"cards": [
|
||||
{ "type": "climate", "entity_id": "climate.main_bedroom_radiator", "name": "Radiator" },
|
||||
{ "type": "toggle", "entity_id": "light.bedroom_ceiling_light", "name": "Ceiling" },
|
||||
{ "type": "toggle", "entity_id": "light.bedroom_desk_lights", "name": "Desk" },
|
||||
{ "type": "range", "entity_id": "light.bedroom_led_strip", "name": "LED Strip" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "dining_room",
|
||||
"name": "Dining Room",
|
||||
"background": "dining-room.jpg",
|
||||
"sensors": [],
|
||||
"cards": [
|
||||
{ "type": "range", "entity_id": "light.dining_room_light", "name": "Light" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "entrance",
|
||||
"name": "Entrance",
|
||||
"background": "entrance.jpg",
|
||||
"sensors": [],
|
||||
"cards": [
|
||||
{ "type": "toggle", "entity_id": "light.entrance_light_1", "name": "Light" },
|
||||
{ "type": "toggle", "entity_id": "light.entrance_mirror_light", "name": "Mirror" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "dari_bedroom",
|
||||
"name": "Dari's Bedroom",
|
||||
"background": "dari-bedroom.jpg",
|
||||
"sensors": [],
|
||||
"cards": [
|
||||
{ "type": "climate", "entity_id": "climate.girls_bedroom_radiator", "name": "Radiator" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "teo_s_bedroom",
|
||||
"name": "Teo's Bedroom",
|
||||
"background": "teo-bedroom.jpg",
|
||||
"sensors": [],
|
||||
"cards": [
|
||||
{ "type": "toggle", "entity_id": "light.boys_smartlight", "name": "Light" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "main_bathroom",
|
||||
"name": "Main Bathroom",
|
||||
"background": "bathroom.jpg",
|
||||
"sensors": [],
|
||||
"cards": [
|
||||
{ "type": "toggle", "entity_id": "light.bathroom_light_1", "name": "Light 1" },
|
||||
{ "type": "toggle", "entity_id": "light.bathroom_light_2", "name": "Light 2" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "kids_bathroom",
|
||||
"name": "Kids Bathroom",
|
||||
"background": "kids-bathroom.jpg",
|
||||
"sensors": [],
|
||||
"cards": [
|
||||
{ "type": "toggle", "entity_id": "light.kids_bathroom_light_1", "name": "Light 1" },
|
||||
{ "type": "toggle", "entity_id": "light.kids_bathroom_light_2", "name": "Light 2" },
|
||||
{ "type": "toggle", "entity_id": "switch.washing_machine_power", "name": "Washing Machine" },
|
||||
{ "type": "toggle", "entity_id": "switch.dryer_power", "name": "Dryer" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "scenes",
|
||||
"name": "Scenes",
|
||||
"background": "scenes.jpg",
|
||||
"sensors": [],
|
||||
"cards": [
|
||||
{ "type": "action", "entity_id": "scene.tv_mode", "name": "TV Mode" },
|
||||
{ "type": "action", "entity_id": "scene.living_room_100", "name": "Living Room 100%" },
|
||||
{ "type": "action", "entity_id": "scene.living_room_lights_10", "name": "Living Room 10%" },
|
||||
{ "type": "action", "entity_id": "scene.desk_mac", "name": "Desk: Mac" },
|
||||
{ "type": "action", "entity_id": "scene.desk_pc", "name": "Desk: PC" },
|
||||
{ "type": "action", "entity_id": "scene.curtains_close", "name": "Close Curtains" },
|
||||
{ "type": "action", "entity_id": "script.tv_ambient_on", "name": "TV Ambient On" },
|
||||
{ "type": "action", "entity_id": "script.tv_ambient_off", "name": "TV Ambient Off" },
|
||||
{ "type": "action", "entity_id": "script.living_dining_all_off", "name": "All Lights Off" }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"title": "Luma Home Tab Configuration",
|
||||
"description": "Configuration for the Home Assistant tab in the Luma launcher on webOS TV",
|
||||
"type": "object",
|
||||
"required": ["version", "ha", "rooms"],
|
||||
"properties": {
|
||||
"version": {
|
||||
"const": 1,
|
||||
"description": "Schema version"
|
||||
},
|
||||
"ha": {
|
||||
"type": "object",
|
||||
"required": ["url", "token"],
|
||||
"properties": {
|
||||
"url": {
|
||||
"type": "string",
|
||||
"description": "Home Assistant WebSocket URL (wss://...)"
|
||||
},
|
||||
"token": {
|
||||
"type": "string",
|
||||
"description": "Long-lived access token"
|
||||
}
|
||||
}
|
||||
},
|
||||
"weather": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"entity_id": {
|
||||
"type": "string",
|
||||
"description": "Weather entity to display (e.g. weather.forecast_home)"
|
||||
}
|
||||
}
|
||||
},
|
||||
"vacuum": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"entity_id": {
|
||||
"type": "string",
|
||||
"description": "Vacuum entity ID"
|
||||
},
|
||||
"cleaning_mode_entity": {
|
||||
"type": "string",
|
||||
"description": "Select entity for cleaning mode (vacuum/mop/vac_and_mop)"
|
||||
},
|
||||
"rooms": {
|
||||
"type": "object",
|
||||
"description": "Map of segment ID to display name",
|
||||
"additionalProperties": { "type": "string" }
|
||||
}
|
||||
}
|
||||
},
|
||||
"rooms": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["id", "name", "cards"],
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "string",
|
||||
"description": "HA area_id or custom slug"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Display name"
|
||||
},
|
||||
"background": {
|
||||
"type": "string",
|
||||
"description": "Background image filename (served from config dir)"
|
||||
},
|
||||
"sensors": {
|
||||
"type": "array",
|
||||
"description": "Sensor entity IDs shown as badges in room header",
|
||||
"items": { "type": "string" }
|
||||
},
|
||||
"cards": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": ["type", "entity_id"],
|
||||
"properties": {
|
||||
"type": {
|
||||
"enum": ["toggle", "range", "climate", "action", "vacuum"],
|
||||
"description": "Card type"
|
||||
},
|
||||
"entity_id": {
|
||||
"type": "string",
|
||||
"description": "HA entity ID"
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Override display name (defaults to HA friendly_name)"
|
||||
},
|
||||
"icon": {
|
||||
"type": "string",
|
||||
"description": "Override icon name"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user