{"id":2871,"date":"2017-11-30T21:11:05","date_gmt":"2017-11-30T21:11:05","guid":{"rendered":"http:\/\/grodansparadis.com\/wordpress\/?p=2871"},"modified":"2017-11-30T21:20:00","modified_gmt":"2017-11-30T21:20:00","slug":"howto-practical-use-of-vscp-remote-variables-thingspeak","status":"publish","type":"post","link":"https:\/\/grodansparadis.com\/wordpress\/?p=2871","title":{"rendered":"Howto: Practical use of #VSCP Remote Variables @thingspeak"},"content":{"rendered":"<p>See\u00a0<a href=\"http:\/\/grodansparadis.com\/wordpress\/?p=1384\">The story about an old fridge<\/a> and\u00a0<a href=\"http:\/\/grodansparadis.com\/wordpress\/?p=2310\">VSCP module setup \u2013 refrigirator control part 1<\/a>\u00a0, <a href=\"http:\/\/grodansparadis.com\/wordpress\/?p=2324\">part 2<\/a>, <a href=\"http:\/\/grodansparadis.com\/wordpress\/?s=REFRIGERATOR+CONTROL+\">part 3<\/a>, <a href=\"http:\/\/grodansparadis.com\/wordpress\/?p=2343\">part 4<\/a>\u00a0 for earlier parts about this setup.<\/p>\n<p>You have a VSCP system (or other system) setup that control something. and now you want to share some of this information up to the cloud.\u00a0 One typical problem that you will see when doing this in a VSCP system is that data (we call it events in VSCP) is coming in with a higher rate than the rate you would want to publish it to the selected cloud service.\u00a0 To solve this VSCP remote variables are perfect helpers.<\/p>\n<p>A stream from a VSCP interface can typically look like this.<\/p>\n<p><iframe loading=\"lazy\" src=\"https:\/\/www.youtube.com\/embed\/QHifY8FQl9I\" width=\"560\" height=\"315\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<p>There is a lot of events coming in and often the frequency is even much higher that it is here. All the data above comes from a refrigerator and a fridge that is controlled by two <a href=\"http:\/\/www.grodansparadis.com\/paris\/paris.html\">Paris<\/a> and one <a href=\"http:\/\/www.grodansparadis.com\/kelvinntc10k\/kelvin_ntc10ka.html\">Kelvin NTC10K<\/a> modules. Kelvin modules publish temperatures from a fridge, the kitchen and the upper and lower part of a refrigerator. The Paris module controls the compressors from these temperature measurements (ON\/OFF events). The Turn-ON\/OFF events originate from the Kelvin modules.\u00a0 So when a temperature goes above a set point Turn-On events are sent from the Kelvin module after each temperature read and similar a Turn-Off event is sent when the temperature goes below the low set point. Nothing fancy really there.<\/p>\n<p>We will look at one specific temperature only here, the fridge temperature.<\/p>\n<p><iframe loading=\"lazy\" style=\"border: 1px solid #cccccc;\" src=\"https:\/\/thingspeak.com\/channels\/79008\/charts\/2?days=1&amp;dynamic=true&amp;results=360&amp;title=Temperature+inside+fridge&amp;type=line&amp;yaxis=Degrees+celsius\" width=\"450\" height=\"260\"><\/iframe><\/p>\n<p>This temperature comes from a Kelvin NTC10K module with <strong>GUID=FF:FF:FF:FF FF:FF:FF:FE B8:27:EB:0A 00:02:00:01<\/strong>\u00a0 We find this out with the\u00a0\u00a0<a href=\"http:\/\/www.vscp.org\/docs\/vscpworks\/doku.php?id=start\">VSCP Works<\/a>\u00a0tool which always is our friend when diagnosing a VSCP system.<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/grodansparadis.com\/wordpress\/wp-content\/uploads\/2017\/11\/Screenshot-from-2017-11-28-16-26-15.png\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"2872\" data-permalink=\"https:\/\/grodansparadis.com\/wordpress\/?attachment_id=2872\" data-orig-file=\"https:\/\/i0.wp.com\/grodansparadis.com\/wordpress\/wp-content\/uploads\/2017\/11\/Screenshot-from-2017-11-28-16-26-15.png?fit=784%2C716&amp;ssl=1\" data-orig-size=\"784,716\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Screenshot from 2017-11-28 16-26-15\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/grodansparadis.com\/wordpress\/wp-content\/uploads\/2017\/11\/Screenshot-from-2017-11-28-16-26-15.png?fit=580%2C530&amp;ssl=1\" class=\"alignnone size-full wp-image-2872\" src=\"https:\/\/i0.wp.com\/grodansparadis.com\/wordpress\/wp-content\/uploads\/2017\/11\/Screenshot-from-2017-11-28-16-26-15.png?resize=580%2C530\" alt=\"\" width=\"580\" height=\"530\" srcset=\"https:\/\/i0.wp.com\/grodansparadis.com\/wordpress\/wp-content\/uploads\/2017\/11\/Screenshot-from-2017-11-28-16-26-15.png?w=784&amp;ssl=1 784w, https:\/\/i0.wp.com\/grodansparadis.com\/wordpress\/wp-content\/uploads\/2017\/11\/Screenshot-from-2017-11-28-16-26-15.png?resize=300%2C274&amp;ssl=1 300w, https:\/\/i0.wp.com\/grodansparadis.com\/wordpress\/wp-content\/uploads\/2017\/11\/Screenshot-from-2017-11-28-16-26-15.png?resize=768%2C701&amp;ssl=1 768w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p>We also see that the sensor is at\u00a0 index 1 for this particular temperature sensor on the Kelvin NTC10K and that the temperature is sent in Celsius (Unit=1), exactly as we want to present it. Thus no conversions is needed.<\/p>\n<p>Now, one way of sending this data to the cloud is to have a <a href=\"http:\/\/www.vscp.org\/docs\/vscpd\/doku.php?id=vscp_daemon_decision_matrix\">DM (decision matrix )<\/a> entry that send the data to the cloud every time it is received.<\/p>\n<p>For this we just add an entry in the DM that calls a script when the\u00a0 temperature event is received. This DM row would look like this<\/p>\n<pre>&lt;row enable=\"true\" groupid=\"thingspeak\" &gt;\r\n\r\n&lt;comment&gt;\r\n  Send value for fridge temperature to \r\n  Thingsquare\r\n&lt;\/comment&gt;\r\n\r\n&lt;mask priority=\"0\" \r\n class=\"65535\" \r\n type=\"65535\" \r\n GUID=\r\n\"FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF\r\n\/&gt;\r\n\r\n&lt;filter priority=\"0\" \r\n class=\"10\" \r\n type=\"6\" \r\n GUID=\r\n\"FF:FF:FF:FF FF:FF:FF:FE B8:27:EB:0A 00:02:00:01\" \r\n\/&gt;\r\n\r\n &lt;action&gt;0x10&lt;\/action&gt;\r\n &lt;param&gt;\r\n\/srv\/vscp\/scripts\/thingspeak.sh XX<em>EIAQWY1XXNU6XX<\/em> 2 %measurement.string\r\n &lt;\/parm&gt;\r\n\r\n&lt;allowed_from&gt;0000-01-01 00:00:00&lt;\/allowed_from&gt;\r\n&lt;allowed_to&gt;9999-12-31 23:59:59&lt;\/allowed_to&gt;\r\n&lt;allowed_weekdays&gt;mtwtfss&lt;\/allowed_weekdays&gt;\r\n&lt;allowed_time&gt;*-*-* *:*:*&lt;\/allowed_time&gt;\r\n\r\n&lt;index measurementindex=\"true\"&gt;1&lt;\/index&gt;\r\n\r\n&lt;\/row&gt;<\/pre>\n<p>Here the <strong>mask<\/strong> says that all bits of the VSCP class is of interest, all bits of the VSCP type is of interest and all bits of the GUID is of interest.\u00a0 This is basically to say that the event we enter in the <strong>filter<\/strong> is the one we are interested in. So what we had entered in the filter is <a href=\"http:\/\/www.vscp.org\/docs\/vscpspec\/doku.php?id=class1.measurement\">VSCP Class = 10 for measurement<\/a>, <a href=\"http:\/\/www.vscp.org\/docs\/vscpspec\/doku.php?id=class1.measurement#type_6_0x06_temperature\">VSCP type=6 for temperature<\/a> and the GUID of the Klevin NTC 10K sensor that send the fridge temperature value.<\/p>\n<p><strong>Action<\/strong> is set to 0x10 (16) which says we should execute an external script. The <strong>param<\/strong> is the argument to this script.\u00a0 The first part of the param is the path to the script to execute (which must exist and be executable)\u00a0 and the rest is parameters. So here we execute the script\u00a0<em>\/srv\/vscp\/scripts\/thingspeak.sh<\/em> and send three parameters<\/p>\n<blockquote>\n<pre>XX<em>EIAQWY1XXNU6XX\u00a0 \u00a0 2\u00a0 \u00a0 %measurement.string<\/em><\/pre>\n<\/blockquote>\n<p>to it<em>.\u00a0 <\/em><em>The first parameter is the publishing key to the <a href=\"https:\/\/thingspeak.com\/\">thingspeak service<\/a>, the second is the number of the Thingspeak field we want to upgrade. The last parameter is the current temperature in the fridge. The\u00a0<strong>%measurement.string<\/strong> will be replaced by the actual temperature before the script is executed. There are <a href=\"http:\/\/www.vscp.org\/docs\/vscpd\/doku.php?id=vscp_daemon_decision_matrix#variable_substitution_for_parameters_escapes\">plenty of escapes<\/a> one can use in decision\u00a0matrices.\u00a0<\/em><\/p>\n<p>The script that is called is simple and looks like this<\/p>\n<pre>#!\/bin\/bash\r\n # Arguments\r\n # =========\r\n # 1 - Write key\r\n # 2 - Filed number 1 .. n\r\n # 3 - Value\r\n #echo() { :; } # comment line to enable debugging\r\n\r\nupdate=$(curl --silent --request POST --header \"X-THINGSPEAKAPIKEY: $1\" --data \"field$2=$3\" \"http:\/\/api.thingspeak.$\r\n\r\necho \"Update #$update\"\r\n\r\n# Uncomment to get debug output\r\n #echo `date` - \"$1 field$2=$3\" &gt;&gt;debug<\/pre>\n<p>Pretty straight forward. Check the documentation up at <a href=\"https:\/\/thingspeak.com\/\">Thingspeak<\/a> for the full process.<\/p>\n<p>So what we got now is a DM entry that will update the cloud data as soon as the measurement event comes in. If it, as in this case is received with a frequency less than ten seconds, this may be pretty wasteful of\u00a0 server resources. Better to update the cloud data at even time intervals.\u00a0 How do we do this using the VSCP server?<\/p>\n<p>we use one of <a href=\"http:\/\/www.vscp.org\/docs\/vscpspec\/doku.php?id=class2.vscpd\">the built-in events<\/a> of the VSCP server, <a href=\"http:\/\/www.vscp.org\/docs\/vscpspec\/doku.php?id=class2.vscpd#type_6_0x0006_minute\">the minute event<\/a> which is feed to the DM exactly once every minute.<\/p>\n<p>To do this we first write the fridge temperature to a variable every time the event is received. We select a non persistent variable as it is no use in saving this value between session. The DM entry for this looks like this<\/p>\n<pre>&lt;row enable=\"true\" groupid=\"fridge\" &gt;\r\n\r\n&lt;comment&gt;\r\n Store current temperature for fridge in remote variable fridge_temp\r\n with typ float (5)\r\n &lt;\/comment&gt;\r\n\r\n&lt;mask priority=\"0\" \r\n class=\"0xffff\" \r\n type=\"0xffff\" \r\n GUID=\"FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:FF:Ff:FF:FF:FF:FF\" \/&gt;\r\n\r\n&lt;filter priority=\"0\" \r\n class=\"10\" \r\n type=\"6\" \r\n GUID=\"FF:FF:FF:FF:FF:FF:FF:FE:B8:27:EB:0A:00:02:00:01\" \/&gt;\r\n\r\n&lt;action&gt;0x50&lt;\/action&gt;\r\n &lt;param&gt;fridge_temp;5;false;0;0x777;%measurement.string&lt;\/param&gt;\r\n\r\n&lt;allowed_from&gt;0000-01-01 00:00:00&lt;\/allowed_from&gt;\r\n &lt;allowed_to&gt;9999-12-31 23:59:59&lt;\/allowed_to&gt;\r\n &lt;allowed_weekdays&gt;mtwtfss&lt;\/allowed_weekdays&gt;\r\n &lt;allowed_time&gt;*-*-* *:*:*&lt;\/allowed_time&gt;\r\n\r\n&lt;index measurementindex=\"true\"&gt;1&lt;\/index&gt;\r\n\r\n&lt;\/row&gt;<\/pre>\n<p>So now whenever the event that holds the fridge temperature comes in it is written to the VSCP remote variable\u00a0<strong>fridge_temp <\/strong>.<\/p>\n<p>With VSCP Works we can list check that the variable is available<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/grodansparadis.com\/wordpress\/wp-content\/uploads\/2017\/11\/Screenshot-from-2017-11-30-21-35-47.png\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"2884\" data-permalink=\"https:\/\/grodansparadis.com\/wordpress\/?attachment_id=2884\" data-orig-file=\"https:\/\/i0.wp.com\/grodansparadis.com\/wordpress\/wp-content\/uploads\/2017\/11\/Screenshot-from-2017-11-30-21-35-47.png?fit=970%2C933&amp;ssl=1\" data-orig-size=\"970,933\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Screenshot from 2017-11-30 21-35-47\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/grodansparadis.com\/wordpress\/wp-content\/uploads\/2017\/11\/Screenshot-from-2017-11-30-21-35-47.png?fit=580%2C558&amp;ssl=1\" class=\"alignnone size-full wp-image-2884\" src=\"https:\/\/i0.wp.com\/grodansparadis.com\/wordpress\/wp-content\/uploads\/2017\/11\/Screenshot-from-2017-11-30-21-35-47.png?resize=580%2C558\" alt=\"\" width=\"580\" height=\"558\" srcset=\"https:\/\/i0.wp.com\/grodansparadis.com\/wordpress\/wp-content\/uploads\/2017\/11\/Screenshot-from-2017-11-30-21-35-47.png?w=970&amp;ssl=1 970w, https:\/\/i0.wp.com\/grodansparadis.com\/wordpress\/wp-content\/uploads\/2017\/11\/Screenshot-from-2017-11-30-21-35-47.png?resize=300%2C289&amp;ssl=1 300w, https:\/\/i0.wp.com\/grodansparadis.com\/wordpress\/wp-content\/uploads\/2017\/11\/Screenshot-from-2017-11-30-21-35-47.png?resize=768%2C739&amp;ssl=1 768w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p>and it is, fridge temperature is currently -19.43 degrees Celsius.\u00a0 As you can see we have added the other measurements of the fridge and the refrigerator to variables as well.<\/p>\n<p>Now with the fridge temperature in a variable we can easily access the fridge_temperature remotely\u00a0 using websockets in a webpage or if we prefer the REST interface\u00a0 better it can be used instead.\u00a0 But also the TCP\/IP interface or the MQTT interface of the VSCP server can be used. Actually display the fridge temperature in a widget on a web pages is just connecting it to the variable.<\/p>\n<p>But here we want to send the value to Thingspeak every minute so we add another row in the DM that looks like this<\/p>\n<pre>&lt;row enable=\"true\" groupid=\"thingspeak\" &gt;\r\n\r\n&lt;comment&gt;\r\n Send fridge temperature varible value to Thingspeak\r\n &lt;\/comment&gt;\r\n\r\n&lt;mask priority=\"0\" \r\n class=\"0xffff\" \r\n type=\"0xffff\" \r\n GUID=\"00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00\" \/&gt;\r\n\r\n&lt;filter priority=\"0\" \r\n class=\"65535\" \r\n type=\"6\" \r\n GUID=\"00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00\" \/&gt;\r\n\r\n&lt;action&gt;0x10&lt;\/action&gt;\r\n &lt;param&gt;\/srv\/vscp\/scripts\/thingspeak.shXX<em>EIAQWY1XXNU6XX<\/em> 2 %variable:[fridge_temp]&lt;\/param&gt;\r\n\r\n&lt;allowed_from&gt;0000-01-01 00:00:00&lt;\/allowed_from&gt;\r\n &lt;allowed_to&gt;9999-12-31 23:59:59&lt;\/allowed_to&gt;\r\n &lt;allowed_weekdays&gt;mtwtfss&lt;\/allowed_weekdays&gt;\r\n &lt;allowed_time&gt;*-*-* *:*:*&lt;\/allowed_time&gt;\r\n\r\n &lt;\/row&gt;<\/pre>\n<p>In this DM row we use the same script as above but now instead of triggering on the <a href=\"http:\/\/www.vscp.org\/docs\/vscpspec\/doku.php?id=class1.measurement#type_6_0x06_temperature\">Class=10,Type=6<\/a> (A temperature measurement) we trigger on <a href=\"http:\/\/www.vscp.org\/docs\/vscpspec\/doku.php?id=class2.vscpd#type_6_0x0006_minute\">Class=65535, Type=6<\/a> which is the internal minute event. So now the fridge temperature will be sent up to the cloud server every minute instead of each time the measurement event is received. We can do this for all other fridge\/refrigerator measurements also and send them all in one call up to the cloud server. Much more efficient.<\/p>\n<p>You have the live result\u00a0<a href=\"https:\/\/thingspeak.com\/channels\/79008\/private_show\">here<\/a>.<\/p>\n<p>Note the abstractions here. A driver on the VSCP server can collect data from a device of <strong>any type<\/strong>, transported over <strong>any net<\/strong> using <strong>any protocol<\/strong>\u00a0 etc and it will end up well-defined here. This also works the other way around as the data can be sent out over any protocol, using any carrier and ending up on any device. One simple driver is all that distinguish one type from another and this driver can make everything look like it is a VSCP aware thingi from the VSCP servers point of view.<\/p>\n<p><strong>Task completed.<\/strong><\/p>\n<p><strong>Hardware Setup:<\/strong>\u00a0Here the VSCP Server is running on a Raspberry Pi. The fridge and the refrigerator and the modules is connected with CAN and the Pi uses the <a href=\"http:\/\/www.vscp.org\/docs\/vscpd\/doku.php?id=level1_driver_can4vscp\">CAN4VSCP driver<\/a> with the<a href=\"http:\/\/www.grodansparadis.com\/frankfurt\/rs232\/frankfurt-rs232.html\"> Frankfurt RS-232 module<\/a> with a serial USB adapter to talk to the bus. Ethernet, Wifi, sub MHz RF, or whatever could have been used instead of CAN, but the powered CAN4VSCP bus is both low-cost, reliable and perfect in many other ways for a setup like this.<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/grodansparadis.com\/wordpress\/wp-content\/uploads\/2017\/11\/IMG_20171130_215937888.jpg\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"2887\" data-permalink=\"https:\/\/grodansparadis.com\/wordpress\/?attachment_id=2887\" data-orig-file=\"https:\/\/i0.wp.com\/grodansparadis.com\/wordpress\/wp-content\/uploads\/2017\/11\/IMG_20171130_215937888.jpg?fit=5344%2C4008&amp;ssl=1\" data-orig-size=\"5344,4008\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;2&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;XT1562&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1512079177&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;4.67&quot;,&quot;iso&quot;:&quot;250&quot;,&quot;shutter_speed&quot;:&quot;0.02999&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"IMG_20171130_215937888\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/grodansparadis.com\/wordpress\/wp-content\/uploads\/2017\/11\/IMG_20171130_215937888.jpg?fit=580%2C435&amp;ssl=1\" class=\"alignnone size-full wp-image-2887\" src=\"https:\/\/i0.wp.com\/grodansparadis.com\/wordpress\/wp-content\/uploads\/2017\/11\/IMG_20171130_215937888.jpg?resize=580%2C435\" alt=\"\" width=\"580\" height=\"435\" srcset=\"https:\/\/i0.wp.com\/grodansparadis.com\/wordpress\/wp-content\/uploads\/2017\/11\/IMG_20171130_215937888.jpg?w=5344&amp;ssl=1 5344w, https:\/\/i0.wp.com\/grodansparadis.com\/wordpress\/wp-content\/uploads\/2017\/11\/IMG_20171130_215937888.jpg?resize=300%2C225&amp;ssl=1 300w, https:\/\/i0.wp.com\/grodansparadis.com\/wordpress\/wp-content\/uploads\/2017\/11\/IMG_20171130_215937888.jpg?resize=768%2C576&amp;ssl=1 768w, https:\/\/i0.wp.com\/grodansparadis.com\/wordpress\/wp-content\/uploads\/2017\/11\/IMG_20171130_215937888.jpg?resize=1024%2C768&amp;ssl=1 1024w, https:\/\/i0.wp.com\/grodansparadis.com\/wordpress\/wp-content\/uploads\/2017\/11\/IMG_20171130_215937888.jpg?w=1160&amp;ssl=1 1160w, https:\/\/i0.wp.com\/grodansparadis.com\/wordpress\/wp-content\/uploads\/2017\/11\/IMG_20171130_215937888.jpg?w=1740&amp;ssl=1 1740w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>See\u00a0The story about an old fridge and\u00a0VSCP module setup \u2013 refrigirator control part 1\u00a0, part 2, part 3, part 4\u00a0 for earlier parts about this setup. You have a VSCP system (or other system) setup that control something. and now you want to share some of this information up to the cloud.\u00a0 One typical problem [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","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":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[12,53],"tags":[],"class_list":["post-2871","post","type-post","status-publish","format-standard","hentry","category-general","category-howtos"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p4raCZ-Kj","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/grodansparadis.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/2871","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/grodansparadis.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/grodansparadis.com\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/grodansparadis.com\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/grodansparadis.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2871"}],"version-history":[{"count":9,"href":"https:\/\/grodansparadis.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/2871\/revisions"}],"predecessor-version":[{"id":2890,"href":"https:\/\/grodansparadis.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/2871\/revisions\/2890"}],"wp:attachment":[{"href":"https:\/\/grodansparadis.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2871"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/grodansparadis.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2871"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/grodansparadis.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2871"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}