{"id":712,"date":"2008-12-17T16:28:15","date_gmt":"2008-12-17T23:28:15","guid":{"rendered":"http:\/\/mightyohm.com\/blog\/?p=712"},"modified":"2015-09-26T11:11:10","modified_gmt":"2015-09-26T18:11:10","slug":"building-a-wifi-radio-part-6-a-conversation-with-mpd","status":"publish","type":"post","link":"https:\/\/mightyohm.com\/blog\/2008\/12\/building-a-wifi-radio-part-6-a-conversation-with-mpd\/","title":{"rendered":"Building a Wifi Radio &#8211; Part 6, A Conversation with Mpd"},"content":{"rendered":"<p><em>This is the sixth part of an ongoing series about building a low cost, open source streaming internet radio.\u00a0 If you haven&#8217;t already, check out the previous parts (see the links at the end of this article) for some background about the project.<\/em><\/p>\n<h3>Let&#8217;s review&#8230;<\/h3>\n<p>It&#8217;s been a few weeks since I posted <a href=\"http:\/\/mightyohm.com\/blog\/2008\/11\/building-a-wifi-radio-part-5-lets-make-some-noise\/\">part five<\/a>, so let&#8217;s quickly review where we are with this project:<\/p>\n<p>At this point we have a hacked <a href=\"http:\/\/www.kqzyfj.com\/click-3238164-10440897?url=http%3A%2F%2Fwww.newegg.com%2FProduct%2FProduct.aspx%3FItem%3DN82E16833320023%26nm_mc%3DAFC-C8Junction%26cm_mmc%3DAFC-C8Junction-_-Network%2B-%2BWireless%2BRouters-_-ASUS-_-33320023&amp;cjsku=N82E16833320023\" target=\"_top\">ASUS WL-520gU wireless router<\/a><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.awltovhc.com\/image-3238164-10440897\" border=\"0\" alt=\"\" width=\"1\" height=\"1\" \/> running <a href=\"http:\/\/www.openwrt.org\">OpenWrt<\/a> (Linux). \u00a0 A <a href=\"http:\/\/www.jdoqocy.com\/click-3238164-10440897?url=http%3A%2F%2Fwww.newegg.com%2FProduct%2FProduct.aspx%3FItem%3DN82E16812186035%26nm_mc%3DAFC-C8Junction%26cm_mmc%3DAFC-C8Junction-_-Adapters%2Band%2Bgender%2Bchangers-_-Syba-_-12186035&amp;cjsku=N82E16812186035\" target=\"_top\">cheap USB-audio adapter<\/a><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.awltovhc.com\/image-3238164-10440897\" border=\"0\" alt=\"\" width=\"1\" height=\"1\" \/> is connected to the router&#8217;s single USB port, and in <a href=\"http:\/\/mightyohm.com\/blog\/2008\/11\/building-a-wifi-radio-part-4-installing-openwrt\/\">part four<\/a> we installed kernel drivers for Linux USB and audio support.\u00a0 In <a href=\"http:\/\/mightyohm.com\/blog\/2008\/10\/building-a-wifi-radio-part-3-hacking-the-asus-wl-520gu\/\">part three<\/a> we added a connection to the router&#8217;s internal serial port via a 4-pin header.\u00a0 Wireless networking worked pretty much out of the box, and in <a href=\"http:\/\/mightyohm.com\/blog\/2008\/11\/building-a-wifi-radio-part-5-lets-make-some-noise\/\">part five<\/a> we used <em>opkg<\/em>, OpenWrt&#8217;s package manager, to install <em>mpd<\/em>, the Linux music player daemon, and <em>mpc<\/em>, a command-line-based mpd client.<\/p>\n<p>This gives us a compact networked device that can wirelessly connect to streaming radio stations and play 16-bit 44kHz stereo audio on a pair of headphones or amplified external speakers.\u00a0 Pretty impressive, given that this device started as an inexpensive wireless router!<\/p>\n<h3>What&#8217;s missing?<\/h3>\n<p>Something big is missing from the radio.\u00a0 The original concept for this radio was that it would be a standalone device.\u00a0 Shell access is cool, and <a href=\"http:\/\/mpd.wikia.com\/wiki\/Client:MPoD2\">iPhone control<\/a> is even better, but ideally we&#8217;d like to be able to see what song and station are currently playing as well as change stations without the use of another computer or mobile client.<\/p>\n<p>What we need is a user interface!<\/p>\n<p>Based on our requirements, the user interface needs to do two things:<\/p>\n<ol>\n<li>Display information about what&#8217;s playing from mpd<\/li>\n<li>Gather input from the user and tell mpd when to change stations.<\/li>\n<\/ol>\n<p>A volume control will be part of our finished user interface as well, but it will be simple enough to do this in hardware when we put the radio into an enclosure.\u00a0 In this part, we&#8217;ll start work on the first requirement &#8211; the display.<\/p>\n<p><em>Note: The following steps assume you are accessing the OpenWrt shell through a telnet or ssh connection, not using the FTDI USB-serial cable.\u00a0 The reasons for this will become obvious later, when we start using the router&#8217;s serial port for other purposes!<\/em><\/p>\n<p>First of all, how do we get information about what&#8217;s currently playing on our radio?<\/p>\n<h3>Chatting with mpd:<\/h3>\n<p>The command-line program mpc that we installed in part five will return information about the current song if we execute it without any options:<\/p>\n<blockquote>\n<pre>root@OpenWrt:~# mpc\r\nSLAY Radio: Jogeir Liljedahl - Terra Cresta\r\n[playing] #1\/5\u00a0 22:36\/0:00 (100%)\r\nvolume: 60%\u00a0\u00a0 repeat: on\u00a0\u00a0\u00a0 random: off<\/pre>\n<\/blockquote>\n<p>Mpc obtains playlist, volume, and settings information by sending queries to the <em>mpd<\/em> server running on the router.\u00a0 The mpd site includes an overview of the <a href=\"http:\/\/mpd.wikia.com\/wiki\/MusicPlayerDaemonProtocolOutline\">communications protocol<\/a> and <a href=\"http:\/\/mpd.wikia.com\/wiki\/MusicPlayerDaemonCommands\">command set<\/a>.\u00a0 By default, mpd listens for commands on port 6600.\u00a0 You can access this port remotely by using one of many client programs, or locally by opening a telnet connection to port 6600 locally (the commands are in bold for clarity):<\/p>\n<blockquote>\n<pre>root@OpenWrt:~#<strong> telnet localhost:6600<\/strong>\r\nOK MPD 0.13.0\r\n<strong>status\r\n<\/strong>volume: 60\r\nrepeat: 1\r\nrandom: 0\r\nplaylist: 14\r\nplaylistlength: 5x\r\nfade: 0\r\nstate: play\r\nsong: 4\r\nsongid: 4\r\ntime: 2348:0\r\nbitrate: 192\r\naudio: 44100:16:2\r\nOK\r\n<strong>currentsong\r\n<\/strong>file: http:\/\/relay3.slayradio.org:8000\/\r\nName: SLAY Radio\r\nTitle: Jogeir Liljedahl - Terra Cresta\r\nPos: 0\r\nId: 0\r\nOK<\/pre>\n<\/blockquote>\n<p>The connection will timeout in about a minute if left idle.<\/p>\n<p>As you can see, there is a lot of information available, including some of the same information mpc gave us earlier.\u00a0 The advantage of directly accessing mpd is that we get the stream name (the Name: line) and the artist\/title (the Title: line) broken down separately instead of on one continuous line, with handy labels that will make it easy for us to parse the data later.<\/p>\n<p>We can also access mpd by using the <a href=\"http:\/\/en.wikipedia.org\/wiki\/Netcat\"><em>nc<\/em><\/a> command, short for &#8220;network cat&#8221;.\u00a0 Using nc allows us to easily pipe data from other commands to mpd and examine the results.<\/p>\n<blockquote>\n<pre>root@OpenWrt:~# <strong>echo \"currentsong\" | nc localhost 6600<\/strong>\r\nfile: http:\/\/relay3.slayradio.org:8000\/\r\nName: SLAY Radio\r\nTitle: Jogeir Liljedahl - Terra Cresta\r\nPos: 0\r\nId: 0\r\nOK<\/pre>\n<\/blockquote>\n<p>(As an aside, OpenWrt uses a program called <a href=\"http:\/\/www.busybox.net\/\">busybox<\/a> to emulate a UNIX-style shell environment &#8211; several common shell commands are included.\u00a0 There is considerable documentation <a href=\"http:\/\/www.busybox.net\/downloads\/BusyBox.html\">here<\/a>, but not all commands listed are actually included in the default OpenWrt busybox installation.)<\/p>\n<p>If we just want the name and title of the current song, we can use the UNIX command <a href=\"http:\/\/en.wikipedia.org\/wiki\/Grep\"><em>grep<\/em><\/a> to strip out just those two lines:<\/p>\n<blockquote>\n<pre>root@OpenWrt:~#<strong> echo \"currentsong\" | nc localhost 6600 | grep -e \"^Title: \" -e \"^Name: \"\r\n<\/strong>\r\nName: SLAY Radio\r\nTitle: Jogeir Liljedahl - Terra Cresta<\/pre>\n<\/blockquote>\n<h3>Talking to external devices:<\/h3>\n<p>Now that we have a way to get song information from mpd, we need a way to direct this information to an external display.\u00a0 The router comes with a handy mechanism for doing this &#8211; the builtin serial port.\u00a0 Linux makes it easy to direct the output of grep to the router&#8217;s serial port, just add a <a href=\"http:\/\/en.wikipedia.org\/wiki\/Redirection_(computing)\">redirect<\/a> to \/dev\/tts\/0 at the end of the command (all on one line, wrapped here to fit the page):<\/p>\n<blockquote>\n<pre>root@OpenWrt:~#<strong> echo \"currentsong\" | <\/strong><strong><strong>nc localhost 6600 | grep -e \"^Title: \"\r\n-e \"^Name: \"<\/strong><\/strong><strong> &gt; \/dev\/tts\/0<\/strong>\r\nroot@OpenWrt:~#<\/pre>\n<\/blockquote>\n<p>However, it turns out that the serial port&#8217;s default speed of 115200 baud is too fast for some external displays.\u00a0 If we want to be able to talk to an <a href=\"http:\/\/en.wikipedia.org\/wiki\/Atmel_AVR\">AVR microcontroller<\/a>, for example, we need to change the speed of the serial port from it&#8217;s default value of 115200 to 9600 baud.\u00a0 This can be done easily with the <a href=\"http:\/\/www.freebsd.org\/cgi\/man.cgi?query=stty&amp;sektion=1\"><em>stty<\/em><\/a> command.<\/p>\n<p><em>Note: If you downloaded and installed OpenWrt prior to December 3rd by using the files on this site, stty is most likely missing from your installation.\u00a0 Unfortunately, the only way I know of to easily fix this is to completely reinstall OpenWrt, since stty is part of busybox and included in the base firmware image.\u00a0 You can check if you have it by executing &#8216;stty&#8217; from the command line of the router &#8211; if you get an error, you will need to reinstall.<\/em><\/p>\n<p>You can change the baud rate of the serial port by executing:<\/p>\n<blockquote>\n<pre>root@OpenWrt:~#<strong> stty 9600 &lt; \/dev\/tts\/0<\/strong><\/pre>\n<\/blockquote>\n<p>Connect your FTDI USB-serial cable to the router&#8217;s serial port and open a terminal program set to 9600 baud, 8N1. Execute the last mpd query again, you should see the name and title appear in your terminal window:<\/p>\n<blockquote>\n<pre>root@OpenWrt:~#<strong> echo \"currentsong\" | <\/strong><strong><strong>nc localhost 6600 | grep -e \"^Title: \"\r\n-e \"^Name: \"<\/strong><\/strong><strong> &gt; \/dev\/tts\/0<\/strong><\/pre>\n<p>In the terminal window:<\/p>\n<pre>Name: SLAY Radio\r\nTitle: Jogeir Liljedahl - Terra Cresta<\/pre>\n<\/blockquote>\n<p>Now we have a way to get information about the current song and direct it to the serial port.<\/p>\n<p>We can do this is an automated way by using a shell script:<\/p>\n<blockquote>\n<pre>#! \/bin\/sh -\r\n# display.sh - Wifi Radio LCD display routines\r\n# 12\/12\/08\u00a0\u00a0\u00a0 Jeff Keyzer\u00a0\u00a0\u00a0 http:\/\/mightyohm.com\r\n# This shell script queries mpd for current song information and sends\r\n# relevant bits of it to the serial port, where an AVR-based LCD display\r\n# is waiting.\r\n#\r\n# For more information, visit\r\n# http:\/\/mightyohm.com\/blog\/\r\n#\r\ntrap 'exit 1' SIGINT\u00a0\u00a0\u00a0 # exit on ctrl-c, useful for debugging\r\nstty 9600 &lt; \/dev\/tts\/0\u00a0\u00a0# set serial port to 9600 baud\r\n                        # so we can talk to the AVR\r\nwhile true\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 # loop forever\r\ndo\r\n\u00a0echo \"currentsong\" | nc localhost 6600 | grep -e \"^Title: \" -e \"^Name: \" &gt; \/dev\/tts\/0\r\n\u00a0sleep 1\r\ndone<\/pre>\n<\/blockquote>\n<p>You can either copy and paste this script to a file on the router, or download it with <a href=\"http:\/\/en.wikipedia.org\/wiki\/Wget\"><em>wget<\/em><\/a>:<\/p>\n<blockquote>\n<pre>root@OpenWrt:~# <strong>cd ~<\/strong>\r\nroot@OpenWrt:~# <strong>wget http:\/\/mightyohm.com\/files\/wifiradio\/display.sh<\/strong>\r\nConnecting to mightyohm.com (72.32.209.132:80)\r\ndisplay.sh\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 100% |*******************************|\u00a0\u00a0 668\u00a0 --:--:-- ETA<\/pre>\n<\/blockquote>\n<p>Be sure to make the script executable by using <a href=\"http:\/\/en.wikipedia.org\/wiki\/Chmod\"><em>chmod<\/em><\/a>:<\/p>\n<blockquote>\n<pre>root@OpenWrt:~# <strong>chmod ugo+x display.sh<\/strong><\/pre>\n<\/blockquote>\n<p>If you run the script you should see the name and title information update in the serial terminal once a second.<\/p>\n<blockquote>\n<pre>root@OpenWrt:~# .\/display.sh<\/pre>\n<\/blockquote>\n<p>The script will loop forever &#8211; hit control-c in the router&#8217;s shell to exit.<\/p>\n<p>That&#8217;s it for part six!\u00a0 In <a href=\"http:\/\/mightyohm.com\/blog\/2008\/12\/building-a-wifi-radio-part-7-building-an-lcd-display\/\">part seven<\/a>, we&#8217;ll add an AVR-based serial LCD display to the router &#8211; stay tuned!<\/p>\n<p><strong>Update:<\/strong> <a href=\"http:\/\/mightyohm.com\/blog\/2008\/12\/building-a-wifi-radio-part-7-building-an-lcd-display\/\">Part seven is now available.<\/a><\/p>\n<p><strong>Update 2:<\/strong> There is a new <a href=\"http:\/\/mightyohm.com\/forum\/viewforum.php?f=2\">Wifi Radio Discussion Forum<\/a>, hop over there to ask questions about the project or see what other people are working on!\u00a0 (<em>4\/12\/09)<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is the sixth part of an ongoing series about building a low cost, open source streaming internet radio.\u00a0 If you haven&#8217;t already, check out the previous parts (see the links at the end of this article) for some background about the project. Let&#8217;s review&#8230; It&#8217;s been a few weeks since I posted part five, &hellip; <a href=\"https:\/\/mightyohm.com\/blog\/2008\/12\/building-a-wifi-radio-part-6-a-conversation-with-mpd\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Building a Wifi Radio &#8211; Part 6, A Conversation with Mpd<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[10,443],"tags":[121,36,70,66,97,68,24,118,116,71,117,162],"class_list":["post-712","post","type-post","status-publish","format-standard","hentry","category-microcontrollers","category-projects-2","tag-busybox","tag-diy","tag-embedded-linux","tag-linux","tag-mpd","tag-openwrt","tag-project","tag-script","tag-shell","tag-streaming-radio","tag-unix","tag-wifiradio"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/pioCd-bu","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":598,"url":"https:\/\/mightyohm.com\/blog\/2008\/11\/building-a-wifi-radio-part-5-lets-make-some-noise\/","url_meta":{"origin":712,"position":0},"title":"Building a Wifi Radio &#8211; Part 5, Let&#8217;s Make Some Noise!","author":"Jeff","date":"November 8, 2008","format":false,"excerpt":"This is the fifth part of an ongoing series at mightyOhm about building a low cost, open source streaming internet radio.\u00a0 If you haven't already, check out the previous parts below for some background about the project. Building a Wifi Radio - Part 1, Introduction Building a Wifi Radio -\u2026","rel":"","context":"In &quot;Projects&quot;","block_context":{"text":"Projects","link":"https:\/\/mightyohm.com\/blog\/category\/projects-2\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1872,"url":"https:\/\/mightyohm.com\/blog\/2009\/05\/building-a-wifi-radio-part-9-a-few-odds-and-ends\/","url_meta":{"origin":712,"position":1},"title":"Building a Wifi Radio &#8211; Part 9, A Few Odds and Ends","author":"Jeff","date":"May 27, 2009","format":false,"excerpt":"This is the ninth part of an ongoing series about building a low cost, open source streaming internet radio based on the ASUS WL-520gU Wireless Router.\u00a0 If you haven\u2019t already, check out the previous parts (see the links at the end of this article) for some background about the project.\u2026","rel":"","context":"In &quot;Electronics&quot;","block_context":{"text":"Electronics","link":"https:\/\/mightyohm.com\/blog\/category\/electronics\/"},"img":{"alt_text":"","src":"http:\/\/www.ftjcfx.com\/image-3238164-10440897","width":350,"height":200},"classes":[]},{"id":516,"url":"https:\/\/mightyohm.com\/blog\/2008\/11\/building-a-wifi-radio-part-4-installing-openwrt\/","url_meta":{"origin":712,"position":2},"title":"Building a Wifi Radio &#8211; Part 4, Installing OpenWrt","author":"Jeff","date":"November 3, 2008","format":false,"excerpt":"This is the fourth part of an ongoing series about building a low cost, open source streaming internet radio.\u00a0 If you haven\u2019t already, check out parts one, two, and three for some background about the project. At this point you should have an Asus WL-520GU wireless router with a serial\u2026","rel":"","context":"In &quot;Projects&quot;","block_context":{"text":"Projects","link":"https:\/\/mightyohm.com\/blog\/category\/projects-2\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mightyohm.com\/blog\/wp-content\/uploads\/2008\/11\/openwrt_logo.png?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":1902,"url":"https:\/\/mightyohm.com\/blog\/2009\/05\/sneak-peak-at-my-finished-wifi-radio-project\/","url_meta":{"origin":712,"position":3},"title":"Sneak peek at my finished Wifi Radio project!","author":"Jeff","date":"May 28, 2009","format":false,"excerpt":"While I'm busy working on part ten of my series on building a wireless router-based DIY streaming internet radio, I couldn't resist sharing a few photos of the finished project. If you want to see the radio in person, stop by Expo Hall Booth 166 at the Maker Faire in\u2026","rel":"","context":"In &quot;Electronics&quot;","block_context":{"text":"Electronics","link":"https:\/\/mightyohm.com\/blog\/category\/electronics\/"},"img":{"alt_text":"Finished Wifi Radio","src":"https:\/\/i0.wp.com\/mightyohm.com\/files\/flickr\/3567609195_79760d88fe.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":367,"url":"https:\/\/mightyohm.com\/blog\/2008\/10\/building-a-wifi-radio-part-2-choosing-an-embedded-platform\/","url_meta":{"origin":712,"position":4},"title":"Building a Wifi Radio &#8211; Part 2, Choosing an Embedded Platform","author":"Jeff","date":"October 17, 2008","format":false,"excerpt":"This is the second part of an ongoing series about building a low cost, open source streaming internet radio.\u00a0 if you haven't already, check out part one for some background about the project. Onward... In part one, I discussed the merits of streaming internet radio and the motivations for my\u2026","rel":"","context":"In &quot;Electronics&quot;","block_context":{"text":"Electronics","link":"https:\/\/mightyohm.com\/blog\/category\/electronics\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mightyohm.com\/blog\/wp-content\/uploads\/2008\/10\/hammer_01-large-150x150.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":333,"url":"https:\/\/mightyohm.com\/blog\/2008\/10\/building-a-wifi-radio-part-1-introduction\/","url_meta":{"origin":712,"position":5},"title":"Building a Wifi Radio &#8211; Part 1, Introduction","author":"Jeff","date":"October 9, 2008","format":false,"excerpt":"This article is the first of a series that will document the development of a low cost, open source wireless streaming internet radio receiver.\u00a0 All construction details, including schematics, source code, and even the design process itself will be documented on this blog. Comments and (constructive) criticism are welcome. Click\u2026","rel":"","context":"In &quot;Electronics&quot;","block_context":{"text":"Electronics","link":"https:\/\/mightyohm.com\/blog\/category\/electronics\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mightyohm.com\/blog\/wp-content\/uploads\/2008\/10\/3567609195_26d2582df5_o.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/mightyohm.com\/blog\/wp-content\/uploads\/2008\/10\/3567609195_26d2582df5_o.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/mightyohm.com\/blog\/wp-content\/uploads\/2008\/10\/3567609195_26d2582df5_o.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/mightyohm.com\/blog\/wp-content\/uploads\/2008\/10\/3567609195_26d2582df5_o.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/mightyohm.com\/blog\/wp-content\/uploads\/2008\/10\/3567609195_26d2582df5_o.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/mightyohm.com\/blog\/wp-content\/uploads\/2008\/10\/3567609195_26d2582df5_o.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]}],"_links":{"self":[{"href":"https:\/\/mightyohm.com\/blog\/wp-json\/wp\/v2\/posts\/712","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mightyohm.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mightyohm.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mightyohm.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mightyohm.com\/blog\/wp-json\/wp\/v2\/comments?post=712"}],"version-history":[{"count":46,"href":"https:\/\/mightyohm.com\/blog\/wp-json\/wp\/v2\/posts\/712\/revisions"}],"predecessor-version":[{"id":4985,"href":"https:\/\/mightyohm.com\/blog\/wp-json\/wp\/v2\/posts\/712\/revisions\/4985"}],"wp:attachment":[{"href":"https:\/\/mightyohm.com\/blog\/wp-json\/wp\/v2\/media?parent=712"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mightyohm.com\/blog\/wp-json\/wp\/v2\/categories?post=712"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mightyohm.com\/blog\/wp-json\/wp\/v2\/tags?post=712"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}