<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
<channel>
<atom:link href="https://owlllovo.com/feed" rel="self" type="application/rss+xml"/>
<title>OwlllOvO</title>
<link>https://owlllovo.com</link>
<description>哈喽~欢迎光临</description>
<language>zh-CN</language>
<copyright>© OwlllOvO </copyright>
<pubDate>Wed, 08 Apr 2026 08:34:38 GMT</pubDate>
<generator>Mix Space CMS (https://github.com/mx-space)</generator>
<docs>https://mx-space.js.org</docs>
<image>
    <url>https://easyimages.owlllovo.com/i/2025/02/14/4b3d5e2b-72e9-97cf-8c01-9acd6d5d9e34.webp</url>
    <title>OwlllOvO</title>
    <link>https://owlllovo.com</link>
</image>
<item>
    <title>Apple Watch Manual</title>
    <link>https://owlllovo.com/posts/Manual/2025-06-19-apple-watch-manual</link>
    <pubDate>Thu, 19 Jun 2025 04:42:51 GMT</pubDate>
    <description>表盘

随机表盘

用一个表盘看久了，难免会有点审美疲劳

Apple Watch 自带了不少表盘，</description>
    <content:encoded><![CDATA[
      <blockquote>该渲染由 marked 生成，可能存在排版问题，最佳体验请前往：<a href='https://owlllovo.com/posts/Manual/2025-06-19-apple-watch-manual'>https://owlllovo.com/posts/Manual/2025-06-19-apple-watch-manual</a></blockquote>
      <h2>表盘</h2>
<h3>随机表盘</h3>
<p>用一个表盘看久了，难免会有点审美疲劳</p>
<p>Apple Watch 自带了不少表盘，但说实话，如果让我选其中一个作为长期唯一表盘，我很少有满意的；只是偶尔切换新鲜一下，倒还是觉得挺好看的</p>
<p>于是我添加了好几个表盘，不过要我每次手动去切换，也不现实，于是可以用快捷指令，自动切换</p>
<ol>
<li><p>创建快捷指令</p>
<p> 在 Shortcuts App，按下图所示添加操作：</p>
 <img src="https://easyimages.owlllovo.com/i/2025/06/19/9f72a432-4810-4bbc-9813-e59d0c105f59.webp" width="150px"/>

<blockquote>
<ol>
<li>获取所有表盘的列表</li>
<li>统计总共有几个表盘，作为随机数取值范围</li>
<li>从所有表盘中取随机数</li>
<li>从列表中提取随机数对应的表盘</li>
<li>将该表盘应用</li>
</ol>
</blockquote>
<blockquote>
<p>注意</p>
<p>最后一步务必展开后关闭 <code>Show when run</code>，否则每次更换表盘都会弹窗显示，且锁屏时无法成功运行</p>
</blockquote>
</li>
<li><p>创建自动化</p>
<ol>
<li>前往 Shortcuts App 的自动化页面</li>
<li>点击右上角 <code>+</code>，选择 <code>Time of Day</code>（或自定义其它触发条件）</li>
<li>详细设置页面选择 <code>Run Immediately</code>，关闭 <code>Notify When Run</code></li>
<li>选择运行刚才创建的快捷指令</li>
</ol>
</li>
</ol>
<ul>
<li><p>进阶选项</p>
<ul>
<li><p>排除表盘</p>
<p>  我有一个 Infograph 表盘，完全是实用主义原则，填满了各种实用组件，专为工作等需要高效工具的场合使用：</p>
  <img src="https://easyimages.owlllovo.com/i/2025/06/19/9671fa50-2929-2a9b-b5eb-c7759bd3a7f7.webp" width="150px"/>

<p>  使用这个表盘时，我只追求极致的便捷性，不在意美观，也不希望它被自动切换。因此，可以在快捷指令中进行相应的判断：</p>
  <img src="https://easyimages.owlllovo.com/i/2025/06/19/a7c0dbc9-339d-1fe4-903d-82c402ed70f5.webp" width="150px"/>

<ul>
<li>首先获取当前使用的表盘，如果不是 Infograph 再进行一系列的操作</li>
<li>并且把 Infograph 放在第一位，从 <span class="katex-render">[2, N]</span> 取随机数</li>
</ul>
</li>
</ul>
</li>
</ul>

      <p style='text-align: right'>
      <a href='https://owlllovo.com/posts/Manual/2025-06-19-apple-watch-manual#comments'>看完了？说点什么呢</a>
      </p>
    ]]>
    </content:encoded>
  <guid isPermaLink="false">6853954b1b60183124b604a2</guid>
  <category>posts</category>
<category>手册</category>
 </item>
  <item>
    <title>终究还是没忍住，果补入手 WATCH SERIES 10</title>
    <link>https://owlllovo.com/notes/6</link>
    <pubDate>Fri, 30 May 2025 12:02:05 GMT</pubDate>
    <description>WATCH SERIES 10 GPS 46mm 亮黑色

原价 3199，我压根就没有换的打算，</description>
    <content:encoded><![CDATA[
      <blockquote>该渲染由 marked 生成，可能存在排版问题，最佳体验请前往：<a href='https://owlllovo.com/notes/6'>https://owlllovo.com/notes/6</a></blockquote>
      <p>WATCH SERIES 10 GPS 46mm 亮黑色</p>
<ul>
<li><p>原价 3199，我压根就没有换的打算，Series 5 还能接着战</p>
</li>
<li><p>前段时间开始，国补 15%，2.7k，说实话没太换的必要，没几个月就发布 Series 11 了，我 Series 5 怎么也撑到了</p>
</li>
<li><p>前几天 618 开始，有些店铺做到了 2.2k，但是我也没改变想法，毕竟不是官方店，不是很想冒险</p>
</li>
<li><p>今天突然听说淘宝的 Apple Store 官方店，有官方优惠券，价格已经给到 1950 了，我终于萌生了换表的想法</p>
<p>毕竟我的 Series 5 真的老了，虽然 82% 的健康度不算低，但是一天至少也得两充，运动多的话可能还得再补点电
加上已经不能升级 watchOS 11，都安装不了 Tesla App 控制车</p>
</li>
<li><p>于是去刷了下小红书，我直接一个发出爆鸣声，美团外卖从 Apple 授权店买，叠加国补直接做到 1868！</p>
<p>我直接一刻也等不了了，当场激情下单，1868 拿下 WATCH SERIES 10 GPS 46mm 亮黑色</p>
</li>
</ul>
<p>感谢果补</p>

      <p style='text-align: right'>
      <a href='https://owlllovo.com/notes/6#comments'>看完了？说点什么呢</a>
      </p>
    ]]>
    </content:encoded>
  <guid isPermaLink="false">68399e3d1b60183124b1c1ab</guid>
  <category>notes</category>
false
 </item>
  <item>
    <title>Tesla Manual</title>
    <link>https://owlllovo.com/posts/Manual/2025-03-08-Tesla-Manual</link>
    <pubDate>Sat, 08 Mar 2025 15:05:31 GMT</pubDate>
    <description>本文只是我在使用 Tesla 的过程中得出的一些使用经验等内容，详细的使用手册请参阅 Tesla 提</description>
    <content:encoded><![CDATA[
      <blockquote>该渲染由 marked 生成，可能存在排版问题，最佳体验请前往：<a href='https://owlllovo.com/posts/Manual/2025-03-08-Tesla-Manual'>https://owlllovo.com/posts/Manual/2025-03-08-Tesla-Manual</a></blockquote>
      <p>本文只是我在使用 Tesla 的过程中得出的一些使用经验等内容，详细的使用手册请参阅 Tesla 提供的用户手册：</p>
<ul>
<li><a href="https://www.tesla.com/ownersmanual/">Tesla Owner&#39;s Manuals</a></li>
</ul>
<h2>AutoPilot &amp; FSD</h2>
<h3>AutoPilot</h3>
<p>AutoPilot 开启后会自动开启自动灯光和自动雨刷</p>
<p>雨刷设置可以再手动更改，而自动灯光（包括自动远光）为强制应用，无法手动更改</p>
<p>而 Tesla 的自适应远光策略较为保守，仅在高速公路上会启用远光，而且包含矩阵功能，自动避开所有车辆</p>
<p>因此在照明不佳的情况下，很容易出现开启 AutoPilot 后灯光无法提供足够照明的情况</p>
<p>此时我的经验是，如果路况良好，前方一直有车辆行驶，可以放心开启 AutoPilot；否则考虑关闭 AutoPilot，开启强制远光来获得更好的视野</p>
<h2>打开和关闭</h2>
<h3>钥匙</h3>
<ul>
<li><p>Apple Watch 钥匙</p>
<p>  运行 watchOS 11 及以上的系统版本，可以安装 Tesla Watch App，和手机蓝牙钥匙一样，可以通过蓝牙解锁车辆</p>
</li>
<li><p>车锁</p>
<blockquote>
<p>⚠️ 警告</p>
<p>在手机上点击锁车后，只要蓝牙仍与车辆正常连接，从车辆外可以直接开门</p>
</blockquote>
<p>  如果需要人在车上的同时锁定车门，需要在车机屏幕上点击锁定，或是关闭手机蓝牙，断开和车辆的连接</p>
<p>  但是即使是在车技上点击了锁定，屏幕关闭后相当于车辆进入休眠状态，车机里的操作已经不再起作用，从车外还是可以开门</p>
<p>  因此如果还需要关闭屏幕，务必把手机的蓝牙关闭</p>
<blockquote>
<p>⚠️ 注意</p>
<p>手机蓝牙关闭后相当于车辆失去钥匙</p>
<p>此时从车内按开门按钮仍可以打开车门，但是车辆会出发报警，持续鸣笛</p>
<p>在需要开门时请重新打开手机蓝牙</p>
</blockquote>
</li>
</ul>
<h2>导航和娱乐</h2>
<h3>地图和导航</h3>
<p>众所周知，Tesla 车机的导航非常难用</p>
<p>根据我的使用感受，导航过程中其实还是挺好用的，主要是路径规划非常糟糕，经常规划出一些奇奇怪怪的路线，这时候我就会开喷百度地图</p>
<p>以至于用了一段时间车机导航后我在车上放了一台 iPhone 专门用来导航，但是偶尔还是会发现 Apple Maps 也会有路径规划不够完美的时候</p>
<p>用了这么久，我总结出一些 Tesla Maps 和 Apple Maps 和两者的路线规划偏好：</p>
<ul>
<li><p>Tesla Maps 最优先推荐时间最短的路线，在有多条路线时间相近的情况下，它会毫不犹豫地选择路程最短的那一条</p>
</li>
<li><p>Apple Maps 当然也是首先按时间最短的路线推荐，但是会优先选择路线相对简单的那一条，即使时间上不是最快的</p>
</li>
</ul>
<p>所以我还是偶尔有机会发现路径规划不完美的地方，反正无论如何，这两个都无法满足我一个非常核心的需求：尽量走高速和快速路这一类的封闭道路</p>
<p>因为使用 AutoPilot 在快速路上是非常轻松的，就我个人来说，基本上只要是不涉及路口的路段，我基本上都是开启 AutoPilot 的，我在这些路段上 AutoPilot 的使用率感觉至少能达到 85%</p>
<p>于是我现在用回了车机导航，但是会在出发前手动规划路线，添加途径点来优化路线</p>
<hr>
<p>以下是我遇到的其中一个具有代表性的案例：</p>
<img src="https://easyimages.owlllovo.com/i/2025/05/29/869e2c63-d0d1-b82b-ee5e-5d7d6d950aa3.webp" width="300px">

<p>图中两段黄色阴影画的是高架快速路，而且一路上车流量不大，用 AutoPilot 非常舒服，可惜这条快速路没有修完，中间断了一节</p>
<ul>
<li><p>Apple Maps：推荐路线基本上会在 <code>1h 6min</code> 和 <code>1h 4min</code> 这两条路线之间横跳</p>
<ul>
<li><p><code>1h 6min</code> 优先推荐的这条线路在走完第一段快速路后就转而走普通国道了</p>
<p>  这个建议无可厚非，毕竟目的地就在这条国道的边上，这样走是最简单的</p>
<p>  但是这个的代价就是从快速路下来以后，会经过大量的红绿灯，不仅通行效率低，开得也非常累</p>
</li>
<li><p><code>1h 4min</code> 而另一条就非常抽象了，两段快速路之间完全走的是田间的村道，甚至红圈里的那一段还是在村镇和农田里绕来绕去</p>
</li>
</ul>
</li>
<li><p>Tesla Maps：这位就更是重量级，在 <code>1h 6min</code> 这条路线的基础上，选择了一条绝对路径更短的线路：</p>
  <img src="https://easyimages.owlllovo.com/i/2025/05/29/a31d0d9a-4ae1-a8d5-877f-32c69156475a.webp" width="150px">

<p>  即：</p>
  <img src="https://easyimages.owlllovo.com/i/2025/05/29/4ead31a9-6bd7-4363-3418-4993ab66250c.webp" width="300px">

<p>  因为第一段快速路在末段是往右倾斜的，于是在庆源大道就提前下高架走国道！</p>
<p>  当时开这段的时候还没意识到 Tesla Maps 的愚蠢，于是就按这个路线走，一路等了无数红灯，还是来回两次……</p>
</li>
<li><p>手动规划：实际上如果自己提前看一眼地图，手动规划路径，是完全可以找到一条更加完美的路线的：</p>
  <img src="https://easyimages.owlllovo.com/i/2025/06/07/082b48f7-ac0c-6bf7-c9f9-8818a3d5f76b.webp" width="300px">

<p>  先把第一段快速路走完，然后走一段国道，再回到快速路上</p>
<p>  这样虽然不是最快的，路程上也会稍微长一点，但是可以最大程度把路线规划在快速路上，这样用 AutoPilot 真的能省非常多力</p>
</li>
</ul>
<p>之后在长途出行时，只要我有精力都会提前手动规划路线：</p>
<ol>
<li><p>首先按照 Apple Maps 给出的路线规划，然后在沿线检查有没有经过一些奇奇怪怪的地方，或者稍微绕点路就可以大幅改善的道路</p>
</li>
<li><p>接着把这个路径在车机导航上用途径点的方式设置好，行驶途中用车机导航</p>
</li>
</ol>
<p>可以说我这一套确实有点自适应吧，但其实只是我对路线有一些要求，我想不论换哪一家的导航来都没法永远完全按照我的偏好规划出一模一样的路线</p>
<p>当然在所有时候，直接按照车机导航的走不会有任何问题，肯定是可以到达目的地的，Tesla 的车机导航其实并没有那么不堪，只不过在完美的标准上还可以有提升</p>
<h2>电池</h2>
<blockquote>
<ul>
<li>LFP: 磷酸铁锂</li>
<li>NMC: 三元锂</li>
</ul>
</blockquote>
<h3>充电</h3>
<p>众所周知，电池电量不应过高，否则会损害电池健康；电量更不应过低，低于 20% 会对电池健康造成严重伤害</p>
<p>Tesla 对 NMC 电池的日常充电建议从 90% 甚至下降到了 80%</p>
<p>经过我对相关资料的阅读，有了一些个人的结论，不一定完全正确，但是我非常相信我的结论，并且按照这个执行</p>
<p>以下结论不论 LFP 还是 NMC 都是一样的，具体 LFP 和 NMC 之间的区别会在之后说明</p>
<ul>
<li><p>高电量的损害</p>
<p>  从原理来说，电池电量高会损害健康是因为电池在高能量状态下，内部的化学反应会加速，锂离子会在电极表面形成固态结晶，导致电池容量的下降</p>
<p>  这种损害不太严重也比较缓慢，只要不是长时间高电量存放就不会对健康产生太多影响</p>
<p>  所以就如 Tesla 的充电建议所说，日常使用充至 80%，长途出行可以按需充到 80% 以上</p>
<p>  长时间停放一定要让电量保持在 80% 以下，有条件的话尽量保持充电器连接</p>
<p>  而比如没有家充桩，每次都是去充电站充电，就可以根据返程需要消耗的电量适当多充一些电</p>
<p>  总之，就是让电池在绝大部分时间内保持在 80% 以下，根据需要短时间高于 80% 不会有太大影响，但是这个时间越长伤害越大，具体就按必要程度来平衡</p>
</li>
<li><p>低电量的损害</p>
<p>  虽然电量越低充电功率越高，要发挥出 Tesla 超充的 250kW 功率也需要在电量 10% 左右才可以</p>
<p>  但是低电量对电池的伤害就比较严重了，而且越是电量低伤害越严重</p>
<p>  尽量始终保持电量高于 20% 会对电池健康有非常大的好处，除非有特殊情况，尽可能永远不要让电量低于 10%</p>
<p>  而如果确实不得不让电量低于 20% 的，也和高电量的结论类似，不要长时间处于这个状态，立刻去充电</p>
</li>
</ul>
<p>所以电池其实并没有想象中那么脆弱，并非除去 80% 和 20%，只剩下 60% 可用</p>
<p>事实上，日常驾驶 60% 完全足够了，可以最大程度保护电池；长途驾驶时，完全可以用到 80% 甚至 90% 的电量，也不会对电池有太大伤害</p>
<h3>LFP &amp; NMC</h3>
<p>众所又周知，LFP 和 NMC 电池的充电要求是不一样的，LFP 电池要求经常充满电来校准，而 NMC 没有校准相关的说明</p>
<p>根本的原理是，两者对电量的测量方式是完全不一样的：</p>
<p></p>
<p>这张图说明了两种电池的电压随电量变化的曲线</p>
<p>可以看到，NMC 电池随着电量的增加，电压也会逐渐升高，虽然这个变化不一定是线性的，BMS 也可以根据当前电压直接计算得到剩余电量</p>
<p>而 LFP 电池在电量 10% - 95% 这非常大的一段区间内，电压几乎是没有任何变化的，只在电量非常低和非常高的时候会发生明显变化</p>
<p>因此 LFP 电池电量在这个区间内时，BMS 是无法获知真实电量的，只能根据能量的消耗来猜还剩多少电量</p>
<p>这也一定程度导致了 LFP 电池的一致性较差，也就是各个电池组之间的电量会存在差异，因为 BMS 不知道每个电池组还有多少电，无法主动优先消耗剩余电量高的电池组</p>
<p>所以 LFP 电池会需要定期，最好是每周至少一次将电量充至 100%，不仅是强制让所有电池组通过满电来恢复一致，也让 BMS 知道电池还有多少能量，提高对电量估测的准确性</p>
<p>综上，并不是 LFP 电池满电不会有损害，不过是相对于满电的损害，长时间不对电池进行校准对电池的伤害更大，加上 LFP 电池寿命的确会高于 NMC 电池，所以需要定期充满电</p>
<p>而 NMC 电池从测量方法来说就是不同的，所以不需要充满，也不需要校准，充满只会对电池有伤害</p>
<blockquote>
<p>ℹ️ Tips</p>
<p>在 2025.8 更新中，开放了手动电池校验功能（服务 &gt; 电池运行状况 &gt; 电池运行状况测试）</p>
<p>该测试在连接 5kW 以上的交流充电枪后，会自动将车辆电池电量消耗至 10% 以下，然后充电至 100%，从而校准电池健康</p>
<p>但是根据我这一节的说明可以得出，该功能只是方便 LFP 电池的车辆进行电池校准，即自动把电量消耗到 10% 以下后重新充至 100%，而省去了手动通过驾驶消耗电量的步骤</p>
<p>运行该测试并不会和手动进行校准有什么差别，只是方便测试，NMC 电池的车辆也无需运行此测试</p>
</blockquote>
<h3>电池加热</h3>
<p>充电前进行电池预热可以让电池更快达到最佳的充电状态，从而提升电池充电功率</p>
<p>暂时没有手动启用电池加热的按钮，车辆会在导航至 Tesla 超级充电站时自动在到达前启动电池预热</p>
<ul>
<li>手动启动电池加热：在车机导航上设置导航到任意 Tesla 超级充电站，或是添加途径点在真实目的地之后，即可手动启动电池预热</li>
</ul>
<h4>是否需要进行电池预热</h4>
<p>根据 TeslaMate 的监控数据显示，无论是否在前往充电站途中进行电池预热，车辆在开始充电后都会自动加热电池至适宜温度。</p>
<p>因此，无需担心电池预热会额外增加电量消耗。实际上，是否进行电池预热的区别仅在于：是在前往充电站的途中消耗电量加热电池，还是在充电过程中消耗电量加热电池。此外，行驶过程中用于加热电池的电量会被计入驾驶能耗，而充电时加热电池的电量则计入充电效率损耗。</p>
<p>所以，是否需要提前预热电池与总体电量消耗关系不大。我的观点是，这主要取决于电池类型：</p>
<ul>
<li><p>NMC 电池：受温度影响较小</p>
<p>  除非在极寒天气下，车辆在普通充电桩（约 100kW）充电时，是否提前预热电池区别不大，即使不预热，通常也能达到可实现的最高充电功率</p>
<p>  但如果希望在 Tesla 超级充电站实现 250kW 的峰值充电功率，则需要提前预热电池</p>
</li>
<li><p>LFP 电池：受温度影响较大</p>
<p>  在极端低温条件下，如果不提前预热，充电初期功率可能极低，甚至几乎不充电，而是先利用充电桩的电量为电池加热，待温度合适后才开始正常充电</p>
<p>  因此，对于 LFP 电池的车辆，如果发现充电初期无法快速达到高功率，建议下次充电前提前进行电池预热</p>
</li>
</ul>
<h2>驾驶</h2>
<h3>车灯</h3>
<h4>远光大灯</h4>
<p>开启自适应大灯后，车辆会根据驾驶环境自主开启远光灯，并且开启远光灯时，包含矩阵功能，自动避开所有车辆</p>
<p>可以按方向盘上的远光灯按钮强制启用远光灯</p>
<p>如果要保持强制启用远光灯，须关闭自适应大灯，然后长按远光灯按钮，屏幕上的远光灯控制会出现圆圈，按住大约 1 秒，圆圈合上后会保持远光灯完整启用</p>
<h2>温度控制</h2>
<p></p>
<h3>循环模式</h3>
<blockquote>
<p> 点击 <code>按钮 9</code>，在 <code>自动</code>，<code>内循环</code> 和 <code>外循环</code> 之间切换循环模式</p>
</blockquote>
<p>当使用自动循环模式时，车辆会自动管理内循环和外循环，通常会通过内外循环混合的方式，把二氧化碳浓度控制在 1000–2000 ppm</p>
<p>这个二氧化碳浓度比较安全，但是长时间处在这个浓度的二氧化碳下可能导致犯困</p>
<p>此时可以手动切换至外循环模式，二氧化碳浓度能够在约三分钟内快速下降到 500 ppm 以内</p>
<h3>保持模式</h3>
<ul>
<li><p>关闭屏幕</p>
<p>  保持模式在运行一段时间后会自动关闭屏幕</p>
<p>  屏幕关闭后一切娱乐功能将会停止工作，只有空调保持开启，就相当于在手机上远程开启了空调</p>
<p>  在屏幕刚关闭时就点击屏幕可以恢复，长时间屏幕关闭后只能关闭保持模式或者切换露营模式来重新启用屏幕</p>
<p>  这也导致了在钥匙部分提到的，在关闭屏幕后从车机屏幕上锁定车辆会失效，<del>因此长时间在车里使用保持模式务必关闭手机蓝牙，</del>这样即使屏幕自动关闭也能保持车辆落锁</p>
<blockquote>
<p>‼️ 警告</p>
<p>严禁在车内有人时长时间使用保持模式</p>
<p>经过实测，保持模式不会自动切换内外循环，始终保持内循环状态</p>
<p>若车内有人，二氧化碳浓度将在一小时内升至超过 3000 ppm，存在极大安全隐患</p>
</blockquote>
</li>
</ul>
<h3>露营模式</h3>
<ul>
<li><p>哨兵模式</p>
<p>  开启露营模式会禁用哨兵模式，<del>在开放空间露营可以选择使用保持模式而非露营模式，保持哨兵模式的开启，这对在车上露营睡觉也有好处，可以关闭屏幕以进一步减少亮光以及节约电量</del></p>
<blockquote>
<p>‼️ 警告</p>
<p>严禁在车内有人时长时间使用保持模式</p>
<p>经过实测，保持模式不会自动切换内外循环，始终保持内循环状态</p>
<p>若车内有人，二氧化碳浓度将在一小时内升至超过 3000 ppm，存在极大安全隐患</p>
</blockquote>
</li>
</ul>

      <p style='text-align: right'>
      <a href='https://owlllovo.com/posts/Manual/2025-03-08-Tesla-Manual#comments'>看完了？说点什么呢</a>
      </p>
    ]]>
    </content:encoded>
  <guid isPermaLink="false">6828a5bd78927a434107878f</guid>
  <category>posts</category>
<category>手册</category>
 </item>
  <item>
    <title>Sinko 才开电车</title>
    <link>https://owlllovo.com/notes/5</link>
    <pubDate>Sat, 08 Mar 2025 07:24:54 GMT</pubDate>
    <description>V8 兄弟们 V8，真男人开 V8

插电的东西我们不要，sinko 才开电车</description>
    <content:encoded><![CDATA[
      <blockquote>该渲染由 marked 生成，可能存在排版问题，最佳体验请前往：<a href='https://owlllovo.com/notes/5'>https://owlllovo.com/notes/5</a></blockquote>
      <p>V8 兄弟们 V8，真男人开 V8</p>
<p>插电的东西我们不要，sinko 才开电车</p>

      <p style='text-align: right'>
      <a href='https://owlllovo.com/notes/5#comments'>看完了？说点什么呢</a>
      </p>
    ]]>
    </content:encoded>
  <guid isPermaLink="false">67cbf0c678927a4341f83148</guid>
  <category>notes</category>
false
 </item>
  <item>
    <title>竟然都整理出来，被友商黑惨了</title>
    <link>https://owlllovo.com/notes/4</link>
    <pubDate>Wed, 05 Mar 2025 15:18:00 GMT</pubDate>
    <description></description>
    <content:encoded><![CDATA[
      <blockquote>该渲染由 marked 生成，可能存在排版问题，最佳体验请前往：<a href='https://owlllovo.com/notes/4'>https://owlllovo.com/notes/4</a></blockquote>
      <p></p>

      <p style='text-align: right'>
      <a href='https://owlllovo.com/notes/4#comments'>看完了？说点什么呢</a>
      </p>
    ]]>
    </content:encoded>
  <guid isPermaLink="false">67c86b2878927a4341f79d6b</guid>
  <category>notes</category>
false
 </item>
  <item>
    <title>自从小米发布汽车以后</title>
    <link>https://owlllovo.com/notes/3</link>
    <pubDate>Sat, 01 Mar 2025 15:14:32 GMT</pubDate>
    <description>特斯拉刹车不失灵了，理想也不敞篷了，剩下的只有小米动不动又撞了，过个小坑就断轴了</description>
    <content:encoded><![CDATA[
      <blockquote>该渲染由 marked 生成，可能存在排版问题，最佳体验请前往：<a href='https://owlllovo.com/notes/3'>https://owlllovo.com/notes/3</a></blockquote>
      <p>特斯拉刹车不失灵了，理想也不敞篷了，剩下的只有小米动不动又撞了，过个小坑就断轴了</p>

      <p style='text-align: right'>
      <a href='https://owlllovo.com/notes/3#comments'>看完了？说点什么呢</a>
      </p>
    ]]>
    </content:encoded>
  <guid isPermaLink="false">67c86a5878927a4341f79b6d</guid>
  <category>notes</category>
false
 </item>
  <item>
    <title>Linux Manual</title>
    <link>https://owlllovo.com/posts/Manual/2025-02-18-Linux-Manual</link>
    <pubDate>Tue, 18 Feb 2025 13:32:00 GMT</pubDate>
    <description>Configurations

SSH Login

禁用密码登录，仅允许密钥登录，防止服务器密码被</description>
    <content:encoded><![CDATA[
      <blockquote>该渲染由 marked 生成，可能存在排版问题，最佳体验请前往：<a href='https://owlllovo.com/posts/Manual/2025-02-18-Linux-Manual'>https://owlllovo.com/posts/Manual/2025-02-18-Linux-Manual</a></blockquote>
      <h2>Configurations</h2>
<h3>SSH Login</h3>
<p>禁用密码登录，仅允许密钥登录，防止服务器密码被暴力破解</p>
<ol>
<li><p>如果本地无 SSH 配置则生成</p>
<pre><code class="language-bash">ssh-keygen -t rsa -b 4096</code></pre><ul>
<li>按提示保存为 <code>~/.ssh/id_rsa</code></li>
</ul>
</li>
<li><p>将公钥发送到服务器</p>
<pre><code class="language-bash">ssh-copy-id &lt;username&gt;@&lt;Server IP&gt;</code></pre><ul>
<li>输入密码完成登录</li>
</ul>
</li>
<li><p>修改服务器 SSH 配置</p>
<pre><code class="language-bash">ssh &lt;username&gt;@&lt;Server IP&gt;</code></pre><ul>
<li>此时已经无需输入密码就完成登录</li>
</ul>
<pre><code class="language-bash">vim /etc/ssh/sshd_config</code></pre><p> 修改以下内容：</p>
<pre><code class="language-">PermitRootLogin prohibit-password
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no</code></pre><pre><code class="language-bash">systemctl restart sshd</code></pre></li>
</ol>
<h2>Scripts</h2>
<h3>dd</h3>
<pre><code class="language-bash">curl -O https://raw.githubusercontent.com/bin456789/reinstall/main/reinstall.sh || wget -O reinstall.sh $_</code></pre><ul>
<li>详细使用说明请见 <a href="https://github.com/bin456789/reinstall">bin456789/reinstall · GitHub</a></li>
</ul>
<h3>（国内服务器）换源</h3>
<pre><code class="language-bash">https://github.com/SuperManito/LinuxMirrors</code></pre><ul>
<li>按提示选择更换的源</li>
</ul>

      <p style='text-align: right'>
      <a href='https://owlllovo.com/posts/Manual/2025-02-18-Linux-Manual#comments'>看完了？说点什么呢</a>
      </p>
    ]]>
    </content:encoded>
  <guid isPermaLink="false">67b5d4f178927a4341f4a0a8</guid>
  <category>posts</category>
<category>手册</category>
 </item>
  <item>
    <title>EasyTier 内网穿透</title>
    <link>https://owlllovo.com/posts/Tinkering/2025-01-11-EasyTier-%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F</link>
    <pubDate>Sat, 11 Jan 2025 20:12:06 GMT</pubDate>
    <description>EasyTier

EasyTier 中文官网

Introduction

EasyTier 是一</description>
    <content:encoded><![CDATA[
      <blockquote>该渲染由 marked 生成，可能存在排版问题，最佳体验请前往：<a href='https://owlllovo.com/posts/Tinkering/2025-01-11-EasyTier-%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F'>https://owlllovo.com/posts/Tinkering/2025-01-11-EasyTier-%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F</a></blockquote>
      <h1>EasyTier</h1>
<p><a href="https://easytier.cn/">EasyTier 中文官网</a></p>
<h2>Introduction</h2>
<p>EasyTier 是一个内网穿透工具，类似于 ZeroTier，会利用公网服务器交换设备的信息，首先尝试双方建立 p2p 连接即打洞</p>
<p>如果打洞成功，则双方在网络上直接传输数据，达到最高传输速率；否则双方通过服务器转发数据，速度受限于服务器带宽</p>
<p>因此，只要能打洞成功，那些带宽非常小的服务器也可以用来内网穿透</p>
<p>不过与 Zerotier 不同的是，Zerotier 默认使用官方提供的国外服务器，速度很慢，当然也可以改用自建服务器，但是比较繁琐</p>
<p>EasyTier 可以非常简单地完成自建结点并使用自建结点建立连接</p>
<h2>Install</h2>
<h3>Server</h3>
<ol>
<li><p>下载 EasyTier</p>
<ul>
<li>从 <a href="https://github.com/EasyTier/EasyTier/releases/latest">Latest release · EasyTier/EasyTier · GitHub</a> 获取最新版本</li>
</ul>
<pre><code class="language-bash">wget https://github.com/EasyTier/EasyTier/releases/download/v2.1.1/easytier-linux-x86_64-v2.1.1.zip
apt install unzip
unzip easytier-linux-x86_64-v2.1.1.zip
mv easytier-linux-x86_64/* /usr/local/bin/</code></pre></li>
<li><p>创建服务文件 <code>/etc/systemd/system/easytier.service</code></p>
<pre><code class="language-shell">[Unit]
Description=EasyTier Service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
ExecStart=/root/easytier-core --ipv4 10.114.114.1 --network-name &lt;Name&gt; --network-secret &lt;Password&gt;

[Install]
WantedBy=multi-user.target</code></pre><ul>
<li><code>&lt;Name&gt;</code> <code>&lt;Password&gt;</code>：每个入网节点提供相同的 <code>--network-name</code> 和 <code>--network-secret</code> 参数，作为网络的唯一标识</li>
<li>如果需要提供 WireGuard 接入，则添加参数 <code>--vpn-portal wg://0.0.0.0:11013/10.14.14.0/24</code></li>
</ul>
</li>
<li><p>启用服务：</p>
<pre><code class="language-sh">systemctl enable --now easytier.service</code></pre></li>
</ol>
<h3>Clients</h3>
<ol>
<li><p>下载 EasyTier</p>
<ul>
<li>从 <a href="https://github.com/EasyTier/EasyTier/releases/latest">Latest release · EasyTier/EasyTier · GitHub</a> 获取最新版本</li>
<li>可以选择 GUI 版本，操作更加直观简单</li>
</ul>
</li>
<li><p>运行 EasyTier</p>
<ul>
<li><p>GUI</p>
<p>  </p>
<ul>
<li><code>IPv4</code>：填 <code>10.114.114.&lt;2-255&gt;</code> 地址，或勾选 <code>DHCP</code> 自动分配 IP</li>
<li><code>Network Name</code> <code>Network Secret</code>：填与服务器相同的网络名和密码</li>
<li><code>Network Mehtod</code>：<code>tcp://&lt;Server IP&gt;:11010</code></li>
<li>点击 <code>Run Server</code></li>
</ul>
<p>  </p>
<p>  显示出连接的其他设备即运行成功</p>
<p>  <code>Route Cost</code> 为与设备连接方式</p>
<ul>
<li><code>p2p</code> 为与该设备直接连接，即打洞成功</li>
<li><code>relay</code> 为通过服务器中转流量</li>
</ul>
</li>
<li><p>Cli</p>
<pre><code class="language-bash">wget https://github.com/EasyTier/EasyTier/releases/download/v2.1.1/easytier-linux-x86_64-v2.1.1.zip
unzip easytier-linux-x86_64-v2.1.1.zip
mv easytier-linux-x86_64/* /usr/local/bin/
vim /etc/systemd/system/easytier.service</code></pre><pre><code class="language-shell">[Unit]
Description=EasyTier Service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
ExecStart=/root/easytier-core --ipv4 10.114.114.2 --network-name &lt;Name&gt; --network-secret &lt;Password&gt; --peers tcp://&lt;Server IP&gt;:11010

[Install]
WantedBy=multi-user.target</code></pre><pre><code class="language-bash">systemctl enable --now easytier.service</code></pre></li>
</ul>
</li>
<li><p>此时可以通过虚拟网络 IP 访问连接到网络的设备</p>
<ul>
<li><p>可以使用 <code>easytier-cli</code> 命令查看运行状态</p>
<p>  如  <code>easytier-cli peer</code> 查看所有连接节点</p>
<p>  使用 <code>easytier-cli --help</code> 查看所有可用功能</p>
</li>
</ul>
</li>
</ol>
<h3>WireGuard</h3>
<p>在不支持运行 EasyTier 的平台（如 iOS），也可以使用 WireGuard 接入，但是这样所有流量都只能通过 WireGuard 接入的设备转发</p>
<p>每个加入网络的节点都可以提供 WireGuard 接入服务，而不仅限于连接服务器</p>
<ol>
<li><p>创建 WireGuard 服务</p>
<p> 在加入网络的节点设备启动命令里添加 <code>--vpn-portal wg://0.0.0.0:11013/10.14.14.0/24</code></p>
</li>
<li><p>获取 WireGuard 配置信息</p>
<p> <code>easytier-cli vpn-portal</code></p>
<p> 将输出如下配置</p>
<pre><code class="language-">portal_name: wireguard

client_config:
[Interface]
PrivateKey = 9VDvlaIC9XHUvRuE06hD2CEDrtGF+0lDthgr9SZfIho=
Address = 10.14.14.0/24 # should assign an ip from this cidr manually

[Peer]
PublicKey = zhrZQg4QdPZs8CajT3r4fmzcNsWpBL9ImQCUsnlXyGM=
AllowedIPs = 192.168.80.0/20,10.147.223.0/24,10.144.144.0/24
Endpoint = 0.0.0.0:11013 # should be the public ip of the easytier server

connected_clients:
[]</code></pre><p> 输入到支持 WireGuard 代理的软件里即可</p>
</li>
</ol>

      <p style='text-align: right'>
      <a href='https://owlllovo.com/posts/Tinkering/2025-01-11-EasyTier-%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F#comments'>看完了？说点什么呢</a>
      </p>
    ]]>
    </content:encoded>
  <guid isPermaLink="false">67aeecb81368df28ee5cfbb4</guid>
  <category>posts</category>
<category>折腾</category>
 </item>
  <item>
    <title>TeslaMate</title>
    <link>https://owlllovo.com/posts/Tinkering/2025-01-10-TeslaMate</link>
    <pubDate>Fri, 10 Jan 2025 02:00:00 GMT</pubDate>
    <description>Preparation

Tesla API Token

Tesla API Token 可以从以</description>
    <content:encoded><![CDATA[
      <blockquote>该渲染由 marked 生成，可能存在排版问题，最佳体验请前往：<a href='https://owlllovo.com/posts/Tinkering/2025-01-10-TeslaMate'>https://owlllovo.com/posts/Tinkering/2025-01-10-TeslaMate</a></blockquote>
      <h2>Preparation</h2>
<h3>Tesla API Token</h3>
<p>Tesla API Token 可以从以下方式获取：</p>
<ul>
<li><a href="https://github.com/adriankumpf/tesla_auth">Tesla Auth (macOS, Linux, Windows)</a></li>
<li><a href="https://apps.apple.com/us/app/auth-app-for-tesla/id1552058613">Auth app for Tesla (iOS, macOS)</a></li>
</ul>
<p>登录 Tesla 账号保存获取到的 <code>Access Token</code> 和 <code>Refresh Token</code> 供之后使用</p>
<blockquote>
<p>请务必妥善保存这些信息，避免泄露，并在使用后及时清除</p>
</blockquote>
<h2>Installation</h2>
<h3>Install Docker</h3>
<pre><code class="language-bash"># Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null
sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

sudo docker run hello-world</code></pre><p>This command downloads a test image and runs it in a container. When the container runs, it prints a confirmation message and exits.</p>
<h3>Install TeslaMate</h3>
<ul>
<li><a href="https://docs.teslamate.org/">TeslaMate Docs</a></li>
</ul>
<p>如果 TeslaMate 部署在本地服务器，参照官方文档的 Docker 安装即可</p>
<p>如果部署在公网服务器上，需要按照 Advanced Guides 里的方式部署，对数据进行加密，并且添加 Web 页面和 Grafana 的密码保护</p>
<p>以下是公网服务器的部署步骤：</p>
<ol>
<li><p>创建 TeslaMate 的运行文件夹</p>
<pre><code class="language-bash">mkdir -p apps/teslamate && cd $_</code></pre></li>
<li><p>创建文件</p>
<ul>
<li><p><code>docker-compose.yml</code></p>
<pre><code class="language-yaml">services:
  teslamate:
    image: teslamate/teslamate:latest
    restart: always
    depends_on:
      - database
    environment:
      - ENCRYPTION_KEY=${TM_ENCRYPTION_KEY}
      - DATABASE_USER=${TM_DB_USER}
      - DATABASE_PASS=${TM_DB_PASS}
      - DATABASE_NAME=${TM_DB_NAME}
      - DATABASE_HOST=database
      - MQTT_HOST=mosquitto
      - VIRTUAL_HOST=${FQDN_TM}
      - CHECK_ORIGIN=true
      - TZ=${TM_TZ}
    volumes:
      - ./import:/opt/app/import
    labels:
      traefik.enable: "true"
      traefik.port: "4000"
      traefik.http.middlewares.redirect.redirectscheme.scheme: "https"
      traefik.http.middlewares.teslamate-auth.basicauth.realm: "teslamate"
      traefik.http.middlewares.teslamate-auth.basicauth.usersfile: "/auth/.htpasswd"
      traefik.http.routers.teslamate-insecure.rule: "Host(`${FQDN_TM}`)"
      traefik.http.routers.teslamate-insecure.middlewares: "redirect"
      traefik.http.routers.teslamate-ws.rule: "Host(`${FQDN_TM}`) && Path(`/live/websocket`)"
      traefik.http.routers.teslamate-ws.entrypoints: "websecure"
      traefik.http.routers.teslamate-ws.tls: ""
      traefik.http.routers.teslamate.rule: "Host(`${FQDN_TM}`)"
      traefik.http.routers.teslamate.middlewares: "teslamate-auth"
      traefik.http.routers.teslamate.entrypoints: "websecure"
      traefik.http.routers.teslamate.tls.certresolver: "tmhttpchallenge"
    cap_drop:
      - ALL

  database:
    image: postgres:17
    restart: always
    environment:
      - POSTGRES_USER=${TM_DB_USER}
      - POSTGRES_PASSWORD=${TM_DB_PASS}
      - POSTGRES_DB=${TM_DB_NAME}
    volumes:
      - teslamate-db:/var/lib/postgresql/data

  grafana:
    image: teslamate/grafana:latest
    restart: always
    environment:
      - DATABASE_USER=${TM_DB_USER}
      - DATABASE_PASS=${TM_DB_PASS}
      - DATABASE_NAME=${TM_DB_NAME}
      - DATABASE_HOST=database
      - GRAFANA_PASSWD=${GRAFANA_PW}
      - GF_SECURITY_ADMIN_USER=${GRAFANA_USER}
      - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PW}
      - GF_AUTH_ANONYMOUS_ENABLED=false
      - GF_SERVER_DOMAIN=${FQDN_TM}
      - GF_SERVER_ROOT_URL=%(protocol)s://%(domain)s/grafana
      - GF_SERVER_SERVE_FROM_SUB_PATH=true

    volumes:
      - teslamate-grafana-data:/var/lib/grafana
    labels:
      traefik.enable: "true"
      traefik.port: "3000"
      traefik.http.middlewares.redirect.redirectscheme.scheme: "https"
      traefik.http.routers.grafana-insecure.rule: "Host(`${FQDN_TM}`)"
      traefik.http.routers.grafana-insecure.middlewares: "redirect"
      traefik.http.routers.grafana.rule: "Host(`${FQDN_TM}`) && (Path(`/grafana`) || PathPrefix(`/grafana/`))"
      traefik.http.routers.grafana.entrypoints: "websecure"
      traefik.http.routers.grafana.tls.certresolver: "tmhttpchallenge"

  mosquitto:
    image: eclipse-mosquitto:2
    restart: always
    command: mosquitto -c /mosquitto-no-auth.conf
    ports:
      - "127.0.0.1:1883:1883"
    volumes:
      - mosquitto-conf:/mosquitto/config
      - mosquitto-data:/mosquitto/data

  proxy:
    image: traefik:v2.7
    restart: always
    command:
      - "--global.sendAnonymousUsage=false"
      - "--providers.docker"
      - "--providers.docker.exposedByDefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.tmhttpchallenge.acme.httpchallenge=true"
      - "--certificatesresolvers.tmhttpchallenge.acme.httpchallenge.entrypoint=web"
      - "--certificatesresolvers.tmhttpchallenge.acme.email=${LETSENCRYPT_EMAIL}"
      - "--certificatesresolvers.tmhttpchallenge.acme.storage=/etc/acme/acme.json"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./.htpasswd:/auth/.htpasswd
      - ./acme/:/etc/acme/
      - /var/run/docker.sock:/var/run/docker.sock:ro

volumes:
  teslamate-db:
  teslamate-grafana-data:
  mosquitto-conf:
  mosquitto-data:</code></pre><ul>
<li><p>如果服务器上只运行了 TeslaMate，可以不需要修改</p>
</li>
<li><p>否则如果同时运行了其他服务提供网页，推荐把 <code>proxy</code> 里的端口修改为：</p>
<pre><code class="language-yaml">ports:
  - "8080:80"
  - "8443:443"</code></pre><p>  然后用 Nginx 创建反向代理：</p>
<pre><code class="language-bash">apt install nginx
vim /etc/nginx/sites-available/&lt;teslamate.domain.com&gt;</code></pre><pre><code class="language-nginx">server {
    listen 80;
    server_name &lt;teslamate.domain.com&gt;;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # WebSocket support
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

server {
    listen 443;
    server_name &lt;teslamate.domain.com&gt;;

    location / {
        proxy_pass https://localhost:8443;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # WebSocket support
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}</code></pre><pre><code class="language-bash">ln -s /etc/nginx/sites-available/&lt;teslamate.domain.com&gt; /etc/nginx/sites-enabled/&lt;teslamate.domain.com&gt;
nginx -t
nginx -s reload</code></pre><p>  从而避免端口冲突</p>
</li>
</ul>
</li>
<li><p><code>.env</code></p>
<pre><code class="language-env">TM_ENCRYPTION_KEY=&lt;your secure key to encrypt your Tesla API tokens&gt;
TM_DB_USER=teslamate
TM_DB_PASS=&lt;your secure password!&gt;
TM_DB_NAME=teslamate

GRAFANA_USER=&lt;Username&gt;
GRAFANA_PW=&lt;Password&gt;

FQDN_TM=&lt;teslamate.domain.com&gt;

TM_TZ=Asia/Shanghai

LETSENCRYPT_EMAIL=&lt;email@example.com&gt;</code></pre><ul>
<li><code>TM_ENCRYPTION_KEY</code>: 加密 Tesla API Token 的密码</li>
<li><code>TM_DB_PASS</code>: 加密数据库的密码</li>
<li><code>GRAFANA_USER</code> <code>GRAFANA_PW</code>: Grafana 面板的用户名和密码</li>
<li><code>LETSENCRYPT_EMAIL</code>: 接收获取域名证书通知的邮箱</li>
</ul>
</li>
<li><p><code>.htpasswd</code></p>
<pre><code class="language-bash">apt install apache2-utils
htpasswd -cB .htpasswd &lt;Username&gt;</code></pre><p>  按提示设置和确认密码</p>
<ul>
<li>保护后台 Web 页面的用户名和密码</li>
</ul>
</li>
</ul>
</li>
<li><p>启动 TeslaMate</p>
<pre><code class="language-bash">docker compose up -d</code></pre><ol>
<li><p>前往 <code>https://&lt;teslamate.domain.com&gt;</code>，输入后台 Web 页面的用户名和密码登录</p>
</li>
<li><p>输入 <code>Access Token</code> 和 <code>Refresh Token</code> 登录 Tesla 账号</p>
</li>
<li><p>点击右上角设置，设置 URL：</p>
<ul>
<li><code>Web App</code>: <code>https://&lt;teslamate.domain.com&gt;</code></li>
<li><code>Dashboards</code>: <code>https://&lt;teslamate.domain.com&gt;/grafana</code></li>
</ul>
</li>
</ol>
</li>
<li><p>访问 TeslaMate</p>
<p> 此时，访问 <code>https://&lt;teslamate.domain.com&gt;/grafana</code>，输入Grafana 面板的用户名和密码登录</p>
</li>
</ol>
<h2>Backup &amp; Restore</h2>
<h3>Backup</h3>
<p>在 TeslaMate 文件夹（即 docker-compose.yml 同目录）执行</p>
<pre><code class="language-bash">docker compose exec -T database pg_dump -U teslamate teslamate &gt; ./teslamate.bck</code></pre><h3>Restore</h3>
<p>在 TeslaMate 文件夹（即 docker-compose.yml 同目录）执行</p>
<pre><code class="language-bash"># Stop the teslamate container to avoid write conflicts
docker compose stop teslamate

# Drop existing data and reinitialize (Don't forget to replace first teslamate if using different TM_DB_USER)
docker compose exec -T database psql -U teslamate teslamate &lt;&lt; .
DROP SCHEMA public CASCADE;
CREATE SCHEMA public;
CREATE EXTENSION cube WITH SCHEMA public;
CREATE EXTENSION earthdistance WITH SCHEMA public;
.

# Restore
docker compose exec -T database psql -U teslamate -d teslamate &lt; teslamate.bck

# Restart the teslamate container
docker compose start teslamate</code></pre><h2>Upgrade</h2>
<blockquote>
<p>⚠️ 注意</p>
<p>执行更新前务必前往 TeslaMate Release 页面查看更新内容说明和提示</p>
<p>若涉及数据库版本更新，务必在执行操作前对数据进行备份</p>
</blockquote>
<p>在 TeslaMate 文件夹（即 docker-compose.yml 同目录）执行</p>
<pre><code class="language-bash">docker compose pull
docker compose up -d</code></pre>
      <p style='text-align: right'>
      <a href='https://owlllovo.com/posts/Tinkering/2025-01-10-TeslaMate#comments'>看完了？说点什么呢</a>
      </p>
    ]]>
    </content:encoded>
  <guid isPermaLink="false">67b5a1cb78927a4341f49834</guid>
  <category>posts</category>
<category>折腾</category>
 </item>
  <item>
    <title>ServerStatus</title>
    <link>https://owlllovo.com/posts/Tinkering/2025-01-08-ServerStatus</link>
    <pubDate>Wed, 08 Jan 2025 18:12:12 GMT</pubDate>
    <description>title: ServerStatus
date: 2025-01-08 18:12:12
cate</description>
    <content:encoded><![CDATA[
      <blockquote>该渲染由 marked 生成，可能存在排版问题，最佳体验请前往：<a href='https://owlllovo.com/posts/Tinkering/2025-01-08-ServerStatus'>https://owlllovo.com/posts/Tinkering/2025-01-08-ServerStatus</a></blockquote>
      <hr>
<h2>title: ServerStatus
date: 2025-01-08 18:12:12
categories: [折腾]
tags: [Server, Monitor]</h2>
<h1>ServerStatus</h1>
<h2>About</h2>
<p>之前折腾过 <a href="https://blog.owlllovo.com/2024/08/02/2024-08-02-prometheus-grafana/">Prometheus + Grafana</a> 的服务器状态监控，一直用的都还不错，只不过感觉确实太重了，监控的项目非常多，而我日常并不需要监控这么多项目</p>
<p>于是我又给服务器装上了 ServerStatus，这个和哪吒差不多，但是比哪吒轻量许多，没有 webssh 等多余的功能，是一个单纯的服务器监控，并且完全开源</p>
<p>这里我选择的是其中一个基于 Rust 重写的版本，功能更强，性能更高</p>
<p><a href="https://serverstatus.owlllovo.com">serverstatus.owlllovo.com</a></p>
<h2>Installation</h2>
<h3>Server</h3>
<pre><code class="language-bash">mkdir -p /opt/ServerStatus && cd /opt/ServerStatus

wget https://github.com/zdz/ServerStatus-Rust/releases/download/v1.8.1/server-x86_64-unknown-linux-musl.zip

sudo apt install -y unzip

unzip server-x86_64-unknown-linux-musl.zip

mv -v stat_server.service /etc/systemd/system/stat_server.service

systemctl daemon-reload

systemctl start stat_server

systemctl status stat_server

vim /opt/ServerStatus/config.toml</code></pre><ul>
<li><p>修改配置文件：</p>
<ul>
<li><p><code>admin_user = &quot;&lt;Username&gt;&quot;</code>：管理员用户名</p>
</li>
<li><p><code>admin_pass = &quot;&lt;Password&gt;&quot;</code>：管理员密码</p>
</li>
<li><p><code>{name = &quot;&lt;Client Name&gt;&quot;, password = &quot;&lt;Client Password&gt;&quot;, alias = &quot;&lt;Client Display Name&gt;&quot;, location = &quot;&lt;Country Code&gt;&quot;, type = &quot;&lt;Platform&gt;&quot;, labels = &quot;os=&lt;OS&gt;;ndd=&lt;Date&gt;;spec=&lt;CPU Cores&gt;C/&lt;Memory&gt;G/&lt;Disk&gt;G;&quot;}</code></p>
<ul>
<li><code>&lt;Client Name&gt;</code>：客户端名称，每台唯一</li>
<li><code>&lt;Client Password&gt;</code>：客户端密码，须与客户端配置对应</li>
<li><code>&lt;Client Display Name&gt;</code>：客户端显示的名字</li>
<li><code>&lt;Country Code&gt;</code>：客户端所在国家二字母代码，如 <code>CN</code> <code>US</code></li>
<li><code>&lt;Platform&gt;</code>：客户端平台，如 <code>arm</code> <code>x86</code> <code>kvm</code> <code>ovz</code></li>
<li><code>os=&lt;OS&gt;;ndd=&lt;Date&gt;;spec=&lt;CPU Cores&gt;C/&lt;Memory&gt;G/&lt;Disk&gt;G;</code>：客户端系统信息，如 <code>os=ubuntu;ndd=2025/01/31;spec=1C/2G/20G;</code></li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>Client</h3>
<ul>
<li>前往 <a href="https://github.com/zdz/ServerStatus-Rust/releases">Releases · zdz/ServerStatus-Rust</a> 查看最新版本</li>
</ul>
<pre><code class="language-bash">mkdir -p /opt/ServerStatus && cd /opt/ServerStatus

wget https://github.com/zdz/ServerStatus-Rust/releases/download/v1.8.1/client-x86_64-unknown-linux-musl.zip

apt install -y unzip vnstat

unzip client-x86_64-unknown-linux-musl.zip

mv -v stat_client.service /etc/systemd/system/stat_client.service

vim /etc/systemd/system/stat_client.service</code></pre><p>替换这行：</p>
<pre><code class="language-ini">ExecStart=/opt/ServerStatus/stat_client -a "https://&lt;domain&gt;:8080/report" -u "&lt;Client Name&gt;" -p "&lt;Client Password&gt;" -n</code></pre><pre><code class="language-bash">systemctl daemon-reload

systemctl enable --now stat_client

systemctl status stat_client</code></pre>
      <p style='text-align: right'>
      <a href='https://owlllovo.com/posts/Tinkering/2025-01-08-ServerStatus#comments'>看完了？说点什么呢</a>
      </p>
    ]]>
    </content:encoded>
  <guid isPermaLink="false">67aeeb0ee8d369ebb1386fc2</guid>
  <category>posts</category>
<category>折腾</category>
 </item>
  
</channel>
</rss>