<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Tesla on Pierre</title>
        <link>https://ulm0.com/en/categories/tesla/</link>
        <description>Recent content in Tesla on Pierre</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Sun, 09 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://ulm0.com/en/categories/tesla/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>Argus: Tesla Dashcam and Sentry Mode on a Raspberry Pi</title>
            <link>https://ulm0.com/en/p/argus-tesla-dashcam-and-sentry-mode-on-a-raspberry-pi/</link>
            <pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate>
            <guid>https://ulm0.com/en/p/argus-tesla-dashcam-and-sentry-mode-on-a-raspberry-pi/</guid>
            <description>&lt;img src=&#34;https://ulm0.com/p/argus-dashcam-y-sentry-mode-de-tesla-en-una-raspberry-pi/cover.png&#34; alt=&#34;Featured image of post Argus: Tesla Dashcam and Sentry Mode on a Raspberry Pi&#34; /&gt;&lt;p&gt;Argus turns a Raspberry Pi into the USB drive your Tesla uses for Dashcam, Sentry Mode, LightShow and music. It also serves a web UI so you can review clips from your phone or laptop, without pulling the drive out of the car.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-it-is&#34;&gt;&lt;a href=&#34;#what-it-is&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;What it is&#xA;&lt;/h2&gt;&lt;p&gt;A single Go binary with the web UI (Next.js, static export) embedded inside it. No containers, no database, no service stack. You install it, configure one &lt;code&gt;config.yaml&lt;/code&gt;, and it runs as a systemd service.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-it-exists&#34;&gt;&lt;a href=&#34;#why-it-exists&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Why it exists&#xA;&lt;/h2&gt;&lt;p&gt;The usual flow with a thumb drive is: park, pull the drive, take it to a computer, dig through timestamp-named folders for the clip you want, copy it, plug it back in. And if the filesystem corrupts, you find out the moment you actually need the footage.&lt;/p&gt;&#xA;&lt;p&gt;Argus stays in the car and handles all of that from there. It&amp;rsquo;s heavily based on &lt;a class=&#34;link&#34; href=&#34;https://github.com/mphacker/TeslaUSB&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;TeslaUSB&lt;/a&gt;&amp;rsquo;s concepts, packaged as one binary instead of a set of scripts.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-two-modes&#34;&gt;&lt;a href=&#34;#the-two-modes&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;The two modes&#xA;&lt;/h2&gt;&lt;p&gt;This is the core idea, and it&amp;rsquo;s worth getting before anything else:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Present mode&lt;/strong&gt;: the Pi presents itself to the car as a multi-LUN USB device (TeslaCam, plus optionally LightShow and music). Locally the disks are mounted read-only, so you can look without corrupting anything while the car writes.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Edit mode&lt;/strong&gt;: the USB presentation is torn down and the same disks get mounted read/write, for managing them over the web UI or Samba.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Switching between modes is sequenced (unmount, loops, gadget) so the filesystem never gets left half-done. There&amp;rsquo;s also USB gadget recovery for hung states, which on this kind of hardware does happen.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-you-need&#34;&gt;&lt;a href=&#34;#what-you-need&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;What you need&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;A Raspberry Pi Zero 2 W (the primary target).&lt;/li&gt;&#xA;&lt;li&gt;Raspberry Pi OS Lite.&lt;/li&gt;&#xA;&lt;li&gt;A microSD with room for the OS plus the disk images.&lt;/li&gt;&#xA;&lt;li&gt;A real USB data cable. Not a charge-only one. That mistake happens more often than you&amp;rsquo;d think.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The kernel needs USB OTG gadget support (&lt;code&gt;dwc2&lt;/code&gt;, &lt;code&gt;libcomposite&lt;/code&gt;, &lt;code&gt;configfs&lt;/code&gt;), systemd, and root for setup.&lt;/p&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;&lt;a href=&#34;#installation&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Installation&#xA;&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -fsSL https://raw.githubusercontent.com/ulm0/argus/main/scripts/install-argus.sh &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;argus generate&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo argus setup&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;The script installs the latest release binary for your Pi&amp;rsquo;s architecture (&lt;code&gt;arm64&lt;/code&gt;, &lt;code&gt;armv7&lt;/code&gt; or &lt;code&gt;armv6&lt;/code&gt;). &lt;code&gt;argus generate&lt;/code&gt; writes the &lt;code&gt;config.yaml&lt;/code&gt;, and &lt;code&gt;argus setup&lt;/code&gt; builds the disk images and the service.&lt;/p&gt;&#xA;&lt;p&gt;If you&amp;rsquo;d rather not pipe something straight from the network, clone the repo and run &lt;code&gt;sudo bash scripts/install-argus.sh&lt;/code&gt;, or grab the &lt;code&gt;argus_*_linux_*&lt;/code&gt; file from the &lt;a class=&#34;link&#34; href=&#34;https://github.com/ulm0/argus/releases/latest&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;releases page&lt;/a&gt; and install it with &lt;code&gt;sudo install -m 0755&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Setup options:&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Flag&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Default&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;What it does&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;--dir&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;~/.argus/&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Data directory&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;--config&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;&amp;lt;dir&amp;gt;/config.yaml&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Config file path&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;--show-size&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;10G&lt;/code&gt; (&lt;code&gt;ARGUS_SHOW_SIZE&lt;/code&gt;)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;LightShow image size&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;--music-size&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;32G&lt;/code&gt; (&lt;code&gt;ARGUS_MUSIC_SIZE&lt;/code&gt;)&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Music image size&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;first-login&#34;&gt;&lt;a href=&#34;#first-login&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;First login&#xA;&lt;/h2&gt;&lt;p&gt;After setup, point your browser at the Pi&amp;rsquo;s IP on the configured port (80 by default), either over your WiFi or over the AP the device brings up.&lt;/p&gt;&#xA;&lt;p&gt;The UI asks for a login. Default credentials are &lt;code&gt;admin&lt;/code&gt; / &lt;code&gt;argus&lt;/code&gt;, and &lt;strong&gt;you should change them right away&lt;/strong&gt; from Settings, or by editing &lt;code&gt;auth_username&lt;/code&gt; and &lt;code&gt;auth_password&lt;/code&gt; under &lt;code&gt;web:&lt;/code&gt; in &lt;code&gt;config.yaml&lt;/code&gt;. The login screen nags you while the defaults are still in place.&lt;/p&gt;&#xA;&lt;h2 id=&#34;whats-inside&#34;&gt;&lt;a href=&#34;#whats-inside&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;What&amp;rsquo;s inside&#xA;&lt;/h2&gt;&lt;details&gt;&#xA;&lt;summary&gt;Video and events&lt;/summary&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Browse SavedClips, SentryClips and RecentClips grouped by event.&lt;/li&gt;&#xA;&lt;li&gt;Playback with camera switching and HTTP range support, so you can seek inside a clip without downloading the whole thing.&lt;/li&gt;&#xA;&lt;li&gt;Telemetry pulled from the video&amp;rsquo;s SEI data: GPS, speed, battery, gear and more. Rendered as an overlay or served as JSON.&lt;/li&gt;&#xA;&lt;li&gt;HUD overlay and an interactive map overlay, both with configurable scale.&lt;/li&gt;&#xA;&lt;li&gt;Download a single file, or a whole event as a ZIP with every camera and its metadata.&lt;/li&gt;&#xA;&lt;li&gt;Per-event thumbnails, generated automatically from the first available camera.&lt;/li&gt;&#xA;&lt;li&gt;Session grouping for RecentClips.&lt;/li&gt;&#xA;&lt;li&gt;Encrypted clip detection: files the car locked are shown distinctly instead of failing silently.&lt;/li&gt;&#xA;&lt;li&gt;Optional secondary archive path, to keep historical TeslaCam footage within reach.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/details&gt;&#xA;&lt;details&gt;&#xA;&lt;summary&gt;Chimes&lt;/summary&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Upload, rename, delete and preview lock chimes before applying them.&lt;/li&gt;&#xA;&lt;li&gt;Pick the active chime.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Scheduling&lt;/strong&gt;: weekly, on a specific date, by holiday, or recurring.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Chime groups&lt;/strong&gt;, to organize them and randomize within a group.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Random mode&lt;/strong&gt;: pick one from the group on every event, or a new one at each boot.&lt;/li&gt;&#xA;&lt;li&gt;Tesla&amp;rsquo;s duration constraints are enforced, so you don&amp;rsquo;t upload something the car will just ignore.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/details&gt;&#xA;&lt;details&gt;&#xA;&lt;summary&gt;Lightshows, wraps and music&lt;/summary&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Lightshows: upload, download and delete (FSEQ + audio pairs).&lt;/li&gt;&#xA;&lt;li&gt;Wraps: upload, thumbnail preview, download and delete.&lt;/li&gt;&#xA;&lt;li&gt;Music: hierarchical directory browsing, single or chunked upload for large files, streaming, move, rename, delete, and creating or removing folders.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/details&gt;&#xA;&lt;details&gt;&#xA;&lt;summary&gt;Cleanup and retention&lt;/summary&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Per-folder policies: how many events to keep for SavedClips, SentryClips and RecentClips.&lt;/li&gt;&#xA;&lt;li&gt;Dry-run to see what would be deleted before deleting it.&lt;/li&gt;&#xA;&lt;li&gt;Optional cleanup at boot, so the card doesn&amp;rsquo;t fill itself.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/details&gt;&#xA;&lt;details&gt;&#xA;&lt;summary&gt;Networking: WiFi, AP and Bluetooth&lt;/summary&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Offline Access Point&lt;/strong&gt; as a fallback: configurable SSID, passphrase, channel and DHCP; force-on, auto and force-off modes; RSSI-based activation threshold; grace period and retry cycles before it comes up.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;AP internet sharing&lt;/strong&gt;: NAT for AP clients through the Pi&amp;rsquo;s upstream (WiFi or Bluetooth).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;WiFi client&lt;/strong&gt;: scan networks, connect, view saved ones, forget them, and set autoconnect priority.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Reliable reconnects&lt;/strong&gt;: signal strength monitoring, grace periods and retries before the AP kicks in. The point is not getting cut off by a momentary signal drop.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Bluetooth tethering (PAN)&lt;/strong&gt;: manage the adapter (power, discoverable mode), scan, pair, connect and disconnect devices, to use your phone as the upstream.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Captive portal detection&lt;/strong&gt;: responds to the standard probes from Apple, Android and Windows, so your phone doesn&amp;rsquo;t complain that the network &amp;ldquo;has no internet&amp;rdquo;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/details&gt;&#xA;&lt;details&gt;&#xA;&lt;summary&gt;Samba&lt;/summary&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Enable and disable the service from the UI.&lt;/li&gt;&#xA;&lt;li&gt;Set the Samba password and regenerate the config.&lt;/li&gt;&#xA;&lt;li&gt;Restart the service from the Settings page.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;It&amp;rsquo;s the comfortable path when you want to move a lot of files at once: mount the share and work from your own file explorer.&lt;/p&gt;&#xA;&lt;/details&gt;&#xA;&lt;details&gt;&#xA;&lt;summary&gt;Notifications&lt;/summary&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Telegram&lt;/strong&gt;: sends Sentry event clips over a bot. Configurable quality (HD or SD) and an offline queue with a max size, so events that happened without connectivity go out when the network is back.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Webhook&lt;/strong&gt;: HTTP POST to a URL you define, with optional HMAC-SHA256 signing so the receiver can verify the message actually came from your device.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/details&gt;&#xA;&lt;details&gt;&#xA;&lt;summary&gt;Metrics and health&lt;/summary&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Storage health score, with alerts and recommendations.&lt;/li&gt;&#xA;&lt;li&gt;Per-LUN partition usage.&lt;/li&gt;&#xA;&lt;li&gt;Video statistics and estimated remaining recording time per folder.&lt;/li&gt;&#xA;&lt;li&gt;System metrics: CPU usage, temperature, clock speed, RAM and power draw.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/details&gt;&#xA;&lt;details&gt;&#xA;&lt;summary&gt;Real-time&lt;/summary&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Server-Sent Events for live log streaming and Sentry event notifications.&lt;/li&gt;&#xA;&lt;li&gt;System metrics dashboard with periodic polling.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/details&gt;&#xA;&lt;details&gt;&#xA;&lt;summary&gt;Startup and reliability&lt;/summary&gt;&#xA;&lt;p&gt;This is what keeps the box alive unattended inside a car. It&amp;rsquo;s all configurable from the &lt;strong&gt;Startup &amp;amp; Reliability&lt;/strong&gt; section in Settings:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Present to the car automatically on startup.&lt;/li&gt;&#xA;&lt;li&gt;Block startup until the boot pipeline finishes.&lt;/li&gt;&#xA;&lt;li&gt;Cleanup at boot.&lt;/li&gt;&#xA;&lt;li&gt;Random chime at boot.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;fsck&lt;/code&gt; checks at boot.&lt;/li&gt;&#xA;&lt;li&gt;Hardware watchdog via Debian&amp;rsquo;s &lt;code&gt;watchdog.service&lt;/code&gt; (&lt;code&gt;/etc/watchdog.conf&lt;/code&gt;), with a configurable timeout (60 s by default).&lt;/li&gt;&#xA;&lt;li&gt;Re-apply the &lt;code&gt;sysctl&lt;/code&gt; profile on every startup.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Some of these take effect on the next service restart or reboot.&lt;/p&gt;&#xA;&lt;p&gt;The defaults &lt;code&gt;argus setup&lt;/code&gt; generates are already tuned for unattended operation: present on startup, block until ready, cleanup at boot, &lt;code&gt;fsck&lt;/code&gt; at boot, watchdog on, and &lt;code&gt;sysctl&lt;/code&gt; re-applied.&lt;/p&gt;&#xA;&lt;/details&gt;&#xA;&lt;details&gt;&#xA;&lt;summary&gt;Updates&lt;/summary&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Update check at startup.&lt;/li&gt;&#xA;&lt;li&gt;Optional automatic binary updates.&lt;/li&gt;&#xA;&lt;li&gt;Channels: &lt;code&gt;stable&lt;/code&gt;, &lt;code&gt;beta&lt;/code&gt; and &lt;code&gt;dev&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;On the device, by hand: &lt;code&gt;sudo argus upgrade&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;/details&gt;&#xA;&lt;details&gt;&#xA;&lt;summary&gt;Power and preferences&lt;/summary&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Reboot and power off the device from the UI.&lt;/li&gt;&#xA;&lt;li&gt;Display preferences persisted server-side, not in the browser: speed unit (kph or mph), HUD scale and map scale. Set them once and they hold from any device.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/details&gt;&#xA;&lt;h2 id=&#34;configuration&#34;&gt;&lt;a href=&#34;#configuration&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Configuration&#xA;&lt;/h2&gt;&lt;p&gt;Everything lives in &lt;code&gt;~/.argus/config.yaml&lt;/code&gt;, the single source of truth.&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Section&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;What it controls&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;installation&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;startup behavior, target user, mount dir, archive path&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;disk_images&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;image names, partition toggles, boot &lt;code&gt;fsck&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;network&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;web port, Samba password&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;web&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;login (&lt;code&gt;auth_enabled&lt;/code&gt;, &lt;code&gt;auth_username&lt;/code&gt;, &lt;code&gt;auth_password&lt;/code&gt;), &lt;code&gt;allowed_hosts&lt;/code&gt;, upload limits, chime and lightshow folders, signing &lt;code&gt;secret_key&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;offline_ap&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;AP behavior, force mode, internet sharing&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;system&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;watchdog and &lt;code&gt;sysctl&lt;/code&gt; at startup&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;telegram&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;alerting, video quality, offline queueing&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;webhook&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;callback URL and HMAC-SHA256 signing secret&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;update&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;update strategy and channel&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;viewer_prefs&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;speed unit, HUD scale, map scale&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;cli&#34;&gt;&lt;a href=&#34;#cli&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;CLI&#xA;&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;argus run &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;--config path&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;argus generate &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;--output path&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;--force&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;argus setup &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;--dir path&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;--show-size 10G&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;--music-size 32G&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;argus upgrade &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;--yes&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;argus remove &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;--yes&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;--keep-images&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;argus refresh-service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;argus version&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;&lt;code&gt;argus remove --keep-images&lt;/code&gt; uninstalls but leaves the disk images behind, in case you want to reinstall without losing the footage.&lt;/p&gt;&#xA;&lt;h2 id=&#34;a-couple-of-security-notes&#34;&gt;&lt;a href=&#34;#a-couple-of-security-notes&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;A couple of security notes&#xA;&lt;/h2&gt;&lt;p&gt;The API rejects requests whose &lt;code&gt;Host&lt;/code&gt; header isn&amp;rsquo;t a local identity (an IP, &lt;code&gt;localhost&lt;/code&gt;, a bare name, &lt;code&gt;*.local&lt;/code&gt; or &lt;code&gt;*.lan&lt;/code&gt;), as a DNS-rebinding defense. If you front it with a reverse proxy on a real domain, add that hostname to &lt;code&gt;web.allowed_hosts&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Sessions are cookies signed with &lt;code&gt;web.secret_key&lt;/code&gt; (auto-generated on first run), &lt;code&gt;HttpOnly&lt;/code&gt; and &lt;code&gt;SameSite=Strict&lt;/code&gt;, and marked &lt;code&gt;Secure&lt;/code&gt; automatically when reached over HTTPS.&lt;/p&gt;&#xA;&lt;p&gt;You can turn the login off with &lt;code&gt;auth_enabled: false&lt;/code&gt;, but that only makes sense on an isolated, trusted network.&lt;/p&gt;&#xA;&lt;h2 id=&#34;where-to-get-it&#34;&gt;&lt;a href=&#34;#where-to-get-it&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Where to get it&#xA;&lt;/h2&gt;&lt;p&gt;Source and releases are on GitHub: &lt;a class=&#34;link&#34; href=&#34;https://github.com/ulm0/argus&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;github.com/ulm0/argus&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Per-version binaries are on the &lt;a class=&#34;link&#34; href=&#34;https://github.com/ulm0/argus/releases/latest&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;releases page&lt;/a&gt;, one per architecture, uncompressed.&lt;/p&gt;</description>
        </item></channel>
</rss>
