惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
C
Cisco Blogs
T
The Exploit Database - CXSecurity.com
G
GRAHAM CLULEY
AI
AI
腾讯CDC
月光博客
月光博客
P
Privacy International News Feed
aimingoo的专栏
aimingoo的专栏
博客园 - 聂微东
Latest news
Latest news
宝玉的分享
宝玉的分享
The Last Watchdog
The Last Watchdog
H
Hacker News: Front Page
博客园 - 【当耐特】
H
Hackread – Cybersecurity News, Data Breaches, AI and More
G
Google Developers Blog
D
Docker
D
DataBreaches.Net
O
OpenAI News
IT之家
IT之家
T
Threat Research - Cisco Blogs
S
Securelist
S
Secure Thoughts
V
Visual Studio Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
A
Arctic Wolf
I
Intezer
Simon Willison's Weblog
Simon Willison's Weblog
L
Lohrmann on Cybersecurity
C
Cyber Attacks, Cyber Crime and Cyber Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Tor Project blog
Google DeepMind News
Google DeepMind News
J
Java Code Geeks
Help Net Security
Help Net Security
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
N
Netflix TechBlog - Medium
F
Fortinet All Blogs
Attack and Defense Labs
Attack and Defense Labs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
博客园 - Franky
C
Check Point Blog
美团技术团队
Hugging Face - Blog
Hugging Face - Blog
罗磊的独立博客
Forbes - Security
Forbes - Security
F
Full Disclosure
S
Security @ Cisco Blogs
B
Blog RSS Feed

夜行人

回家路上 第一期的直播演示项目 震动检测器 正能量 在线参观CodeLab Neverland 发布 CodeLab Adapter 3.3.1 DynamicTable 之 纸糊方向盘 CodeLab DynamicTable: 一个可实施的技术方案 CodeLab Insight 发布 Alpha 版 情人节 Home Assistant 周报 && IoT 周报 (02) Joplin: 关注隐私的 Evernote 开源替代软件 浏览器的未来与 Web 传感器 Home Assistant 周报 && IoT 周报 (01) 百宝箱(01) 论自由 介绍 WebThings Home Assistant 周报 && iot 周报 (00) 百宝箱(00) 毛姆读书心得 传世之作 周末徒步 CodeLab Adapter ❤️ Jupyter/Python 航班 躲雨 夏令营途中 [译]思想--作为一种技术 The future of coding 美国之行 三门问题的程序模拟 从Python转向Pharo https://blog.just4fun.site/post/iot/iot-open-source-projects/ Python异步编程笔记 https://blog.just4fun.site/post/iot/iot-open-source-hardware-community/ 万物积木化开发者社区 CodeLab ❤️ Blender Scratch3技术分析之云变量 API(第7篇) [译]对管道(Pipes)的偏爱 [译]提出正确的问题比得到正确答案更重要 蓝牙设备与Scratch3.0 创建你的第一个Scratch3.0 Extension Scratch3技术分析之项目内部数据(第6篇) Scratch3技术分析之社区 API(第5篇) Scratch3技术分析之User API(第4篇) Scratch3技术分析之项目主页API(第3篇) Scratch3技术分析之静态资源API(第2篇) Scratch3.0、micro:bit与Windows7 https://blog.just4fun.site/post/iot/zerynth-vs-micropython/ 核聚变、方所与半宅空间 可视化编程为何是个糟糕的主意 codelab.club周末聚会 关于codelab.club '下一件大事'是一个房间 Hungry Robot - Eat everything 编程作为一种思考方式 今日简史 史蒂夫·乔布斯传 罗素自选文集 https://blog.just4fun.site/post/edx/tianjin-scratch-ai/ https://blog.just4fun.site/post/edx/richie-cms-openedx/ 徒步武功山 WebUSB与micro:bit 积木化编程与3D场景 夜宿武功山顶 scratch3-adapter接入优必选Alpha系列机器人 https://blog.just4fun.site/post/edx/video-migration-note/ scratch3-adapter重构笔记 https://blog.just4fun.site/post/edx/edx-community-members/ 两种硬件编程风格的比较 使用micro:bit自制PPT翻页笔 柏拉图对话集 scratch3.0 + micro:bit 七月电影放映计划 非营利组织的管理 Screenly--用树莓派让任何屏幕变为可编程的数字标牌 以最佳实践开始你的Django项目 micro:bit与事件驱动 为Scratch3.0设计的插件系统(上篇) OCR应用一例 近两年读过的一些好书 blockly开发之使用python驱动浏览器中的turtle(2) 牛顿新传 文学理论入门 逻辑的引擎 人生的意义 blockly开发之生成并运行js代码(1) blockly开发之hello world(0) micro:bit使用笔记 神器之Termux https://blog.just4fun.site/post/iot/micropython-notes/ Cozmo what is this Scratch的前世今生 下段旅程 我行在远方 爆裂 途中杂记 https://blog.just4fun.site/post/edx/open-edx-startup/ cozmo系列之入门 - 有性格且可编程的机器人 PaperWeekly开发笔记 创业二三事
使用 MicroBlocks 制作物联网设备(兼容 Home Assistant)
种瓜 · 2023-05-01 · via 夜行人

