{"id":579,"date":"2014-06-26T17:15:28","date_gmt":"2014-06-26T17:15:28","guid":{"rendered":"http:\/\/www.oaktreelabs.co.uk\/blog\/?p=579"},"modified":"2015-01-02T13:27:47","modified_gmt":"2015-01-02T13:27:47","slug":"remote-farm-camera-using-raspberry-pi","status":"publish","type":"post","link":"https:\/\/www.richardmudhar.com\/blog\/2014\/06\/remote-farm-camera-using-raspberry-pi\/","title":{"rendered":"Remote Farm camera using Raspberry Pi &#8211; alpha test version"},"content":{"rendered":"<p>At The Oak Tree we have <a href=\"http:\/\/www.the-oak-tree.co.uk\/blog\/2014\/06\/cattle-arrive-at-the-oak-tree\/\">acquired two bullocks\/steers<\/a>, and it would be good to be able to monitor these guys to check they are okay.<\/p>\n<figure id=\"attachment_580\" aria-describedby=\"caption-attachment-580\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/www.richardmudhar.com\/blog\/wp-content\/uploads\/2014\/06\/cam02cows.jpg\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"wp-image-580 size-medium\" src=\"https:\/\/i0.wp.com\/www.richardmudhar.com\/blog\/wp-content\/uploads\/2014\/06\/cam02cows-300x225.jpg?resize=300%2C225\" alt=\"cattle\" width=\"300\" height=\"225\" srcset=\"https:\/\/i0.wp.com\/www.richardmudhar.com\/blog\/wp-content\/uploads\/2014\/06\/cam02cows.jpg?resize=300%2C225&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.richardmudhar.com\/blog\/wp-content\/uploads\/2014\/06\/cam02cows.jpg?resize=624%2C468&amp;ssl=1 624w, https:\/\/i0.wp.com\/www.richardmudhar.com\/blog\/wp-content\/uploads\/2014\/06\/cam02cows.jpg?w=800&amp;ssl=1 800w\" sizes=\"auto, (max-width: 300px) 85vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-580\" class=\"wp-caption-text\">cattle<\/figcaption><\/figure>\n<p>The obvious way is a GSM trail camera, which has got some merit. However, these are typically tripped by movement, and you get a lot of that outside. It might work to use a trail camera with a 15 minute trigger lockout &#8211; it&#8217;d be tripped all the time but wouldn&#8217;t spam you senseless with the 15 min delay. But it&#8217;s going to be dear to run as they tend to use MMS &#8211;<a href=\"http:\/\/giffgaff.com\/orders\/affiliate\/erminea\"> giffgaff charge 16p per MMS for instance, whereas their data rates are 20p per 20Mb <\/a>. CCTV solutions have the same problem &#8211; they are event triggered, whereas we want to be able to see a picture taken sometime in the last 15 minutes. Well, obviously we&#8217;d really like realtime streaming video by a pic at most 15 minutes old is a decent second best \ud83d\ude42<\/p>\n<p>What we ideally want is a camera you can send a message to to take a picture.<\/p>\n<p>I used to have a Youthnet V900 which you could send an SMS to take a picture, but it was the most maddening hunk of junk I have ever purchased. Configuring the settings was done by SMS, and I only ever got it to work with Virgin mobile once. Then Virgin must have changed something and I never got this to work again, either with Virgin or with Giffgaff. In the end I put a hammer through it so it wouldn&#8217;t waste any more of my time and money. The satisfaction of doing that was the most value I got out of it.<\/p>\n<p>I took a look at <a href=\"http:\/\/www.ebay.co.uk\/itm\/12MP-MMS-E-Mail-GPRS-GSM-IR-Hunting-Trail-Scouting-Wildlife-Camera-Nature-Game-\/190781809500\" target=\"_blank\">this trail cam<\/a> and recognised the same commands as the Youthnet . I&#8217;m just not going to go there again if it uses the same software. Plus there&#8217;s the fact that it doesn&#8217;t really suit what I want it to do.<\/p>\n<h2>The Pi&#8217;s USB subsystem isn&#8217;t good enough to run a 3g dongle<\/h2>\n<p>So it&#8217;s time to break out the Raspberry Pi. Unfortunately the USB subsystem of the Pi means I couldn&#8217;t use <a href=\"http:\/\/wammu.eu\/gammu\/\" target=\"_blank\">Gammu <\/a>directly with a Huawei E156G USB 3G dongle. It would work for a while and then conk out, and only come good again when the Pi was power cycled, not even a restart would fix it. That&#8217;s a real shame &#8211; this would save me a lot of power drain. Maybe it&#8217;s specific to this dongle, but there is always a world of hurt when it comes to the Pi and USB because of the power problem, and a 3G dongle has a high power usage when connected. Even running the E156G off an approved USB separately powered hub and the Pi off an approved PSU didn&#8217;t make it any better.<\/p>\n<h3>Go MiFi<\/h3>\n<p>Obviously if your site has WiFi you don&#8217;t need to wrangle with 3G, but there is a lively market in boxes to put a WiFi hotspot using 3G, called MiFi devices. You need to configure these to make use of your 3G dongle (and make sure they are compatible), the type I used is a TP-Link MR-3220<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/www.richardmudhar.com\/blog\/wp-content\/uploads\/2014\/06\/1501_TL-MR3020-V1-03.jpg\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-2061\" src=\"https:\/\/i0.wp.com\/www.richardmudhar.com\/blog\/wp-content\/uploads\/2014\/06\/1501_TL-MR3020-V1-03-550x369.jpg?resize=550%2C369\" alt=\"1501_TL-MR3020-V1-03\" width=\"550\" height=\"369\" srcset=\"https:\/\/i0.wp.com\/www.richardmudhar.com\/blog\/wp-content\/uploads\/2014\/06\/1501_TL-MR3020-V1-03.jpg?resize=550%2C369&amp;ssl=1 550w, https:\/\/i0.wp.com\/www.richardmudhar.com\/blog\/wp-content\/uploads\/2014\/06\/1501_TL-MR3020-V1-03.jpg?resize=1024%2C686&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.richardmudhar.com\/blog\/wp-content\/uploads\/2014\/06\/1501_TL-MR3020-V1-03.jpg?resize=624%2C418&amp;ssl=1 624w, https:\/\/i0.wp.com\/www.richardmudhar.com\/blog\/wp-content\/uploads\/2014\/06\/1501_TL-MR3020-V1-03.jpg?w=1280&amp;ssl=1 1280w\" sizes=\"auto, (max-width: 550px) 85vw, 550px\" \/><\/a><\/p>\n<p>So I used a MICRONEXT\u00a0 MN-WD552B WiFi dongle in the A&#8217;s single USB port, which seems reliable. Of course I now eat the power drain of the Pi, WiFi is never low power and the TP-Link 3020 MiFi device gives me another power hit. But it works, and I needed results fast rather than good, so it&#8217;ll do for now.<\/p>\n<h2>The Raspberry Pi Camera module is really rather excellent<\/h2>\n<p>The camera module that the Pi foundation sell for of the Pi is rather good &#8211; the larger version of the pic above is already scaled down by half in the camera to reduce the file size. And I compressed it a fair bit. You can control the camera in Python too, using <a title=\"Picamera\" href=\"http:\/\/www.raspberrypi.org\/archives\/5672\" target=\"_blank\">Picamera<\/a>. Python seems to be the default language for the RPi.<\/p>\n<p>Although the Raspberry Pi is credit card sized, it&#8217;s remarkable how big it gets if you want to do anything with it. I used a box I already had &#8211; if I decide this works well enough for a permanent version then I will use a <a title=\"PICE case for the Raspberry Pi\" href=\"http:\/\/ed-venture.biz\" target=\"_blank\">PICE waterproof case<\/a>, but for the prototype a temporary rig is fine.<\/p>\n<figure id=\"attachment_586\" aria-describedby=\"caption-attachment-586\" style=\"width: 480px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/www.richardmudhar.com\/blog\/wp-content\/uploads\/2014\/06\/DSCN2450a.jpg\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"wp-image-586 size-full\" src=\"https:\/\/i0.wp.com\/www.richardmudhar.com\/blog\/wp-content\/uploads\/2014\/06\/DSCN2450a.jpg?resize=480%2C360\" alt=\"the Pi gets big fast when you hang enough onto it to make it useful\" width=\"480\" height=\"360\" srcset=\"https:\/\/i0.wp.com\/www.richardmudhar.com\/blog\/wp-content\/uploads\/2014\/06\/DSCN2450a.jpg?w=480&amp;ssl=1 480w, https:\/\/i0.wp.com\/www.richardmudhar.com\/blog\/wp-content\/uploads\/2014\/06\/DSCN2450a.jpg?resize=300%2C225&amp;ssl=1 300w\" sizes=\"auto, (max-width: 480px) 85vw, 480px\" \/><\/a><figcaption id=\"caption-attachment-586\" class=\"wp-caption-text\">the Pi gets big fast when you hang enough onto it to make it useful<\/figcaption><\/figure>\n<p>At the moment both are powered up all the time, and a cron job takes a picture and SFTPs it up every 15 minutes during the day. The Pi and the TP3020 are powered via one of those dual-output 12V car to USB converters, the power drain at 12V is 250mA which is horrible, meaning using 40Ah of a 80Ah leisure battery will take 40*4=160 hours, nearly a week. Which is nasty, but livable with. There is massive opportunity to cut the power drain by bringing up the TP-Link 30210 and the Pi only once every 15 minutes when it&#8217;s light &#8211; they can be up and do their stuff in 5 minutes so I&#8217;d get a 3x drop in power drain from that, and not running in the night would save me another third.<\/p>\n<p>The installation is bush-league, but this is going to need a bit of optimisation anyway<\/p>\n<figure id=\"attachment_587\" aria-describedby=\"caption-attachment-587\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/www.richardmudhar.com\/blog\/wp-content\/uploads\/2014\/06\/picam_P1060921.jpg\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"wp-image-587 size-medium\" src=\"https:\/\/i0.wp.com\/www.richardmudhar.com\/blog\/wp-content\/uploads\/2014\/06\/picam_P1060921-300x229.jpg?resize=300%2C229\" alt=\"the camera is at the top left of this IBC\" width=\"300\" height=\"229\" srcset=\"https:\/\/i0.wp.com\/www.richardmudhar.com\/blog\/wp-content\/uploads\/2014\/06\/picam_P1060921.jpg?resize=300%2C229&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.richardmudhar.com\/blog\/wp-content\/uploads\/2014\/06\/picam_P1060921.jpg?resize=624%2C477&amp;ssl=1 624w, https:\/\/i0.wp.com\/www.richardmudhar.com\/blog\/wp-content\/uploads\/2014\/06\/picam_P1060921.jpg?w=1024&amp;ssl=1 1024w\" sizes=\"auto, (max-width: 300px) 85vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-587\" class=\"wp-caption-text\">the camera is at the top left of this IBC<\/figcaption><\/figure>\n<p>and a close-up shows just how bad it is &#8211; waterproofing by electrical tape is living on borrowed time. But that&#8217;s where those nice people at PICE come in, so there&#8217;s no point in putting any real work in that.<\/p>\n<figure id=\"attachment_588\" aria-describedby=\"caption-attachment-588\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/www.richardmudhar.com\/blog\/wp-content\/uploads\/2014\/06\/picamera_P1060923.jpg\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"wp-image-588 size-medium\" src=\"https:\/\/i0.wp.com\/www.richardmudhar.com\/blog\/wp-content\/uploads\/2014\/06\/picamera_P1060923-300x233.jpg?resize=300%2C233\" alt=\"best not let the IEE see that else they'll revoke C.Eng for disgraceful and outrageous bodgery of the first order ;)\" width=\"300\" height=\"233\" srcset=\"https:\/\/i0.wp.com\/www.richardmudhar.com\/blog\/wp-content\/uploads\/2014\/06\/picamera_P1060923.jpg?resize=300%2C233&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.richardmudhar.com\/blog\/wp-content\/uploads\/2014\/06\/picamera_P1060923.jpg?resize=624%2C485&amp;ssl=1 624w, https:\/\/i0.wp.com\/www.richardmudhar.com\/blog\/wp-content\/uploads\/2014\/06\/picamera_P1060923.jpg?w=1024&amp;ssl=1 1024w\" sizes=\"auto, (max-width: 300px) 85vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-588\" class=\"wp-caption-text\">disgraceful and outrageous bodgery of the first order \ud83d\ude09 The PICE case has solved most of the mechanical challenges kludged together here.<\/figcaption><\/figure>\n<p>This shows one of the hazards of this location, in that the crows sit on the bar surveying their domain and crap on the IBC. There&#8217;s no crap on the bars though, so I might get away with it. Some anti-bird spikes might be in order.<\/p>\n<pre>\u00a0#!\/usr\/bin\/python\r\n#$Id: takepic.py 53 2014-06-26 16:30:17Z richard $\r\nimport time\r\nimport picamera\r\nimport paramiko\r\nimport os\r\nimport socket\r\nimport datetime\r\n# import RPi.GPIO as GPIO\r\n\r\n# GPIO.setmode(GPIO.BOARD) # USE Pi BOARD pins, not the BCM ver\r\n# GPIO.setup(7, GPIO.IN, pull_up_down=GPIO.PUD_UP) # 7 is next to gnd on pin 9, so set pull up\r\n\r\n# defs\r\ncamerafail=False;\r\nDIR='\/home\/pi\/mine\/'\r\nimagename='cam01.jpg'\r\nremotename='mysite.com' # assuming this is reachable by ssh and www\r\n\r\n\r\n\r\ntry :\r\n\u00a0\u00a0\u00a0 with picamera.PiCamera() as camera:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 #camera.resolution = (2592, 1944)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # The following is equivalent\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 #camera.resolution = camera.MAX_IMAGE_RESOLUTION\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # run half res to test out connectivity etc and save money\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 #camera.led = False\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 camera.resolution = camera.MAX_IMAGE_RESOLUTION\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 #camera.resolution = (1296, 972) # do half real to eliminate Bayer softness and save TX bandwidth\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 camera.start_preview()\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 time.sleep(2)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 camera.capture(DIR+imagename, resize=(800,600), format='jpeg', quality=15)\r\nexcept picamera.PiCameraError,e :\r\n\u00a0\u00a0\u00a0 print e\r\n\u00a0\u00a0\u00a0 camerafail=True\r\nfinally :\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 camera.close()\r\ntime.sleep(10) # hopefully nw is up by now\u00a0 \u00a0\r\n\r\nif not(camerafail) :\r\n\r\n\r\n\u00a0\u00a0\u00a0 timedout=False\r\n\u00a0\u00a0\u00a0 connected=False\r\n\u00a0\u00a0\u00a0 counter=0\r\n\r\n\u00a0\u00a0\u00a0 while (not timedout) and not connected :\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 try :\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 s.connect((remotename,80))\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 print(s.getsockname()[0])\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 connected=True\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 except socket.error,e :\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 counter += 1\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 print counter\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 finally: \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 s.close()\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 time.sleep(5)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if counter &gt;= 5:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 timedout=True\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 print 'Failed to connect to ',remotename,' ',datetime.datetime.now().strftime(\"%y\/%m\/%d %H:%M\")\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0 # Ideally, this gets called by cron once every quarter of an hour. \r\n\r\n\u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0\u00a0 #upload\r\n\u00a0\u00a0\u00a0 if not timedout: \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 print 'ftp image starting ',datetime.datetime.now().strftime(\"%y\/%m\/%d %H:%M\")\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 try :\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ssh = paramiko.SSHClient()\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ssh.connect(remotename, port=2222, username='username', password='password')\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 sftp = ssh.open_sftp();\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 sftp.put(DIR+imagename, '\/my\/remote\/path\/'+imagename)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 sftp.close()\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 print \"closed SFTP\"\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 except paramiko.AuthenticationException,e :\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 print e\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 except socket.error,e :\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 print e<\/pre>\n<h3>The cron job<\/h3>\n<p>This is then called by a cron job on the Raspberry Pi. You must to this with root privileges because you are accessing the hardware, so use<\/p>\n<pre>sudo crontab -e<\/pre>\n<p>and mine looks like<\/p>\n<pre>*\/15 4-22 * * * \/home\/pi\/takepic.py &gt; \/home\/pi\/log.txt<\/pre>\n<p>which means every 15 minutes between 4am and 10pm run takepic.py and save the error messages etc to log.txt. Before running this as a cron job you want to make sure that if you manually run<\/p>\n<pre>sudo \/home\/pi\/takepic.py<\/pre>\n<p>you get a picture uploaded to where you want it \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>At The Oak Tree we have acquired two bullocks\/steers, and it would be good to be able to monitor these guys to check they are okay. The obvious way is a GSM trail camera, which has got some merit. However, these are typically tripped by movement, and you get a lot of that outside. It &hellip; <a href=\"https:\/\/www.richardmudhar.com\/blog\/2014\/06\/remote-farm-camera-using-raspberry-pi\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Remote Farm camera using Raspberry Pi &#8211; alpha test version&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_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}},"categories":[275,10,14],"tags":[20],"class_list":["post-579","post","type-post","status-publish","format-standard","hentry","category-greenmantle","category-raspberry-pi","category-smallholding","tag-camera"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5aOO7-9l","jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.richardmudhar.com\/blog\/wp-json\/wp\/v2\/posts\/579","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.richardmudhar.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.richardmudhar.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.richardmudhar.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.richardmudhar.com\/blog\/wp-json\/wp\/v2\/comments?post=579"}],"version-history":[{"count":3,"href":"https:\/\/www.richardmudhar.com\/blog\/wp-json\/wp\/v2\/posts\/579\/revisions"}],"predecessor-version":[{"id":2062,"href":"https:\/\/www.richardmudhar.com\/blog\/wp-json\/wp\/v2\/posts\/579\/revisions\/2062"}],"wp:attachment":[{"href":"https:\/\/www.richardmudhar.com\/blog\/wp-json\/wp\/v2\/media?parent=579"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.richardmudhar.com\/blog\/wp-json\/wp\/v2\/categories?post=579"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.richardmudhar.com\/blog\/wp-json\/wp\/v2\/tags?post=579"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}