{"id":155,"date":"2017-07-22T19:56:14","date_gmt":"2017-07-22T17:56:14","guid":{"rendered":"http:\/\/itay.mobi\/blog\/?p=155"},"modified":"2018-04-01T13:15:20","modified_gmt":"2018-04-01T10:15:20","slug":"smart-door-lock","status":"publish","type":"post","link":"https:\/\/itay.cc\/?p=155","title":{"rendered":"Smart Door Lock"},"content":{"rendered":"<p>The idea of controlling my home door lock from remote was in my mind for a while.<\/p>\n<p>Recently I purchased an Amazon <a href=\"http:\/\/amzn.to\/2vBbTAD\" target=\"_blank\" rel=\"noopener\">Echo Dot<\/a> device and I wanted to write my own skills.<\/p>\n<p>I also wanted to practice mechanical design for 3D printing and this idea combines all my wishes.<\/p>\n<p>I will try to describes the project and explain what I did, why I did it and how I did it.<\/p>\n<p><iframe loading=\"lazy\" width=\"560\" height=\"314\" src=\"\/\/www.youtube.com\/embed\/o5Wj-fD6JwM\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<h2>Mechanical Design<\/h2>\n<h3>Turning the lock<\/h3>\n<p>My home door is heavy and when I lock the door, it anchored in several places.<br \/>\nIt takes a little force to lock and unlock so a geared servo motor like the <a href=\"http:\/\/s.click.aliexpress.com\/e\/ZFqvv3J\">MG995<\/a> seemed good choice.<\/p>\n<p><strong>Problem:<\/strong>\u00a0 The servo spins only 180 degrees and I need few tuns to lock and unlock the door.<br \/>\n<strong>Solutions:<\/strong><\/p>\n<ul>\n<li>Hack the servo so it will spins 360 degrees<\/li>\n<li>Buy a version of this servo that spins 360<\/li>\n<li>Plan gears in a way that 180 degrees will be enough to lock\/unlock<\/li>\n<\/ul>\n<p>I&#8217;m not a mechanical engineer and I don&#8217;t know much about gears (you will see later).<br \/>\nI already had <a href=\"http:\/\/s.click.aliexpress.com\/e\/ZFqvv3J\">MG995<\/a> servo motor so I chose to hacked it.<br \/>\nThere are many tutorials out there for this hack, this is the one I used:<\/p>\n<p><iframe loading=\"lazy\" width=\"360\" height=\"202\" src=\"\/\/www.youtube.com\/embed\/cnOKG0fvZ4w\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<p>Ater the hack, the motor does not stop at 180 degrees, it continues to speed forever.<br \/>\nI can set the direction of the motor by sending a signal for angles from 0 to 90, and from 90 to 180 to the other direction.<\/p>\n<h3>3D Printed mount<\/h3>\n<p>I used Autodesk Fusion 360 for the 3d printed parts.<br \/>\nThere are many tutorials out there and you can start making designs really fast.<br \/>\nAlso, for hobbyist you get can one year license for free.<\/p>\n<p>From within the house there is a &#8220;fixed key&#8221;.<\/p>\n<p><a href=\"http:\/\/itay.mobi\/blog\/wp-content\/uploads\/2017\/07\/Door.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-160 aligncenter\" src=\"http:\/\/itay.mobi\/blog\/wp-content\/uploads\/2017\/07\/Door-300x163.png\" alt=\"\" width=\"511\" height=\"277\" srcset=\"https:\/\/itay.cc\/wp-content\/uploads\/2017\/07\/Door-300x163.png 300w, https:\/\/itay.cc\/wp-content\/uploads\/2017\/07\/Door-768x416.png 768w, https:\/\/itay.cc\/wp-content\/uploads\/2017\/07\/Door-1024x555.png 1024w, https:\/\/itay.cc\/wp-content\/uploads\/2017\/07\/Door.png 1680w\" sizes=\"auto, (max-width: 511px) 100vw, 511px\" \/><\/a><\/p>\n<p><strong>Problem:\u00a0<\/strong>I did not want to remove this key or make any changes in the door.<br \/>\nI live in a rented apartment so I cant the risk of damaging the door.<br \/>\nWithout any modification to the door, is it possible to connect the lock mechanics?<\/p>\n<p><strong>Solution:<\/strong> This &#8220;key&#8221; can be taken off the door.\u00a0 There is a little spring that pushes a needle<br \/>\nto a hole in the key. If you push the needle you can then take out the key.<br \/>\nMy idea was to connect the gear to this hole to, from the outer side.<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/itay.mobi\/blog\/wp-content\/uploads\/2017\/07\/key.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-163\" src=\"http:\/\/itay.mobi\/blog\/wp-content\/uploads\/2017\/07\/key-266x300.png\" alt=\"\" width=\"266\" height=\"300\" srcset=\"https:\/\/itay.cc\/wp-content\/uploads\/2017\/07\/key-266x300.png 266w, https:\/\/itay.cc\/wp-content\/uploads\/2017\/07\/key.png 660w\" sizes=\"auto, (max-width: 266px) 100vw, 266px\" \/><\/a><\/p>\n<p>The second gear will be connected to the servo, and all will mount on the door handle.<br \/>\nMounting it on the handle makes it possible to lock and unlock the door manually.<br \/>\nWhen you open the door with the handle, you disconnect the gears from each other and<br \/>\nthen it&#8217;s possible to turn the lock without any resistance from the servo motor.<br \/>\nThis is what came out:<\/p>\n<p><a href=\"http:\/\/itay.mobi\/blog\/wp-content\/uploads\/2017\/07\/Full-Transparent.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-165\" src=\"http:\/\/itay.mobi\/blog\/wp-content\/uploads\/2017\/07\/Full-Transparent-300x283.png\" alt=\"\" width=\"300\" height=\"283\" srcset=\"https:\/\/itay.cc\/wp-content\/uploads\/2017\/07\/Full-Transparent-300x283.png 300w, https:\/\/itay.cc\/wp-content\/uploads\/2017\/07\/Full-Transparent-768x725.png 768w, https:\/\/itay.cc\/wp-content\/uploads\/2017\/07\/Full-Transparent.png 814w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a> <a href=\"http:\/\/itay.mobi\/blog\/wp-content\/uploads\/2017\/07\/Full-Transparent-Disc.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-166\" src=\"http:\/\/itay.mobi\/blog\/wp-content\/uploads\/2017\/07\/Full-Transparent-Disc-300x268.png\" alt=\"\" width=\"313\" height=\"280\" srcset=\"https:\/\/itay.cc\/wp-content\/uploads\/2017\/07\/Full-Transparent-Disc-300x268.png 300w, https:\/\/itay.cc\/wp-content\/uploads\/2017\/07\/Full-Transparent-Disc-768x687.png 768w, https:\/\/itay.cc\/wp-content\/uploads\/2017\/07\/Full-Transparent-Disc.png 849w\" sizes=\"auto, (max-width: 313px) 100vw, 313px\" \/><\/a><\/p>\n<p>You can see in right photos what I described with the handle.<\/p>\n<p><a href=\"http:\/\/itay.mobi\/blog\/wp-content\/uploads\/2017\/07\/Full-Side.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-168\" src=\"http:\/\/itay.mobi\/blog\/wp-content\/uploads\/2017\/07\/Full-Side-300x163.png\" alt=\"\" width=\"557\" height=\"303\" srcset=\"https:\/\/itay.cc\/wp-content\/uploads\/2017\/07\/Full-Side-300x163.png 300w, https:\/\/itay.cc\/wp-content\/uploads\/2017\/07\/Full-Side-768x416.png 768w, https:\/\/itay.cc\/wp-content\/uploads\/2017\/07\/Full-Side-1024x555.png 1024w, https:\/\/itay.cc\/wp-content\/uploads\/2017\/07\/Full-Side.png 1680w\" sizes=\"auto, (max-width: 557px) 100vw, 557px\" \/><\/a><\/p>\n<p>I&#8217;m not a mechanical engineer and I know very little about gears.<br \/>\nI do know that if you want to increase the torque, you need to build a gears ratio greater than 1:1.<br \/>\nI drew these big gears out of my head without any formulas or calculation like you should do when you<br \/>\nplan gears. That&#8217;s why the teeth are so big. I started with one tooth and then duplicated it.<br \/>\nThe big gear has 26 teeth and the little gear has 13 teeth, so it&#8217;s 2:1 ratio (doubling the torque).<\/p>\n<p><a href=\"http:\/\/itay.mobi\/blog\/wp-content\/uploads\/2017\/07\/Gears.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-169 aligncenter\" src=\"http:\/\/itay.mobi\/blog\/wp-content\/uploads\/2017\/07\/Gears-300x163.png\" alt=\"\" width=\"605\" height=\"329\" srcset=\"https:\/\/itay.cc\/wp-content\/uploads\/2017\/07\/Gears-300x163.png 300w, https:\/\/itay.cc\/wp-content\/uploads\/2017\/07\/Gears-768x416.png 768w, https:\/\/itay.cc\/wp-content\/uploads\/2017\/07\/Gears-1024x555.png 1024w, https:\/\/itay.cc\/wp-content\/uploads\/2017\/07\/Gears.png 1680w\" sizes=\"auto, (max-width: 605px) 100vw, 605px\" \/><\/a><\/p>\n<p>Some more photos:<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/itay.mobi\/blog\/wp-content\/uploads\/2017\/07\/DSC_1147.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-181\" src=\"http:\/\/itay.mobi\/blog\/wp-content\/uploads\/2017\/07\/DSC_1147-229x300.jpg\" alt=\"\" width=\"106\" height=\"139\" srcset=\"https:\/\/itay.cc\/wp-content\/uploads\/2017\/07\/DSC_1147-229x300.jpg 229w, https:\/\/itay.cc\/wp-content\/uploads\/2017\/07\/DSC_1147.jpg 610w\" sizes=\"auto, (max-width: 106px) 100vw, 106px\" \/><\/a> <a href=\"http:\/\/itay.mobi\/blog\/wp-content\/uploads\/2017\/07\/DSC_1144.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-182\" src=\"http:\/\/itay.mobi\/blog\/wp-content\/uploads\/2017\/07\/DSC_1144-300x225.jpg\" alt=\"\" width=\"181\" height=\"136\" srcset=\"https:\/\/itay.cc\/wp-content\/uploads\/2017\/07\/DSC_1144-300x225.jpg 300w, https:\/\/itay.cc\/wp-content\/uploads\/2017\/07\/DSC_1144-768x576.jpg 768w, https:\/\/itay.cc\/wp-content\/uploads\/2017\/07\/DSC_1144.jpg 800w\" sizes=\"auto, (max-width: 181px) 100vw, 181px\" \/><\/a> <a href=\"http:\/\/itay.mobi\/blog\/wp-content\/uploads\/2017\/07\/DSC_1146.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-183\" src=\"http:\/\/itay.mobi\/blog\/wp-content\/uploads\/2017\/07\/DSC_1146-300x225.jpg\" alt=\"\" width=\"184\" height=\"138\" srcset=\"https:\/\/itay.cc\/wp-content\/uploads\/2017\/07\/DSC_1146-300x225.jpg 300w, https:\/\/itay.cc\/wp-content\/uploads\/2017\/07\/DSC_1146-768x577.jpg 768w, https:\/\/itay.cc\/wp-content\/uploads\/2017\/07\/DSC_1146.jpg 800w\" sizes=\"auto, (max-width: 184px) 100vw, 184px\" \/><\/a><\/p>\n<p>You can find the stl files here:<br \/>\n<a href=\"https:\/\/gitlab.com\/itaysp\/alexa-door-lock\/tree\/master\/STL\" target=\"_blank\" rel=\"noopener\">https:\/\/gitlab.com\/itaysp\/alexa-door-lock\/tree\/master\/STL<\/a><\/p>\n<h2>Firmware<\/h2>\n<p>After building the mechanics, I wanted to control it from remote &#8211; my phone or even Alexa.<br \/>\nFirst and simple method I thought about was to take an ESP8266 and run a webserver.<br \/>\nThen I could control the servo with HTTP requests and maybe build a nice web UI.<\/p>\n<p>Thinking a little more and I decided to use <a href=\"https:\/\/en.wikipedia.org\/wiki\/MQTT\" target=\"_blank\" rel=\"noopener\">MQTT<\/a>\u00a0messaging protocol instead.<br \/>\nMQTT is a little more complex, you need a broker server and use a library for the mqtt client,<br \/>\nbut for the long term, if I want to build a smart home with many devices, this is a good\u00a0infrastructure.<\/p>\n<p>The ESP8266 is still used here for the connecting the servo to my smart home and running a MQTT client.<br \/>\nI used the <a href=\"https:\/\/wiki.wemos.cc\/products:d1:d1_mini\" target=\"_blank\" rel=\"noopener\">WeMos D1 Mini<\/a> board because it&#8217;s small, has a usb-serial interface already so it&#8217;s easy to flash a<br \/>\nfirmware without any additional circuit or components, it&#8217;s cheap, and I had few lying around.<\/p>\n<p>I used the <a href=\"https:\/\/github.com\/esp8266\/Arduino\" target=\"_blank\" rel=\"noopener\">ESP8266 Core for Arduino<\/a> to write the firmware because it&#8217;s very fast and there are good<br \/>\nMQTT libraries for Arduino.<br \/>\nFor the MQTT client I used the\u00a0<a href=\"https:\/\/github.com\/esp8266\/Arduino\" target=\"_blank\" rel=\"noopener\">Pubsubclient <\/a>library.<br \/>\nI started a <a href=\"https:\/\/mosquitto.org\/\" target=\"_blank\" rel=\"noopener\">Mosquitto<\/a>\u00a0MQTT broker on a raspberry pi, but there are good free MQTT broker services<br \/>\nlike\u00a0<a href=\"https:\/\/www.cloudmqtt.com\/\" target=\"_blank\" rel=\"noopener\">cloudmqtt<\/a>\u00a0which I can recommend from a past experience.<\/p>\n<p>From the examples and the documentation of the\u00a0<a href=\"https:\/\/github.com\/esp8266\/Arduino\" target=\"_blank\" rel=\"noopener\">Pubsubclient<\/a>\u00a0library it&#8217;s easy to start<br \/>\nand subscribe to an mqtt topic.<br \/>\nFirst you need to write all the server details you have.<br \/>\n<span style=\"text-decoration: underline;\">clientId<\/span> must be a unique identifier.<br \/>\n<span style=\"text-decoration: underline;\">topic<\/span> is the topic we subscribe to for controlling the door lock.<\/p>\n<pre class=\"theme:classic lang:c decode:true\">\/* Mqtt Settings *\/\r\nconst char* mqtt_server = \"YOUR_MQTT_SERVER_ADDRESS\";\r\nconst char* clientUsername = \"YOUR_MQTT_SERVER_USERNAME\";\r\nString clientId = \"esp-door-client\";\r\nconst char* clientPass = \"YOUR_MQTT_SERVER_PASSWORD\";\r\nconst uint16_t port = YOUR_MQTT_SERVER_PORT;\r\nconst char* topic = \"DoorLock\";<\/pre>\n<p>When a message is received with the topic I subscribed to, \u00a0I read it and then<br \/>\nusing strcmp function check if it&#8217;s was lock or unlock message.<br \/>\nFor large smart home network it will be wiser to use opcodes with switch statements instead.<br \/>\nBecause I have here only 2 options and speed\/efficiency is not important right now, I used<br \/>\ncommand words for simplicity.<\/p>\n<p><span style=\"text-decoration: underline;\">lock<\/span> and\u00a0<span style=\"text-decoration: underline;\">unlock<\/span> are global booleans flags.<br \/>\nThe lock\/unlock will take place in the main loop according to these flags.<\/p>\n<pre class=\"theme:classic lang:c decode:true\">\/\/Mqtt message received\r\nvoid callback(char* topic, byte* payload, unsigned int length) {\r\n char buff[16];\r\n uint8_t i;\r\n\r\n Serial.print(\"Message arrived [\");\r\n Serial.print(topic);\r\n Serial.print(\"] \");\r\n\r\n for (i = 0; i &lt; length; i++) {\r\n  Serial.print((char)payload[i]);\r\n  buff[i] = (char)payload[i];\r\n }\r\n buff[i] = 0; \/\/Termination char for working with strcmp\r\n\r\n if(strcmp(buff,\"lock\") == 0){\r\n  lock = true;\r\n }\r\n else if((strcmp(buff,\"unlock\") == 0)){\r\n  unlock = true;\r\n }\r\n\r\n}<\/pre>\n<p>The door lock\/unlock function will initialize the servo, write a position that now only<br \/>\nmeans speed and direction, wait a few seconds and then detach the servo.<br \/>\nI&#8217;m detaching the servo because after I hacked it, it&#8217;s hard to make it stop.<br \/>\nSetting it to 90 degrees position should make it stop, but it doesn&#8217;t.<br \/>\nDetaching it will stop sending pulses and it will stop moving.<\/p>\n<p>I used the Arduino servo library to control the servo.<br \/>\nFor the lock and unlock timing, I just played with it a little until I found the right<br \/>\ntime for the servo to complete the unlock and the lock.<\/p>\n<pre class=\"theme:classic lang:c decode:true\">\/\/Door unlock function\r\nvoid doorLock(){\r\n \/\/init the servo\r\n door_servo.attach(SERVO_PIN);\r\n\r\n \/\/start pulsing the servo (for direction and speed)\r\n door_servo.write(DOOR_LOCK_SPEED);\r\n\r\n \/\/wait duration seconds for the door to lock\r\n myDelay(DOOR_LOCK_DURATION);\r\n\r\n \/\/stop sending pulses\r\n door_servo.detach(); \r\n}<\/pre>\n<p>The delay function is not the regular Delay because it blocks interrupts.<br \/>\nI like to write my own delay function.<br \/>\nIn the ESP8266 there is a watchdog enabled by default so when writing such a function<br \/>\nit&#8217;s importat to remember feeding it.<\/p>\n<pre class=\"theme:classic lang:c decode:true\">\/\/My delay function\r\nvoid myDelay(uint32_t ms){\r\n uint32_t t = millis();\r\n while((millis() - t) &lt; ms)\r\n {\r\n  ESP.wdtFeed(); \/\/feed the watchdog to avoid reset of the mcu\r\n }\r\n}<\/pre>\n<p>You can find the complete firmware here:<br \/>\n<a href=\"https:\/\/gitlab.com\/itaysp\/alexa-door-lock\/blob\/master\/DoorLock\/DoorLock.ino\" target=\"_blank\" rel=\"noopener\">https:\/\/gitlab.com\/itaysp\/alexa-door-lock\/blob\/master\/DoorLock\/DoorLock.ino<\/a><\/p>\n<p>Note that you need to modify it with your wifi credentials, and this firmware<br \/>\nincludes the code for the Arduino OTA update option so you can remove it<br \/>\nif you don&#8217;t need it.<\/p>\n<h2>Alexa Skill<\/h2>\n<p>After having the door lock controlled by MQTT (from my phone\/<br \/>\nweb browser with MQTT client) ,it&#8217;s time for the Alexa skill.<\/p>\n<p>I decided to build \u00a0it with Node.js because I kept hearing about it and this was a good<br \/>\ntime to start using it.<\/p>\n<p>There&#8217;s a good step by step guide from Amazon for building a skill using Node.js:<br \/>\n<a href=\"https:\/\/github.com\/alexa\/skill-sample-nodejs-howto\">https:\/\/github.com\/alexa\/skill-sample-nodejs-howto<\/a><\/p>\n<p>And there&#8217;s the Alexa Skills Kit SDK for Node.js<br \/>\n<a href=\"https:\/\/github.com\/alexa\/alexa-skills-kit-sdk-for-nodejs\">https:\/\/github.com\/alexa\/alexa-skills-kit-sdk-for-nodejs<\/a><\/p>\n<p>Reading both and looking at some of these\u00a0<a href=\"https:\/\/github.com\/alexa?utf8=\u2713&amp;q=nodejs\" target=\"_blank\" rel=\"noopener\">examples<\/a>, I built the skill.<\/p>\n<p>I used the\u00a0<a href=\"https:\/\/www.npmjs.com\/package\/mqtt\" target=\"_blank\" rel=\"noopener\">MQTT.js\u00a0client library<\/a> to publish messages to the server.<\/p>\n<p>There is not much I can add after you read the tutorials and look thru the examples.<br \/>\nYou can find the source code and the speech assets\u00a0of my skill \u00a0here:<br \/>\n<a href=\"https:\/\/gitlab.com\/itaysp\/alexa-door-lock\/tree\/master\/AlexaSkill\">https:\/\/gitlab.com\/itaysp\/alexa-door-lock\/tree\/master\/AlexaSkill<\/a><\/p>\n<p>If you want to use\/modify it and create a skill, just follow the first link &#8211;<br \/>\nit explains all the steps you need in to do in the\u00a0Developer Portal and the\u00a0AWS Lambda.<\/p>\n<p>The project&#8217;s gitlab:<br \/>\n<a href=\"https:\/\/gitlab.com\/itaysp\/alexa-door-lock\" target=\"_blank\" rel=\"noopener\">https:\/\/gitlab.com\/itaysp\/alexa-door-lock<\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The idea of controlling my home door lock from remote was in my mind for a while. Recently I purchased an Amazon Echo Dot device and I wanted to write my own skills. I also wanted to practice mechanical design for 3D printing and this idea combines all my wishes. I will try to describes &#8230;<br \/><a class=\"btn btn-primary btn-sm read-more\" href=\"https:\/\/itay.cc\/?p=155\" role=\"button\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":166,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-155","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-uncategorized","9":"row panel panel-primary"},"_links":{"self":[{"href":"https:\/\/itay.cc\/index.php?rest_route=\/wp\/v2\/posts\/155","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itay.cc\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itay.cc\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itay.cc\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/itay.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=155"}],"version-history":[{"count":29,"href":"https:\/\/itay.cc\/index.php?rest_route=\/wp\/v2\/posts\/155\/revisions"}],"predecessor-version":[{"id":281,"href":"https:\/\/itay.cc\/index.php?rest_route=\/wp\/v2\/posts\/155\/revisions\/281"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/itay.cc\/index.php?rest_route=\/wp\/v2\/media\/166"}],"wp:attachment":[{"href":"https:\/\/itay.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=155"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itay.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=155"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itay.cc\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=155"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}