Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >RaspberryPi接入HomeKit

RaspberryPi接入HomeKit

作者头像
治电小白菜
修改于 2023-09-23 07:11:55
修改于 2023-09-23 07:11:55
2K00
代码可运行
举报
文章被收录于专栏:技术综合技术综合
运行总次数:0
代码可运行

github上有大佬做了个homebridge,可以将一些苹果homekit不支持的硬件接入到homekit中 感谢望天创总裁的iPhone,感觉ios版本比较低。。。

1.homekit

百度百科

homekit

2.homebridge

1)介绍

是一个轻量的NodeJS服务,你可以在你家的局域网中运行这个来模拟IOS HomeKit API。它支持很多插件,提供基本的桥来将一些智能家居厂商提供的第三方API接入HomeKit 自从siri支持HomeKit设备,这意味着你可以通过Homebridge,用siri来控制那些不支持HomeKit的设备。

2)开源地址

https://github.com/nfarina/homebridge

3)插件搜索

https://www.npmjs.com/search?q=homebridge-plugin 可以看到很多插件哦!

插件

3.树莓派上安装

环境: 树莓派3b,Linux raspberrypi 4.9.41-v7+

1)安装nvm nodejs版本控制器
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo apt-get update
$ sudo apt-get install nvm
2)安装nodejs v8.3.0

实测这个版本npm bug少。。。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ nvm install v8.3.0
3)安装完,查看
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ nvm ls

图片.png

4)安装cnpm

npm的淘宝源,提升下载速度

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ npm install -g cnpm --registry=https://registry.npm.taobao.org
5)安装homebridge(全局安装)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cnpm install -g homebridge
6)安装插件

找了个方便测试的插件 监测树莓派CPU温度的插件 全局安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cnpm install -g homebridge-raspberrypi-temperature
7)配置homebridge

不配置,直接运行homebridge会报找不到配置文件的

进入到/home/pi/.homebridge

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cd /home/pi/.homebridge

ls查看有木有config.json,没有就创建

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
touch config.json

使用nano编辑,不用vim,因为不好复制.写完ctrl+x保存

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ nano config.json

图片.png

截图里是两个插件,我们就用一个,看下面的配置

图片.png

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
        "bridge":{
                "name":"ZZES-IOT",
                "username":"3A:4E:2F:9B:0E:7C",
                "port":52203,
                "pin":"520-20-520"
        },

        "description":"ZZES Super IOT",

        "accessories":[
                {
                    "accessory":"RaspberryPiTemperature",
                    "name":"Pi-CPU-Tem"
                }
        ]
}
8)运行homebridge
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ homebridge

图片.png

4.iPhone上配置

注意:要和树莓派在同一局域网

1)去appstore下载家庭这个App
2)打开家庭

图片.png

3)点击添加配件

可以看到扫描到我的树莓派了

图片.png

4)添加

图片.png

点击手动添加

图片.png

输入我们前面config.json里配置的pin码

图片.png

5)成功添加

接下来就是一些分类什么的,一路下一步了。。。

图片.png

图片.png

6)查看

图片.png

图片.png

7)siri测试

之前用另一个同学手机试的

图片.png

5.结束

