Files
pilot/pilot-v2/config.yaml
gilles soulier ffabf65b35 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>
2026-03-15 17:16:12 +01:00

262 lines
6.8 KiB
YAML

# Configuration Pilot v2 - yoga14 (Lenovo Yoga)
# Hostname auto-detecte: yoga14
device:
name: $hostname
identifiers: ["$hostname"]
manufacturer: "Lenovo"
model: "Yoga 14"
sw_version: "2.0.0"
suggested_area: "Bureau"
mqtt:
host: "10.0.0.3" # <- adresse de ton serveur Home Assistant / broker Mosquitto
port: 1883
username: "" # <- si authentification activee sur Mosquitto
password: ""
base_topic: "pilot"
discovery_prefix: "homeassistant"
client_id: "$hostname"
keepalive_s: 60
qos: 1
retain_states: true
features:
telemetry:
enabled: true
metrics:
cpu_usage:
enabled: true
discovery_enabled: true
interval_s: 10
name: "CPU Usage"
unique_id: "$hostname_cpu_usage"
unit: "%"
device_class: ""
icon: "mdi:chip"
state_class: "measurement"
cpu_temp_c:
enabled: true
discovery_enabled: true
interval_s: 10
name: "CPU Temp"
unique_id: "$hostname_cpu_temp"
unit: "C"
device_class: "temperature"
icon: "mdi:thermometer"
state_class: "measurement"
ssd_temp_c:
enabled: true
discovery_enabled: true
interval_s: 60
name: "SSD Temp"
unique_id: "$hostname_ssd_temp"
unit: "C"
device_class: "temperature"
icon: "mdi:thermometer"
state_class: "measurement"
# 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_amd_gpu_usage"
unit: "%"
device_class: ""
icon: "mdi:gpu"
state_class: "measurement"
amd_gpu_temp_c:
enabled: false
discovery_enabled: false
interval_s: 10
name: "GPU Temp"
unique_id: "$hostname_amd_gpu_temp"
unit: "C"
device_class: "temperature"
icon: "mdi:thermometer"
state_class: "measurement"
memory_used_gb:
enabled: true
discovery_enabled: true
interval_s: 10
name: "Memory Used"
unique_id: "$hostname_memory_used"
unit: "GB"
device_class: ""
icon: "mdi:memory"
state_class: "measurement"
memory_total_gb:
enabled: true
discovery_enabled: true
interval_s: 3600
name: "Memory Total"
unique_id: "$hostname_memory_total"
unit: "GB"
device_class: ""
icon: "mdi:memory"
state_class: ""
disk_free_gb:
enabled: true
discovery_enabled: true
interval_s: 120
name: "Disk Free"
unique_id: "$hostname_disk_free"
unit: "GB"
device_class: ""
icon: "mdi:harddisk"
state_class: "measurement"
ip_address:
enabled: true
discovery_enabled: true
interval_s: 120
name: "IP Address"
unique_id: "$hostname_ip"
unit: ""
device_class: ""
icon: "mdi:ip"
state_class: ""
battery_level:
enabled: true
discovery_enabled: true
interval_s: 60
name: "Battery Level"
unique_id: "$hostname_battery_level"
unit: "%"
device_class: "battery"
icon: "mdi:battery"
state_class: "measurement"
battery_state:
enabled: true
discovery_enabled: true
interval_s: 60
name: "Battery State"
unique_id: "$hostname_battery_state"
unit: ""
device_class: ""
icon: "mdi:battery-charging"
state_class: ""
power_state:
enabled: true
discovery_enabled: true
interval_s: 60
name: "Power State"
unique_id: "$hostname_power_state"
unit: ""
device_class: ""
icon: "mdi:power"
state_class: ""
kernel:
enabled: true
discovery_enabled: true
interval_s: 7200
name: "Kernel"
unique_id: "$hostname_kernel"
unit: ""
device_class: ""
icon: "mdi:linux"
state_class: ""
os_version:
enabled: true
discovery_enabled: true
interval_s: 7200
name: "OS Version"
unique_id: "$hostname_os_version"
unit: ""
device_class: ""
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
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"
windows: "windows_service"
screen_backend:
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"
# 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