{"id":614,"date":"2020-07-02T11:27:31","date_gmt":"2020-07-02T03:27:31","guid":{"rendered":"https:\/\/www.iotch.xyz\/?p=614"},"modified":"2020-07-02T11:27:31","modified_gmt":"2020-07-02T03:27:31","slug":"%e7%be%a4%e6%99%96%e6%90%ad%e5%bb%bahomeassistant%e8%bf%9e%e6%8e%a5homekit","status":"publish","type":"post","link":"https:\/\/www.iotch.xyz\/?p=614","title":{"rendered":"\u7fa4\u6656\u642d\u5efaHomeAssistant\u8fde\u63a5HomeKit"},"content":{"rendered":"\n<p>\u5728\u7fa4\u6656Docker\u7684\u6ce8\u518c\u8868\u91cc\u641c\u7d22\u5e76\u4e0b\u8f7d<code>homeassistant\/home-assistant<\/code><br>\u5728<code>\u9ad8\u7ea7\u8bbe\u7f6e<\/code>\u91cc\u52fe\u9009<code>\u542f\u52a8\u81ea\u52a8\u91cd\u65b0\u542f\u52a8<\/code><br>\u5728<code>\u5377<\/code>\u91cc\u8bbe\u7f6e<code>\/docker\/homeassistant<\/code>\u6620\u5c04\u88c5\u8f7d\u8def\u5f84<code>\/config<\/code><br>\u5728<code>\u7f51\u7edc<\/code>\u91cc\u52fe\u9009<code>\u4f7f\u7528\u4e0eDocker Host\u76f8\u540c\u7684\u7f51\u7edc<\/code><br>\u5728<code>\u73af\u5883<\/code>\u91cc\u8bbe\u7f6e<code>TZ<\/code>\u6570\u503c\u4e3a<code>Asia\/Shanghai<\/code><br>\u6d4f\u89c8\u5668\u8bbf\u95ee<code>http:\/\/\u7fa4\u6656\u7684ip:8123<\/code>\u5373\u53ef\u5b8c\u6210\u5269\u4e0b\u7684\u8bbe\u7f6e<\/p>\n\n\n\n<p>\u6dfb\u52a0HomeKit\u652f\u6301<br>\u7f16\u8f91<code>\/docker\/homeassistantconfiguration.yaml<\/code>\u5728\u672b\u5c3e\u52a0\u5165<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>1<\/td><td>homekit:<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u672b\u5c3e\u6709\u7a7a\u683c<\/p>\n\n\n\n<p>\u8fd4\u56deHomeAssistant\u9875\u9762\uff0c\u4f1a\u6536\u5230HomeKit\u7684\u914d\u7f6e\u4ee3\u7801<br>\u5982\u679c\u5fd8\u8bb0\u4e86\u6b64\u4ee3\u7801\uff0c\u53ef\u4ee5\u5220\u9664<code>.homekit.state<\/code>\u6587\u4ef6<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"\u5b89\u88c5MQTT\u670d\u52a1\u5668\">\u5b89\u88c5MQTT\u670d\u52a1\u5668<\/h1>\n\n\n\n<p>\u5728\u7fa4\u6656Docker\u7684\u6ce8\u518c\u8868\u91cc\u641c\u7d22\u5e76\u4e0b\u8f7d<code>ncarlier\/mqtt<\/code><br>\u5728<code>\u9ad8\u7ea7\u8bbe\u7f6e<\/code>\u91cc\u52fe\u9009<code>\u542f\u52a8\u81ea\u52a8\u91cd\u65b0\u542f\u52a8<\/code><br>\u5728<code>\u7f51\u7edc<\/code>\u91cc\u52fe\u9009<code>\u4f7f\u7528\u4e0eDocker Host\u76f8\u540c\u7684\u7f51\u7edc<\/code><br>\u5b8c\u6210\u8bbe\u7f6e<br>\u7f16\u8f91<code>\/docker\/homeassistantconfiguration.yaml<\/code>\u5728\u672b\u5c3e\u52a0\u5165<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>1<br>2<br>3<br>4<\/td><td>mqtt:<br>broker: 192.168.1.110<br>discovery: true<br>discovery_prefix: homeassistant<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"\u70e7\u5199esp8266\u7a0b\u5e8f\">\u70e7\u5199esp8266\u7a0b\u5e8f<\/h1>\n\n\n\n<p>\u57fa\u7840\u8bbe\u7f6e\u53c2\u8003\u8fd9\u91cc<br>(<a href=\"https:\/\/randomnerdtutorials.com\/how-to-install-esp8266-board-arduino-ide\/\" target=\"_blank\" rel=\"noreferrer noopener\" rel=\"nofollow\" >https:\/\/randomnerdtutorials.com\/how-to-install-esp8266-board-arduino-ide\/<\/a>)<br>\u6b64\u5916\u5b89\u88c5\u5e93<code>PubSubClient<\/code><br>\u70e7\u5199\u7a0b\u5e8f\u5982\u4e0b<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br>22<br>23<br>24<br>25<br>26<br>27<br>28<br>29<br>30<br>31<br>32<br>33<br>34<br>35<br>36<br>37<br>38<br>39<br>40<br>41<br>42<br>43<br>44<br>45<br>46<br>47<br>48<br>49<br>50<br>51<br>52<br>53<br>54<br>55<br>56<br>57<br>58<br>59<br>60<br>61<br>62<br>63<br>64<br>65<br>66<br>67<br>68<br>69<br>70<br>71<br>72<br>73<br>74<br>75<br>76<br>77<br>78<br>79<br>80<br>81<br>82<br>83<br>84<br>85<br>86<br>87<br>88<br>89<br>90<br>91<br>92<br>93<\/td><td><br>#include &lt;PubSubClient.h&gt;<br><br><br>const char* ssid = \"xxx\";<br>const char* password = \"xxx\";<br>const char* mqtt_server = \"xxx.xxx.xxx.xxx\";<br><br>WiFiClient espClient;<br>PubSubClient (espClient);<br>String switch1;<br>String strTopic;<br>String strPayload;<br><br>void setup_wifi() {<br><br>delay(10);<br>\/\/ We start by connecting to a WiFi network<br>Serial.println();<br>Serial.print(\"Connecting to \");<br>Serial.println(ssid);<br><br>WiFi.begin(ssid, password);<br><br>while (WiFi.status() != WL_CONNECTED)<br>{<br>delay(500);<br>Serial.print(\".\");<br>}<br><br>Serial.println(\"\");<br>Serial.println(\"WiFi connected\");<br>Serial.println(\"IP address: \");<br>Serial.println(WiFi.localIP());<br>}<br><br>void callback(char* topic, byte* payload, unsigned int length) {<br>payload[length] = '';<br>strTopic = String((char*)topic);<br>if(strTopic == \"esp\/switch1\")<br>{<br>switch1 = String((char*)payload);<br>if(switch1 == \"ON\")<br>{<br>Serial.println(\"ON\");<br>digitalWrite(LED_BUILTIN, LOW);<br>}<br>else<br>{<br>Serial.println(\"OFF\");<br>digitalWrite(LED_BUILTIN, HIGH);<br>}<br>}<br>}<br><br><br>void reconnect() {<br>\/\/ Loop until we're reconnected<br>while (!client.connected()) {<br>Serial.print(\"Attempting MQTT connection...\");<br>\/\/ Attempt to connect<br>if (client.connect(\"arduinoClient\")) {<br>Serial.println(\"connected\");<br>\/\/ Once connected, publish an announcement...<br>client.subscribe(\"esp\/#\");<br>} else {<br>Serial.print(\"failed, rc=\");<br>Serial.print(client.state());<br>Serial.println(\" try again in 5 seconds\");<br>\/\/ Wait 5 seconds before retrying<br>delay(5000);<br>}<br>}<br>}<br><br>void setup()<br>{<br>Serial.begin(115200);<br>setup_wifi();<br>client.setServer(mqtt_server, 1883);<br>client.setCallback(callback);<br><br>pinMode(LED_BUILTIN, OUTPUT);<br>digitalWrite(LED_BUILTIN, HIGH);<br>}<br><br>void loop()<br>{<br>if (!client.connected()) {<br>reconnect();<br>}<br>client.loop();<br>}<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"\u6d4b\u8bd5\">\u6d4b\u8bd5<\/h1>\n\n\n\n<p>\u7f16\u8f91<code>\/docker\/homeassistantconfiguration.yaml<\/code>\u5728\u672b\u5c3e\u52a0\u5165<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>1<br>2<br>3<br>4<br>5<br>6<br>7<\/td><td>switch:<br>- platform: mqtt<br>name: \"light\"<br>state_topic: \"esp\/switch1\"<br>command_topic: \"esp\/switch1\"<br>payload_on: \"ON\"<br>payload_off: \"OFF\"<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u5728<code>\u5f00\u53d1\u8005\u5de5\u5177\/MQTT<\/code>\u4e2d<br>\u586b\u5199<code>\u4e3b\u9898Topic<\/code>\u4e3a<code>esp\/switch1<\/code><br>\u5206\u522b\u53d1\u9001\u6709\u6548\u8d1f\u8f7d\u4e3a<code>ON<\/code>\u6216<code>OFF<\/code>\u8fdb\u884c\u6d4b\u8bd5<br>\u6ce8\u610f\u5728\u5ba2\u6237\u7aef\u76d1\u542c<\/p>\n\n\n\n<p>\u5728\u4e3b\u9875\u9762\u4e2d\u53f3\u4e0a\u89d2\u9009\u62e9<code>\u914d\u7f6eUI<\/code><br>\u5728\u53f3\u4e0b\u89d2\u9009\u62e9<code>\u6dfb\u52a0\u5361\u7247<\/code><br>\u5728<code>\u5b9e\u4f53<\/code>\u91cc\u9009\u62e9<code>switch.light<\/code><br>\u5b8c\u6210\u6dfb\u52a0\u5230\u4e3b\u9875<\/p>\n\n\n\n<p>\u6700\u540e\u5728iPhone\u7684\u5bb6\u5eadAPP\u91cc\u6dfb\u52a0\u914d\u4ef6\uff0c\u7b80\u5355\u914d\u7f6e\u540e\u5373\u53ef\u4f7f\u7528Siri\u63a7\u5236\u5f00\u5173<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"\u5f15\u7528\">\u5f15\u7528<\/h1>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>(<a href=\"https:\/\/www.instructables.com\/id\/Using-an-Esp8266-Arduino-to-Control-a-Relay-Using-\/\" target=\"_blank\" rel=\"noreferrer noopener\" rel=\"nofollow\" >https:\/\/www.instructables.com\/id\/Using-an-Esp8266-Arduino-to-Control-a-Relay-Using-\/<\/a>)<\/p><\/blockquote>\n\n\n\n<figure class=\"wp-block-embed-wordpress wp-block-embed is-type-wp-embed is-provider-\u5927\u4e13\u680f\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.dazhuanlan.com\/2020\/04\/01\/5e847a3391f82\/\n<\/div><\/figure>\n<button class=\"simplefavorite-button\" data-postid=\"614\" data-siteid=\"1\" data-groupid=\"1\" data-favoritecount=\"0\" style=\"\">\u6536\u85cf <i class=\"sf-icon-star-empty\"><\/i><\/button>","protected":false},"excerpt":{"rendered":"<p>\u5728\u7fa4\u6656Docker\u7684\u6ce8\u518c\u8868\u91cc\u641c\u7d22\u5e76\u4e0b\u8f7dhomeassistant\/home-assistant\u5728\u9ad8\u7ea7\u8bbe\u7f6e\u91cc\u52fe\u9009\u542f\u52a8\u81ea\u52a8\u91cd\u65b0\u542f\u52a8\u5728\u5377 &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,10],"tags":[],"class_list":["post-614","post","type-post","status-publish","format-standard","hentry","category-9","category-10"],"_links":{"self":[{"href":"https:\/\/www.iotch.xyz\/index.php?rest_route=\/wp\/v2\/posts\/614","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.iotch.xyz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.iotch.xyz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.iotch.xyz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.iotch.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=614"}],"version-history":[{"count":0,"href":"https:\/\/www.iotch.xyz\/index.php?rest_route=\/wp\/v2\/posts\/614\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.iotch.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=614"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.iotch.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=614"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.iotch.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=614"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}