有时间研究研究插件的写法

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C语言函数大全--k开头的函数
上述示例程序中,在 my_init() 函数中使用 kcalloc() 函数分配了一个大小为 40 字节的整型数组,并将其初始化为 1 到 10 的连续整数。在之后,打印了数组内容并释放了内存。
huazie
2025/04/27
1300
C语言函数大全--k开头的函数
Linux驱动开发-内核定时器
内核定时器是内核用来控制在未来某个时间点(基于jiffies(节拍总数))调度执行某个函数的一种机制,相关函数位于 <linux/timer.h> 和 kernel/timer.c 文件中。
DS小龙哥
2022/04/08
3.1K0
10_linux内核定时器实验
​ 硬件定时器产生的周期性中断,中断频率就是系统频率(拍率)。系统拍率可以设置,单位是HZ,可在编译内核时通过图形化界面设置,设置路径如下:Kernel Features -> Timer frequency([=y])
全栈程序员站长
2022/09/13
2.2K0
Linux内存管理之MMU的过程
之前写过一篇《CPU是如何访问内存的?》的文章,简单介绍了cpu访问内存的过程。有了之前的感性认识,这篇站在arm的角度再深度讲解一下,看完你会发现不理解arm原理就直接撸内核代码简直是耍流氓。
刘盼
2020/06/22
2.4K0
开源项目的测试和质量保证
本文深入研究了开源项目中测试和质量保证的重要性,以及如何实施有效的测试策略来确保开源软件的质量。通过案例研究和最佳实践,我们将了解测试在开源项目中的角色,以及如何确保开源软件满足用户的期望。
猫头虎
2024/04/09
2030
开源项目的测试和质量保证
Linux驱动开发13个实用案例
以下为你提供20个Linux驱动开发的实用案例,涵盖字符设备驱动、块设备驱动、网络设备驱动等不同类型,包含应用场景、技巧、代码示例和操作步骤。先赞再看后评论,腰缠万贯财进门。
威哥爱编程
2025/02/21
1820
[linux][kprobe]谁动了我的文件---使用kprobe找到目标进程
问题场景: 云计算IaaS平台上,经常使用libvirt+qemu-kvm做基础平台。libvirt会在/etc/libvirt/qemu/目录下,保存很多份qemu的配置文件,如ubuntu.xml。 作者发现其中的配置文件会在特定的场景下被修改,却不知道哪个进程是凶手。为了找到凶手,作者写下了这个debug工具。 代码分析: 代码路径:https://github.com/pacepi/whotouchmyfile #include <linux/kernel.h> #include <linux/mo
皮振伟
2018/04/09
2.4K0
通过netfilter使用get/setsockopt实现用户态与内核模块之间的通信
本文讲述通过netfilter和get/setsockopt实现用户态与内核态之间的通信。首先介绍相关背景,然后给出代码示例。重点在于介绍通过netfilter的钩子机制实现用户态设置和获取socket选项,从而完成用户态与内核态之间的通信。
雷大亨
2018/01/01
2.9K0
Linux内核定时器timer_list
本文介绍了如何通过Linux内核定时器实现LED灯的闪烁,从硬件的配置、驱动程序以及示例代码方面进行了详细的阐述。通过申请GPIO、配置GPIO、编写驱动程序以及添加设备到内核和加载设备,最终实现了LED灯的闪烁。
Jack_Cui
2017/12/28
3.4K0
嵌入式Linux系列第20篇:驱动编写入门
很早之前就有网友建议写一篇关于Linux驱动的文章。之所以拖到现在才写,原因之一是我之前没有在工作中遇到需要自己手动去写驱动的需求,主要是现在Linux内核驱动的支持已经比较完善了,另外一个原因是自己水平实在有限,不敢写驱动这个话题,Linux驱动里涉及到的东西太多了,很多年前专门买过驱动相关的书籍,厚厚的,看的云里雾里。借此机会,在这里给大家做个非常非常入门级的介绍,希望对大家有所帮助。
用户2366192
2021/05/31
2.6K0
Linux笔记(13)| 字符设备驱动基础入门
距离上一次更新有一段时间了,主要是最近更忙一些,一般来说,有时间我会尽量更新,如果比较忙的话就更新慢一些。
飞哥
2020/08/28
2.2K0
Linux笔记(13)| 字符设备驱动基础入门
Linux内核模块详解
内核模块是Linux操作系统中一个比较独特的机制。通过这一章学习,希望能够理解Linux提出内核模块这个机制的意义;理解并掌握Linux实现内核模块机制的基本技术路线;运用Linux提供的工具和命令,掌握操作内核模块的方法。
全栈程序员站长
2022/09/15
8.5K0
深入浅出:Linux设备驱动之中断与定时器
“我叮咛你的 你说 不会遗忘 你告诉我的 我也全部珍藏 对于我们来说 记忆是飘不落的日子 永远不会发黄 相聚的时候 总是很短 期待的时候 总是很长 岁月的溪水边 捡拾起多少闪亮的诗行 如果你要想念我 就望一望天上那 闪烁的繁星 有我寻觅你的 目光” 谢谢你,曾经来过~ 中断与定时器是我们再熟悉不过的问题了,我们在进行裸机开发学习的 时候,这几乎就是重难点,也是每个程序必要的模块信息,那么在Linux中,我们又怎么实现延时、计数,和中断呢? 一、中断 1.概述 所谓中断是指cpu在执行程序的过程中,出现了某些
小小科
2018/05/03
3.2K0
深入浅出:Linux设备驱动之中断与定时器
OpenCAS 内核模块加载
OpenCAS 内核模块加载 内核模块基本研发步骤介绍 模块加载函数,当通过insmod或者modprobe命令加载内核模块,模块加载函数会自动在内核中执行模块初始化函数 模块卸载函数,当rmmod命令卸载内核模块时候,会在内核执行模块的销毁函数 模块许可申明,许可证是用来描述内核模块的许可权限 模块的参数,模块参数是模块被加载时候可以传递参数,它对应的模块的全局变量 模块到处符号,内核模块可以导出的符号(symbol,对应的变量或者函数),导出后其他的内核模块可以使用本模块的函数或者变量 模块作者申请 内
用户4700054
2022/08/17
1.6K0
linux内核定时器实验
定时器是我们最常用到的功能,一般用来完成定时功能,本章我们就来学习一下 Linux 内核提供的定时器 API 函数,通过这些定时器 API 函数我们可以完成很多要求定时的应用。Linux内核也提供了短延时函数,比如 微秒、纳秒、毫秒延时函数,本章我们就来学习一下这些和时间有关的功能。
全栈程序员站长
2022/09/17
3.9K0
linux内核定时器实验
字符设备驱动程序接口
__init__宏:被修饰的函数会被链接器链接放入.init.text段中(本来默认情况下函数是被放入.text段中)。对内核而言是一种暗示,表示该函数仅在初始化期间使用,内核启动时统一会加载.init.text段中的这些模块安装函数,加载完后就会把这个段给释放掉以节省内存。 __exit__宏:被修饰的函数仅用于模块卸载,链接器会将其放入特殊的ELF段。如果模块被直接内嵌到内核中,或内核的配置不允许卸载模块,则被修饰的函数将被简单的丢弃。 prink函数:模块在被加载到内核后,它能调用的函数仅仅是由内核导出的那些函数。KERN_INFO是printk的打印级别,其实只是一个字符串(如<1>)。操作系统的命令行中也会有一个打印级别的设置(值为0-7),当前操作系统中执行printk的时候会去对比printk中的打印级别和操作系统命令行中设置的打印级别,小于命令行设置级别的信息会被打印出来,大于的会被拦截。 module_init宏:该宏声明的函数会在模块被装载到内核中调用。 module_exit宏:该宏声明的函数会在模块被卸载时调用。 MODULE_LICENSE宏:指定该代码所使用的许可证协议。 MODULE_AUTHOR:描述模块作者。
菜菜cc
2022/11/15
1.6K0
字符设备驱动程序接口
platform架构驱动简单示例+dts-compatible打印输出
arm64上driver+dts机制启动,C代码,drivers/usb/dwc3/core.c
tankaro
2025/01/20
1040
find_sys_call_table和kallsysms_lookup_name的区别
find_sys_call_table 和 kallsyms_lookup_name 都可以用于查找内核符号,但它们的具体作用和使用场景有所不同。以下是两者的详细对比:
233333
2024/05/30
3560
Linux驱动开发-内核共享工作队列
工作队列常见的使用形式是配合中断使用,在中断的服务函数里无法调用会导致休眠的相关函数代码,有了工作队列机制以后,可以将需要执行的逻辑代码放在工作队列里执行,只需要在中断服务函数里触发即可,工作队列是允许被重新调度、睡眠。
DS小龙哥
2022/04/08
2.2K0
如何编写一个简单地内核模块
Linux给应用程序提供了丰富的api,但是有时候我们需要跟硬件交互,访问一些特权级信息,所以可以使用编写内核模块这种方式。 另外Linux是宏内核结构,效率非常高,没有微内核那样各个模块之间的通讯损耗,但是又不能方便的对内核进行改动,可扩展性和可维护性比较差,内核模块提供了一种动态加载代码的方式,弥补了宏内核的不足。
yifei_
2022/11/14
1.4K0
推荐阅读
相关推荐
C语言函数大全--k开头的函数
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验