cyd
This commit is contained in:
@@ -37,8 +37,8 @@ in
|
||||
baseURL = "http://${net.hosts.nas.lan}:${toString net.ports.nas.llamaCpp}/v1";
|
||||
};
|
||||
models = {
|
||||
Qwen3-Coder-Next-Q4_0 = {
|
||||
name = "Qwen3 Coder (local)";
|
||||
"gemma-4-26B-A4B-it-UD-Q8_K_XL" = {
|
||||
name = "Gemma 4 26B-A4B (local)";
|
||||
modalities = {
|
||||
input = [
|
||||
"image"
|
||||
@@ -47,8 +47,8 @@ in
|
||||
output = [ "text" ];
|
||||
};
|
||||
limit = {
|
||||
context = 131072;
|
||||
output = 32768;
|
||||
context = 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";
|
||||
client_id._secret = config.sops.secrets."jallen-nas/actual/client-id".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";
|
||||
};
|
||||
};
|
||||
|
||||
@@ -13,14 +13,14 @@ let
|
||||
|
||||
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)"
|
||||
${pkgs.curl}/bin/curl -sf \
|
||||
--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 "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
|
||||
'';
|
||||
|
||||
@@ -30,10 +30,7 @@ let
|
||||
description = "AI Services";
|
||||
options = {
|
||||
llama-cpp = {
|
||||
model =
|
||||
mkOpt types.str
|
||||
"models--unsloth--gemma-4-26B-A4B-it-GGUF/snapshots/b8654b48d979f2853b7a81d6541ca64eea7dc3c5/gemma-4-26B-A4B-it-UD-Q8_K_XL"
|
||||
"";
|
||||
model = mkOpt types.str "gemma-4-26B-A4B-it-UD-Q8_K_XL" "";
|
||||
};
|
||||
};
|
||||
moduleConfig = {
|
||||
@@ -59,21 +56,17 @@ let
|
||||
model = "${cfg.configDir}/llama-cpp/models/${cfg.llama-cpp.model}.gguf";
|
||||
package = inputs.llama-cpp.packages.${system}.rocm;
|
||||
extraFlags = [
|
||||
"--fit"
|
||||
"on"
|
||||
"--seed"
|
||||
"3407"
|
||||
"--temp"
|
||||
"0.7"
|
||||
"--top-p"
|
||||
"0.9"
|
||||
"--min-p"
|
||||
"0.05"
|
||||
"--top-k"
|
||||
"30"
|
||||
"--jinja"
|
||||
"--chat-template-kwargs"
|
||||
"{\"enable_thinking\":true}"
|
||||
"--temp"
|
||||
"1.0"
|
||||
"--top-p"
|
||||
"0.95"
|
||||
"--top-k"
|
||||
"64"
|
||||
"--ctx-size"
|
||||
"131072"
|
||||
"32768"
|
||||
"--threads"
|
||||
"8"
|
||||
"--batch-size"
|
||||
@@ -81,7 +74,7 @@ let
|
||||
"--gpu-layers"
|
||||
"999"
|
||||
"--flash-attn"
|
||||
"auto"
|
||||
"on"
|
||||
"--mlock"
|
||||
];
|
||||
};
|
||||
@@ -120,16 +113,16 @@ let
|
||||
# Systemd service for automatic model updates
|
||||
systemd = {
|
||||
services = {
|
||||
update-qwen-model = {
|
||||
description = "Update Qwen3-Coder-Next model from HuggingFace";
|
||||
update-gemma-model = {
|
||||
description = "Update Gemma 4 model from HuggingFace";
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
ExecStart = "${pkgs.writeShellScript "update-qwen-model" ''
|
||||
ExecStart = "${pkgs.writeShellScript "update-gemma-model" ''
|
||||
set -euo pipefail
|
||||
|
||||
MODEL_DIR="${cfg.configDir}/llama-cpp/models"
|
||||
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
|
||||
mkdir -p "$MODEL_DIR"
|
||||
@@ -147,13 +140,13 @@ let
|
||||
Group = "jallen-nas";
|
||||
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
|
||||
startAt = "*-*-* 03:00:00";
|
||||
};
|
||||
|
||||
update-qwen-model-notify-failure = {
|
||||
description = "Notify ntfy on update-qwen-model failure";
|
||||
update-gemma-model-notify-failure = {
|
||||
description = "Notify ntfy on update-gemma-model failure";
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
ExecStart = "${ntfyModelFailScript}";
|
||||
@@ -163,8 +156,8 @@ let
|
||||
|
||||
# Ensure model is available before llama-cpp starts
|
||||
llama-cpp = {
|
||||
after = [ "update-qwen-model.service" ];
|
||||
wants = [ "update-qwen-model.service" ];
|
||||
after = [ "update-gemma-model.service" ];
|
||||
wants = [ "update-gemma-model.service" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user