feat(yoga14): remote control, app management, install script
- Add keycode module: G7BTS Rii remote control support (evdev, auto-reconnect) - Add key bindings: single/double press detection with configurable window - KEY_HOMEPAGE: single=VacuumTube, double=LiveboxTV - KEY_OK: inject Enter keypress via ydotool - KEY_PAGEUP/DOWN: LiveboxTV channel navigation - Add M3U parser and channel selector for LiveboxTV (51 channels) - Add volume entity (wpctl/PipeWire, 2s polling) - Add app management: vacuum_tube, livebox_tv (start/stop/state via MQTT) - Add grace period to prevent app state bounce after stop - Fix screen ON via GNOME busctl: add SimulateUserActivity - Fix power commands: trigger on ON, publish OFF immediately (momentary buttons) - Disable GPU temp/usage entities - Add install script: build, deploy to ~/pilot, systemd user service - Fix service startup: WantedBy=graphical-session.target (full GNOME env at launch) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,28 +1,25 @@
|
||||
# Codex created 2025-12-29_0224
|
||||
# Configuration Pilot v2 - yoga14 (Lenovo Yoga)
|
||||
# Hostname auto-detecte: yoga14
|
||||
|
||||
device:
|
||||
name: $hostname
|
||||
identifiers: ["$hostname"]
|
||||
manufacturer: "Asus"
|
||||
model: "Laptop"
|
||||
manufacturer: "Lenovo"
|
||||
model: "Yoga 14"
|
||||
sw_version: "2.0.0"
|
||||
suggested_area: "Bureau"
|
||||
|
||||
mqtt:
|
||||
host: "10.0.0.3"
|
||||
host: "10.0.0.3" # <- adresse de ton serveur Home Assistant / broker Mosquitto
|
||||
port: 1883
|
||||
username: ""
|
||||
username: "" # <- si authentification activee sur Mosquitto
|
||||
password: ""
|
||||
base_topic: "pilot"
|
||||
discovery_prefix: "homeassistant"
|
||||
client_id: "$hostname"
|
||||
keepalive_s: 60
|
||||
qos: 0
|
||||
qos: 1
|
||||
retain_states: true
|
||||
reconnect:
|
||||
attempts: 3
|
||||
retry_delay_s: 1
|
||||
short_wait_s: 60
|
||||
long_wait_s: 3600
|
||||
|
||||
features:
|
||||
telemetry:
|
||||
@@ -38,33 +35,13 @@ features:
|
||||
device_class: ""
|
||||
icon: "mdi:chip"
|
||||
state_class: "measurement"
|
||||
pilot_v2_cpu_usage:
|
||||
enabled: true
|
||||
discovery_enabled: true
|
||||
interval_s: 10
|
||||
name: "Pilot V2 CPU Usage"
|
||||
unique_id: "$hostname_pilot_v2_cpu_usage"
|
||||
unit: "%"
|
||||
device_class: ""
|
||||
icon: "mdi:apps"
|
||||
state_class: "measurement"
|
||||
pilot_v2_mem_used_mb:
|
||||
enabled: true
|
||||
discovery_enabled: true
|
||||
interval_s: 10
|
||||
name: "Pilot V2 Memory Used"
|
||||
unique_id: "$hostname_pilot_v2_mem_used_mb"
|
||||
unit: "MB"
|
||||
device_class: ""
|
||||
icon: "mdi:memory"
|
||||
state_class: "measurement"
|
||||
cpu_temp_c:
|
||||
enabled: true
|
||||
discovery_enabled: true
|
||||
interval_s: 30
|
||||
interval_s: 10
|
||||
name: "CPU Temp"
|
||||
unique_id: "$hostname_cpu_temp"
|
||||
unit: "°C"
|
||||
unit: "C"
|
||||
device_class: "temperature"
|
||||
icon: "mdi:thermometer"
|
||||
state_class: "measurement"
|
||||
@@ -74,114 +51,35 @@ features:
|
||||
interval_s: 60
|
||||
name: "SSD Temp"
|
||||
unique_id: "$hostname_ssd_temp"
|
||||
unit: "°C"
|
||||
unit: "C"
|
||||
device_class: "temperature"
|
||||
icon: "mdi:thermometer"
|
||||
state_class: "measurement"
|
||||
gpu_usage:
|
||||
enabled: true
|
||||
discovery_enabled: true
|
||||
# GPU integre AMD (desactive - donnees non fiables sur ce modele)
|
||||
amd_gpu_usage:
|
||||
enabled: false
|
||||
discovery_enabled: false
|
||||
interval_s: 10
|
||||
name: "GPU Usage"
|
||||
unique_id: "$hostname_gpu_usage"
|
||||
unit: "%"
|
||||
device_class: ""
|
||||
icon: "mdi:expansion-card"
|
||||
state_class: "measurement"
|
||||
gpu0_usage:
|
||||
enabled: true
|
||||
discovery_enabled: true
|
||||
interval_s: 10
|
||||
name: "GPU0 Usage"
|
||||
unique_id: "$hostname_gpu0_usage"
|
||||
unit: "%"
|
||||
device_class: ""
|
||||
icon: "mdi:expansion-card"
|
||||
state_class: "measurement"
|
||||
gpu1_usage:
|
||||
enabled: true
|
||||
discovery_enabled: true
|
||||
interval_s: 10
|
||||
name: "GPU1 Usage"
|
||||
unique_id: "$hostname_gpu1_usage"
|
||||
unit: "%"
|
||||
device_class: ""
|
||||
icon: "mdi:expansion-card"
|
||||
state_class: "measurement"
|
||||
gpu0_temp_c:
|
||||
enabled: true
|
||||
discovery_enabled: true
|
||||
interval_s: 30
|
||||
name: "GPU0 Temp"
|
||||
unique_id: "$hostname_gpu0_temp"
|
||||
unit: "°C"
|
||||
device_class: "temperature"
|
||||
icon: "mdi:thermometer"
|
||||
state_class: "measurement"
|
||||
gpu1_temp_c:
|
||||
enabled: true
|
||||
discovery_enabled: true
|
||||
interval_s: 30
|
||||
name: "GPU1 Temp"
|
||||
unique_id: "$hostname_gpu1_temp"
|
||||
unit: "°C"
|
||||
device_class: "temperature"
|
||||
icon: "mdi:thermometer"
|
||||
state_class: "measurement"
|
||||
gpu0_mem_used_gb:
|
||||
enabled: true
|
||||
discovery_enabled: true
|
||||
interval_s: 10
|
||||
name: "GPU0 Memory Used"
|
||||
unique_id: "$hostname_gpu0_mem_used"
|
||||
unit: "GB"
|
||||
device_class: ""
|
||||
icon: "mdi:memory"
|
||||
state_class: "measurement"
|
||||
gpu1_mem_used_gb:
|
||||
enabled: true
|
||||
discovery_enabled: true
|
||||
interval_s: 10
|
||||
name: "GPU1 Memory Used"
|
||||
unique_id: "$hostname_gpu1_mem_used"
|
||||
unit: "GB"
|
||||
device_class: ""
|
||||
icon: "mdi:memory"
|
||||
state_class: "measurement"
|
||||
amd_gpu_usage:
|
||||
enabled: true
|
||||
discovery_enabled: true
|
||||
interval_s: 10
|
||||
name: "AMD GPU Usage"
|
||||
unique_id: "$hostname_amd_gpu_usage"
|
||||
unit: "%"
|
||||
device_class: ""
|
||||
icon: "mdi:expansion-card"
|
||||
icon: "mdi:gpu"
|
||||
state_class: "measurement"
|
||||
amd_gpu_temp_c:
|
||||
enabled: true
|
||||
discovery_enabled: true
|
||||
interval_s: 30
|
||||
name: "AMD GPU Temp"
|
||||
enabled: false
|
||||
discovery_enabled: false
|
||||
interval_s: 10
|
||||
name: "GPU Temp"
|
||||
unique_id: "$hostname_amd_gpu_temp"
|
||||
unit: "°C"
|
||||
unit: "C"
|
||||
device_class: "temperature"
|
||||
icon: "mdi:thermometer"
|
||||
state_class: "measurement"
|
||||
amd_gpu_mem_used_gb:
|
||||
enabled: true
|
||||
discovery_enabled: true
|
||||
interval_s: 10
|
||||
name: "AMD GPU Memory Used"
|
||||
unique_id: "$hostname_amd_gpu_mem_used"
|
||||
unit: "GB"
|
||||
device_class: ""
|
||||
icon: "mdi:memory"
|
||||
state_class: "measurement"
|
||||
memory_used_gb:
|
||||
enabled: true
|
||||
discovery_enabled: true
|
||||
interval_s: 20
|
||||
interval_s: 10
|
||||
name: "Memory Used"
|
||||
unique_id: "$hostname_memory_used"
|
||||
unit: "GB"
|
||||
@@ -191,7 +89,7 @@ features:
|
||||
memory_total_gb:
|
||||
enabled: true
|
||||
discovery_enabled: true
|
||||
interval_s: 240
|
||||
interval_s: 3600
|
||||
name: "Memory Total"
|
||||
unique_id: "$hostname_memory_total"
|
||||
unit: "GB"
|
||||
@@ -201,47 +99,27 @@ features:
|
||||
disk_free_gb:
|
||||
enabled: true
|
||||
discovery_enabled: true
|
||||
interval_s: 240
|
||||
interval_s: 120
|
||||
name: "Disk Free"
|
||||
unique_id: "$hostname_disk_free"
|
||||
unit: "GB"
|
||||
device_class: ""
|
||||
icon: "mdi:harddisk"
|
||||
state_class: "measurement"
|
||||
fan_cpu_rpm:
|
||||
enabled: true
|
||||
discovery_enabled: true
|
||||
interval_s: 23
|
||||
name: "CPU Fan"
|
||||
unique_id: "$hostname_fan_cpu"
|
||||
unit: "RPM"
|
||||
device_class: ""
|
||||
icon: "mdi:fan"
|
||||
state_class: "measurement"
|
||||
fan_gpu_rpm:
|
||||
enabled: true
|
||||
discovery_enabled: true
|
||||
interval_s: 23
|
||||
name: "GPU Fan"
|
||||
unique_id: "$hostname_fan_gpu"
|
||||
unit: "RPM"
|
||||
device_class: ""
|
||||
icon: "mdi:fan"
|
||||
state_class: "measurement"
|
||||
ip_address:
|
||||
enabled: true
|
||||
discovery_enabled: true
|
||||
interval_s: 1200
|
||||
interval_s: 120
|
||||
name: "IP Address"
|
||||
unique_id: "$hostname_ip"
|
||||
unit: ""
|
||||
device_class: ""
|
||||
icon: "mdi:ip-network"
|
||||
icon: "mdi:ip"
|
||||
state_class: ""
|
||||
battery_level:
|
||||
enabled: true
|
||||
discovery_enabled: true
|
||||
interval_s: 240
|
||||
interval_s: 60
|
||||
name: "Battery Level"
|
||||
unique_id: "$hostname_battery_level"
|
||||
unit: "%"
|
||||
@@ -251,7 +129,7 @@ features:
|
||||
battery_state:
|
||||
enabled: true
|
||||
discovery_enabled: true
|
||||
interval_s: 240
|
||||
interval_s: 60
|
||||
name: "Battery State"
|
||||
unique_id: "$hostname_battery_state"
|
||||
unit: ""
|
||||
@@ -261,7 +139,7 @@ features:
|
||||
power_state:
|
||||
enabled: true
|
||||
discovery_enabled: true
|
||||
interval_s: 240
|
||||
interval_s: 60
|
||||
name: "Power State"
|
||||
unique_id: "$hostname_power_state"
|
||||
unit: ""
|
||||
@@ -271,7 +149,7 @@ features:
|
||||
kernel:
|
||||
enabled: true
|
||||
discovery_enabled: true
|
||||
interval_s: 14400
|
||||
interval_s: 7200
|
||||
name: "Kernel"
|
||||
unique_id: "$hostname_kernel"
|
||||
unit: ""
|
||||
@@ -281,32 +159,103 @@ features:
|
||||
os_version:
|
||||
enabled: true
|
||||
discovery_enabled: true
|
||||
interval_s: 14400
|
||||
interval_s: 7200
|
||||
name: "OS Version"
|
||||
unique_id: "$hostname_os_version"
|
||||
unit: ""
|
||||
device_class: ""
|
||||
icon: "mdi:monitor"
|
||||
icon: "mdi:desktop-classic"
|
||||
state_class: ""
|
||||
volume_level:
|
||||
enabled: true
|
||||
discovery_enabled: true
|
||||
interval_s: 30
|
||||
name: "Volume Level"
|
||||
unique_id: "$hostname_volume_level"
|
||||
unit: "%"
|
||||
device_class: ""
|
||||
icon: "mdi:volume-high"
|
||||
state_class: "measurement"
|
||||
commands:
|
||||
enabled: true
|
||||
cooldown_s: 5
|
||||
dry_run: false # true = simule les commandes sans les executer
|
||||
allowlist: ["shutdown", "reboot", "sleep", "screen"]
|
||||
dry_run: false
|
||||
allowlist:
|
||||
- "shutdown"
|
||||
- "reboot"
|
||||
- "sleep"
|
||||
- "hibernate"
|
||||
- "screen"
|
||||
- "volume"
|
||||
- "system_update"
|
||||
- "inhibit_sleep"
|
||||
- "app_vacuum_tube"
|
||||
- "app_livebox_tv"
|
||||
- "bluetooth_k3pro"
|
||||
- "bluetooth_g7bts"
|
||||
- "livebox_tv_channel"
|
||||
|
||||
power_backend:
|
||||
linux: "linux_logind_polkit" # or linux_sudoers
|
||||
linux: "linux_logind_polkit"
|
||||
windows: "windows_service"
|
||||
|
||||
screen_backend:
|
||||
linux: "x11_xset" #"gnome_busctl" # or "x11_xset"
|
||||
windows: "winapi_session" # or external_tool
|
||||
linux: "gnome_busctl" # si pas GNOME: x11_xset
|
||||
windows: "winapi_session"
|
||||
|
||||
publish:
|
||||
heartbeat_s: 30
|
||||
availability: true
|
||||
|
||||
apps:
|
||||
- name: "vacuum_tube"
|
||||
display_name: "VacuumTube"
|
||||
enabled: true
|
||||
start_cmd: "flatpak"
|
||||
start_args: ["run", "--device=dri", "rocks.shy.VacuumTube"]
|
||||
process_check: "vacuumtube"
|
||||
- name: "livebox_tv"
|
||||
display_name: "Livebox TV"
|
||||
enabled: true
|
||||
start_cmd: "vlc"
|
||||
start_args:
|
||||
- "--fullscreen"
|
||||
- "--network-caching=1000"
|
||||
- "../iptv/france_tv.m3u"
|
||||
process_check: "vlc"
|
||||
channels_m3u: "../iptv/france_tv.m3u"
|
||||
channel_next_key: "KEY_PAGEUP"
|
||||
channel_prev_key: "KEY_PAGEDOWN"
|
||||
|
||||
bluetooth:
|
||||
enabled: true
|
||||
devices:
|
||||
- name: "k3pro"
|
||||
mac: "F1:B7:7F:BC:7B:00"
|
||||
display_name: "ThinkPlus K3 Pro"
|
||||
- name: "g7bts"
|
||||
mac: "AA:23:02:16:32:6F"
|
||||
display_name: "Rii G7BTS"
|
||||
|
||||
paths:
|
||||
linux_config: "/etc/pilot/config.yaml"
|
||||
windows_config: "C:\\ProgramData\\Pilot\\config.yaml"
|
||||
# Codex modified 2025-12-29_0224
|
||||
|
||||
# Lecture des touches clavier/telecommande via evdev
|
||||
# Necessite: utilisateur dans le groupe 'input' (sudo usermod -aG input $USER)
|
||||
# Pour trouver le device: ls -la /dev/input/by-id/ apres connexion de la telecommande
|
||||
keycodes:
|
||||
enabled: true
|
||||
devices:
|
||||
- "G7BTS Keyboard" # nom tel qu'il apparait dans /sys/class/input/*/device/name
|
||||
|
||||
# Liaisons touches → actions (simple / double appui)
|
||||
key_bindings:
|
||||
enabled: true
|
||||
bindings:
|
||||
- key: "KEY_HOMEPAGE"
|
||||
single_press: "vacuum_tube" # appui simple → toggle VacuumTube
|
||||
double_press: "livebox_tv" # double appui → toggle LiveboxTV
|
||||
double_press_ms: 400 # fenetre de detection en ms
|
||||
- key: "KEY_OK"
|
||||
single_press: "key:28" # touche OK → injecte Enter (code 28) via ydotool
|
||||
|
||||
Reference in New Issue
Block a user