{"id":37422,"date":"2019-10-31T22:17:33","date_gmt":"2019-10-31T19:17:33","guid":{"rendered":"https:\/\/prohoster.info\/blog\/shiotiny-uzly-svyazi-i-sobytiya-ili-osobennosti-risovaniya-programm\/"},"modified":"2019-10-31T22:17:33","modified_gmt":"2019-10-31T19:17:33","slug":"shiotiny-uzly-svyazi-i-sobytiya-ili-osobennosti-risovaniya-programm","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/shiotiny-uzly-svyazi-i-sobytiya-ili-osobennosti-risovaniya-programm","title":{"rendered":"ShIoTiny: nodes, connections, and events or features of program visualization","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"ShIoTiny: nodes, connections, and events or features of program visualization\" src=\"\/wp-content\/uploads\/2019\/08\/e5d6a9f6ca0fc445f705a645e5319c06.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4>Main theses or what this article is about<\/h4>\n<p>\nThe topic of the article is visual programming of PLCs <b>ShIoTiny<\/b> for smart homes, described here: <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/463107\/\">ShIoTiny: small automation, Internet of Things, or 'half a year before vacation'<\/a><\/noindex>.<\/p>\n<p><b>In brief<\/b> the concepts of <b>nodes<\/b>, <b>connections<\/b>, <b>events<\/b>, as well as the features of loading and executing a visual program on <b>ESP8266<\/b>, which serves as the basis for the PLC <b>ShIoTiny<\/b>.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h4>Introduction or a couple of organizational questions<\/h4>\n<p>\nIn the previous article regarding my development, I provided a brief overview of the controller\u2019s capabilities <b>ShIoTiny<\/b>.<\/p>\n<p>Strangely enough, the public showed considerable interest and asked me many questions. Some individuals even immediately suggested buying the controller from me. No, I am not against making some money, but my conscience does not allow me to sell a product that is still very raw software-wise.<\/p>\n<p>Therefore, I posted the firmware binaries and device schematic on GitHub: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/shiotiny\/ShIoTinyBin\">firmware + brief instructions + schematic + examples<\/a><\/noindex>.<\/p>\n<p>Now anyone can flash the ESP-07 and play around with the firmware themselves. If someone really wants a board just like the one in the photo \u2014 I have a few available. Contact me at <b>shiotiny@yandex.ru<\/b>. But as the unforgettable Ogurtsov used to say: 'I take no responsibility for anything!'.<\/p>\n<p>Now, let's get to the point: what is \"<b>node<\/b>\" (node) and \"<b>event<\/b>\"? How does the program execute?<\/p>\n<p>As usual, we will start in order: with loading the program.<\/p>\n<h4>How the program is loaded<\/h4>\n<p>\nLet\u2019s start with what happens when we press the button <b>Upload<\/b> in the editor <b>ElDraw<\/b> and our schematic-program, consisting of nice little squares, is sent to the device.<\/p>\n<p>First, based on the diagram we drew, a text description is created.<br \/>\nSecond, it is checked whether all the inputs of the nodes are connected to the outputs. There should be no 'hanging' inputs. If such an input is detected, the schematic in ShIoTiny will not load, and the editor will display the appropriate warning.<\/p>\n<p>If everything goes successfully, the editor sends the text description of the schematic to ShIoTiny node by node. Naturally, the existing schematic in ShIoTiny is deleted beforehand. The received text description is saved in FLASH memory.<\/p>\n<p>By the way, if you want to delete the schematic from the device, just upload an empty schematic (containing no node elements).<\/p>\n<p>Once the entire program schema is loaded into the ShIoTiny PLC, it begins to \"run.\" What does this mean?<\/p>\n<p>It is important to note that the processes of loading the schema from FLASH memory when powered on and receiving the schema from the editor are identical.<\/p>\n<p>First, the creation of node objects is carried out based on their description.<br \/>\nThen, the connections between the nodes are established. That is, links from outputs to inputs and from inputs to outputs are generated.<\/p>\n<p>And only after all this is the main execution cycle of the program started.<\/p>\n<p>I wrote for a long time, but the entire process \u2014 from loading the schema from FLASH memory to starting the main cycle \u2014 takes a fraction of a second for a schema of 60-80 nodes.<\/p>\n<p>How does the main cycle work? Very simply. First, it waits for an event to occur <b>events<\/b> in any node, then processes this event. And so on endlessly, or until a new schema is loaded into ShIoTiny.<\/p>\n<p>I have mentioned several times things like <b>events<\/b>, <b>nodes<\/b> and <b>connections<\/b>. But what is it from a programming perspective? We will discuss this today.<\/p>\n<h4>Nodes, connections, and events<\/h4>\n<p>\nA quick look at examples of program schemas shows that they consist of only two entities \u2014 nodes (or elements) and the connections between them. <b>ShIoTiny<\/b>Node<\/p>\n<p><b>\u2014 is a virtual representation of some<\/b>, <b>data handler. This can be an arithmetic operation, a logical operation, or any operation that comes to mind. The main thing is that the node has an input and an output.<\/b> or <b>Input<\/b> \u2014 is the place where the node receives data. The images of inputs are points that are always located on the left side of the node. <b>actions.<\/b> Output<\/p>\n<p><b>\u2014 is the place from which the result of the node's operation is extracted. The images of outputs are points that are always located on the right side of the node.<\/b> Some nodes do not have inputs. Such nodes generate results internally. For example, a constant node or a sensor node: they do not need data from other nodes to provide a result.<\/p>\n<p><b>Other nodes, on the contrary, have no outputs. These are nodes that represent, for example, actuating devices (relays or similar). They receive data but do not generate results of computations available to other nodes.<\/b> Additionally, there is a unique comment node. It does nothing and has no inputs or outputs. Its purpose is to serve as an explanation in the schema.<\/p>\n<p>What is an event<\/p>\n<p>...?<\/p>\n<p>What is an \"event\"?<\/p>\n<p>Event<b>event<\/b>\u00bb? <b>Event<\/b> \u2014 this is the occurrence of new data at any node. For example, events include: a change in the state of an input (node <b>Input<\/b>), receiving data from another device (nodes <b>MQTT<\/b> and <b>UDP<\/b>), the expiration of a given time interval (nodes <b>Timer<\/b> and <b>Delay<\/b>) and so on.<\/p>\n<p>What are events needed for? To determine where new data has occurred at which node and which node states need to be changed due to the receipt of new data. An event 'passes' through the chain of nodes until it covers all nodes that need to be checked and changed.<\/p>\n<p>All nodes can be divided into two categories. <br \/>\nNodes that can generate events will be called '<b>active nodes<\/b>\u00bb.<br \/>\nNodes that cannot generate events will be called '<b>passive nodes<\/b>\u00bb.<\/p>\n<p>When a node generates an event (i.e., new data appears at its output), the state of the entire chain of nodes connected to the output of the event-generating node generally changes.<\/p>\n<p>To make it clear, let's consider an example in the picture.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: nodes, connections, and events or features of program visualization\" src=\"\/wp-content\/uploads\/2019\/08\/41b53ae925e85c3f272adec876ab3151.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nActive nodes here are Input1, Input2, and Input3. The other nodes are passive. Let's examine what happens when either input is closed. The results are conveniently summarized in a table.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: nodes, connections, and events or features of program visualization\" src=\"\/wp-content\/uploads\/2019\/08\/0a8435184f85e919f763048120e6e780.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAs we can see, when an event occurs, a chain is built from the source node of the event to the endpoint node. The state of those nodes that do not fall within the chain remains unchanged.<\/p>\n<p>A legitimate question arises: what happens when two or even several events occur simultaneously?<\/p>\n<p>As a fan of Gleb Anfilov's creativity, I feel compelled to direct the curious inquirer to his book 'Escape from Surprises'. It serves as a 'theory of relativity for the smallest', where it is well explained what 'simultaneously' means and how to live with it.<\/p>\n<p>But practically speaking, everything is much simpler: when two or even several events occur, all chains from each event source are built and processed consecutively in turn, with no wonders.<\/p>\n<p>A logical question for a curious reader is: what happens if we connect the nodes in a ring? Or, as it is commonly said among these clever folks \u2014 introduce feedback. This means connecting the output of one node to the input of the previous node in such a way that the state of this node's output affects the state of its own input. You will not be allowed to directly connect the output of a node to its own input, as the editor will prevent that. <b>ElDraw<\/b>However, indirectly, as illustrated below \u2014 this can be done.<\/p>\n<p>So, what will happen in this case? The answer is quite 'definite': it depends on what nodes you are using. Let's consider the example in the drawing.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: nodes, connections, and events or features of program visualization\" src=\"\/wp-content\/uploads\/2019\/08\/7a640c3abfd4868b87f415bce93e4918.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWhen the input contacts Input1 are open at the top input of node A \u2014 0. At the output of node A, also 0. At the output of node B \u2014 1. And finally, at the lower input of node A \u2014 1. Everything is clear. If it's not clear to someone \u2014 see below for a description of how the 'AND' and 'NOT' nodes work.<\/p>\n<p>Now we'll close the input contacts Input1, meaning we'll apply a one to the top input of node A. Those familiar with electronics know that we essentially have a classic generator circuit based on logic elements. Ideally, this circuit should continually output sequences of 1-0-1-0-1-0... and 0-1-0-1-0-1... The event should continually change the states of nodes A and B, cycling through 2-3-2-3\u2026!<\/p>\n<p>But in reality, this does not happen. The circuit falls into a random state \u2014 either the relay remains on or off, or it might buzz slightly as it toggles on and off several times in succession. Everything depends on the weather at the southern pole of Mars. And here\u2019s why this occurs.<\/p>\n<p>The event at node Input1 changes the state of node A, then node B, and so on in a loop several times. The program detects the 'looping' of the event and forcibly stops this carnival. After that, the state changes of nodes A and B are blocked until a new event occurs. The moment when the program decides \u2014 'enough spinning in circles!' \u2014 generally depends on many factors and can be considered random.<\/p>\n<blockquote><p>Be careful when connecting nodes in a ring \u2014 the effects will not always be obvious! Be well aware of what you are doing and why!<\/p><\/blockquote>\n<p> Can we still build a generator on the available nodes? Yes, we can! However, this requires a node that can generate events by itself. And such a node exists \u2014 it\u2019s the \"delay line.\" Let\u2019s see how a generator works with a period of 6 seconds in the illustration below.<\/p>\n<p><img decoding=\"async\" alt=\"ShIoTiny: nodes, connections, and events or features of program visualization\" src=\"\/wp-content\/uploads\/2019\/08\/7dc1babedec97fb8177b846c760ff44e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThe key element of the generator is node A \u2014 the delay line. If the state of the input to the delay line changes from 0 to 1, then 1 will not appear on the output immediately, but only after a specified time. In our case, that is 3 seconds. Similarly, if the state of the input to the delay line changes from 1 to 0, then 0 will appear on the output after the same 3 seconds. The delay time is specified in tenths of a second. So, a value of 30 means \u2014 3 seconds.<\/p>\n<p>A feature of the delay line is that it generates an event after the delay time has elapsed.<\/p>\n<p>Let\u2019s assume that initially, the output of the delay line was 0. After passing through node B \u2014 the inverter \u2014 this 0 changes to 1 and enters the input of the delay line. Nothing happens immediately. The output of the delay line remains 0, but the timer for the delay starts. Three seconds pass. And then the delay line generates an event. A 1 appears at the output. This 1 then passes through node B \u2014 the inverter \u2014 turns into 0, and enters the input of the delay line. Another 3 seconds pass\u2026 and the process repeats. Thus, every 3 seconds, the state of the output of the delay line changes from 0 to 1 and then from 1 to 0. The relay clicks. The generator works. The pulse period is 6 seconds (3 seconds on a 0 output and 3 seconds \u2014 1).<\/p>\n<p>However, in real circuits, this example is usually unnecessary. There are special timer nodes that perfectly generate a sequence of pulses with a specified period without external help. The duration of the \u201c0\u201d and \u201c1\u201d in these pulses equals half the period.<\/p>\n<blockquote><p>To set periodic actions, use timer nodes.<\/p><\/blockquote>\n<p> I would like to note that such digital signals, where the duration of \"0\" and \"1\" are equal, are called \"meander.\" <\/p>\n<p>I hope I've clarified a bit about how events propagate between nodes and what not to do.<\/p>\n<h4>Conclusion and references<\/h4>\n<p>\nThe article turned out to be short, but it is a response to the questions that arose regarding nodes and events.<\/p>\n<p>As firmware evolves and new examples emerge, I will write about programming <b>ShIoTiny<\/b> brief articles as long as they interest people.<\/p>\n<p>As before, the scheme, firmware, examples, node descriptions, and everything <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/shiotiny\/ShIoTinyBin\">else is here<\/a><\/noindex>.<\/p>\n<p>Questions, suggestions, criticism \u2014 send them here: <b>shiotiny@yandex.ru<\/b><br \/>\n<br \/>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/463285\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u0435\u0437\u0438\u0441\u044b \u0438\u043b\u0438 \u043e \u0447\u0435\u043c \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0422\u0435\u043c\u0430 \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u041f\u041b\u041a ShIoTiny \u0434\u043b\u044f \u0443\u043c\u043d\u043e\u0433\u043e \u0434\u043e\u043c\u0430, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0443\u0442: ShIoTiny: \u043c\u0430\u043b\u0430\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f, \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0432\u0435\u0449\u0435\u0439 \u0438\u043b\u0438 \u00ab\u0437\u0430 \u043f\u043e\u043b\u0433\u043e\u0434\u0430 \u0434\u043e \u043e\u0442\u043f\u0443\u0441\u043a\u0430\u00bb. \u041e\u0447\u0435\u043d\u044c \u043a\u0440\u0430\u0442\u043a\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u0442\u0430\u043a\u0438\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u044f, \u043a\u0430\u043a \u0443\u0437\u043b\u044b, \u0441\u0432\u044f\u0437\u0438, \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 ESP8266, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0441\u043d\u043e\u0432\u043e\u0439 \u041f\u041b\u041a ShIoTiny. \u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28078,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37422","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u0435\u0437\u0438\u0441\u044b \u0438\u043b\u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/shiotiny-uzly-svyazi-i-sobytiya-ili-osobennosti-risovaniya-programm\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47ShIoTiny: \u0443\u0437\u043b\u044b, \u0441\u0432\u044f\u0437\u0438 \u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0438\u043b\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u0435\u0437\u0438\u0441\u044b \u0438\u043b\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/shiotiny-uzly-svyazi-i-sobytiya-ili-osobennosti-risovaniya-programm\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:17:33+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:17:33+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47ShIoTiny: nodes, connections, and events or features of program drawing | ProHoster","description":"Key points or.","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/shiotiny-uzly-svyazi-i-sobytiya-ili-osobennosti-risovaniya-programm","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47ShIoTiny: \u0443\u0437\u043b\u044b, \u0441\u0432\u044f\u0437\u0438 \u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0438\u043b\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c | ProHoster","og:description":"\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u0435\u0437\u0438\u0441\u044b \u0438\u043b\u0438.","og:url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/shiotiny-uzly-svyazi-i-sobytiya-ili-osobennosti-risovaniya-programm","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:17:33+00:00","article:modified_time":"2019-10-31T19:17:33+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37422","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 17:45:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:27:24","updated":"2026-01-23 17:45:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/37422","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/comments?post=37422"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/37422\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media\/28078"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=37422"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=37422"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=37422"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}