{"id":15140440,"url":"https://github.com/phodal/smart-home","last_synced_at":"2025-10-23T17:31:15.600Z","repository":{"id":150637672,"uuid":"93531583","full_name":"phodal/smart-home","owner":"phodal","description":"Phodal's Smart Home Setup Guide：HomeBridge + Home Assistant + Amazon Echo","archived":false,"fork":false,"pushed_at":"2017-08-11T02:49:51.000Z","size":1419,"stargazers_count":155,"open_issues_count":0,"forks_count":37,"subscribers_count":15,"default_branch":"master","last_synced_at":"2025-01-30T19:47:39.759Z","etag":null,"topics":["amazon-echo","assistant","broadlink-rm","broadlink-sp","home-assistant","home-automation","homebridge","iot","raspberry-pi","wemo","yeelight"],"latest_commit_sha":null,"homepage":"https://www.wandianshenme.com/guide/home-automation/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/phodal.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-06-06T15:04:36.000Z","updated_at":"2024-05-31T08:28:57.000Z","dependencies_parsed_at":"2023-05-27T00:00:33.108Z","dependency_job_id":null,"html_url":"https://github.com/phodal/smart-home","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phodal%2Fsmart-home","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phodal%2Fsmart-home/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phodal%2Fsmart-home/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phodal%2Fsmart-home/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/phodal","download_url":"https://codeload.github.com/phodal/smart-home/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":237861647,"owners_count":19378035,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["amazon-echo","assistant","broadlink-rm","broadlink-sp","home-assistant","home-automation","homebridge","iot","raspberry-pi","wemo","yeelight"],"created_at":"2024-09-26T08:20:59.574Z","updated_at":"2025-10-23T17:31:10.212Z","avatar_url":"https://github.com/phodal.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Phodal's Smart Home Guide\n\n\u003e 这是一个探索性项目，旨在提供一个完整的智能家居搭建指南。\n\n视频演示地址：[腾讯视频](https://v.qq.com/x/page/r0512ss7xc9.html)\n\n架构图：\n\n![Architecture](images/architecture.jpg)\n\n架构简介\n\n - 使用 Home Assistant、HomeBridge 作为智能家居的核心\n - 使用 Amazon Echo 作为语音输入工具（当前仅支持英语）\n - 使用 iPhone 的“家庭”应用作为控制工具\n - 可以使用任何的设备连接 Home Assistant 服务来控制应用\n\n目录\n\n * [基础知识篇](#基础知识篇)\n    * [智能家居简介](#智能家居简介)\n    * [智能音箱](#智能音箱)\n       * [Amazon Echo](#amazon-echo)\n    * [中心网关](#中心网关)\n       * [Home Assistant](#home-assistant)\n       * [HomeBridge](#homebridge)\n    * [设备](#设备)\n       * [通讯机制与协议](#通讯机制与协议)\n       * [旧设备中枢](#旧设备中枢)\n       * [仿真设备](#仿真设备)\n * [实战设备篇](#实战设备篇)\n    * [ESP8266 仿真设备](#esp8266-仿真设备)\n       * [ESP8266 仿真 Wemo](#esp8266-仿真-wemo)\n       * [ESP8266 仿真 Philips Hue](#esp8266-仿真-philips-hue)\n    * [小米智能插座](#小米智能插座)\n * [集成网关篇](#集成网关篇)\n    * [Raspberry Pi Home Assistant](#raspberry-pi-home-assistant)\n    * [Home Assistant Broadlink PM PRO](#home-assistant-broadlink-pm-pro)\n       * [获取 Broadlink 配置](#获取-broadlink-配置)\n    * [Homebridge](#homebridge-1)\n       * [安装 Homebridge](#安装-homebridge)\n       * [开机启动](#开机启动)\n    * [HomeBridge 集成 Home Assistant](#homebridge-集成-home-assistant)\n    * [Amazon Echo 设置](#amazon-echo-设置)\n    * [结合 HomeAssistant 和 Amazon Echo](#结合-homeassistant-和-amazon-echo)\n       * [只开关设备](#只开关设备)\n       * [定制命令](#定制命令)\n    * [定制 Home Assistant](#定制-home-assistant)\n    * [Raspberry Pi Cornata](#raspberry-pi-cornata)\n    * [学习用户习惯](#学习用户习惯)\n    * [工具集](#工具集)\n\n基础知识篇\n===\n\n\n智能家居简介\n---\n\n当前，我们谈论智能家居的时候，我们实现上是在讨论：家庭自动化。引自维基百科，对于智能家居的介绍[^wiki_home_automation]：\n\n[^wiki_home_automation]: https://en.wikipedia.org/wiki/Home_automation\n\n\u003e Home automation or smart home (also known as domotics) is building automation for the home. \n\n随着机器学习和深度学习等 AI 技术的进一步普及，这一点（智能化）在最近几年里，应该会发生一些剧烈的变化。而无论如何，我可不太希望我要被机器催着起床。\n\n开始实战之前，让我们先关注于当前智能家居的几个关键点：\n\n - 设备。这些设备要么使用 WiFi，要么要使用蓝牙，方便使用手机连接上这些设备。依当前的情况来看，主要是以 WiFi 为主，在手机上配置完后，可以轻松地实现远程控制。与此同时，他们在与手机通讯的时候，会使用一些自定义的通讯规则，并且似乎很容易被破解（参见仿真器一节）。如 Philips Hue 智能灯、Wemo 开关等等，他们都已经可以被仿真，并作为 Homekit 组件使用。\n - 自动化。自动化是指你可以定时也开关某个特定的设备，闹钟一响，便打开灯诸如此类的。\n - 场景（规则）。与自动化稍微区别的是，场景是某个特定场合下，对一系列设备的操作，如早起，便开灯、打开窗帘，离开家，则锁门、关闭一系列用电器、开启防盗功能等等。\n - 中心网关。当我们所使用的一系列设备拥有 WiFi 功能时，装有各种软件的手机便相当于控制中枢。而这样的设计本身是不合理的，你要在手机上安装一系列的应用。这个时候，便需要一个额外的软件作为中心，来接入这些设备，而手机上也不需要多余的额外软件。如 HomeKit、Home Assistant 就是这样的例子。\n\n而作为一个普通的用户，我们只需要关注便利的生活。作为一个极客，我们则关注于如何改造成需要的功能。\n\n智能音箱\n---\n\n\u003e 学术上有个概念是“传声器阵列”，主要由一定数目的声学传感器组成，用来对声场的空间特性进行采样并处理的系统。\n\n如下图所示 Amazon Echo 的电路板：\n\n![Amazon Echo 电路板](images/echo-microphone-array.jpg)\n\n其及对应的麦克风的位置：\n\n![Amazon Echo 麦克风位置](images/amazon-echo-devices.jpg)\n\n其所要主要解决远距离语音识别的问题，以保证真实场景下的语音识别率。而这些设备的主要原理，都是**将语音信号发送到服务器端，由服务器端识别，并匹配到对应的指令上**。\n\n### Amazon Echo\n\n实验表明 AWS 的服务并不是那么可靠的~~，经常出现：Your Echo dot is not connected\n\n自定义组件的原理，如下图所示：\n\n![Amazon Echo 自定义 Skill](images/plex-to-alexa.png)\n\n中心网关\n---\n\n### Home Assistant\n\n\u003e Home Assistant 是一个运行在 Python 3 上的开源家庭自动化平台。能跟踪和控制家庭中的所有设备，并实现自动化控制，同时还完美的支持在 Raspberry Pi 上。\n\n通过 Home Assistant 插件，它可以直接兼容各式硬件设备。其原理是通过 WiFi、BLE、Zigbee、MQTT 等不同的协议，来与不同的本地设备互联，并提供一个响应式的 Web 界面、PWA 应用、iOS 应用，让用户可以轻松地与设备进行交互。\n\n其在桌面浏览器上的界面如下图所示：\n\n![Home Assistant 桌面](images/ha-desktop.png)\n\n手机浏览器的界面如下图所示：\n\n![Home Assistant 调色-small](images/ha-color-light-small.jpg)\n\n对于提供丰富功能（如 RGB 灯）的设备来说，它也能支持丰富的操作，即上图。同时，还能接上 Amazon Echo、HomeKit 等各式各样的中心。\n\n### HomeBridge\n\n\u003e HomeKit 是由 Apple 公司推出的智能家居平台，包括iOS 上的 SDK、智能家居硬件通信协议 (HAP: HomeKit Accessory Protocol) 、以及 MFi(Made for iPhone/iPod/iPad) 认证等等。\n\n借助于 iPhone、iPad、iWatch 等设备及『家庭』应用，用户可以轻松地掌控各种 HomeKit 配件。并且可以通过设备上 Siri 应用、Homepod，直接用语音来与设备交互。\n\n当前要在 Homekit，有三种方法：\n\n - 购买昂贵的 MFi 设备。\n - 借助于 Home Assistant，来自建 Homekit API 服务连接设备。\n - 模拟现有的 MFi 设备。诸如使用 ESP8266 仿真 Philip Hues。\n\n引自：[使用iOS Homekit控制树莓派](http://caoyudong.com/2017/01/10/%E4%BD%BF%E7%94%A8iOS-Homekit%E6%8E%A7%E5%88%B6%E6%A0%91%E8%8E%93%E6%B4%BE/)：HAP 协议部分是需要加入 MFi Program 才能获取文档，而且 MFi Program 无法以个人开发者身份加入。\n\n因此，这个时候我们就需要借助于 Homebridge。\n\nHomebridge 是一个用 Node.js 实现的轻量级后台，可以在家庭网络上运行，用于模拟iOS HomeKit API。 它支持插件——由社区提供的模块，这些插件能提供从 HomeKit 到 “智能家居” 设备制造商，提供的各种第三方API的基本桥梁。\n\n![Homekit 示例](images/homebridge-homekit-small.jpg)\n\n而我们只需要有一个 iPhone 在手便可以了。\n\n设备\n---\n\n如果只有上面的几种中心网关，而缺少设备，那么整个智能的中心就是不完善的。而这也是最近几年来，限制智能家居发展的一个因素：找不到合适的用户需求。\n\n### 通讯机制与协议\n\n**WeMo**\n\n**ZigBee**\n\n**WiFi**\n\n**BLE**\n\n\u003e 这是一种无线技术标准，用来让固定与移动设备，在短距离间交换数据，以形成个人局域网（PAN）。其使用短波特高频（UHF）无线电波，经由2.4至2.485 GHz的ISM频段来进行通信。\n\n**红外摇控**\n\n\u003e 红外遥控是一种无线、非接触控制技术，具有抗干扰能力强，信息传输可靠，功耗低，成本低，易实现等显著优点。\n\n常见的设备有电视机、电调的遥控器。\n\n### 旧设备中枢\n\n如小米的万能遥控、Broadlink RM Pro\n\n### 仿真设备\n\n设备：\n\n - Amazone Echo Dot\n - NodeMCU\n - Broadlink RM Pro\n - Yeelight\n - Raspberry Pi 2\n - Android、iOS 设备\n\n\n实战设备篇\n===\n\nESP8266 仿真设备\n---\n\n - Wemo：可以被 Amazon Echo 识别\n - Philips Hue：可以被 HomeKit 识别 ?\n\n### ESP8266 仿真 Wemo\n\n**要求**：下载 Ardunio IDE，地址： [http://www.arduino.cc/en/main/software](http://www.arduino.cc/en/main/software)\n\n一、安装 Arduino ESP8266\n\nArduino ESP8266 GitHub 地址： [https://github.com/esp8266/Arduino](https://github.com/esp8266/Arduino)\n\n安装方法：\n\n1. 启动 Arduino IDE，并进入 ``Preferences`` 窗口\n2. 在 Additional Board Manager URLs 中输入： ``http://arduino.esp8266.com/stable/package_esp8266com_index.json``\n3. 从 Tools \u003e Board  菜单中打开 Boards Manager，并输入安装 esp8266 平台\n\n二、测试仿真\n\n下载安装包：[https://github.com/kakopappa/arduino-esp8266-alexa-multiple-wemo-switch](https://github.com/kakopappa/arduino-esp8266-alexa-multiple-wemo-switch)\n\nSetup 步骤：\n\n - 下载代码\n - 在编辑器中打开 wemos.ino\n - 修改 WiFi 设置\n - 定义开关及其回调，在 ``officeLightsOn``、``officeLightsOff``、``kitchenLightsOn``、``kitchenLightsOff`` 中\n - 烧录\n\n相似项目 Arduino Esp8266 Alexa Wemo switch emulator：https://github.com/witnessmenow/esp8266-alexa-wemo-emulator\n\n### ESP8266 仿真 Philips Hue\n\nESP8266 Hue Emulator 项目地址：[ESP8266HueEmulator](https://github.com/probonopd/ESP8266HueEmulator)\n\n这个 Demo 需要这么几个库``NeoPixelBus``、``aJson``、``Time``、``NtpClient``，同时还需要修改一些相关的配置。\n\n因此直接使用这个脚本安装，比较简单：\n\n**注意**：如果是 Mac OS，需要将下面脚本中的 ``$HOME/Arduino/libraries/`` 改为 ``$HOME/Documents/Arduino/libraries/``\n\n```\nmkdir -p $HOME/Arduino/libraries/\ncd $HOME/Arduino/libraries/\ngit clone --branch 2.1.4 https://github.com/Makuna/NeoPixelBus.git\ngit clone https://github.com/interactive-matter/aJson.git\ngit clone https://github.com/PaulStoffregen/Time.git\ngit clone https://github.com/gmag11/NtpClient.git\nsed -i -e 's|#define PRINT_BUFFER_LEN 256|#define PRINT_BUFFER_LEN 4096|g'  aJson/aJSON.h\ncd -\ngit clone https://github.com/probonopd/ESP8266HueEmulator.git\nsed -i -e 's|#include \"/secrets.h\"|//#include \"/secrets.h\"|g' ESP8266HueEmulator/ESP8266HueEmulator/ESP8266HueEmulator.ino\nsed -i -e 's|//const char|const char|g' ESP8266HueEmulator/ESP8266HueEmulator/ESP8266HueEmulator.ino\n```\n\n再将代码烧录到 ESP8266 上，就可以在 Homekit 看到相应的配置。\n\n小米智能插座\n---\n\n寻找设备\n\n```\nnpm install -g miio\nmiio --discover\n```\n\n```\nnpm install --save miio\n```\n\n集成网关篇\n===\n\nRaspberry Pi Home Assistant\n---\n\nImages: [https://home-assistant.io/docs/hassbian/installation/](https://home-assistant.io/docs/hassbian/installation/)\n\nImages Downloader: [https://etcher.io/](https://etcher.io/)\n\n发现文档好像有点问题，便手动地尝试安装：\n\n```\npip3 install --upgrade homeassistant\n```\n\n运行\n\n```\nsudo -u homeassistant -H /srv/homeassistant/bin/hass\n```\n\n并不没工作，于是执行官方的安装脚本：\n\n```\ncurl -O https://raw.githubusercontent.com/home-assistant/fabric-home-assistant/master/hass_rpi_installer.sh \u0026\u0026 sudo chown pi:pi hass_rpi_installer.sh \u0026\u0026 bash hass_rpi_installer.sh\n```\n\n又在我的 MBP 上安装尝试\n\n```\npip3 install homeassistant\nhass --open-ui\n```\n\n然后发现安装完就可以了。\n\nHome Assistant Broadlink PM PRO\n---\n\n在 ``configuration.yaml`` 文件中添加下面的配置：\n\n```\n# Example configuration.yaml entry\nswitch:\n  - platform: broadlink\n    host: IP_ADDRESS\n    mac: 'MAC_ADDRESS'\n    switches:\n      reciever:\n        command_on: 'switch_packet on'\n        command_off: 'switch_packet off'\n```\n\n### 获取 Broadlink 配置\n\n1. 从 [https://github.com/NightRang3r/Broadlink-e-control-db-dump](https://github.com/NightRang3r/Broadlink-e-control-db-dump) 获取数据导出脚本\n2. 打开 易控（英语：E-Control） 应用，点击``菜单`` -\u003e ``共享`` -\u003e ``云分享`` 就会生成相应的配置文件\n3. 浏览手机上的 ``/broadlink/newremote/SharedData/`` 目录，复制出 ``jsonSubIr``、``jsonButton``、``jsonIrCode`` 三个文件\n4. 安装好 python 环境， 并安装 ``pip install simplejson``\n5. 执行第一步代码中的脚本，``python getBroadlinkSharedData.py``\n6. 安装``python-broadlink``，地址 ``https://github.com/mjg59/python-broadlink.git``\n\n不知道是不是我的空调问题，获取到的配置是空的。\n\nHomebridge\n---\n\n相关的插件：\n\n - Yeelight：[homebridge-yeelight](https://github.com/vvpossible/homebridge_yeelight)\n - 小米设备：[homebridge-aqara](https://github.com/snOOrz/homebridge-aqara)\n - Broadlink RM 红外：[homebridge-broadlink-rm](https://github.com/lprhodes/homebridge-broadlink-rm)\n - Broadlink SP 开关: [homebridge-broadlink-sp](https://github.com/smka/homebridge-broadlink-sp)\n - Home Assistant: [homebridge-homeassistant](https://github.com/home-assistant/homebridge-homeassistant)\n\n### 安装 Homebridge\n\n编辑软件源\n\n```\nsudo vim /etc/apt/sources.list\n```\n\n修改为阿里云，速度会更快一些：\n\n```\ndeb http://mirrors.aliyun.com/raspbian/raspbian/ jessie main non-free contrib\ndeb-src http://mirrors.aliyun.com/raspbian/raspbian/ jessie main non-free contrib\n```\n\n安装 Node.js ARM 版 ：\n\n```\ncurl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -\nsudo apt-get install -y nodejs\n```\n\n安装 avahi\n\n```\nsudo apt-get install libavahi-compat-libdnssd-dev\n```\n\n安装 homebridge\n\n```\nnpm install -g homebridge\n```\n\n安装相应的插件\n\n```\nsudo npm install -g homebridge-yeelight\nsudo npm install -g homebridge-homeassistant\nsudo npm install -g homebridge-broadlink-sp\nsudo npm install -g homebridge-broadlink-rm\nsudo npm install -g homebridge-platform-wemo\nsudo npm install -g homebridge-miio\n```\n\n对应的配置在 ``home-assistant`` 目录下的 ``configuration.yaml`` 文件。\n\n### 开机启动\n\n在 /etc/default 目录下创建 homebridge 文件，内容如下：\n\n```\n#Defaults / Configuration options for homebridge\n#The following settings tells homebridge where to find the config.json file and where to persist the data (i.e. pairing and others)\nHOMEBRIDGE_OPTS=-U /var/lib/homebridge\n\n# If you uncomment the following line, homebridge will log more\n# You can display this via systemd's journalctl: journalctl -f -u homebridge\n# DEBUG=*\n```\n\n在 /etc/systemd/system 目录下创建 homebridge.service 文件，内容如下：\n\n```\n[Unit]\nDescription=Node.js HomeKit Server\nAfter=syslog.target network-online.target\n\n[Service]\nType=simple\nUser=homebridge\nEnvironmentFile=/etc/default/homebridge\n# Adapt this to your specific setup (could be /usr/bin/homebridge)\n# See comments below for more information\nExecStart=/usr/local/bin/homebridge $HOMEBRIDGE_OPTS\nRestart=on-failure\nRestartSec=10\nKillMode=process\n\n[Install]\nWantedBy=multi-user.target\n```\n\n启动服务\n\n```\nsystemctl daemon-reload\nsystemctl enable homebridge\nsystemctl start homebridge\n```\n\nHomeBridge 集成 Home Assistant\n---\n\n安装插件：\n\n```\nnpm install -g homebridge-homeassistant\n```\n\n添加配置：\n\n```\n\"platforms\": [\n  {\n    \"platform\": \"HomeAssistant\",\n    \"name\": \"HomeAssistant\",\n    \"host\": \"http://127.0.0.1:8123\",\n    \"password\": \"yourapipassword\",\n    \"supported_types\": [\"binary_sensor\", \"climate\", \"cover\", \"device_tracker\", \"fan\", \"group\", \"input_boolean\", \"light\", \"lock\", \"media_player\", \"scene\", \"sensor\", \"switch\"],\n    \"logging\": true\n  }\n]\n```\n\nAmazon Echo 设置\n---\n\n我用的是 Amazon Echo Dot 2 就是那个 Mini 版的\n\n - 安装 Yeelight Skill\n - 安装 Mijia\n\n两者需要登录小米的账号，才能授权获得控制。\n\n结合 HomeAssistant 和 Amazon Echo\n---\n\n文档：[https://home-assistant.io/components/alexa/](https://home-assistant.io/components/alexa/)\n\n如果只是为了打开、关闭设备，可以直接使用 ``emulated_hue`` 组件，它可以提供一个虚拟的 Philips Hue 桥。\n\n### 只开关设备\n\n使用 Home Assistant 的 **Emulated Hue** 组件就可以了，添加如下的配置：\n\n```\nemulated_hue:\n  host_ip: 192.168.199.242\n```\n\n其中的 ``192.168.199.242`` 即是 Home Assistant 的服务器地址\n\n更详细的配置，如：[https://github.com/Teagan42/HomeAssistantConfig](https://github.com/Teagan42/HomeAssistantConfig)\n\n### 定制命令\n\n为了使用更多的功能，则需要使用将 Home Assistant 暴露到公网上——使用诸如花生壳等。（PS:由于当前家里使用的是光纤，需要光纤猫，实施上比较困难；因此，外部访问需要使用一级跌幅，暂时没有进行这方面的尝试）。\n\n随后在 [Amazon developer console](https://developer.amazon.com/)\n\n创建相应的 Alexa Skill，并添加 Endpoing：https://YOUR_HOST/api/alexa?api_password=YOUR_API_PASSWORD\n\n**必须使用 HTTPS**\n\n定制 Home Assistant\n---\n\nHome Assistant RESTful API 地址：[Home Assistant API](https://home-assistant.io/developers/rest_api/)\n\n![Home Assistant](images/ha_architecture.png)\n\n\n结合 ESP8266 + Broadlink + Amazon Echo\n---\n\n在上面我们说到，ESP8266 可以模拟成 Wemo 设备，而 Wemo 可以直接由 Amazon Echo 识别。但是 Broadlink 直接与 Amazon Echo 配合，不可避免地出现了一些问题。在看到了[python-broadlink](https://github.com/mjg59/python-broadlink) 库，便想着是不是直接拿 flask 结合一下 broadlink 就可以实现一个简单的 HTTP 服务。随后，ESP8266 只需要几个请求吧，就能直接对家电进行控制。\n\n### Broadlink HTTP Server\n\n为了避免自己造底层的轮子，想在 GitHub 上寻觅了一番，找到 [broadlink-http-rest](https://github.com/radinsky/broadlink-http-rest) 项目，修改成适合自己需求的代码，放在了 GitHub 上：[https://github.com/phodal/broadlink-http-rest](https://github.com/phodal/broadlink-http-rest)\n\n实际上，我们所需要做的就是，修改自己的 ``settings.py`` 文件。并且这部分的内容可以直接由 API 来生成。搭建之前，先下载上面的代码：\n\n```\ngit clone https://github.com/phodal/broadlink-http-rest\n```\n\n然后安装依赖：\n\n```\npip install -r requirements.txt\n```\n\n再运行起服务: ``python server.py``\n\n然后访问：[http://localhost:8080/learnCommand/tvon](http://localhost:8080/learnCommand/tvon)，就可以直接学习红外指令。\n\n接着通过访问：[http://localhost:8080/sendCommand/tvon](http://localhost:8080/sendCommand/tvon)，就可以发送相应的红外编码。\n\n同时，它会在 ``settings.py`` 下生成相应的 ``tvon`` 命令及编码，如下：\n\n```\n[Commands]\ntvon = 9bff369b8c9f94d6a2ec86e2b83749670662283a956794365cfb8ecf42d42cc41256a408c128a0bcbe56e6050b561e1436c998299ff9adc8a17d8350d55341e83eca9d5bb905472e5a23bc035f94dab944af2de6513b09502c17b385fca66090\n```\n\n同样的，对于关闭设备来说，我们就需要使用 tvoff。\n\n以此类推，我们就可以录入所有的设备。\n\n### 使用 ESP8266 控制 Broadlink\n\n打开 ``smart-home/emulator/esp8266-wemos/esp8266-wemos.ino`` 文件，写个负责发请求的方法：\n\n```\nvoid httpServer(String command) {\n    HTTPClient http;\n\n    Serial.print(\"[HTTP] begin...\\n\");\n    // configure traged server and url\n    //http.begin(\"https://192.168.1.12/test.html\", \"7a 9c f4 db 40 d3 62 5a 6e 21 bc 5c cc 66 c8 3e a1 45 59 38\"); //HTTPS\n    http.begin(\"http://192.168.199.170:8080/sendCommand/\" + command); //HTTP\n\n    Serial.print(\"[HTTP] GET...\\n\");\n    // start connection and send HTTP header\n    int httpCode = http.GET();\n\n    // httpCode will be negative on error\n    if(httpCode \u003e 0) {\n        // HTTP header has been send and Server response header has been handled\n        Serial.printf(\"[HTTP] GET... code: %d\\n\", httpCode);\n\n        // file found at server\n        if(httpCode == HTTP_CODE_OK) {\n            String payload = http.getString();\n            Serial.println(payload);\n        }\n    } else {\n        Serial.printf(\"[HTTP] GET... failed, error: %s\\n\", http.errorToString(httpCode).c_str());\n    }\n}\n```\n\n对应的，我们只需要写相应的控制逻辑：\n\n```\nvoid tvOn() {\n      httpServer(\"tvon\");\n}\n\nvoid tvOff() {\n      httpServer(\"tvoff\");\n}\n\nvoid boxOn() {\n      httpServer(\"mion\");\n}\n\nvoid boxOff() {\n      httpServer(\"mioff\");\n}\n\n\nvoid airOn() {\n      httpServer(\"airon\");\n}\n\nvoid airOff() {\n      httpServer(\"airoff\");\n}\n```\n\n便可以使用 ESP8266 控制 Broadlink。\n\n最后，便是烧录程序，然后直接使用 Amazon Echo 控制。\n\nRaspberry Pi Cornata\n---\n\n官方文档：[Use Cortana Function on IoT Core](https://developer.microsoft.com/en-us/windows/iot/Docs/CortanaOnIoTCore)\n\n**下载 Windows 10 IoT Core Dashboard**\n\n下载地址：[https://developer.microsoft.com/en-us/windows/iot/docs/iotdashboard](https://developer.microsoft.com/en-us/windows/iot/docs/iotdashboard)\n\n**安装最新镜像**\n\n打开 Windows 10 IoT Core Dashboard，为 RPi 烧录镜像，如下图所示：\n\n![Windows 10 IoT Dashboard](https://az835927.vo.msecnd.net/sites/iot/Resources/images/IoTDashboard/IoTDashboard_SetupPage.PNG)\n\n官方建议要更新到最新。使用 Web 界面打开设备的 Windows Update，http://\u003cdevice IP\u003e:8080/#Windows%20Update，如[http://192.168.199.223:8080/#Windows%20Update](http://192.168.199.223:8080/#Windows%20Update)。\n\n然后到 ``Devices`` 中看是否出现相应的 Microphone 设置。。\n\n![Windows 10 IoT Audio](images/win10-iot-with-audio.png)\n\n**开机启动 Cortana**\n\n在首页的 ``Device Settigns`` 最下面有一个 ``Start Cortana on Boot`` 的选项。\n\n**使用 Windows IoT Remote Server 访问**：在 [http://192.168.199.223:8080/#Remote](http://192.168.199.223:8080/#Remote) 在勾上 ``Enable Windows IoT Remote Server``\n\n**设置 speechlanguage 成中文**：\n\n打开 ``Processes`` -\u003e ``Run command``，执行：\n\n```\nIoTSettings -set region CN\nIoTSettings -set speechlanguage zh-Hans-CN\n```\n\n学习用户习惯\n---\n\nTBD\n\n工具集\n---\n\nTools:\n\n - [Alexa Skill Testing Tool](https://echosim.io/)\n - [Raspberry Pi Burn images Tools](https://etcher.io/)\n\nLICENSE\n---\n\n[![Phodal's Idea](http://brand.phodal.com/shields/idea-small.svg)](http://ideas.phodal.com/)\n\n© 2017 A [Phodal Huang](https://www.phodal.com)'s [Idea](http://github.com/phodal/ideas).  This code is distributed under the MIT license. See `LICENSE` in this directory.\n\n[待我代码编成，娶你为妻可好](http://www.xuntayizhan.com/blog/ji-ke-ai-qing-zhi-er-shi-dai-wo-dai-ma-bian-cheng-qu-ni-wei-qi-ke-hao-wan/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphodal%2Fsmart-home","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphodal%2Fsmart-home","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphodal%2Fsmart-home/lists"}