{"id":1161,"date":"2021-11-26T22:09:54","date_gmt":"2021-11-26T22:09:54","guid":{"rendered":"https:\/\/fadyanwar.com\/?p=1161"},"modified":"2021-11-27T11:36:07","modified_gmt":"2021-11-27T11:36:07","slug":"extending-powerfx-to-physical-world","status":"publish","type":"post","link":"https:\/\/fadyanwar.com\/index.php\/2021\/11\/26\/extending-powerfx-to-physical-world\/","title":{"rendered":"Extending PowerFx to Physical World"},"content":{"rendered":"\n<p class=\"has-drop-cap\">In my previous two articles I had shown how to run PowerFx on Raspberry Pi and even how to shell script it on Linux. But till then it was quite still limited to its existing functions that came with it, which although great, doesn&#8217;t do much when it comes to actually use Raspberry Pi and its accessories to do IoT stuff. <\/p>\n\n\n\n<p>So I had this cool gadget called <a href=\"https:\/\/www.raspberrypi.com\/products\/sense-hat\/\" target=\"_blank\" rel=\"noreferrer noopener\">Sense Hat<\/a> lying around and I wondered if it was possible to extend the functions of PowerFx to actually communicate with this Sense Hat and read telemetry data of it such as temperature, pressure, magnistim, etc. <\/p>\n\n\n\n<p>There is no shortage of libraries to do exactly this, but none of those, as far as I&#8217;m aware, are low code! Which would be brilliant if I could pull this off. Because wouldn&#8217;t it be awesome to use low code, easy to understand, Excel formulas to do something as intricate as reading sensor data and controlling Iot hardware?<\/p>\n\n\n\n<p>In order to build this I would need to extend PowerFx source code to have new functions to talk to SenseHat to read data or do stuff, like printing messages on its Led Matrix.<\/p>\n\n\n\n<p>It so happens that there was no released documentation yet to detail how to do this, however I did learn from the great lads at Microsoft that there is actually a way to add helper functions to PowerFx to extend its features and that is actually how the Help() function does work in the REPL Console sample.<\/p>\n\n\n\n<p>So after some code eyeballing to understand the implementation of it, I figured out how to add new functions to PowerFx, which once you understand it you got to appreciate its brilliance as it makes it possible to add new functions to PowerFx without having to rebuild and redeploy the Core Library.<\/p>\n\n\n\n<p>In order to run the code in this article you will need .net core installed and configured on your Raspi. If not, <a href=\"https:\/\/fadyanwar.com\/index.php\/2021\/11\/13\/trying-out-powerfx-on-raspberry-pi\/\" target=\"_blank\" rel=\"noreferrer noopener\">check my previous article on this.<\/a><\/p>\n\n\n\n<p>To add a helper function to PowerFx you will basically create a new class inheriting ReflectionFunction like shown below. I&#8217;m using <a href=\"https:\/\/github.com\/johannesegger\/SenseHatNet\" target=\"_blank\" rel=\"noreferrer noopener\">SenseHatNet<\/a> which I found to be very convenient to use.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignfull\"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\n private class LedMatrixPrintFunction : ReflectionFunction\n        {\n            public LedMatrixPrintFunction() : base(&quot;LedMatrixPrint&quot;, FormulaType.Boolean, FormulaType.String) { }\n\n            public BooleanValue Execute(StringValue message)\n            {\n                Sense.Led.LedMatrix.ShowMessage(message.Value);\n                return FormulaValue.New(true);\n            }\n        }\n<\/pre><\/div>\n\n\n<p>On the 3rd line you will notice that you will need to define the return type and parameter type(s) for the new function. Then this new function will need to be registered to the PowerFx engine using the below line in order to be available via the REPL console.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignfull\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nengine.AddFunction(new LedMatrixPrintFunction());\n<\/pre><\/div>\n\n\n<p>I will spare you the copy and paste by simply cloning my forked sample repo with the modified REPL Console app which have the new PowerFx functions. Simply type the below command to clone it to your Raspi.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>git clone https:\/\/github.com\/fadyanwar\/power-fx-host-samples.git<\/code><\/pre>\n\n\n\n<p>When done, and if you got .net core properly isntalled you will be able to run it like so.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>dotnet run --project power-fx-host-samples\/Samples\/ConsoleREPL\/<\/code><\/code><\/pre>\n\n\n\n<p>When it runs, type the below in the PowerFx console. This is a new helper function that should print a message on the Led Matrix same like shown in this video.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>LedMatrixPrint(\"Fady Says Hi!\")<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"PowerFx on Raspberry Pi\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/aL6i5ZOQIEA?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>If you can see the message then this means things are working fine so we can now move to more interesting stuff. So for example by typing the below you will be able to get the current temperature reading from your Sense HAT.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ReadTemp()<\/code><\/pre>\n\n\n\n<p>And the below command will show you the current pressure.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ReadPressure()<\/code><\/pre>\n\n\n\n<p>You can combine functions as below to print out the temperature for example on the LED Matrix.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>LedMatrixPrint(ReadTemp())<\/code><\/pre>\n\n\n\n<p>And if you don&#8217;t wish to see the very long decimal you can round it up using one of the PowerFx built in functions like below.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>LedMatrixPrint(Round(ReadTemp(), 2))<\/code><\/pre>\n\n\n\n<p>Now you can combine several commands like this to show date, time, temperature and pressure like so.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>LedMatrixPrint(Text(Now()))\nLedMatrixPrint(Round(ReadTemp(), 2))\nLedMatrixPrint(Round(ReadPressure(), 2)) <\/code><\/pre>\n\n\n\n<p>And if you have followed my <a href=\"https:\/\/fadyanwar.com\/index.php\/2021\/11\/19\/powerfx-linux-shell-scripting\/\" target=\"_blank\" rel=\"noreferrer noopener\">previous article on PowerFx shell scripting<\/a> you can save it to a script and run it in a loop using the watch shell command so you will get a cool geeky clock that shows date and time, and real time temperature and pressure as well. Now that is cool!<\/p>\n\n\n\n<p>You can go ahead and use your favorite text editor, personally I prefer nano since it&#8217;s quite convenient. Then paste in the below PowerFx script as shown below. Feel free to be creative here.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nano weather.pfx<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>#!bin\/powerfx\nLedMatrixPrint(Text(Now()))\nLedMatrixPrint(Round(ReadTemp(), 2))\nLedMatrixPrint(Round(ReadPressure(), 2))\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"722\" height=\"509\" src=\"https:\/\/i0.wp.com\/fadyanwar.com\/wp-content\/uploads\/2021\/11\/image-8.png?resize=722%2C509&#038;ssl=1\" alt=\"\" class=\"wp-image-1184\" srcset=\"https:\/\/i0.wp.com\/fadyanwar.com\/wp-content\/uploads\/2021\/11\/image-8.png?w=722&amp;ssl=1 722w, https:\/\/i0.wp.com\/fadyanwar.com\/wp-content\/uploads\/2021\/11\/image-8.png?resize=300%2C211&amp;ssl=1 300w\" sizes=\"auto, (max-width: 722px) 100vw, 722px\" \/><\/figure>\n\n\n\n<p>Don&#8217;t forget to make the script executable after you save it. Then simply run using watch command so it would keep looping like shown below.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>chmod +x weather.pfx\nwatch .\/weather.pfx<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"722\" height=\"509\" src=\"https:\/\/i0.wp.com\/fadyanwar.com\/wp-content\/uploads\/2021\/11\/image-9.png?resize=722%2C509&#038;ssl=1\" alt=\"\" class=\"wp-image-1185\" srcset=\"https:\/\/i0.wp.com\/fadyanwar.com\/wp-content\/uploads\/2021\/11\/image-9.png?w=722&amp;ssl=1 722w, https:\/\/i0.wp.com\/fadyanwar.com\/wp-content\/uploads\/2021\/11\/image-9.png?resize=300%2C211&amp;ssl=1 300w\" sizes=\"auto, (max-width: 722px) 100vw, 722px\" \/><\/figure>\n\n\n\n<p>If all goes well, you should see something that resembles this.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"654\" height=\"368\" src=\"https:\/\/i0.wp.com\/fadyanwar.com\/wp-content\/uploads\/2021\/11\/20211126_215145_1.gif?resize=654%2C368&#038;ssl=1\" alt=\"\" class=\"wp-image-1187\"\/><\/figure>\n\n\n\n<p>Hope you have learnt something new here, if so it would be great if you spread the knowledge around with your friends, also now since you have just secured this new knowledge under your belt, I would love to see what will you do with it, so don&#8217;t be shy to give me a shout online with your work. Thanks for reading my article and hopefully you enjoyed it! Cheers!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In my previous two articles I had shown how to run PowerFx on Raspberry Pi and even how to shell script it on Linux. But till then it was quite still limited to its existing functions that came with it, which although great, doesn&#8217;t do much when it comes to actually use Raspberry Pi and [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1162,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_vp_format_video_url":"","_vp_image_focal_point":[],"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[3,21,20,9],"class_list":["post-1161","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technology","tag-iot","tag-linux","tag-powerfx","tag-raspberrypi"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Extending PowerFx to Physical World - Fady Anwar<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fadyanwar.com\/index.php\/2021\/11\/26\/extending-powerfx-to-physical-world\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Extending PowerFx to Physical World - Fady Anwar\" \/>\n<meta property=\"og:description\" content=\"In my previous two articles I had shown how to run PowerFx on Raspberry Pi and even how to shell script it on Linux. But till then it was quite still limited to its existing functions that came with it, which although great, doesn&#8217;t do much when it comes to actually use Raspberry Pi and [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fadyanwar.com\/index.php\/2021\/11\/26\/extending-powerfx-to-physical-world\/\" \/>\n<meta property=\"og:site_name\" content=\"Fady Anwar\" \/>\n<meta property=\"article:published_time\" content=\"2021-11-26T22:09:54+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-11-27T11:36:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fadyanwar.com\/wp-content\/uploads\/2021\/11\/RaspberryPi-SenseHAT.gif\" \/>\n\t<meta property=\"og:image:width\" content=\"620\" \/>\n\t<meta property=\"og:image:height\" content=\"286\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/gif\" \/>\n<meta name=\"author\" content=\"Fady Anwar\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@fadyanwar\" \/>\n<meta name=\"twitter:site\" content=\"@fadyanwar\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fady Anwar\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/fadyanwar.com\\\/index.php\\\/2021\\\/11\\\/26\\\/extending-powerfx-to-physical-world\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/fadyanwar.com\\\/index.php\\\/2021\\\/11\\\/26\\\/extending-powerfx-to-physical-world\\\/\"},\"author\":{\"name\":\"Fady Anwar\",\"@id\":\"https:\\\/\\\/fadyanwar.com\\\/#\\\/schema\\\/person\\\/b66e3277ceba346f7053a83464e90b03\"},\"headline\":\"Extending PowerFx to Physical World\",\"datePublished\":\"2021-11-26T22:09:54+00:00\",\"dateModified\":\"2021-11-27T11:36:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/fadyanwar.com\\\/index.php\\\/2021\\\/11\\\/26\\\/extending-powerfx-to-physical-world\\\/\"},\"wordCount\":825,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\\\/\\\/fadyanwar.com\\\/#\\\/schema\\\/person\\\/b66e3277ceba346f7053a83464e90b03\"},\"image\":{\"@id\":\"https:\\\/\\\/fadyanwar.com\\\/index.php\\\/2021\\\/11\\\/26\\\/extending-powerfx-to-physical-world\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/fadyanwar.com\\\/wp-content\\\/uploads\\\/2021\\\/11\\\/RaspberryPi-SenseHAT.gif?fit=620%2C286&ssl=1\",\"keywords\":[\"IoT\",\"Linux\",\"PowerFx\",\"raspberrypi\"],\"articleSection\":[\"Technology\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/fadyanwar.com\\\/index.php\\\/2021\\\/11\\\/26\\\/extending-powerfx-to-physical-world\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/fadyanwar.com\\\/index.php\\\/2021\\\/11\\\/26\\\/extending-powerfx-to-physical-world\\\/\",\"url\":\"https:\\\/\\\/fadyanwar.com\\\/index.php\\\/2021\\\/11\\\/26\\\/extending-powerfx-to-physical-world\\\/\",\"name\":\"Extending PowerFx to Physical World - Fady Anwar\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/fadyanwar.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/fadyanwar.com\\\/index.php\\\/2021\\\/11\\\/26\\\/extending-powerfx-to-physical-world\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/fadyanwar.com\\\/index.php\\\/2021\\\/11\\\/26\\\/extending-powerfx-to-physical-world\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/fadyanwar.com\\\/wp-content\\\/uploads\\\/2021\\\/11\\\/RaspberryPi-SenseHAT.gif?fit=620%2C286&ssl=1\",\"datePublished\":\"2021-11-26T22:09:54+00:00\",\"dateModified\":\"2021-11-27T11:36:07+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/fadyanwar.com\\\/index.php\\\/2021\\\/11\\\/26\\\/extending-powerfx-to-physical-world\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/fadyanwar.com\\\/index.php\\\/2021\\\/11\\\/26\\\/extending-powerfx-to-physical-world\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/fadyanwar.com\\\/index.php\\\/2021\\\/11\\\/26\\\/extending-powerfx-to-physical-world\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/fadyanwar.com\\\/wp-content\\\/uploads\\\/2021\\\/11\\\/RaspberryPi-SenseHAT.gif?fit=620%2C286&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/fadyanwar.com\\\/wp-content\\\/uploads\\\/2021\\\/11\\\/RaspberryPi-SenseHAT.gif?fit=620%2C286&ssl=1\",\"width\":620,\"height\":286},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/fadyanwar.com\\\/index.php\\\/2021\\\/11\\\/26\\\/extending-powerfx-to-physical-world\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/fadyanwar.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Extending PowerFx to Physical World\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/fadyanwar.com\\\/#website\",\"url\":\"https:\\\/\\\/fadyanwar.com\\\/\",\"name\":\"Fady Anwar\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/fadyanwar.com\\\/#\\\/schema\\\/person\\\/b66e3277ceba346f7053a83464e90b03\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/fadyanwar.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/fadyanwar.com\\\/#\\\/schema\\\/person\\\/b66e3277ceba346f7053a83464e90b03\",\"name\":\"Fady Anwar\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a9172040bbc3bbe24fb49d59dac20da030af1f5ff628126c979a1d4b71eaed41?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a9172040bbc3bbe24fb49d59dac20da030af1f5ff628126c979a1d4b71eaed41?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a9172040bbc3bbe24fb49d59dac20da030af1f5ff628126c979a1d4b71eaed41?s=96&d=mm&r=g\",\"caption\":\"Fady Anwar\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a9172040bbc3bbe24fb49d59dac20da030af1f5ff628126c979a1d4b71eaed41?s=96&d=mm&r=g\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Extending PowerFx to Physical World - Fady Anwar","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fadyanwar.com\/index.php\/2021\/11\/26\/extending-powerfx-to-physical-world\/","og_locale":"en_US","og_type":"article","og_title":"Extending PowerFx to Physical World - Fady Anwar","og_description":"In my previous two articles I had shown how to run PowerFx on Raspberry Pi and even how to shell script it on Linux. But till then it was quite still limited to its existing functions that came with it, which although great, doesn&#8217;t do much when it comes to actually use Raspberry Pi and [&hellip;]","og_url":"https:\/\/fadyanwar.com\/index.php\/2021\/11\/26\/extending-powerfx-to-physical-world\/","og_site_name":"Fady Anwar","article_published_time":"2021-11-26T22:09:54+00:00","article_modified_time":"2021-11-27T11:36:07+00:00","og_image":[{"width":620,"height":286,"url":"https:\/\/fadyanwar.com\/wp-content\/uploads\/2021\/11\/RaspberryPi-SenseHAT.gif","type":"image\/gif"}],"author":"Fady Anwar","twitter_card":"summary_large_image","twitter_creator":"@fadyanwar","twitter_site":"@fadyanwar","twitter_misc":{"Written by":"Fady Anwar","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fadyanwar.com\/index.php\/2021\/11\/26\/extending-powerfx-to-physical-world\/#article","isPartOf":{"@id":"https:\/\/fadyanwar.com\/index.php\/2021\/11\/26\/extending-powerfx-to-physical-world\/"},"author":{"name":"Fady Anwar","@id":"https:\/\/fadyanwar.com\/#\/schema\/person\/b66e3277ceba346f7053a83464e90b03"},"headline":"Extending PowerFx to Physical World","datePublished":"2021-11-26T22:09:54+00:00","dateModified":"2021-11-27T11:36:07+00:00","mainEntityOfPage":{"@id":"https:\/\/fadyanwar.com\/index.php\/2021\/11\/26\/extending-powerfx-to-physical-world\/"},"wordCount":825,"commentCount":2,"publisher":{"@id":"https:\/\/fadyanwar.com\/#\/schema\/person\/b66e3277ceba346f7053a83464e90b03"},"image":{"@id":"https:\/\/fadyanwar.com\/index.php\/2021\/11\/26\/extending-powerfx-to-physical-world\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/fadyanwar.com\/wp-content\/uploads\/2021\/11\/RaspberryPi-SenseHAT.gif?fit=620%2C286&ssl=1","keywords":["IoT","Linux","PowerFx","raspberrypi"],"articleSection":["Technology"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fadyanwar.com\/index.php\/2021\/11\/26\/extending-powerfx-to-physical-world\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fadyanwar.com\/index.php\/2021\/11\/26\/extending-powerfx-to-physical-world\/","url":"https:\/\/fadyanwar.com\/index.php\/2021\/11\/26\/extending-powerfx-to-physical-world\/","name":"Extending PowerFx to Physical World - Fady Anwar","isPartOf":{"@id":"https:\/\/fadyanwar.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fadyanwar.com\/index.php\/2021\/11\/26\/extending-powerfx-to-physical-world\/#primaryimage"},"image":{"@id":"https:\/\/fadyanwar.com\/index.php\/2021\/11\/26\/extending-powerfx-to-physical-world\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/fadyanwar.com\/wp-content\/uploads\/2021\/11\/RaspberryPi-SenseHAT.gif?fit=620%2C286&ssl=1","datePublished":"2021-11-26T22:09:54+00:00","dateModified":"2021-11-27T11:36:07+00:00","breadcrumb":{"@id":"https:\/\/fadyanwar.com\/index.php\/2021\/11\/26\/extending-powerfx-to-physical-world\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fadyanwar.com\/index.php\/2021\/11\/26\/extending-powerfx-to-physical-world\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fadyanwar.com\/index.php\/2021\/11\/26\/extending-powerfx-to-physical-world\/#primaryimage","url":"https:\/\/i0.wp.com\/fadyanwar.com\/wp-content\/uploads\/2021\/11\/RaspberryPi-SenseHAT.gif?fit=620%2C286&ssl=1","contentUrl":"https:\/\/i0.wp.com\/fadyanwar.com\/wp-content\/uploads\/2021\/11\/RaspberryPi-SenseHAT.gif?fit=620%2C286&ssl=1","width":620,"height":286},{"@type":"BreadcrumbList","@id":"https:\/\/fadyanwar.com\/index.php\/2021\/11\/26\/extending-powerfx-to-physical-world\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fadyanwar.com\/"},{"@type":"ListItem","position":2,"name":"Extending PowerFx to Physical World"}]},{"@type":"WebSite","@id":"https:\/\/fadyanwar.com\/#website","url":"https:\/\/fadyanwar.com\/","name":"Fady Anwar","description":"","publisher":{"@id":"https:\/\/fadyanwar.com\/#\/schema\/person\/b66e3277ceba346f7053a83464e90b03"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fadyanwar.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/fadyanwar.com\/#\/schema\/person\/b66e3277ceba346f7053a83464e90b03","name":"Fady Anwar","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/a9172040bbc3bbe24fb49d59dac20da030af1f5ff628126c979a1d4b71eaed41?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/a9172040bbc3bbe24fb49d59dac20da030af1f5ff628126c979a1d4b71eaed41?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a9172040bbc3bbe24fb49d59dac20da030af1f5ff628126c979a1d4b71eaed41?s=96&d=mm&r=g","caption":"Fady Anwar"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/a9172040bbc3bbe24fb49d59dac20da030af1f5ff628126c979a1d4b71eaed41?s=96&d=mm&r=g"}}]}},"jetpack_featured_media_url":"https:\/\/i0.wp.com\/fadyanwar.com\/wp-content\/uploads\/2021\/11\/RaspberryPi-SenseHAT.gif?fit=620%2C286&ssl=1","jetpack_sharing_enabled":true,"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/fadyanwar.com\/index.php\/wp-json\/wp\/v2\/posts\/1161","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fadyanwar.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fadyanwar.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fadyanwar.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fadyanwar.com\/index.php\/wp-json\/wp\/v2\/comments?post=1161"}],"version-history":[{"count":41,"href":"https:\/\/fadyanwar.com\/index.php\/wp-json\/wp\/v2\/posts\/1161\/revisions"}],"predecessor-version":[{"id":1215,"href":"https:\/\/fadyanwar.com\/index.php\/wp-json\/wp\/v2\/posts\/1161\/revisions\/1215"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fadyanwar.com\/index.php\/wp-json\/wp\/v2\/media\/1162"}],"wp:attachment":[{"href":"https:\/\/fadyanwar.com\/index.php\/wp-json\/wp\/v2\/media?parent=1161"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fadyanwar.com\/index.php\/wp-json\/wp\/v2\/categories?post=1161"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fadyanwar.com\/index.php\/wp-json\/wp\/v2\/tags?post=1161"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}