MicroBlocks 是快乐制造平台 – 阿立

前言

之前在 MicroBlocks 分享会上演示了如何使用 MicroBlocks 制作物联网设备(兼容 Home Assistant)。 将 MicroBlocks 与 Home Assistant 结合, 提供了一条通往 CodeLab 可编程空间 的理想途径。

本文将分享演示中涉及的代码,并提供教程帮助大家复现之前的演示。

接下来的内容分为以下 3 个部分:

安装 Home Assistant

Home Assistant 是个成熟的开源项目, 由于社区的努力, 每天都在变得更好。

要在本地运行 Home Assistant, 有许多种方式, 最简单的方式可能是使用 Docker。

首先安装 Docker, 把 Docker 看成一个普通软件安装在本地即可。

安装好 Docker 之后, 在命令行里运行以下命令,安装并启动 Home Assistant:

1
docker run -d --name homeassistant --restart=unless-stopped -e TZ=Asia/Shanghai -v config:/config -p 8123:8123 ghcr.io/home-assistant/home-assistant:2022.11.4

等待这条命令运行完, Home Assistant 就在本地运行起来了。

在浏览器中打开 http://127.0.0.1:8123。 第一次打开,需要填写一些信息,完成后便可进入 Home Assistant 控制面板。

管理 Home Assistant

如果需要管理正在运行的 Home Assistant, 以下命令或许有帮助:

  • docker start homeassistant: 启动 Home Assistant
  • docker stop homeassistant: 停止 Home Assistant
  • docker ps: 显示正在运行和已停止的 docker 容器

配置 Home Assistant

为了让 MicroBlocks 编程的物联网设备能够兼容 Home Assistant(在 Home Assistant 中管理它们), 我们需要在 Home Assistant 与设备之间建立沟通桥梁,有多种方式可以做到这点,出于以下原因,我选择 MQTT 作为通信管道:

  • 能够突破局域网的限制(只需要把 MQTT 服务器放到公网)
  • 能够获知设备是否离线(MQTT 遗言机制)
  • 方便调试(可使用 MQTT Explorer观察通信中的产生的消息)

为了建立 Home Assistant 与设备之间的通信管道,需要进行以下 2 个操作:

  1. 将 Home Assistant 连接到 MQTT 服务器上(考虑到通信的安全性, 我们应该使用独立的 MQTT 账号)
  2. 在 MicroBlocks 中将设备连接到 MQTT 服务器 (使用同样的的 MQTT 账号)

让我们先进行第 1 个操作, 在 Home Assistant 将 MQTT 集成进来。

首先打开集成页面(/config/integrations).

输入mqtt, 选择 MQTT。

我们需要一个 MQTT broker 和账号, 在这个实验里我使用的是 CodeLab MQTT broker

  • 服务器: mqtt.longan.link
  • 端口: 1883
  • 用户名: ha_mb
  • 密码: ha_mb

将这些信息填到页面:

至此就完成了在 Home Assistant 里配置 MQTT 的工作。

提醒: 建议使用独立的 MQTT 账号,如果你使用公开的账号(就像本文里的), 每个拥有用户名/密码的人都能够控制你的设备! 如果你需要独立的 MQTT 账号, 可以给我发邮件索要。 由于 MQTT 是标准协议,你也可以部署自己的 MQTT 服务器(MQTT broker)。

