cyd
This commit is contained in:
@@ -37,8 +37,8 @@ in
|
|||||||
baseURL = "http://${net.hosts.nas.lan}:${toString net.ports.nas.llamaCpp}/v1";
|
baseURL = "http://${net.hosts.nas.lan}:${toString net.ports.nas.llamaCpp}/v1";
|
||||||
};
|
};
|
||||||
models = {
|
models = {
|
||||||
Qwen3-Coder-Next-Q4_0 = {
|
"gemma-4-26B-A4B-it-UD-Q8_K_XL" = {
|
||||||
name = "Qwen3 Coder (local)";
|
name = "Gemma 4 26B-A4B (local)";
|
||||||
modalities = {
|
modalities = {
|
||||||
input = [
|
input = [
|
||||||
"image"
|
"image"
|
||||||
@@ -47,8 +47,8 @@ in
|
|||||||
output = [ "text" ];
|
output = [ "text" ];
|
||||||
};
|
};
|
||||||
limit = {
|
limit = {
|
||||||
context = 131072;
|
context = 32768;
|
||||||
output = 32768;
|
output = 8192;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
202
modules/nixos/homeassistant/services/esphome/bedroom.yaml
Normal file
202
modules/nixos/homeassistant/services/esphome/bedroom.yaml
Normal file
@@ -0,0 +1,202 @@
|
|||||||
|
############################################################
|
||||||
|
# SmartDisplay – Bedroom
|
||||||
|
# Tiles: Lights | Lamp | Fan | Air Purifier | Closet | BedJet
|
||||||
|
############################################################
|
||||||
|
|
||||||
|
substitutions:
|
||||||
|
|
||||||
|
DIRECT_ACTIONS: "true"
|
||||||
|
ROOM_NAME: "Bedroom"
|
||||||
|
TIME_24H: "false"
|
||||||
|
|
||||||
|
# ── TILE 1 – Bedroom Lights (group) ─────────────────────
|
||||||
|
TILE1_ENTITY: "light.bedroom_lights"
|
||||||
|
TILE1_STATE_ENTITY: "light.bedroom_light_1"
|
||||||
|
TILE1_TITLE: "Lights"
|
||||||
|
TILE1_ICON: "\U000F0769"
|
||||||
|
TILE1_TYPE: "light"
|
||||||
|
TILE1_TAP_ACTION: "toggle"
|
||||||
|
TILE1_LONGPRESS: "auto"
|
||||||
|
TILE1_VALUE_MODE: "auto"
|
||||||
|
TILE1_LABEL_OFF: "Off"
|
||||||
|
TILE1_LABEL_ON: "On"
|
||||||
|
TILE1_CIRCLE_ACTIVE_COLOR: "0xFEC600"
|
||||||
|
TILE1_CIRCLE_DISABLED_COLOR: "0x7B7B6F"
|
||||||
|
TILE1_ICON_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE1_ICON_DISABLED_COLOR: "0xFEC600"
|
||||||
|
TILE1_BG_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE1_BG_DISABLED_COLOR: "0x939391"
|
||||||
|
TILE1_TITLE_ACTIVE_COLOR: "0x000000"
|
||||||
|
TILE1_TITLE_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE1_VALUE_ACTIVE_COLOR: "0x7A7A7C"
|
||||||
|
TILE1_VALUE_DISABLED_COLOR: "0xD9D9D9"
|
||||||
|
TILE1_TAP_SERVICE: ""
|
||||||
|
TILE1_TAP_PARAM_KEY: ""
|
||||||
|
TILE1_TAP_PARAM_VAL: ""
|
||||||
|
TILE1_LONGPRESS_OFF_VALUE: "0"
|
||||||
|
|
||||||
|
# ── TILE 2 – Bedroom Lamp ────────────────────────────────
|
||||||
|
TILE2_ENTITY: "light.bedroom_lamp"
|
||||||
|
TILE2_STATE_ENTITY: "light.bedroom_lamp"
|
||||||
|
TILE2_TITLE: "Lamp"
|
||||||
|
TILE2_ICON: "\U000F06B5"
|
||||||
|
TILE2_TYPE: "light"
|
||||||
|
TILE2_TAP_ACTION: "auto"
|
||||||
|
TILE2_LONGPRESS: "auto"
|
||||||
|
TILE2_VALUE_MODE: "auto"
|
||||||
|
TILE2_LABEL_OFF: "Off"
|
||||||
|
TILE2_LABEL_ON: "On"
|
||||||
|
TILE2_CIRCLE_ACTIVE_COLOR: "0xFEC600"
|
||||||
|
TILE2_CIRCLE_DISABLED_COLOR: "0x7B7B6F"
|
||||||
|
TILE2_ICON_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE2_ICON_DISABLED_COLOR: "0xFEC600"
|
||||||
|
TILE2_BG_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE2_BG_DISABLED_COLOR: "0x939391"
|
||||||
|
TILE2_TITLE_ACTIVE_COLOR: "0x000000"
|
||||||
|
TILE2_TITLE_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE2_VALUE_ACTIVE_COLOR: "0x7A7A7C"
|
||||||
|
TILE2_VALUE_DISABLED_COLOR: "0xD9D9D9"
|
||||||
|
TILE2_TAP_SERVICE: ""
|
||||||
|
TILE2_TAP_PARAM_KEY: ""
|
||||||
|
TILE2_TAP_PARAM_VAL: ""
|
||||||
|
TILE2_LONGPRESS_OFF_VALUE: "0"
|
||||||
|
|
||||||
|
# ── TILE 3 – Bedroom Fan ─────────────────────────────────
|
||||||
|
TILE3_ENTITY: "fan.bedroom_fan"
|
||||||
|
TILE3_STATE_ENTITY: "fan.bedroom_fan"
|
||||||
|
TILE3_TITLE: "Bedroom Fan"
|
||||||
|
TILE3_ICON: "\U000F0210"
|
||||||
|
TILE3_TYPE: "fan"
|
||||||
|
TILE3_TAP_ACTION: "fan_toggle_preset"
|
||||||
|
TILE3_LONGPRESS: "auto"
|
||||||
|
TILE3_VALUE_MODE: "auto"
|
||||||
|
TILE3_LABEL_OFF: "Off"
|
||||||
|
TILE3_LABEL_ON: "On"
|
||||||
|
TILE3_CIRCLE_ACTIVE_COLOR: "0x00C5EC"
|
||||||
|
TILE3_CIRCLE_DISABLED_COLOR: "0x7B7B6F"
|
||||||
|
TILE3_ICON_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE3_ICON_DISABLED_COLOR: "0x00C5EC"
|
||||||
|
TILE3_BG_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE3_BG_DISABLED_COLOR: "0x939391"
|
||||||
|
TILE3_TITLE_ACTIVE_COLOR: "0x000000"
|
||||||
|
TILE3_TITLE_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE3_VALUE_ACTIVE_COLOR: "0x7A7A7C"
|
||||||
|
TILE3_VALUE_DISABLED_COLOR: "0xD9D9D9"
|
||||||
|
TILE3_TAP_SERVICE: "fan.toggle"
|
||||||
|
TILE3_TAP_PARAM_KEY: ""
|
||||||
|
TILE3_TAP_PARAM_VAL: ""
|
||||||
|
TILE3_LONGPRESS_OFF_VALUE: "0"
|
||||||
|
|
||||||
|
# ── TILE 4 – Air Purifier ────────────────────────────────
|
||||||
|
TILE4_ENTITY: "fan.bedroom_air_purifier"
|
||||||
|
TILE4_STATE_ENTITY: "fan.bedroom_air_purifier"
|
||||||
|
TILE4_TITLE: "Air Purifier"
|
||||||
|
TILE4_ICON: "\U000F0D43"
|
||||||
|
TILE4_TYPE: "fan"
|
||||||
|
TILE4_TAP_ACTION: "fan_toggle_preset"
|
||||||
|
TILE4_LONGPRESS: "auto"
|
||||||
|
TILE4_VALUE_MODE: "auto"
|
||||||
|
TILE4_LABEL_OFF: "Off"
|
||||||
|
TILE4_LABEL_ON: "On"
|
||||||
|
TILE4_CIRCLE_ACTIVE_COLOR: "0x00C5EC"
|
||||||
|
TILE4_CIRCLE_DISABLED_COLOR: "0x7B7B6F"
|
||||||
|
TILE4_ICON_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE4_ICON_DISABLED_COLOR: "0x00C5EC"
|
||||||
|
TILE4_BG_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE4_BG_DISABLED_COLOR: "0x939391"
|
||||||
|
TILE4_TITLE_ACTIVE_COLOR: "0x000000"
|
||||||
|
TILE4_TITLE_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE4_VALUE_ACTIVE_COLOR: "0x7A7A7C"
|
||||||
|
TILE4_VALUE_DISABLED_COLOR: "0xD9D9D9"
|
||||||
|
TILE4_TAP_SERVICE: "fan.toggle"
|
||||||
|
TILE4_TAP_PARAM_KEY: "preset_mode"
|
||||||
|
TILE4_TAP_PARAM_VAL: "auto"
|
||||||
|
TILE4_LONGPRESS_OFF_VALUE: "0"
|
||||||
|
|
||||||
|
# ── TILE 5 – Front Closet Lights ────────────────────────
|
||||||
|
TILE5_ENTITY: "light.front_closet_lights"
|
||||||
|
TILE5_STATE_ENTITY: "light.front_closet_light_1"
|
||||||
|
TILE5_TITLE: "Closet"
|
||||||
|
TILE5_ICON: "\U000F1051"
|
||||||
|
TILE5_TYPE: "light"
|
||||||
|
TILE5_TAP_ACTION: "toggle"
|
||||||
|
TILE5_LONGPRESS: "none"
|
||||||
|
TILE5_VALUE_MODE: "auto"
|
||||||
|
TILE5_LABEL_OFF: "Off"
|
||||||
|
TILE5_LABEL_ON: "On"
|
||||||
|
TILE5_CIRCLE_ACTIVE_COLOR: "0xFEC600"
|
||||||
|
TILE5_CIRCLE_DISABLED_COLOR: "0x7B7B6F"
|
||||||
|
TILE5_ICON_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE5_ICON_DISABLED_COLOR: "0xFEC600"
|
||||||
|
TILE5_BG_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE5_BG_DISABLED_COLOR: "0x939391"
|
||||||
|
TILE5_TITLE_ACTIVE_COLOR: "0x000000"
|
||||||
|
TILE5_TITLE_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE5_VALUE_ACTIVE_COLOR: "0x7A7A7C"
|
||||||
|
TILE5_VALUE_DISABLED_COLOR: "0xD9D9D9"
|
||||||
|
TILE5_TAP_SERVICE: ""
|
||||||
|
TILE5_TAP_PARAM_KEY: ""
|
||||||
|
TILE5_TAP_PARAM_VAL: ""
|
||||||
|
TILE5_LONGPRESS_OFF_VALUE: "0"
|
||||||
|
|
||||||
|
# ── TILE 6 – BedJet ─────────────────────────────────────
|
||||||
|
TILE6_ENTITY: "fan.bedjet_dbbf_c222"
|
||||||
|
TILE6_STATE_ENTITY: "fan.bedjet_dbbf_c222"
|
||||||
|
TILE6_TITLE: "BedJet"
|
||||||
|
TILE6_ICON: "\U000F07E4"
|
||||||
|
TILE6_TYPE: "fan"
|
||||||
|
TILE6_TAP_ACTION: "toggle"
|
||||||
|
TILE6_LONGPRESS: "auto"
|
||||||
|
TILE6_VALUE_MODE: "percentage"
|
||||||
|
TILE6_LABEL_OFF: "Off"
|
||||||
|
TILE6_LABEL_ON: "On"
|
||||||
|
TILE6_CIRCLE_ACTIVE_COLOR: "0xFF6B35"
|
||||||
|
TILE6_CIRCLE_DISABLED_COLOR: "0x7B7B6F"
|
||||||
|
TILE6_ICON_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE6_ICON_DISABLED_COLOR: "0xFF6B35"
|
||||||
|
TILE6_BG_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE6_BG_DISABLED_COLOR: "0x939391"
|
||||||
|
TILE6_TITLE_ACTIVE_COLOR: "0x000000"
|
||||||
|
TILE6_TITLE_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE6_VALUE_ACTIVE_COLOR: "0x7A7A7C"
|
||||||
|
TILE6_VALUE_DISABLED_COLOR: "0xD9D9D9"
|
||||||
|
TILE6_TAP_SERVICE: "fan.toggle"
|
||||||
|
TILE6_TAP_PARAM_KEY: ""
|
||||||
|
TILE6_TAP_PARAM_VAL: ""
|
||||||
|
TILE6_LONGPRESS_OFF_VALUE: "0"
|
||||||
|
|
||||||
|
packages:
|
||||||
|
hw: !include cyd-base-hw.yaml
|
||||||
|
ui: !include cyd-base-ui.yaml
|
||||||
|
|
||||||
|
esphome:
|
||||||
|
name: bedroom-display
|
||||||
|
friendly_name: BedroomDisplay
|
||||||
|
on_boot:
|
||||||
|
priority: 600
|
||||||
|
then:
|
||||||
|
- script.execute: ui_refresh
|
||||||
|
|
||||||
|
esp32:
|
||||||
|
board: esp32dev
|
||||||
|
framework:
|
||||||
|
type: arduino
|
||||||
|
|
||||||
|
logger:
|
||||||
|
|
||||||
|
api:
|
||||||
|
encryption:
|
||||||
|
key: !secret api_encryption_key
|
||||||
|
|
||||||
|
ota:
|
||||||
|
- platform: esphome
|
||||||
|
password: !secret ota_password
|
||||||
|
|
||||||
|
wifi:
|
||||||
|
ssid: !secret wifi_ssid
|
||||||
|
password: !secret wifi_password
|
||||||
|
ap:
|
||||||
|
ssid: "BedroomDisplay Fallback"
|
||||||
|
password: !secret ota_password
|
||||||
|
|
||||||
|
captive_portal:
|
||||||
312
modules/nixos/homeassistant/services/esphome/cyd-base-hw.yaml
Normal file
312
modules/nixos/homeassistant/services/esphome/cyd-base-hw.yaml
Normal file
@@ -0,0 +1,312 @@
|
|||||||
|
############################################################
|
||||||
|
# CYD Base – Hardware layer
|
||||||
|
# ESP32-2432S028 (Cheap Yellow Display)
|
||||||
|
# Include via: packages: !include cyd-base-hw.yaml
|
||||||
|
############################################################
|
||||||
|
|
||||||
|
time:
|
||||||
|
- platform: homeassistant
|
||||||
|
id: homeassistant_time
|
||||||
|
on_time:
|
||||||
|
- seconds: 0
|
||||||
|
minutes: /1
|
||||||
|
then:
|
||||||
|
- script.execute: ui_refresh
|
||||||
|
|
||||||
|
globals:
|
||||||
|
- id: active_entity
|
||||||
|
type: std::string
|
||||||
|
restore_value: no
|
||||||
|
- id: active_control_kind
|
||||||
|
type: std::string
|
||||||
|
restore_value: no
|
||||||
|
- id: active_value_suffix
|
||||||
|
type: std::string
|
||||||
|
restore_value: no
|
||||||
|
- id: overlay_slider_bg_color
|
||||||
|
type: uint32_t
|
||||||
|
restore_value: no
|
||||||
|
initial_value: '0x939391'
|
||||||
|
- id: overlay_slider_fill_color
|
||||||
|
type: uint32_t
|
||||||
|
restore_value: no
|
||||||
|
initial_value: '0xFEC600'
|
||||||
|
|
||||||
|
font:
|
||||||
|
- file: "gfonts://Roboto@500"
|
||||||
|
id: time_label
|
||||||
|
size: 18
|
||||||
|
bpp: 4
|
||||||
|
glyphs: ['0','1','2','3','4','5','6','7','8','9',':',' ','A','M','P']
|
||||||
|
|
||||||
|
- file: "gfonts://Roboto@500"
|
||||||
|
id: headline
|
||||||
|
size: 18
|
||||||
|
bpp: 4
|
||||||
|
glyphs: ['&','@','!',',','.','?','"','%','(',')','+','-','_',':','°',
|
||||||
|
'0','1','2','3','4','5','6','7','8','9',
|
||||||
|
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
|
||||||
|
' ','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
|
||||||
|
'ä','ö','ü','Ä','Ö','Ü','ß','/']
|
||||||
|
|
||||||
|
- file: "gfonts://Roboto@700"
|
||||||
|
id: label
|
||||||
|
size: 11
|
||||||
|
bpp: 4
|
||||||
|
glyphs: ['&','@','!',',','.','?','"','%','(',')','+','-','_',':','°',
|
||||||
|
'0','1','2','3','4','5','6','7','8','9',
|
||||||
|
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
|
||||||
|
' ','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
|
||||||
|
'ä','ö','ü','Ä','Ö','Ü','ß','/']
|
||||||
|
|
||||||
|
- file: "gfonts://Roboto@400"
|
||||||
|
id: sublabel
|
||||||
|
size: 11
|
||||||
|
bpp: 4
|
||||||
|
glyphs: ['&','@','!',',','.','?','"','%','(',')','+','-','_',':','°',
|
||||||
|
'0','1','2','3','4','5','6','7','8','9',
|
||||||
|
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
|
||||||
|
' ','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
|
||||||
|
'ä','ö','ü','Ä','Ö','Ü','ß','/','…']
|
||||||
|
|
||||||
|
- file: "gfonts://Roboto@400"
|
||||||
|
id: sublabel_big
|
||||||
|
size: 14
|
||||||
|
bpp: 4
|
||||||
|
glyphs: ['&','@','!',',','.','?','"','%','(',')','+','-','_',':','°',
|
||||||
|
'0','1','2','3','4','5','6','7','8','9',
|
||||||
|
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
|
||||||
|
' ','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
|
||||||
|
'ä','ö','ü','Ä','Ö','Ü','ß','/','…']
|
||||||
|
|
||||||
|
- file: 'fonts/materialdesignicons-webfont.ttf'
|
||||||
|
id: materialdesign_icons
|
||||||
|
size: 28
|
||||||
|
glyphs:
|
||||||
|
- "${TILE1_ICON}"
|
||||||
|
- "${TILE2_ICON}"
|
||||||
|
- "${TILE3_ICON}"
|
||||||
|
- "${TILE4_ICON}"
|
||||||
|
- "${TILE5_ICON}"
|
||||||
|
- "${TILE6_ICON}"
|
||||||
|
|
||||||
|
image:
|
||||||
|
- file: "images/home-background.png"
|
||||||
|
id: bg_home
|
||||||
|
type: RGB565
|
||||||
|
|
||||||
|
sensor:
|
||||||
|
- platform: wifi_signal
|
||||||
|
name: "Wifi Signal"
|
||||||
|
update_interval: 600s
|
||||||
|
- platform: uptime
|
||||||
|
name: "Uptime"
|
||||||
|
id: uptime_s
|
||||||
|
update_interval: 15s
|
||||||
|
- platform: homeassistant
|
||||||
|
id: tile1_brightness
|
||||||
|
entity_id: ${TILE1_ENTITY}
|
||||||
|
attribute: brightness
|
||||||
|
on_value: { then: [ script.execute: ui_refresh ] }
|
||||||
|
- platform: homeassistant
|
||||||
|
id: tile1_percentage
|
||||||
|
entity_id: ${TILE1_ENTITY}
|
||||||
|
attribute: percentage
|
||||||
|
on_value: { then: [ script.execute: ui_refresh ] }
|
||||||
|
- platform: homeassistant
|
||||||
|
id: tile2_brightness
|
||||||
|
entity_id: ${TILE2_ENTITY}
|
||||||
|
attribute: brightness
|
||||||
|
on_value: { then: [ script.execute: ui_refresh ] }
|
||||||
|
- platform: homeassistant
|
||||||
|
id: tile2_percentage
|
||||||
|
entity_id: ${TILE2_ENTITY}
|
||||||
|
attribute: percentage
|
||||||
|
on_value: { then: [ script.execute: ui_refresh ] }
|
||||||
|
- platform: homeassistant
|
||||||
|
id: tile3_brightness
|
||||||
|
entity_id: ${TILE3_ENTITY}
|
||||||
|
attribute: brightness
|
||||||
|
on_value: { then: [ script.execute: ui_refresh ] }
|
||||||
|
- platform: homeassistant
|
||||||
|
id: tile3_percentage
|
||||||
|
entity_id: ${TILE3_ENTITY}
|
||||||
|
attribute: percentage
|
||||||
|
on_value: { then: [ script.execute: ui_refresh ] }
|
||||||
|
- platform: homeassistant
|
||||||
|
id: tile4_brightness
|
||||||
|
entity_id: ${TILE4_ENTITY}
|
||||||
|
attribute: brightness
|
||||||
|
on_value: { then: [ script.execute: ui_refresh ] }
|
||||||
|
- platform: homeassistant
|
||||||
|
id: tile4_percentage
|
||||||
|
entity_id: ${TILE4_ENTITY}
|
||||||
|
attribute: percentage
|
||||||
|
on_value: { then: [ script.execute: ui_refresh ] }
|
||||||
|
- platform: homeassistant
|
||||||
|
id: tile5_brightness
|
||||||
|
entity_id: ${TILE5_ENTITY}
|
||||||
|
attribute: brightness
|
||||||
|
on_value: { then: [ script.execute: ui_refresh ] }
|
||||||
|
- platform: homeassistant
|
||||||
|
id: tile5_percentage
|
||||||
|
entity_id: ${TILE5_ENTITY}
|
||||||
|
attribute: percentage
|
||||||
|
on_value: { then: [ script.execute: ui_refresh ] }
|
||||||
|
- platform: homeassistant
|
||||||
|
id: tile6_brightness
|
||||||
|
entity_id: ${TILE6_ENTITY}
|
||||||
|
attribute: brightness
|
||||||
|
on_value: { then: [ script.execute: ui_refresh ] }
|
||||||
|
- platform: homeassistant
|
||||||
|
id: tile6_percentage
|
||||||
|
entity_id: ${TILE6_ENTITY}
|
||||||
|
attribute: percentage
|
||||||
|
on_value: { then: [ script.execute: ui_refresh ] }
|
||||||
|
|
||||||
|
binary_sensor:
|
||||||
|
- platform: status
|
||||||
|
name: "Node Status"
|
||||||
|
id: system_status
|
||||||
|
- platform: homeassistant
|
||||||
|
id: ha_state_tile1
|
||||||
|
entity_id: ${TILE1_STATE_ENTITY}
|
||||||
|
on_state: { then: [ script.execute: ui_refresh ] }
|
||||||
|
- platform: homeassistant
|
||||||
|
id: ha_state_tile2
|
||||||
|
entity_id: ${TILE2_STATE_ENTITY}
|
||||||
|
on_state: { then: [ script.execute: ui_refresh ] }
|
||||||
|
- platform: homeassistant
|
||||||
|
id: ha_state_tile3
|
||||||
|
entity_id: ${TILE3_STATE_ENTITY}
|
||||||
|
on_state: { then: [ script.execute: ui_refresh ] }
|
||||||
|
- platform: homeassistant
|
||||||
|
id: ha_state_tile4
|
||||||
|
entity_id: ${TILE4_STATE_ENTITY}
|
||||||
|
on_state: { then: [ script.execute: ui_refresh ] }
|
||||||
|
- platform: homeassistant
|
||||||
|
id: ha_state_tile5
|
||||||
|
entity_id: ${TILE5_STATE_ENTITY}
|
||||||
|
on_state: { then: [ script.execute: ui_refresh ] }
|
||||||
|
- platform: homeassistant
|
||||||
|
id: ha_state_tile6
|
||||||
|
entity_id: ${TILE6_STATE_ENTITY}
|
||||||
|
on_state: { then: [ script.execute: ui_refresh ] }
|
||||||
|
|
||||||
|
text_sensor:
|
||||||
|
- platform: template
|
||||||
|
id: smartdisplay_action
|
||||||
|
name: "${ROOM_NAME} Action"
|
||||||
|
icon: mdi:gesture-tap-button
|
||||||
|
- platform: homeassistant
|
||||||
|
id: tile1_preset
|
||||||
|
entity_id: ${TILE1_ENTITY}
|
||||||
|
attribute: preset_mode
|
||||||
|
on_value: { then: [ script.execute: ui_refresh ] }
|
||||||
|
- platform: homeassistant
|
||||||
|
id: tile2_preset
|
||||||
|
entity_id: ${TILE2_ENTITY}
|
||||||
|
attribute: preset_mode
|
||||||
|
on_value: { then: [ script.execute: ui_refresh ] }
|
||||||
|
- platform: homeassistant
|
||||||
|
id: tile3_preset
|
||||||
|
entity_id: ${TILE3_ENTITY}
|
||||||
|
attribute: preset_mode
|
||||||
|
on_value: { then: [ script.execute: ui_refresh ] }
|
||||||
|
- platform: homeassistant
|
||||||
|
id: tile4_preset
|
||||||
|
entity_id: ${TILE4_ENTITY}
|
||||||
|
attribute: preset_mode
|
||||||
|
on_value: { then: [ script.execute: ui_refresh ] }
|
||||||
|
- platform: homeassistant
|
||||||
|
id: tile5_preset
|
||||||
|
entity_id: ${TILE5_ENTITY}
|
||||||
|
attribute: preset_mode
|
||||||
|
on_value: { then: [ script.execute: ui_refresh ] }
|
||||||
|
- platform: homeassistant
|
||||||
|
id: tile6_preset
|
||||||
|
entity_id: ${TILE6_ENTITY}
|
||||||
|
attribute: preset_mode
|
||||||
|
on_value: { then: [ script.execute: ui_refresh ] }
|
||||||
|
|
||||||
|
switch:
|
||||||
|
- platform: restart
|
||||||
|
name: "Restart"
|
||||||
|
|
||||||
|
spi:
|
||||||
|
- id: lcd
|
||||||
|
clk_pin: GPIO14
|
||||||
|
mosi_pin: GPIO13
|
||||||
|
miso_pin: GPIO12
|
||||||
|
- id: my_touchscreen
|
||||||
|
clk_pin: GPIO25
|
||||||
|
mosi_pin: GPIO32
|
||||||
|
miso_pin: GPIO39
|
||||||
|
|
||||||
|
output:
|
||||||
|
- platform: ledc
|
||||||
|
pin: GPIO21
|
||||||
|
id: gpio_backlight_pwm
|
||||||
|
- platform: ledc
|
||||||
|
id: output_red
|
||||||
|
pin: GPIO4
|
||||||
|
inverted: true
|
||||||
|
- platform: ledc
|
||||||
|
id: output_green
|
||||||
|
pin: GPIO16
|
||||||
|
inverted: true
|
||||||
|
- platform: ledc
|
||||||
|
id: output_blue
|
||||||
|
pin: GPIO17
|
||||||
|
inverted: true
|
||||||
|
|
||||||
|
light:
|
||||||
|
- platform: monochromatic
|
||||||
|
output: gpio_backlight_pwm
|
||||||
|
name: "Power Display Backlight"
|
||||||
|
id: back_light
|
||||||
|
restore_mode: ALWAYS_ON
|
||||||
|
- platform: rgb
|
||||||
|
name: LED
|
||||||
|
red: output_red
|
||||||
|
id: led
|
||||||
|
green: output_green
|
||||||
|
blue: output_blue
|
||||||
|
restore_mode: ALWAYS_OFF
|
||||||
|
|
||||||
|
touchscreen:
|
||||||
|
platform: xpt2046
|
||||||
|
id: ts_touch
|
||||||
|
spi_id: my_touchscreen
|
||||||
|
cs_pin: 33
|
||||||
|
interrupt_pin: 36
|
||||||
|
update_interval: 20ms
|
||||||
|
threshold: 300
|
||||||
|
calibration:
|
||||||
|
x_min: 280
|
||||||
|
x_max: 3860
|
||||||
|
y_min: 340
|
||||||
|
y_max: 3860
|
||||||
|
transform:
|
||||||
|
swap_xy: true
|
||||||
|
mirror_x: false
|
||||||
|
mirror_y: false
|
||||||
|
|
||||||
|
display:
|
||||||
|
- platform: ili9xxx
|
||||||
|
id: my_display
|
||||||
|
spi_id: lcd
|
||||||
|
model: ILI9341
|
||||||
|
color_palette: 8BIT
|
||||||
|
cs_pin: 15
|
||||||
|
dc_pin: 2
|
||||||
|
invert_colors: false
|
||||||
|
update_interval: never
|
||||||
|
auto_clear_enabled: false
|
||||||
|
transform:
|
||||||
|
swap_xy: true
|
||||||
|
mirror_x: false
|
||||||
|
mirror_y: false
|
||||||
|
dimensions:
|
||||||
|
width: 320
|
||||||
|
height: 240
|
||||||
1074
modules/nixos/homeassistant/services/esphome/cyd-base-ui.yaml
Normal file
1074
modules/nixos/homeassistant/services/esphome/cyd-base-ui.yaml
Normal file
File diff suppressed because it is too large
Load Diff
207
modules/nixos/homeassistant/services/esphome/home-like.yaml
Normal file
207
modules/nixos/homeassistant/services/esphome/home-like.yaml
Normal file
@@ -0,0 +1,207 @@
|
|||||||
|
############################################################
|
||||||
|
# SmartDisplay – iOS Home app–inspired Tiles UI
|
||||||
|
# Target device: ESP32-2432S028 / Cheap Yellow Display (CYD)
|
||||||
|
#
|
||||||
|
# Edit the substitutions below, then flash.
|
||||||
|
# All shared hardware/UI logic lives in:
|
||||||
|
# cyd-base-hw.yaml – sensors, fonts, SPI, display, touch
|
||||||
|
# cyd-base-ui.yaml – LVGL layout, scripts
|
||||||
|
############################################################
|
||||||
|
|
||||||
|
substitutions:
|
||||||
|
|
||||||
|
DIRECT_ACTIONS: "true"
|
||||||
|
ROOM_NAME: "Bedroom"
|
||||||
|
TIME_24H: "false"
|
||||||
|
|
||||||
|
# ── TILE 1 ──────────────────────────────────────────────
|
||||||
|
TILE1_ENTITY: "light.bedroom_lights"
|
||||||
|
TILE1_STATE_ENTITY: "light.bedroom_light_1"
|
||||||
|
TILE1_TITLE: "Lights"
|
||||||
|
TILE1_ICON: "\U000F0769"
|
||||||
|
TILE1_TYPE: "light"
|
||||||
|
TILE1_TAP_ACTION: "toggle"
|
||||||
|
TILE1_LONGPRESS: "auto"
|
||||||
|
TILE1_VALUE_MODE: "auto"
|
||||||
|
TILE1_LABEL_OFF: "Off"
|
||||||
|
TILE1_LABEL_ON: "On"
|
||||||
|
TILE1_CIRCLE_ACTIVE_COLOR: "0xFEC600"
|
||||||
|
TILE1_CIRCLE_DISABLED_COLOR: "0x7B7B6F"
|
||||||
|
TILE1_ICON_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE1_ICON_DISABLED_COLOR: "0xFEC600"
|
||||||
|
TILE1_BG_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE1_BG_DISABLED_COLOR: "0x939391"
|
||||||
|
TILE1_TITLE_ACTIVE_COLOR: "0x000000"
|
||||||
|
TILE1_TITLE_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE1_VALUE_ACTIVE_COLOR: "0x7A7A7C"
|
||||||
|
TILE1_VALUE_DISABLED_COLOR: "0xD9D9D9"
|
||||||
|
TILE1_TAP_SERVICE: ""
|
||||||
|
TILE1_TAP_PARAM_KEY: ""
|
||||||
|
TILE1_TAP_PARAM_VAL: ""
|
||||||
|
TILE1_LONGPRESS_OFF_VALUE: "0"
|
||||||
|
|
||||||
|
# ── TILE 2 ──────────────────────────────────────────────
|
||||||
|
TILE2_ENTITY: "light.bedroom_lamp"
|
||||||
|
TILE2_STATE_ENTITY: "light.bedroom_lamp"
|
||||||
|
TILE2_TITLE: "Lamp"
|
||||||
|
TILE2_ICON: "\U000F06B5"
|
||||||
|
TILE2_TYPE: "light"
|
||||||
|
TILE2_TAP_ACTION: "auto"
|
||||||
|
TILE2_LONGPRESS: "auto"
|
||||||
|
TILE2_VALUE_MODE: "auto"
|
||||||
|
TILE2_LABEL_OFF: "Off"
|
||||||
|
TILE2_LABEL_ON: "On"
|
||||||
|
TILE2_CIRCLE_ACTIVE_COLOR: "0xFEC600"
|
||||||
|
TILE2_CIRCLE_DISABLED_COLOR: "0x7B7B6F"
|
||||||
|
TILE2_ICON_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE2_ICON_DISABLED_COLOR: "0xFEC600"
|
||||||
|
TILE2_BG_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE2_BG_DISABLED_COLOR: "0x939391"
|
||||||
|
TILE2_TITLE_ACTIVE_COLOR: "0x000000"
|
||||||
|
TILE2_TITLE_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE2_VALUE_ACTIVE_COLOR: "0x7A7A7C"
|
||||||
|
TILE2_VALUE_DISABLED_COLOR: "0xD9D9D9"
|
||||||
|
TILE2_TAP_SERVICE: ""
|
||||||
|
TILE2_TAP_PARAM_KEY: ""
|
||||||
|
TILE2_TAP_PARAM_VAL: ""
|
||||||
|
TILE2_LONGPRESS_OFF_VALUE: "0"
|
||||||
|
|
||||||
|
# ── TILE 3 ──────────────────────────────────────────────
|
||||||
|
TILE3_ENTITY: "light.living_room_lights"
|
||||||
|
TILE3_STATE_ENTITY: "light.living_room_lights"
|
||||||
|
TILE3_TITLE: "Living Room"
|
||||||
|
TILE3_ICON: "\U000F08DD"
|
||||||
|
TILE3_TYPE: "light"
|
||||||
|
TILE3_TAP_ACTION: "auto"
|
||||||
|
TILE3_LONGPRESS: "auto"
|
||||||
|
TILE3_VALUE_MODE: "auto"
|
||||||
|
TILE3_LABEL_OFF: "Off"
|
||||||
|
TILE3_LABEL_ON: "On"
|
||||||
|
TILE3_CIRCLE_ACTIVE_COLOR: "0xFEC600"
|
||||||
|
TILE3_CIRCLE_DISABLED_COLOR: "0x7B7B6F"
|
||||||
|
TILE3_ICON_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE3_ICON_DISABLED_COLOR: "0xFEC600"
|
||||||
|
TILE3_BG_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE3_BG_DISABLED_COLOR: "0x939391"
|
||||||
|
TILE3_TITLE_ACTIVE_COLOR: "0x000000"
|
||||||
|
TILE3_TITLE_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE3_VALUE_ACTIVE_COLOR: "0x7A7A7C"
|
||||||
|
TILE3_VALUE_DISABLED_COLOR: "0xD9D9D9"
|
||||||
|
TILE3_TAP_SERVICE: ""
|
||||||
|
TILE3_TAP_PARAM_KEY: ""
|
||||||
|
TILE3_TAP_PARAM_VAL: ""
|
||||||
|
TILE3_LONGPRESS_OFF_VALUE: "0"
|
||||||
|
|
||||||
|
# ── TILE 4 ──────────────────────────────────────────────
|
||||||
|
TILE4_ENTITY: "switch.closet_lights"
|
||||||
|
TILE4_STATE_ENTITY: "switch.closet_lights"
|
||||||
|
TILE4_TITLE: "Closet Lights"
|
||||||
|
TILE4_ICON: "\U000F1051"
|
||||||
|
TILE4_TYPE: "light"
|
||||||
|
TILE4_TAP_ACTION: "auto"
|
||||||
|
TILE4_LONGPRESS: "auto"
|
||||||
|
TILE4_VALUE_MODE: "auto"
|
||||||
|
TILE4_LABEL_OFF: "Off"
|
||||||
|
TILE4_LABEL_ON: "On"
|
||||||
|
TILE4_CIRCLE_ACTIVE_COLOR: "0xFEC600"
|
||||||
|
TILE4_CIRCLE_DISABLED_COLOR: "0x7B7B6F"
|
||||||
|
TILE4_ICON_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE4_ICON_DISABLED_COLOR: "0xFEC600"
|
||||||
|
TILE4_BG_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE4_BG_DISABLED_COLOR: "0x939391"
|
||||||
|
TILE4_TITLE_ACTIVE_COLOR: "0x000000"
|
||||||
|
TILE4_TITLE_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE4_VALUE_ACTIVE_COLOR: "0x7A7A7C"
|
||||||
|
TILE4_VALUE_DISABLED_COLOR: "0xD9D9D9"
|
||||||
|
TILE4_TAP_SERVICE: ""
|
||||||
|
TILE4_TAP_PARAM_KEY: ""
|
||||||
|
TILE4_TAP_PARAM_VAL: ""
|
||||||
|
TILE4_LONGPRESS_OFF_VALUE: "0"
|
||||||
|
|
||||||
|
# ── TILE 5 ──────────────────────────────────────────────
|
||||||
|
TILE5_ENTITY: "fan.bedroom_fan"
|
||||||
|
TILE5_STATE_ENTITY: "fan.bedroom_fan"
|
||||||
|
TILE5_TITLE: "Bedroom Fan"
|
||||||
|
TILE5_ICON: "\U000F0210"
|
||||||
|
TILE5_TYPE: "fan"
|
||||||
|
TILE5_TAP_ACTION: "auto"
|
||||||
|
TILE5_LONGPRESS: "auto"
|
||||||
|
TILE5_VALUE_MODE: "auto"
|
||||||
|
TILE5_LABEL_OFF: "Off"
|
||||||
|
TILE5_LABEL_ON: "On"
|
||||||
|
TILE5_CIRCLE_ACTIVE_COLOR: "0xFEC600"
|
||||||
|
TILE5_CIRCLE_DISABLED_COLOR: "0x7B7B6F"
|
||||||
|
TILE5_ICON_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE5_ICON_DISABLED_COLOR: "0xFEC600"
|
||||||
|
TILE5_BG_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE5_BG_DISABLED_COLOR: "0x939391"
|
||||||
|
TILE5_TITLE_ACTIVE_COLOR: "0x000000"
|
||||||
|
TILE5_TITLE_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE5_VALUE_ACTIVE_COLOR: "0x7A7A7C"
|
||||||
|
TILE5_VALUE_DISABLED_COLOR: "0xD9D9D9"
|
||||||
|
TILE5_TAP_SERVICE: ""
|
||||||
|
TILE5_TAP_PARAM_KEY: ""
|
||||||
|
TILE5_TAP_PARAM_VAL: ""
|
||||||
|
TILE5_LONGPRESS_OFF_VALUE: "0"
|
||||||
|
|
||||||
|
# ── TILE 6 ──────────────────────────────────────────────
|
||||||
|
TILE6_ENTITY: "fan.bedroom_air_purifier"
|
||||||
|
TILE6_STATE_ENTITY: "fan.bedroom_air_purifier"
|
||||||
|
TILE6_TITLE: "Air Purifier"
|
||||||
|
TILE6_ICON: "\U000F0D43"
|
||||||
|
TILE6_TYPE: "fan"
|
||||||
|
TILE6_TAP_ACTION: "fan_toggle_preset"
|
||||||
|
TILE6_LONGPRESS: "auto"
|
||||||
|
TILE6_VALUE_MODE: "auto"
|
||||||
|
TILE6_LABEL_OFF: "Off"
|
||||||
|
TILE6_LABEL_ON: "On"
|
||||||
|
TILE6_CIRCLE_ACTIVE_COLOR: "0x00C5EC"
|
||||||
|
TILE6_CIRCLE_DISABLED_COLOR: "0x7B7B6F"
|
||||||
|
TILE6_ICON_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE6_ICON_DISABLED_COLOR: "0x00C5EC"
|
||||||
|
TILE6_BG_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE6_BG_DISABLED_COLOR: "0x939391"
|
||||||
|
TILE6_TITLE_ACTIVE_COLOR: "0x000000"
|
||||||
|
TILE6_TITLE_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE6_VALUE_ACTIVE_COLOR: "0x7A7A7C"
|
||||||
|
TILE6_VALUE_DISABLED_COLOR: "0xD9D9D9"
|
||||||
|
TILE6_TAP_SERVICE: "fan.toggle"
|
||||||
|
TILE6_TAP_PARAM_KEY: "preset_mode"
|
||||||
|
TILE6_TAP_PARAM_VAL: "Auto"
|
||||||
|
TILE6_LONGPRESS_OFF_VALUE: "0"
|
||||||
|
|
||||||
|
packages:
|
||||||
|
hw: !include cyd-base-hw.yaml
|
||||||
|
ui: !include cyd-base-ui.yaml
|
||||||
|
|
||||||
|
esphome:
|
||||||
|
name: smartdisplay
|
||||||
|
friendly_name: SmartDisplay
|
||||||
|
on_boot:
|
||||||
|
priority: 600
|
||||||
|
then:
|
||||||
|
- script.execute: ui_refresh
|
||||||
|
|
||||||
|
esp32:
|
||||||
|
board: esp32dev
|
||||||
|
framework:
|
||||||
|
type: arduino
|
||||||
|
|
||||||
|
logger:
|
||||||
|
|
||||||
|
api:
|
||||||
|
encryption:
|
||||||
|
key: !secret api_encryption_key
|
||||||
|
|
||||||
|
ota:
|
||||||
|
- platform: esphome
|
||||||
|
password: !secret ota_password
|
||||||
|
|
||||||
|
wifi:
|
||||||
|
ssid: !secret wifi_ssid
|
||||||
|
password: !secret wifi_password
|
||||||
|
ap:
|
||||||
|
ssid: "Smartdisplay Fallback"
|
||||||
|
password: !secret ota_password
|
||||||
|
|
||||||
|
captive_portal:
|
||||||
202
modules/nixos/homeassistant/services/esphome/living-room.yaml
Normal file
202
modules/nixos/homeassistant/services/esphome/living-room.yaml
Normal file
@@ -0,0 +1,202 @@
|
|||||||
|
############################################################
|
||||||
|
# SmartDisplay – Living Room
|
||||||
|
# Tiles: Lights | Air Purifier | Vacuum | TV | Speaker | Closet
|
||||||
|
############################################################
|
||||||
|
|
||||||
|
substitutions:
|
||||||
|
|
||||||
|
DIRECT_ACTIONS: "true"
|
||||||
|
ROOM_NAME: "Living Room"
|
||||||
|
TIME_24H: "false"
|
||||||
|
|
||||||
|
# ── TILE 1 – Living Room Lights ──────────────────────────
|
||||||
|
TILE1_ENTITY: "light.living_room_lights"
|
||||||
|
TILE1_STATE_ENTITY: "light.living_room_light_1"
|
||||||
|
TILE1_TITLE: "Lights"
|
||||||
|
TILE1_ICON: "\U000F08DD"
|
||||||
|
TILE1_TYPE: "light"
|
||||||
|
TILE1_TAP_ACTION: "toggle"
|
||||||
|
TILE1_LONGPRESS: "auto"
|
||||||
|
TILE1_VALUE_MODE: "auto"
|
||||||
|
TILE1_LABEL_OFF: "Off"
|
||||||
|
TILE1_LABEL_ON: "On"
|
||||||
|
TILE1_CIRCLE_ACTIVE_COLOR: "0xFEC600"
|
||||||
|
TILE1_CIRCLE_DISABLED_COLOR: "0x7B7B6F"
|
||||||
|
TILE1_ICON_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE1_ICON_DISABLED_COLOR: "0xFEC600"
|
||||||
|
TILE1_BG_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE1_BG_DISABLED_COLOR: "0x939391"
|
||||||
|
TILE1_TITLE_ACTIVE_COLOR: "0x000000"
|
||||||
|
TILE1_TITLE_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE1_VALUE_ACTIVE_COLOR: "0x7A7A7C"
|
||||||
|
TILE1_VALUE_DISABLED_COLOR: "0xD9D9D9"
|
||||||
|
TILE1_TAP_SERVICE: ""
|
||||||
|
TILE1_TAP_PARAM_KEY: ""
|
||||||
|
TILE1_TAP_PARAM_VAL: ""
|
||||||
|
TILE1_LONGPRESS_OFF_VALUE: "0"
|
||||||
|
|
||||||
|
# ── TILE 2 – Living Room Air Purifier ───────────────────
|
||||||
|
TILE2_ENTITY: "fan.living_room_air_purifier"
|
||||||
|
TILE2_STATE_ENTITY: "fan.living_room_air_purifier"
|
||||||
|
TILE2_TITLE: "Air Purifier"
|
||||||
|
TILE2_ICON: "\U000F0D43"
|
||||||
|
TILE2_TYPE: "fan"
|
||||||
|
TILE2_TAP_ACTION: "fan_toggle_preset"
|
||||||
|
TILE2_LONGPRESS: "auto"
|
||||||
|
TILE2_VALUE_MODE: "auto"
|
||||||
|
TILE2_LABEL_OFF: "Off"
|
||||||
|
TILE2_LABEL_ON: "On"
|
||||||
|
TILE2_CIRCLE_ACTIVE_COLOR: "0x00C5EC"
|
||||||
|
TILE2_CIRCLE_DISABLED_COLOR: "0x7B7B6F"
|
||||||
|
TILE2_ICON_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE2_ICON_DISABLED_COLOR: "0x00C5EC"
|
||||||
|
TILE2_BG_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE2_BG_DISABLED_COLOR: "0x939391"
|
||||||
|
TILE2_TITLE_ACTIVE_COLOR: "0x000000"
|
||||||
|
TILE2_TITLE_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE2_VALUE_ACTIVE_COLOR: "0x7A7A7C"
|
||||||
|
TILE2_VALUE_DISABLED_COLOR: "0xD9D9D9"
|
||||||
|
TILE2_TAP_SERVICE: "fan.toggle"
|
||||||
|
TILE2_TAP_PARAM_KEY: "preset_mode"
|
||||||
|
TILE2_TAP_PARAM_VAL: "auto"
|
||||||
|
TILE2_LONGPRESS_OFF_VALUE: "0"
|
||||||
|
|
||||||
|
# ── TILE 3 – Garbage Goober (vacuum) ────────────────────
|
||||||
|
TILE3_ENTITY: "vacuum.garbage_goober"
|
||||||
|
TILE3_STATE_ENTITY: "binary_sensor.garbage_goober_cleaning"
|
||||||
|
TILE3_TITLE: "Vacuum"
|
||||||
|
TILE3_ICON: "\U000F09A8"
|
||||||
|
TILE3_TYPE: "switch"
|
||||||
|
TILE3_TAP_ACTION: "custom"
|
||||||
|
TILE3_LONGPRESS: "none"
|
||||||
|
TILE3_VALUE_MODE: "text"
|
||||||
|
TILE3_LABEL_OFF: "Docked"
|
||||||
|
TILE3_LABEL_ON: "Cleaning"
|
||||||
|
TILE3_CIRCLE_ACTIVE_COLOR: "0x43A047"
|
||||||
|
TILE3_CIRCLE_DISABLED_COLOR: "0x7B7B6F"
|
||||||
|
TILE3_ICON_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE3_ICON_DISABLED_COLOR: "0x43A047"
|
||||||
|
TILE3_BG_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE3_BG_DISABLED_COLOR: "0x939391"
|
||||||
|
TILE3_TITLE_ACTIVE_COLOR: "0x000000"
|
||||||
|
TILE3_TITLE_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE3_VALUE_ACTIVE_COLOR: "0x7A7A7C"
|
||||||
|
TILE3_VALUE_DISABLED_COLOR: "0xD9D9D9"
|
||||||
|
TILE3_TAP_SERVICE: "vacuum.start_pause"
|
||||||
|
TILE3_TAP_PARAM_KEY: ""
|
||||||
|
TILE3_TAP_PARAM_VAL: ""
|
||||||
|
TILE3_LONGPRESS_OFF_VALUE: "0"
|
||||||
|
|
||||||
|
# ── TILE 4 – TV (remote) ────────────────────────────────
|
||||||
|
TILE4_ENTITY: "remote.living_room"
|
||||||
|
TILE4_STATE_ENTITY: "remote.living_room"
|
||||||
|
TILE4_TITLE: "TV"
|
||||||
|
TILE4_ICON: "\U000F0502"
|
||||||
|
TILE4_TYPE: "switch"
|
||||||
|
TILE4_TAP_ACTION: "custom"
|
||||||
|
TILE4_LONGPRESS: "none"
|
||||||
|
TILE4_VALUE_MODE: "text"
|
||||||
|
TILE4_LABEL_OFF: "Off"
|
||||||
|
TILE4_LABEL_ON: "On"
|
||||||
|
TILE4_CIRCLE_ACTIVE_COLOR: "0x1565C0"
|
||||||
|
TILE4_CIRCLE_DISABLED_COLOR: "0x7B7B6F"
|
||||||
|
TILE4_ICON_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE4_ICON_DISABLED_COLOR: "0x1565C0"
|
||||||
|
TILE4_BG_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE4_BG_DISABLED_COLOR: "0x939391"
|
||||||
|
TILE4_TITLE_ACTIVE_COLOR: "0x000000"
|
||||||
|
TILE4_TITLE_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE4_VALUE_ACTIVE_COLOR: "0x7A7A7C"
|
||||||
|
TILE4_VALUE_DISABLED_COLOR: "0xD9D9D9"
|
||||||
|
TILE4_TAP_SERVICE: "remote.toggle"
|
||||||
|
TILE4_TAP_PARAM_KEY: ""
|
||||||
|
TILE4_TAP_PARAM_VAL: ""
|
||||||
|
TILE4_LONGPRESS_OFF_VALUE: "0"
|
||||||
|
|
||||||
|
# ── TILE 5 – Living Room Speaker ────────────────────────
|
||||||
|
TILE5_ENTITY: "media_player.living_room_speaker"
|
||||||
|
TILE5_STATE_ENTITY: "media_player.living_room_speaker"
|
||||||
|
TILE5_TITLE: "Speaker"
|
||||||
|
TILE5_ICON: "\U000F04C3"
|
||||||
|
TILE5_TYPE: "switch"
|
||||||
|
TILE5_TAP_ACTION: "custom"
|
||||||
|
TILE5_LONGPRESS: "none"
|
||||||
|
TILE5_VALUE_MODE: "text"
|
||||||
|
TILE5_LABEL_OFF: "Off"
|
||||||
|
TILE5_LABEL_ON: "Playing"
|
||||||
|
TILE5_CIRCLE_ACTIVE_COLOR: "0x8E24AA"
|
||||||
|
TILE5_CIRCLE_DISABLED_COLOR: "0x7B7B6F"
|
||||||
|
TILE5_ICON_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE5_ICON_DISABLED_COLOR: "0x8E24AA"
|
||||||
|
TILE5_BG_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE5_BG_DISABLED_COLOR: "0x939391"
|
||||||
|
TILE5_TITLE_ACTIVE_COLOR: "0x000000"
|
||||||
|
TILE5_TITLE_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE5_VALUE_ACTIVE_COLOR: "0x7A7A7C"
|
||||||
|
TILE5_VALUE_DISABLED_COLOR: "0xD9D9D9"
|
||||||
|
TILE5_TAP_SERVICE: "media_player.toggle"
|
||||||
|
TILE5_TAP_PARAM_KEY: ""
|
||||||
|
TILE5_TAP_PARAM_VAL: ""
|
||||||
|
TILE5_LONGPRESS_OFF_VALUE: "0"
|
||||||
|
|
||||||
|
# ── TILE 6 – Front Closet Lights ────────────────────────
|
||||||
|
TILE6_ENTITY: "light.front_closet_lights"
|
||||||
|
TILE6_STATE_ENTITY: "light.front_closet_light_1"
|
||||||
|
TILE6_TITLE: "Closet"
|
||||||
|
TILE6_ICON: "\U000F1051"
|
||||||
|
TILE6_TYPE: "light"
|
||||||
|
TILE6_TAP_ACTION: "toggle"
|
||||||
|
TILE6_LONGPRESS: "none"
|
||||||
|
TILE6_VALUE_MODE: "auto"
|
||||||
|
TILE6_LABEL_OFF: "Off"
|
||||||
|
TILE6_LABEL_ON: "On"
|
||||||
|
TILE6_CIRCLE_ACTIVE_COLOR: "0xFEC600"
|
||||||
|
TILE6_CIRCLE_DISABLED_COLOR: "0x7B7B6F"
|
||||||
|
TILE6_ICON_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE6_ICON_DISABLED_COLOR: "0xFEC600"
|
||||||
|
TILE6_BG_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE6_BG_DISABLED_COLOR: "0x939391"
|
||||||
|
TILE6_TITLE_ACTIVE_COLOR: "0x000000"
|
||||||
|
TILE6_TITLE_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE6_VALUE_ACTIVE_COLOR: "0x7A7A7C"
|
||||||
|
TILE6_VALUE_DISABLED_COLOR: "0xD9D9D9"
|
||||||
|
TILE6_TAP_SERVICE: ""
|
||||||
|
TILE6_TAP_PARAM_KEY: ""
|
||||||
|
TILE6_TAP_PARAM_VAL: ""
|
||||||
|
TILE6_LONGPRESS_OFF_VALUE: "0"
|
||||||
|
|
||||||
|
packages:
|
||||||
|
hw: !include cyd-base-hw.yaml
|
||||||
|
ui: !include cyd-base-ui.yaml
|
||||||
|
|
||||||
|
esphome:
|
||||||
|
name: livingroom-display
|
||||||
|
friendly_name: LivingroomDisplay
|
||||||
|
on_boot:
|
||||||
|
priority: 600
|
||||||
|
then:
|
||||||
|
- script.execute: ui_refresh
|
||||||
|
|
||||||
|
esp32:
|
||||||
|
board: esp32dev
|
||||||
|
framework:
|
||||||
|
type: arduino
|
||||||
|
|
||||||
|
logger:
|
||||||
|
|
||||||
|
api:
|
||||||
|
encryption:
|
||||||
|
key: !secret api_encryption_key
|
||||||
|
|
||||||
|
ota:
|
||||||
|
- platform: esphome
|
||||||
|
password: !secret ota_password
|
||||||
|
|
||||||
|
wifi:
|
||||||
|
ssid: !secret wifi_ssid
|
||||||
|
password: !secret wifi_password
|
||||||
|
ap:
|
||||||
|
ssid: "LivingroomDisplay Fallback"
|
||||||
|
password: !secret ota_password
|
||||||
|
|
||||||
|
captive_portal:
|
||||||
202
modules/nixos/homeassistant/services/esphome/pets.yaml
Normal file
202
modules/nixos/homeassistant/services/esphome/pets.yaml
Normal file
@@ -0,0 +1,202 @@
|
|||||||
|
############################################################
|
||||||
|
# SmartDisplay – Pets
|
||||||
|
# Tiles: Joey Feed | Luci Feed | Litter Box | Fountain | Vacuum | Ftn Reset
|
||||||
|
############################################################
|
||||||
|
|
||||||
|
substitutions:
|
||||||
|
|
||||||
|
DIRECT_ACTIONS: "true"
|
||||||
|
ROOM_NAME: "Pets"
|
||||||
|
TIME_24H: "false"
|
||||||
|
|
||||||
|
# ── TILE 1 – Joey Smart Feeder (manual feed) ─────────────
|
||||||
|
TILE1_ENTITY: "button.joey_smart_feeder_manual_feed"
|
||||||
|
TILE1_STATE_ENTITY: "binary_sensor.joey_smart_feeder_low_food"
|
||||||
|
TILE1_TITLE: "Joey Feed"
|
||||||
|
TILE1_ICON: "\U000F009A"
|
||||||
|
TILE1_TYPE: "script"
|
||||||
|
TILE1_TAP_ACTION: "custom"
|
||||||
|
TILE1_LONGPRESS: "none"
|
||||||
|
TILE1_VALUE_MODE: "text"
|
||||||
|
TILE1_LABEL_OFF: "Ready"
|
||||||
|
TILE1_LABEL_ON: "Fed"
|
||||||
|
TILE1_CIRCLE_ACTIVE_COLOR: "0xF4A820"
|
||||||
|
TILE1_CIRCLE_DISABLED_COLOR: "0x7B7B6F"
|
||||||
|
TILE1_ICON_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE1_ICON_DISABLED_COLOR: "0xF4A820"
|
||||||
|
TILE1_BG_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE1_BG_DISABLED_COLOR: "0x939391"
|
||||||
|
TILE1_TITLE_ACTIVE_COLOR: "0x000000"
|
||||||
|
TILE1_TITLE_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE1_VALUE_ACTIVE_COLOR: "0x7A7A7C"
|
||||||
|
TILE1_VALUE_DISABLED_COLOR: "0xD9D9D9"
|
||||||
|
TILE1_TAP_SERVICE: "button.press"
|
||||||
|
TILE1_TAP_PARAM_KEY: ""
|
||||||
|
TILE1_TAP_PARAM_VAL: ""
|
||||||
|
TILE1_LONGPRESS_OFF_VALUE: "0"
|
||||||
|
|
||||||
|
# ── TILE 2 – Luci Smart Feeder (manual feed) ─────────────
|
||||||
|
TILE2_ENTITY: "button.luci_smart_feeder_manual_feed"
|
||||||
|
TILE2_STATE_ENTITY: "binary_sensor.luci_smart_feeder_low_food"
|
||||||
|
TILE2_TITLE: "Luci Feed"
|
||||||
|
TILE2_ICON: "\U000F009A"
|
||||||
|
TILE2_TYPE: "script"
|
||||||
|
TILE2_TAP_ACTION: "custom"
|
||||||
|
TILE2_LONGPRESS: "none"
|
||||||
|
TILE2_VALUE_MODE: "text"
|
||||||
|
TILE2_LABEL_OFF: "Ready"
|
||||||
|
TILE2_LABEL_ON: "Fed"
|
||||||
|
TILE2_CIRCLE_ACTIVE_COLOR: "0xEC407A"
|
||||||
|
TILE2_CIRCLE_DISABLED_COLOR: "0x7B7B6F"
|
||||||
|
TILE2_ICON_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE2_ICON_DISABLED_COLOR: "0xEC407A"
|
||||||
|
TILE2_BG_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE2_BG_DISABLED_COLOR: "0x939391"
|
||||||
|
TILE2_TITLE_ACTIVE_COLOR: "0x000000"
|
||||||
|
TILE2_TITLE_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE2_VALUE_ACTIVE_COLOR: "0x7A7A7C"
|
||||||
|
TILE2_VALUE_DISABLED_COLOR: "0xD9D9D9"
|
||||||
|
TILE2_TAP_SERVICE: "button.press"
|
||||||
|
TILE2_TAP_PARAM_KEY: ""
|
||||||
|
TILE2_TAP_PARAM_VAL: ""
|
||||||
|
TILE2_LONGPRESS_OFF_VALUE: "0"
|
||||||
|
|
||||||
|
# ── TILE 3 – Litter-Robot 4 ──────────────────────────────
|
||||||
|
TILE3_ENTITY: "vacuum.litter_robot_4_litter_box"
|
||||||
|
TILE3_STATE_ENTITY: "binary_sensor.litter_robot_4_is_cleaning"
|
||||||
|
TILE3_TITLE: "Litter Box"
|
||||||
|
TILE3_ICON: "\U000F054D"
|
||||||
|
TILE3_TYPE: "switch"
|
||||||
|
TILE3_TAP_ACTION: "custom"
|
||||||
|
TILE3_LONGPRESS: "none"
|
||||||
|
TILE3_VALUE_MODE: "text"
|
||||||
|
TILE3_LABEL_OFF: "Docked"
|
||||||
|
TILE3_LABEL_ON: "Cycling"
|
||||||
|
TILE3_CIRCLE_ACTIVE_COLOR: "0x43A047"
|
||||||
|
TILE3_CIRCLE_DISABLED_COLOR: "0x7B7B6F"
|
||||||
|
TILE3_ICON_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE3_ICON_DISABLED_COLOR: "0x43A047"
|
||||||
|
TILE3_BG_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE3_BG_DISABLED_COLOR: "0x939391"
|
||||||
|
TILE3_TITLE_ACTIVE_COLOR: "0x000000"
|
||||||
|
TILE3_TITLE_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE3_VALUE_ACTIVE_COLOR: "0x7A7A7C"
|
||||||
|
TILE3_VALUE_DISABLED_COLOR: "0xD9D9D9"
|
||||||
|
TILE3_TAP_SERVICE: "vacuum.start"
|
||||||
|
TILE3_TAP_PARAM_KEY: ""
|
||||||
|
TILE3_TAP_PARAM_VAL: ""
|
||||||
|
TILE3_LONGPRESS_OFF_VALUE: "0"
|
||||||
|
|
||||||
|
# ── TILE 4 – Pet Fountain ────────────────────────────────
|
||||||
|
TILE4_ENTITY: "switch.dockstream_smart_rfid_fountain_wi_fi"
|
||||||
|
TILE4_STATE_ENTITY: "binary_sensor.dockstream_smart_rfid_fountain_indicator"
|
||||||
|
TILE4_TITLE: "Fountain"
|
||||||
|
TILE4_ICON: "\U000F0765"
|
||||||
|
TILE4_TYPE: "switch"
|
||||||
|
TILE4_TAP_ACTION: "toggle"
|
||||||
|
TILE4_LONGPRESS: "none"
|
||||||
|
TILE4_VALUE_MODE: "text"
|
||||||
|
TILE4_LABEL_OFF: "Off"
|
||||||
|
TILE4_LABEL_ON: "On"
|
||||||
|
TILE4_CIRCLE_ACTIVE_COLOR: "0x039BE5"
|
||||||
|
TILE4_CIRCLE_DISABLED_COLOR: "0x7B7B6F"
|
||||||
|
TILE4_ICON_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE4_ICON_DISABLED_COLOR: "0x039BE5"
|
||||||
|
TILE4_BG_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE4_BG_DISABLED_COLOR: "0x939391"
|
||||||
|
TILE4_TITLE_ACTIVE_COLOR: "0x000000"
|
||||||
|
TILE4_TITLE_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE4_VALUE_ACTIVE_COLOR: "0x7A7A7C"
|
||||||
|
TILE4_VALUE_DISABLED_COLOR: "0xD9D9D9"
|
||||||
|
TILE4_TAP_SERVICE: ""
|
||||||
|
TILE4_TAP_PARAM_KEY: ""
|
||||||
|
TILE4_TAP_PARAM_VAL: ""
|
||||||
|
TILE4_LONGPRESS_OFF_VALUE: "0"
|
||||||
|
|
||||||
|
# ── TILE 5 – Garbage Goober (vacuum) ────────────────────
|
||||||
|
TILE5_ENTITY: "vacuum.garbage_goober"
|
||||||
|
TILE5_STATE_ENTITY: "binary_sensor.garbage_goober_cleaning"
|
||||||
|
TILE5_TITLE: "Vacuum"
|
||||||
|
TILE5_ICON: "\U000F09A8"
|
||||||
|
TILE5_TYPE: "switch"
|
||||||
|
TILE5_TAP_ACTION: "custom"
|
||||||
|
TILE5_LONGPRESS: "none"
|
||||||
|
TILE5_VALUE_MODE: "text"
|
||||||
|
TILE5_LABEL_OFF: "Docked"
|
||||||
|
TILE5_LABEL_ON: "Cleaning"
|
||||||
|
TILE5_CIRCLE_ACTIVE_COLOR: "0x6D4C41"
|
||||||
|
TILE5_CIRCLE_DISABLED_COLOR: "0x7B7B6F"
|
||||||
|
TILE5_ICON_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE5_ICON_DISABLED_COLOR: "0x6D4C41"
|
||||||
|
TILE5_BG_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE5_BG_DISABLED_COLOR: "0x939391"
|
||||||
|
TILE5_TITLE_ACTIVE_COLOR: "0x000000"
|
||||||
|
TILE5_TITLE_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE5_VALUE_ACTIVE_COLOR: "0x7A7A7C"
|
||||||
|
TILE5_VALUE_DISABLED_COLOR: "0xD9D9D9"
|
||||||
|
TILE5_TAP_SERVICE: "vacuum.start_pause"
|
||||||
|
TILE5_TAP_PARAM_KEY: ""
|
||||||
|
TILE5_TAP_PARAM_VAL: ""
|
||||||
|
TILE5_LONGPRESS_OFF_VALUE: "0"
|
||||||
|
|
||||||
|
# ── TILE 6 – Fountain Cleaning Reset ────────────────────
|
||||||
|
TILE6_ENTITY: "button.dockstream_smart_rfid_fountain_cleaning_reset"
|
||||||
|
TILE6_STATE_ENTITY: "binary_sensor.dockstream_smart_rfid_fountain_wi_fi"
|
||||||
|
TILE6_TITLE: "Ftn. Reset"
|
||||||
|
TILE6_ICON: "\U000F0ECC"
|
||||||
|
TILE6_TYPE: "script"
|
||||||
|
TILE6_TAP_ACTION: "custom"
|
||||||
|
TILE6_LONGPRESS: "none"
|
||||||
|
TILE6_VALUE_MODE: "text"
|
||||||
|
TILE6_LABEL_OFF: "Offline"
|
||||||
|
TILE6_LABEL_ON: "Online"
|
||||||
|
TILE6_CIRCLE_ACTIVE_COLOR: "0x039BE5"
|
||||||
|
TILE6_CIRCLE_DISABLED_COLOR: "0x7B7B6F"
|
||||||
|
TILE6_ICON_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE6_ICON_DISABLED_COLOR: "0x039BE5"
|
||||||
|
TILE6_BG_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE6_BG_DISABLED_COLOR: "0x939391"
|
||||||
|
TILE6_TITLE_ACTIVE_COLOR: "0x000000"
|
||||||
|
TILE6_TITLE_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE6_VALUE_ACTIVE_COLOR: "0x7A7A7C"
|
||||||
|
TILE6_VALUE_DISABLED_COLOR: "0xD9D9D9"
|
||||||
|
TILE6_TAP_SERVICE: "button.press"
|
||||||
|
TILE6_TAP_PARAM_KEY: ""
|
||||||
|
TILE6_TAP_PARAM_VAL: ""
|
||||||
|
TILE6_LONGPRESS_OFF_VALUE: "0"
|
||||||
|
|
||||||
|
packages:
|
||||||
|
hw: !include cyd-base-hw.yaml
|
||||||
|
ui: !include cyd-base-ui.yaml
|
||||||
|
|
||||||
|
esphome:
|
||||||
|
name: pets-display
|
||||||
|
friendly_name: PetsDisplay
|
||||||
|
on_boot:
|
||||||
|
priority: 600
|
||||||
|
then:
|
||||||
|
- script.execute: ui_refresh
|
||||||
|
|
||||||
|
esp32:
|
||||||
|
board: esp32dev
|
||||||
|
framework:
|
||||||
|
type: arduino
|
||||||
|
|
||||||
|
logger:
|
||||||
|
|
||||||
|
api:
|
||||||
|
encryption:
|
||||||
|
key: !secret api_encryption_key
|
||||||
|
|
||||||
|
ota:
|
||||||
|
- platform: esphome
|
||||||
|
password: !secret ota_password
|
||||||
|
|
||||||
|
wifi:
|
||||||
|
ssid: !secret wifi_ssid
|
||||||
|
password: !secret wifi_password
|
||||||
|
ap:
|
||||||
|
ssid: "PetsDisplay Fallback"
|
||||||
|
password: !secret ota_password
|
||||||
|
|
||||||
|
captive_portal:
|
||||||
202
modules/nixos/homeassistant/services/esphome/printer.yaml
Normal file
202
modules/nixos/homeassistant/services/esphome/printer.yaml
Normal file
@@ -0,0 +1,202 @@
|
|||||||
|
############################################################
|
||||||
|
# SmartDisplay – 3D Printer (Bambu P1P)
|
||||||
|
# Tiles: Status | Chamber Light | Pause | Cooling Fan | AMS | Stop
|
||||||
|
############################################################
|
||||||
|
|
||||||
|
substitutions:
|
||||||
|
|
||||||
|
DIRECT_ACTIONS: "true"
|
||||||
|
ROOM_NAME: "Printer"
|
||||||
|
TIME_24H: "false"
|
||||||
|
|
||||||
|
# ── TILE 1 – P1P Online / Force Refresh ─────────────────
|
||||||
|
TILE1_ENTITY: "button.p1p_01s00c371400147_force_refresh_data"
|
||||||
|
TILE1_STATE_ENTITY: "binary_sensor.p1p_01s00c371400147_online"
|
||||||
|
TILE1_TITLE: "P1P Status"
|
||||||
|
TILE1_ICON: "\U000F08F5"
|
||||||
|
TILE1_TYPE: "script"
|
||||||
|
TILE1_TAP_ACTION: "custom"
|
||||||
|
TILE1_LONGPRESS: "none"
|
||||||
|
TILE1_VALUE_MODE: "text"
|
||||||
|
TILE1_LABEL_OFF: "Offline"
|
||||||
|
TILE1_LABEL_ON: "Online"
|
||||||
|
TILE1_CIRCLE_ACTIVE_COLOR: "0x43A047"
|
||||||
|
TILE1_CIRCLE_DISABLED_COLOR: "0xE53935"
|
||||||
|
TILE1_ICON_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE1_ICON_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE1_BG_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE1_BG_DISABLED_COLOR: "0x939391"
|
||||||
|
TILE1_TITLE_ACTIVE_COLOR: "0x000000"
|
||||||
|
TILE1_TITLE_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE1_VALUE_ACTIVE_COLOR: "0x7A7A7C"
|
||||||
|
TILE1_VALUE_DISABLED_COLOR: "0xD9D9D9"
|
||||||
|
TILE1_TAP_SERVICE: "button.press"
|
||||||
|
TILE1_TAP_PARAM_KEY: ""
|
||||||
|
TILE1_TAP_PARAM_VAL: ""
|
||||||
|
TILE1_LONGPRESS_OFF_VALUE: "0"
|
||||||
|
|
||||||
|
# ── TILE 2 – Chamber Light ───────────────────────────────
|
||||||
|
TILE2_ENTITY: "light.p1p_01s00c371400147_chamber_light"
|
||||||
|
TILE2_STATE_ENTITY: "light.p1p_01s00c371400147_chamber_light"
|
||||||
|
TILE2_TITLE: "Chamber"
|
||||||
|
TILE2_ICON: "\U000F0A02"
|
||||||
|
TILE2_TYPE: "light"
|
||||||
|
TILE2_TAP_ACTION: "toggle"
|
||||||
|
TILE2_LONGPRESS: "none"
|
||||||
|
TILE2_VALUE_MODE: "text"
|
||||||
|
TILE2_LABEL_OFF: "Off"
|
||||||
|
TILE2_LABEL_ON: "On"
|
||||||
|
TILE2_CIRCLE_ACTIVE_COLOR: "0xFEC600"
|
||||||
|
TILE2_CIRCLE_DISABLED_COLOR: "0x7B7B6F"
|
||||||
|
TILE2_ICON_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE2_ICON_DISABLED_COLOR: "0xFEC600"
|
||||||
|
TILE2_BG_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE2_BG_DISABLED_COLOR: "0x939391"
|
||||||
|
TILE2_TITLE_ACTIVE_COLOR: "0x000000"
|
||||||
|
TILE2_TITLE_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE2_VALUE_ACTIVE_COLOR: "0x7A7A7C"
|
||||||
|
TILE2_VALUE_DISABLED_COLOR: "0xD9D9D9"
|
||||||
|
TILE2_TAP_SERVICE: ""
|
||||||
|
TILE2_TAP_PARAM_KEY: ""
|
||||||
|
TILE2_TAP_PARAM_VAL: ""
|
||||||
|
TILE2_LONGPRESS_OFF_VALUE: "0"
|
||||||
|
|
||||||
|
# ── TILE 3 – Pause Printing ──────────────────────────────
|
||||||
|
TILE3_ENTITY: "button.p1p_01s00c371400147_pause_printing"
|
||||||
|
TILE3_STATE_ENTITY: "binary_sensor.p1p_01s00c371400147_print_error"
|
||||||
|
TILE3_TITLE: "Pause"
|
||||||
|
TILE3_ICON: "\U000F03E4"
|
||||||
|
TILE3_TYPE: "script"
|
||||||
|
TILE3_TAP_ACTION: "custom"
|
||||||
|
TILE3_LONGPRESS: "none"
|
||||||
|
TILE3_VALUE_MODE: "text"
|
||||||
|
TILE3_LABEL_OFF: "Idle"
|
||||||
|
TILE3_LABEL_ON: "Error"
|
||||||
|
TILE3_CIRCLE_ACTIVE_COLOR: "0xE53935"
|
||||||
|
TILE3_CIRCLE_DISABLED_COLOR: "0x7B7B6F"
|
||||||
|
TILE3_ICON_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE3_ICON_DISABLED_COLOR: "0x7B7B6F"
|
||||||
|
TILE3_BG_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE3_BG_DISABLED_COLOR: "0x939391"
|
||||||
|
TILE3_TITLE_ACTIVE_COLOR: "0x000000"
|
||||||
|
TILE3_TITLE_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE3_VALUE_ACTIVE_COLOR: "0x7A7A7C"
|
||||||
|
TILE3_VALUE_DISABLED_COLOR: "0xD9D9D9"
|
||||||
|
TILE3_TAP_SERVICE: "button.press"
|
||||||
|
TILE3_TAP_PARAM_KEY: ""
|
||||||
|
TILE3_TAP_PARAM_VAL: ""
|
||||||
|
TILE3_LONGPRESS_OFF_VALUE: "0"
|
||||||
|
|
||||||
|
# ── TILE 4 – Cooling Fan ────────────────────────────────
|
||||||
|
TILE4_ENTITY: "fan.p1p_01s00c371400147_cooling_fan"
|
||||||
|
TILE4_STATE_ENTITY: "fan.p1p_01s00c371400147_cooling_fan"
|
||||||
|
TILE4_TITLE: "Cooling"
|
||||||
|
TILE4_ICON: "\U000F0210"
|
||||||
|
TILE4_TYPE: "fan"
|
||||||
|
TILE4_TAP_ACTION: "toggle"
|
||||||
|
TILE4_LONGPRESS: "auto"
|
||||||
|
TILE4_VALUE_MODE: "percentage"
|
||||||
|
TILE4_LABEL_OFF: "Off"
|
||||||
|
TILE4_LABEL_ON: "On"
|
||||||
|
TILE4_CIRCLE_ACTIVE_COLOR: "0x00C5EC"
|
||||||
|
TILE4_CIRCLE_DISABLED_COLOR: "0x7B7B6F"
|
||||||
|
TILE4_ICON_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE4_ICON_DISABLED_COLOR: "0x00C5EC"
|
||||||
|
TILE4_BG_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE4_BG_DISABLED_COLOR: "0x939391"
|
||||||
|
TILE4_TITLE_ACTIVE_COLOR: "0x000000"
|
||||||
|
TILE4_TITLE_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE4_VALUE_ACTIVE_COLOR: "0x7A7A7C"
|
||||||
|
TILE4_VALUE_DISABLED_COLOR: "0xD9D9D9"
|
||||||
|
TILE4_TAP_SERVICE: "fan.toggle"
|
||||||
|
TILE4_TAP_PARAM_KEY: ""
|
||||||
|
TILE4_TAP_PARAM_VAL: ""
|
||||||
|
TILE4_LONGPRESS_OFF_VALUE: "0"
|
||||||
|
|
||||||
|
# ── TILE 5 – AMS 1 Active ───────────────────────────────
|
||||||
|
TILE5_ENTITY: "button.p1p_01s00c371400147_force_refresh_data"
|
||||||
|
TILE5_STATE_ENTITY: "binary_sensor.p1p_01s00c371400147_ams_1_active"
|
||||||
|
TILE5_TITLE: "AMS"
|
||||||
|
TILE5_ICON: "\U000F01AE"
|
||||||
|
TILE5_TYPE: "script"
|
||||||
|
TILE5_TAP_ACTION: "custom"
|
||||||
|
TILE5_LONGPRESS: "none"
|
||||||
|
TILE5_VALUE_MODE: "text"
|
||||||
|
TILE5_LABEL_OFF: "Idle"
|
||||||
|
TILE5_LABEL_ON: "Active"
|
||||||
|
TILE5_CIRCLE_ACTIVE_COLOR: "0x8E24AA"
|
||||||
|
TILE5_CIRCLE_DISABLED_COLOR: "0x7B7B6F"
|
||||||
|
TILE5_ICON_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE5_ICON_DISABLED_COLOR: "0x8E24AA"
|
||||||
|
TILE5_BG_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE5_BG_DISABLED_COLOR: "0x939391"
|
||||||
|
TILE5_TITLE_ACTIVE_COLOR: "0x000000"
|
||||||
|
TILE5_TITLE_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE5_VALUE_ACTIVE_COLOR: "0x7A7A7C"
|
||||||
|
TILE5_VALUE_DISABLED_COLOR: "0xD9D9D9"
|
||||||
|
TILE5_TAP_SERVICE: "button.press"
|
||||||
|
TILE5_TAP_PARAM_KEY: ""
|
||||||
|
TILE5_TAP_PARAM_VAL: ""
|
||||||
|
TILE5_LONGPRESS_OFF_VALUE: "0"
|
||||||
|
|
||||||
|
# ── TILE 6 – Stop Printing (red accent) ─────────────────
|
||||||
|
TILE6_ENTITY: "button.p1p_01s00c371400147_stop_printing"
|
||||||
|
TILE6_STATE_ENTITY: "binary_sensor.p1p_01s00c371400147_online"
|
||||||
|
TILE6_TITLE: "Stop"
|
||||||
|
TILE6_ICON: "\U000F04DB"
|
||||||
|
TILE6_TYPE: "script"
|
||||||
|
TILE6_TAP_ACTION: "custom"
|
||||||
|
TILE6_LONGPRESS: "none"
|
||||||
|
TILE6_VALUE_MODE: "text"
|
||||||
|
TILE6_LABEL_OFF: "Offline"
|
||||||
|
TILE6_LABEL_ON: "Ready"
|
||||||
|
TILE6_CIRCLE_ACTIVE_COLOR: "0xE53935"
|
||||||
|
TILE6_CIRCLE_DISABLED_COLOR: "0x7B7B6F"
|
||||||
|
TILE6_ICON_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE6_ICON_DISABLED_COLOR: "0xE53935"
|
||||||
|
TILE6_BG_ACTIVE_COLOR: "0xFFFFFF"
|
||||||
|
TILE6_BG_DISABLED_COLOR: "0x939391"
|
||||||
|
TILE6_TITLE_ACTIVE_COLOR: "0x000000"
|
||||||
|
TILE6_TITLE_DISABLED_COLOR: "0xFFFFFF"
|
||||||
|
TILE6_VALUE_ACTIVE_COLOR: "0x7A7A7C"
|
||||||
|
TILE6_VALUE_DISABLED_COLOR: "0xD9D9D9"
|
||||||
|
TILE6_TAP_SERVICE: "button.press"
|
||||||
|
TILE6_TAP_PARAM_KEY: ""
|
||||||
|
TILE6_TAP_PARAM_VAL: ""
|
||||||
|
TILE6_LONGPRESS_OFF_VALUE: "0"
|
||||||
|
|
||||||
|
packages:
|
||||||
|
hw: !include cyd-base-hw.yaml
|
||||||
|
ui: !include cyd-base-ui.yaml
|
||||||
|
|
||||||
|
esphome:
|
||||||
|
name: printer-display
|
||||||
|
friendly_name: PrinterDisplay
|
||||||
|
on_boot:
|
||||||
|
priority: 600
|
||||||
|
then:
|
||||||
|
- script.execute: ui_refresh
|
||||||
|
|
||||||
|
esp32:
|
||||||
|
board: esp32dev
|
||||||
|
framework:
|
||||||
|
type: arduino
|
||||||
|
|
||||||
|
logger:
|
||||||
|
|
||||||
|
api:
|
||||||
|
encryption:
|
||||||
|
key: !secret api_encryption_key
|
||||||
|
|
||||||
|
ota:
|
||||||
|
- platform: esphome
|
||||||
|
password: !secret ota_password
|
||||||
|
|
||||||
|
wifi:
|
||||||
|
ssid: !secret wifi_ssid
|
||||||
|
password: !secret wifi_password
|
||||||
|
ap:
|
||||||
|
ssid: "PrinterDisplay Fallback"
|
||||||
|
password: !secret ota_password
|
||||||
|
|
||||||
|
captive_portal:
|
||||||
@@ -45,7 +45,7 @@ let
|
|||||||
discoveryURL = "https://authentik.mjallen.dev/application/o/actual/.well-known/openid-configuration";
|
discoveryURL = "https://authentik.mjallen.dev/application/o/actual/.well-known/openid-configuration";
|
||||||
client_id._secret = config.sops.secrets."jallen-nas/actual/client-id".path;
|
client_id._secret = config.sops.secrets."jallen-nas/actual/client-id".path;
|
||||||
client_secret._secret = config.sops.secrets."jallen-nas/actual/client-secret".path;
|
client_secret._secret = config.sops.secrets."jallen-nas/actual/client-secret".path;
|
||||||
server_hostname = "https://authentik.mjallen.dev";
|
server_hostname = "https://actual.mjallen.dev";
|
||||||
authMethod = "openid";
|
authMethod = "openid";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -13,14 +13,14 @@ let
|
|||||||
|
|
||||||
cfg = config.${namespace}.services.ai;
|
cfg = config.${namespace}.services.ai;
|
||||||
|
|
||||||
ntfyModelFailScript = pkgs.writeShellScript "update-qwen-model-notify-failure" ''
|
ntfyModelFailScript = pkgs.writeShellScript "update-gemma-model-notify-failure" ''
|
||||||
HOST="$(${pkgs.hostname}/bin/hostname)"
|
HOST="$(${pkgs.hostname}/bin/hostname)"
|
||||||
${pkgs.curl}/bin/curl -sf \
|
${pkgs.curl}/bin/curl -sf \
|
||||||
--user "$NTFY_USER:$NTFY_PASSWORD" \
|
--user "$NTFY_USER:$NTFY_PASSWORD" \
|
||||||
-H "Title: Qwen model update FAILED on $HOST" \
|
-H "Title: Gemma model update FAILED on $HOST" \
|
||||||
-H "Priority: high" \
|
-H "Priority: high" \
|
||||||
-H "Tags: rotating_light,robot_face" \
|
-H "Tags: rotating_light,robot_face" \
|
||||||
-d "The daily update-qwen-model job failed. Check: journalctl -u update-qwen-model.service" \
|
-d "The daily update-gemma-model job failed. Check: journalctl -u update-gemma-model.service" \
|
||||||
"https://ntfy.mjallen.dev/builds" || true
|
"https://ntfy.mjallen.dev/builds" || true
|
||||||
'';
|
'';
|
||||||
|
|
||||||
@@ -30,10 +30,7 @@ let
|
|||||||
description = "AI Services";
|
description = "AI Services";
|
||||||
options = {
|
options = {
|
||||||
llama-cpp = {
|
llama-cpp = {
|
||||||
model =
|
model = mkOpt types.str "gemma-4-26B-A4B-it-UD-Q8_K_XL" "";
|
||||||
mkOpt types.str
|
|
||||||
"models--unsloth--gemma-4-26B-A4B-it-GGUF/snapshots/b8654b48d979f2853b7a81d6541ca64eea7dc3c5/gemma-4-26B-A4B-it-UD-Q8_K_XL"
|
|
||||||
"";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
moduleConfig = {
|
moduleConfig = {
|
||||||
@@ -59,21 +56,17 @@ let
|
|||||||
model = "${cfg.configDir}/llama-cpp/models/${cfg.llama-cpp.model}.gguf";
|
model = "${cfg.configDir}/llama-cpp/models/${cfg.llama-cpp.model}.gguf";
|
||||||
package = inputs.llama-cpp.packages.${system}.rocm;
|
package = inputs.llama-cpp.packages.${system}.rocm;
|
||||||
extraFlags = [
|
extraFlags = [
|
||||||
"--fit"
|
|
||||||
"on"
|
|
||||||
"--seed"
|
|
||||||
"3407"
|
|
||||||
"--temp"
|
|
||||||
"0.7"
|
|
||||||
"--top-p"
|
|
||||||
"0.9"
|
|
||||||
"--min-p"
|
|
||||||
"0.05"
|
|
||||||
"--top-k"
|
|
||||||
"30"
|
|
||||||
"--jinja"
|
"--jinja"
|
||||||
|
"--chat-template-kwargs"
|
||||||
|
"{\"enable_thinking\":true}"
|
||||||
|
"--temp"
|
||||||
|
"1.0"
|
||||||
|
"--top-p"
|
||||||
|
"0.95"
|
||||||
|
"--top-k"
|
||||||
|
"64"
|
||||||
"--ctx-size"
|
"--ctx-size"
|
||||||
"131072"
|
"32768"
|
||||||
"--threads"
|
"--threads"
|
||||||
"8"
|
"8"
|
||||||
"--batch-size"
|
"--batch-size"
|
||||||
@@ -81,7 +74,7 @@ let
|
|||||||
"--gpu-layers"
|
"--gpu-layers"
|
||||||
"999"
|
"999"
|
||||||
"--flash-attn"
|
"--flash-attn"
|
||||||
"auto"
|
"on"
|
||||||
"--mlock"
|
"--mlock"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
@@ -120,16 +113,16 @@ let
|
|||||||
# Systemd service for automatic model updates
|
# Systemd service for automatic model updates
|
||||||
systemd = {
|
systemd = {
|
||||||
services = {
|
services = {
|
||||||
update-qwen-model = {
|
update-gemma-model = {
|
||||||
description = "Update Qwen3-Coder-Next model from HuggingFace";
|
description = "Update Gemma 4 model from HuggingFace";
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
Type = "oneshot";
|
Type = "oneshot";
|
||||||
ExecStart = "${pkgs.writeShellScript "update-qwen-model" ''
|
ExecStart = "${pkgs.writeShellScript "update-gemma-model" ''
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
MODEL_DIR="${cfg.configDir}/llama-cpp/models"
|
MODEL_DIR="${cfg.configDir}/llama-cpp/models"
|
||||||
MODEL_NAME="${cfg.llama-cpp.model}.gguf"
|
MODEL_NAME="${cfg.llama-cpp.model}.gguf"
|
||||||
REPO_ID="unsloth/Qwen3-Coder-Next-GGUF"
|
REPO_ID="unsloth/gemma-4-26B-A4B-it-GGUF"
|
||||||
|
|
||||||
# Create model directory if it doesn't exist
|
# Create model directory if it doesn't exist
|
||||||
mkdir -p "$MODEL_DIR"
|
mkdir -p "$MODEL_DIR"
|
||||||
@@ -147,13 +140,13 @@ let
|
|||||||
Group = "jallen-nas";
|
Group = "jallen-nas";
|
||||||
EnvironmentFile = [ config.sops.templates."ntfy.env".path ];
|
EnvironmentFile = [ config.sops.templates."ntfy.env".path ];
|
||||||
};
|
};
|
||||||
unitConfig.OnFailure = "update-qwen-model-notify-failure.service";
|
unitConfig.OnFailure = "update-gemma-model-notify-failure.service";
|
||||||
# Run daily at 3 AM
|
# Run daily at 3 AM
|
||||||
startAt = "*-*-* 03:00:00";
|
startAt = "*-*-* 03:00:00";
|
||||||
};
|
};
|
||||||
|
|
||||||
update-qwen-model-notify-failure = {
|
update-gemma-model-notify-failure = {
|
||||||
description = "Notify ntfy on update-qwen-model failure";
|
description = "Notify ntfy on update-gemma-model failure";
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
Type = "oneshot";
|
Type = "oneshot";
|
||||||
ExecStart = "${ntfyModelFailScript}";
|
ExecStart = "${ntfyModelFailScript}";
|
||||||
@@ -163,8 +156,8 @@ let
|
|||||||
|
|
||||||
# Ensure model is available before llama-cpp starts
|
# Ensure model is available before llama-cpp starts
|
||||||
llama-cpp = {
|
llama-cpp = {
|
||||||
after = [ "update-qwen-model.service" ];
|
after = [ "update-gemma-model.service" ];
|
||||||
wants = [ "update-qwen-model.service" ];
|
wants = [ "update-gemma-model.service" ];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user