我最近写了一篇关于使用 Raspberry Pi 远程监控互联网连接的文章,在我的例子中,是监控 Starlink(SpaceX 的卫星互联网服务)。我想监控的另一件重要事情是 Starlink 随着时间的推移使用了多少功率,我正在考虑每天早上手动读取我的 Kill-A-Watt 读数,但这很无聊。而且不是很准确,因为它是每天一个时间点。四处挖掘,我发现了 Shelly Plug US,它有自己的小内置 HTTP API 和一个据称准确的电源监视器。它基于 ESP8266,您甚至可以刷入 Tasmota 等替代固件,以更好地控制设备。在撰写本文时,Shelly Plug US 似乎处于预购状态,但 eBay 上有一些可用,所以我从那里似乎有信誉的人那里买了一个。当它到达时,它装在一个非常整洁的小盒子里,几乎不比插头本身大,我很高兴地报告它不是假货或仿冒品(我总是有点紧张从 eBay 购买物联网设备。虽然亚马逊也已经最近在争夺“我应该最不信任谁”的位置)。我不想创建 Shelly Cloud 帐户、使用 Shelly App 和所有爵士乐。默认情况下,我不想让我家的某些电气基础设施可以通过 Internet 进行控制。插入 Shelly 插头,并在其中插入负载(在本例中,是我的 Starlink 电源砖,它为 Starlink 天线和路由器供电)。
在我的 Mac 上,连接到 shellyplug___ 网络(插件默认处于 AP 模式)。等待 Mac 上的 DHCP 地址,然后连接到该 CIDR 的 .1(在我的情况下,我在浏览器中连接到 192.168.33.1)。我转到“互联网和安全”窗格,将插头设置为连接到我现有的 WiFi 网络(注意:插头只能在 2.4 GHz 上运行,所以不要尝试连接到仅 5 GHz 的网络!):然后一旦它连接到我的 WiFi 网络,我使用 fing(你也可以使用 nmap)来找到新的 Shelly 插头。如果您设置了静态 IP,则可以跳过此步骤。我再次连接到它,然后更新了我的 DHCP 和 DNS 服务器,为插头添加了一个静态 IP 地址和 DNS 映射,这样就可以很容易地在我家 shelly1.geerli.net 连接到它。注意:此时我还更新了设备的固件,并设置了 Web UI 访问密码。有总比没有好,但总的来说,如果您不信任制造设备的公司(即使您相信...),也不要购买它,或将其隔离在单独的 WiFi 网络上。我深入研究了 Shelly Plug API,以了解如何从中获得我想要的有价值的信息:当前的功耗。
看起来我可以通过端点 /meter/0 获取该数据,所以我用 curl 确认了同样多:功率以瓦特为单位返回,总和是“连接的电器消耗的总能量(以瓦特为单位)” ,我猜它会时不时地重置。没问题,我们将使用来自 power 的现货值,我们可以汇总数据以获取诸如每日/每周/每月总计之类的信息。好的,所以我有办法从 Shelly 插头中获取数据,但我想添加此数据随时间变化的图表,以查看是否有任何趋势(例如,Dishy 是否在夜间消耗更多能量,或在阴天还是暴风雨天?),并对其消耗的能源千瓦时进行 100% 准确的计算(可以将其转换为对 Starlink 感兴趣的其他人的成本估算)。我最初深入研究了 Prometheus 文档,了解如何使用他们的官方客户端库生成指标(请参阅编写导出器),但似乎该文档——以及互联网上的大多数其他内容——都专注于“获取应用指标数据”在你的 [Go|Python|Ruby|etc.] 应用程序之外”,而不是“编写一个非常简单的刮刀,将几个值放入 Prometheus”的用例。 # HELP my_metric 我有兴趣监控的一个指标,比如瓦特功率。# TYPE my_metric Gaugemy_metric 79 所以我只是查看了预期的指标端点输出格式(上图),拿出我的金锤(PHP),并写了一个 52 -line PHP 脚本(请参阅我的 shelly-plug-prometheus 项目): 作为一个超级懒惰的开发人员(懒惰也可以称为“高效”),我不想花额外的 5 分钟构建 Docker 映像和保持这一点,所以我构建了 PHP 脚本,这样我就可以在官方 PHP Docker 映像的实例中运行它,如下所示:
docker run -d -p 9924:80 --name shelly-plug \ -e SHELLY_HOSTNAME='my-shelly-plug-host-or-ip' \ -e SHELLY_HTTP_USERNAME='username' \ -e SHELLY_HTTP_PASSWORD='password' \ -v "$PWD":/var/www/html \ php:8-apache 我添加了配置以启动 Shelly Plug 监控容器到我的 internet-pi 存储库,将其部署到 Raspberry Pi 尽职尽责地提醒我我的主要ISP (Spectrum) 没有给我接近我支付的性能,然后构建了一个显示我用电量的仪表板:缺少的一件事是显示所选时间段的 kWh(或只是每天 kWh 的图表或类似的东西)。我的 Grafana-foo 还不够好,无法弄清楚如何使用 Prometheus 数据将时间点瓦特读数(或一个平均值)转换成千瓦时显示所涉及的数学(似乎是用Grafana 主要使用 InfluxDB,我更熟悉那里的查询语法)。是的,我知道我可以使用 Home Assistant 来完成所有这些,但我现在没有,而且我仍在等待整个“互联家庭”空间更加成熟,然后才能相信将更多东西放入我的生活空间一些中央API!是的,我知道我也可以配置 MQTT 来做一些这样的事情,但我目前不使用 MQTT,所以(目前)创建一个单独的导出器并自己管理数据需要做很多工作。自从我找到了 Shelly Plug,我就对它很满意了。它使我免于尝试构建某种 Pi 或 Pico 连接的功率测量设备,尽管我很惊讶更多制造商没有功率监控智能插头。我的意思是,Kill-A-Watt 的制造商 P3 International 将成为“轻松将已经测量的数据整合到仪表板中”的鞋子,我认为。
实际上,只有少数智能插头可以在设备/电器级别进行电源监控。否则,您必须在您的电箱中构建一个完整的家庭监控解决方案,并且您只能真正在电路级别获取数据。我很快就会更深入地回顾 SpaceX 的 Starlink,但就目前而言,它似乎每天持续使用大约 90W 的功率,平均每天一整天,很少有超过 100W 的峰值,并且似乎没有与传输/接收的功耗相关性活动或天气。