使用 MicroBlocks 为设备编程

接下来让我们使用 MicroBlocks 为物联网设备编程。

由于设备需要通过网络与 MQTT 服务器通信,你需要准备一个能够连接网络的编程板,我使用的是 ESP32。

在 MicroBlocks 中为板子刷入固件后,就可以开始编程了。

建议从这个程序模版开始 Demo template

我们先让这段程序运行起来,然后简单解释下这段程序做了什么。

为了让它运行起来,需要填入 wifi 信息。完成后就可以运行程序了!

程序运行之后,设备就会连到 MQTT 服务器上,由于 Home Assistant 也连到了同一个 MQTT 账号,于是我们就可以在 Home Assistant 上管理这个设备了!

MicroBlocks 会实时将程序刷到设备里,所以你可以随时断开 usb 连接。只要设备通上电,它就会运行这些程序。

提醒: 如果你不想使用本文公开的 MQTT 账号,你还需要填入你自己的 MQTT 账号信息。如果你使用自己的 MQTT 账号,也要修改 loop 积木里头的 MQTT 积木。

整合以上工作

顺利完成了以上工作后,设备应该已经接入到 Home Assistant。

怎么找到设备呢?

打开实体注册表(/config/entities), 你将看到这两个设备:

设备既然已经接入 Home Assistant, 接下来我们就可以把它们放到仪表盘上。

仪表盘 里添加你要的设备(实体):

完成后你就可以在仪表盘上管理风扇,并查看温度。

解释细节

前边 MicroBlocks 的程序,为何能够将设备注册到 Home Assistant 里, 并允许 Home Assistant 管理它呢?

答案是这个 MicroBlocks 程序实现了 Home Assistant 兼容的 MQTT 协议。

Home Assistant 公开了一份MQTT 协议, 任何实现这个 MQTT 协议的程序(无论是否运行在硬件上), 都能够与 Home Assistant 交互, 包括以下交互:

  • 发现设备: 将设备注册到 Home Assistant
  • 获取传感器信息、控制执行器
  • 更新离线与在线状态

通过查看 MicroBlocks 程序的自定义积木,对照着 Home Assistant 的 MQTT 协议,你可以弄懂具体是怎么实现的。

弄懂这些以后,你就可以将任何设备接入进来了!

为了帮助你弄懂它们,让我们进一步深入到细节里。

MicroBlocks 程序管理着两个设备(典型的做法可能是只管理一个设备):

  • 风扇(fan)
  • 温度传感器(temperature)

展开 loop 积木, 你就能够看到来自 Home Assistant 的 MQTT 消息是如何控制风扇的:

温度传感器相关的代码在这里:

进阶

长期运行

为了让你的物联网系统长期运行,你需要将 Home Assistant 跑在一个不关机的设备上,社区里流行的做法是跑在树莓派上

提醒: 如果你在安装 Home Assistant 操作系统 时遇到困难(通常是因为没有翻墙导致的), 可以试试采用 Docker 安装, 和前头一样,安装完 Docker 之后, 只需一行命令即可安装 Home Assistant。

完成之后, 在浏览器里访问 http://树莓派的IP:8123, 即可访问到树莓派里的 Home Assistant。

API & AI

Home Assistant 开放了它的 API:

使用 MicroBlocks 将设备变为 Home Assistant 兼容设备之后,我们就可以使用 Home Assistant 的 API 驱动这些设备。通过简单包装这些 API(诸如使用 Python/Snap/Scratch), 就可以将可编程空间变为一个教学环境。

由于这些 API 整洁而通用, 你可以将它们投喂给大语言模型, 这样一来, 就可以让 AI 来管理你的可编程空间了。

如果你想探索 AI 与物联网之间的协作,我最推荐的做法是, 把这些 API 包装为 LangChain 的 Agent(Tool), 然后让 GPT-3.5/GPT-4 操作它。

还有一个与 AI 有关的有趣方向是,将 Home Assistant 语音/意图(今年是 Home Assistant 的语音之年)与大语言模型结合。

参考