<feed xmlns='http://www.w3.org/2005/Atom'>
<title>luke/ansible-roles/doorbell-viewport/files/doorbell-viewport.py, branch main</title>
<subtitle>Ansible roles for nth.io infrastructure
</subtitle>
<id>https://src.nth.io/luke/ansible-roles/atom?h=main</id>
<link rel='self' href='https://src.nth.io/luke/ansible-roles/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/'/>
<updated>2026-04-16T01:00:04+00:00</updated>
<entry>
<title>Rename doorbell-viewport role to unifi-protect-viewport</title>
<updated>2026-04-16T01:00:04+00:00</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-04-16T01:00:04+00:00</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/commit/?id=4ec792319b0cc9ab9aa3410c454f4880515c62c0'/>
<id>urn:sha1:4ec792319b0cc9ab9aa3410c454f4880515c62c0</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Minor daemon cleanup: drop inspect shim, module-level SSL ctx, rename ws_headers</title>
<updated>2026-04-14T13:58:01+00:00</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-04-14T13:58:01+00:00</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/commit/?id=7126fdb4e4d481a66d05cf5ab2ed56176b8a9eb6'/>
<id>urn:sha1:7126fdb4e4d481a66d05cf5ab2ed56176b8a9eb6</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Further simplify doorbell-viewport daemon</title>
<updated>2026-04-14T13:55:44+00:00</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-04-14T13:55:44+00:00</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/commit/?id=c543eb2092c74d33156def8ae0dcdf693f7d7f9a'/>
<id>urn:sha1:c543eb2092c74d33156def8ae0dcdf693f7d7f9a</id>
<content type='text'>
- Flatten DisplayController: remove _set() middle layer
- Inline on_ring() into _handle_protect_event (was a 2-line wrapper)
- Collapse triggered flag in touch monitor to single boolean expression
</content>
</entry>
<entry>
<title>Remove vcgencmd display backend, simplify DisplayController</title>
<updated>2026-04-13T12:45:07+00:00</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-04-13T12:45:07+00:00</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/commit/?id=c1bd1d0f3abe8d4de65f2c95731711a6efa3008d'/>
<id>urn:sha1:c1bd1d0f3abe8d4de65f2c95731711a6efa3008d</id>
<content type='text'>
Always use sysfs backlight. vcgencmd resets DRM planes under fkms
making it incompatible with the drm video output. Removes
libraspberrypi-bin dependency and panel/vcgencmd dead code.
</content>
</entry>
<entry>
<title>Remove warm prebuffer mode from doorbell-viewport</title>
<updated>2026-04-13T12:37:42+00:00</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-04-13T12:37:42+00:00</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/commit/?id=8a14be01daaa8c77733e53ed1da2a6914aaac407'/>
<id>urn:sha1:8a14be01daaa8c77733e53ed1da2a6914aaac407</id>
<content type='text'>
Always start mpv on demand (cold start). The warm path was fragile on
the RPi4 with fkms and added complexity without reliable benefit.
</content>
</entry>
<entry>
<title>Switch doorbell-viewport to cold start, add backlight diagnostics</title>
<updated>2026-04-12T19:10:34+00:00</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-04-12T19:10:34+00:00</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/commit/?id=63bc6c512cd64dac27a4f34b6c1342bee39c00d5'/>
<id>urn:sha1:63bc6c512cd64dac27a4f34b6c1342bee39c00d5</id>
<content type='text'>
- prebuffer_mode=cold: mpv starts on demand at ring/touch event
- Add tty group to service user for DRM TTY access
- Log backlight brightness changes for diagnostics
- Remove --really-quiet suppression during debug (now restored)
</content>
</entry>
<entry>
<title>Fix doorbell-viewport display and ring detection</title>
<updated>2026-04-12T18:48:06+00:00</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-04-12T18:48:06+00:00</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/commit/?id=9f8fa6bd4af9dc3b56efcf5de8c175d41b60923d'/>
<id>urn:sha1:9f8fa6bd4af9dc3b56efcf5de8c175d41b60923d</id>
<content type='text'>
- Switch to sysfs backlight (drm backend) to avoid DRM plane reset on
  display power cycle caused by vcgencmd display_power
- Add udev rule and sysfs permissions for rpi_backlight
- Fix multi-packet WebSocket decoder (ring events were being dropped)
- Fix mpv loop/cache flags (--loop=no, bounded --demuxer-max-bytes)
- Remove hardware decode (caused SIGSEGV on RPi4 with fkms)
</content>
</entry>
<entry>
<title>Fix doorbell-viewport bringup issues</title>
<updated>2026-04-12T18:13:16+00:00</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-04-12T18:13:16+00:00</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/commit/?id=1298d68bb9bc33b84a70e4c9c27c806d8a0748c9'/>
<id>urn:sha1:1298d68bb9bc33b84a70e4c9c27c806d8a0748c9</id>
<content type='text'>
- Fix websockets headers kwarg via inspect (works across all versions)
- Use full path /usr/bin/vcgencmd; add libraspberrypi-bin dependency
- Fix UniFi Protect WS packet decoder to handle multiple concatenated
  packets per message (action+data in single frame)
- Fetch lastUpdateId from bootstrap for WS URL
- Switch fbcon disable from video=HDMI-A-1:D to fbcon=map:99 (fkms compat)
- Default drm_connector to DSI-1 for fkms; drop hardcoded drm_mode
- Add --no-audio and --hwdec=no to mpv; fix DRM mode-setting race on startup
- Add PoE HAT fan control with configurable temp thresholds

</content>
</entry>
<entry>
<title>Add doorbell-viewport role</title>
<updated>2026-04-12T16:52:58+00:00</updated>
<author>
<name>Luke Hoersten</name>
<email>luke@hoersten.org</email>
</author>
<published>2026-04-12T16:52:58+00:00</published>
<link rel='alternate' type='text/html' href='https://src.nth.io/luke/ansible-roles/commit/?id=c528cf7268463c84a050129665ce08814fd1d420'/>
<id>urn:sha1:c528cf7268463c84a050129665ce08814fd1d420</id>
<content type='text'>
RPi4 portrait touchscreen that shows a live UniFi Protect RTSP stream
on doorbell ring or touch, with display fully off at idle. Supports
warm prebuffer, vcgencmd/drm/panel display backends, evdev touch input,
and configurable DRM device/connector/mode.

</content>
</entry>
</feed>
