<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Bluetooth on tsvinc</title>
		<link>https://tsvinc.dev/tags/bluetooth/</link>
		<description>Recent content in Bluetooth on tsvinc</description>
		<generator>Hugo</generator>
		<language>en-us</language>
		
		
		
		
			<lastBuildDate>Mon, 02 Nov 2026 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://tsvinc.dev/tags/bluetooth/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>The DJI went silent for four hours</title>
				<link>https://tsvinc.dev/posts/dji-went-silent-four-hours/</link>
				<pubDate>Mon, 02 Nov 2026 00:00:00 +0000</pubDate>
				<guid>https://tsvinc.dev/posts/dji-went-silent-four-hours/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://tsvinc.dev/posts/dji-power-2000-ups-over-bluetooth/&#34;&gt;Part 4&lt;/a&gt; ended on a rule for the observer, the Go service on my router that turns two power stations&#39; readings into NUT (Network UPS Tools) status for the machines they keep running: a DJI that stops answering for minutes is an alert in its own right, never a sign that the grid is fine. On 20 October the DJI Power 2000 stopped answering at about 13:10. It answered again a little before 18:00, after I power-cycled it. While the grid was up, nothing alerted me to the silence.&lt;/p&gt;</description>
			</item>
			<item>
				<title>The UPS said 2 minutes at 95 %</title>
				<link>https://tsvinc.dev/posts/ups-said-two-minutes-at-95/</link>
				<pubDate>Mon, 02 Nov 2026 00:00:00 +0000</pubDate>
				<guid>https://tsvinc.dev/posts/ups-said-two-minutes-at-95/</guid>
				<description>&lt;p&gt;My storage box and gaming PC run on a DJI Power 2000 power station used as a UPS, and a monitor on my router decides when they shut down. At 11:39:39 on 1 November, twenty-three minutes into a power cut, my alert channels got this from it:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ups dji2000-t2: LOW BATTERY, its hosts should shut down (runtime 2m0s &amp;lt;= 20m0s (ABC))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And the same for the third tier, against its 8-minute limit. Two minutes of runtime left on the DJI. I could see the station&#39;s display at the time. It said about 95 %.&lt;/p&gt;</description>
			</item>
			<item>
				<title>The DJI&#39;s grid flag is labeled charge type</title>
				<link>https://tsvinc.dev/posts/dji-power-2000-ups-over-bluetooth/</link>
				<pubDate>Thu, 15 Oct 2026 00:00:00 +0000</pubDate>
				<guid>https://tsvinc.dev/posts/dji-power-2000-ups-over-bluetooth/</guid>
				<description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Update, 2026-11-02:&lt;/strong&gt; The station&#39;s minutes field has a second meaning. Byte 4 of its battery record (tag &lt;code&gt;0x3020&lt;/code&gt;) is a time type, and while it is &lt;code&gt;1&lt;/code&gt; the minutes are a recharging time, the time to full charge, not a runtime. The bridge now leaves &lt;code&gt;runtime_min&lt;/code&gt; out whenever that byte says recharging, and the observer ignores the field while input power flows. The story is in &lt;a href=&#34;https://tsvinc.dev/posts/ups-said-two-minutes-at-95/&#34;&gt;The UPS said 2 minutes at 95 %&lt;/a&gt;.&lt;/p&gt;&#xA;&#xA;&lt;/blockquote&gt;</description>
			</item>
			<item>
				<title>Secure session ready. Battery: ?</title>
				<link>https://tsvinc.dev/posts/esp32-bluetti-ac180-bridge/</link>
				<pubDate>Wed, 14 Oct 2026 00:00:00 +0000</pubDate>
				<guid>https://tsvinc.dev/posts/esp32-bluetti-ac180-bridge/</guid>
				<description>&lt;p&gt;Porting a key exchange from Python to C++ should be the boring part. The Python works, it is already validated against this exact station, and mbedTLS ships every primitive it uses: MD5, AES-CBC, P-256, ECDSA, ECDH. Translate, compile, flash. The first run on the ESP32 went along with that, right up to the last line:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;found AC180&amp;lt;redacted&amp;gt; XX:XX:XX:XX:XX:XX rssi=-57&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;connected, mtu=517&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;KEX: challenge answered&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;KEX: challenge accepted&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;KEX: pubkey sent&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;KEX: pubkey sent&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;KEX: secure session ready&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;handshake 1913 ms&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;RESULT BATTERY_SOC=? DC_OUTPUT_POWER=? AC_OUTPUT_POWER=?&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Every step of the handshake reported success. Then came the reads, the part that was supposed to be easy, and the first three came back as question marks. The capture ended there.&lt;/p&gt;</description>
			</item>
			<item>
				<title>The power went out twice. My UPS log saw it once.</title>
				<link>https://tsvinc.dev/posts/bluetti-ac180-ups-over-bluetooth/</link>
				<pubDate>Wed, 14 Oct 2026 00:00:00 +0000</pubDate>
				<guid>https://tsvinc.dev/posts/bluetti-ac180-ups-over-bluetooth/</guid>
				<description>&lt;p&gt;Thirty lines of log, one outage. Twenty-two lines on grid, seven on battery, one back on grid. Clean, readable, and short by one event: the plug came out of the wall twice.&lt;/p&gt;&#xA;&lt;p&gt;The setup itself works. A BLUETTI AC180 portable power station sits between the wall and my workstation as a UPS. Linux reads it over Bluetooth LE, through an encrypted link, with no account and no pairing, in about nine seconds per read. What it can&#39;t do is tell you about anything that happens between two of those reads. Neither can anything else built on polling. This one put it in writing.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
