PGE wyłączenia - Planned PGE grid outages - Poland
Ten flow pobiera z dane o planowanych wyłączeniach z tabeli wyłączeń dostępnej na https://pgedystrybucja.pl/planowane-wylaczenia By uzyskać dane w debug Tabela należy wpisać przynajmniej rejon w inject node. Aby uzyskać dane na debug Wyjście należy wpisać w msg.obszar nazwę miejscowości i ewentualnie nazwę ulicy w msg.ulica Z powodu bardzo nieregularnych danych w tabeli nie ma za bardzo możliwości uzyskania lepszego rezultatu wyjściowego. Poniższy flow można wykorzystać do ustawienia powiadomień np. w HomeAssistant
[{"id":"e5f6c47f48f3cf14","type":"tab","label":"PGE wyłączenia","disabled":false,"info":"","env":[]},{"id":"inject_node_id","type":"inject","z":"e5f6c47f48f3cf14","name":"Rejon obszar ulica","props":[{"p":"rejon","v":"Radom","vt":"str"},{"p":"obszar","v":"Radom","vt":"str"},{"p":"ulica","v":"Żeromskiego","vt":"str"}],"repeat":"","crontab":"00 08 * * *","once":false,"onceDelay":"","topic":"","x":280,"y":220,"wires":[["http_request_node_id"]]},{"id":"http_request_node_id","type":"http request","z":"e5f6c47f48f3cf14","name":"PGE wyłączenia","method":"GET","ret":"txt","paytoqs":"ignore","url":"https://pgedystrybucja.pl/planowanewylaczenia/wylaczenia/{{{rejon}}}","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":480,"y":220,"wires":[["5366cf0b36103879"]]},{"id":"debug_node_id","type":"debug","z":"e5f6c47f48f3cf14","name":"Wyjście","active":true,"tosidebar":true,"console":false,"complete":"payload","statusVal":"","statusType":"auto","x":980,"y":220,"wires":[]},{"id":"5366cf0b36103879","type":"function","z":"e5f6c47f48f3cf14","name":"Parse table","func":"let html = msg.payload;\n\n// Znajdź tabelę w HTML\nlet tableStart = html.indexOf('<table');\nlet tableEnd = html.indexOf('</table>') + 8; // +8 dla zamknięcia tagu </table>\nlet tableHtml = html.slice(tableStart, tableEnd);\n\n// Usuń nagłówki tabeli, pozostawiając same wiersze\nlet rowsHtml = tableHtml.split(/<tr[^>]*>/).slice(1);\n\n// Inicjalizuj tablicę na wyniki\nlet rows = [];\n\n// Parsuj każdy wiersz\nrowsHtml.forEach(rowHtml => {\n let columns = rowHtml.split(/<\\/td>/).slice(0, -1); // Każdy wiersz ma kilka kolumn\n\n // Sprawdź długość kolumn i dostosuj indeksy, aby poprawnie odczytać wartości\n if (columns.length >= 5) {\n let obszar = columns[0].replace(/<[^>]+>/g, '').trim();\n let data_rozpoczecia = columns[1].replace(/<[^>]+>/g, '').trim();\n let data_zakonczenia = columns[2].replace(/<[^>]+>/g, '').trim();\n let godziny = columns[3].replace(/<[^>]+>/g, '').trim();\n let stacja = columns[4].replace(/<[^>]+>/g, '').trim();\n\n // Zapisz dane w obiekcie\n rows.push({\n obszar: obszar,\n data_rozpoczecia: data_rozpoczecia,\n data_zakonczenia: data_zakonczenia,\n godziny: godziny,\n stacja: stacja\n });\n }\n});\n\n// Zwróć wynik jako JSON\nmsg.payload = rows;\nreturn msg;\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":650,"y":220,"wires":[["aa31f4571c6ebd7d","b03227cb6395e156"]]},{"id":"aa31f4571c6ebd7d","type":"function","z":"e5f6c47f48f3cf14","name":"Get searched","func":"let found = null; // Zmienna przechowująca znaleziony wynik\n\n// Przeglądaj wszystkie rekordy w msg.payload\nmsg.payload.forEach(entry => {\n // Sprawdź, czy obszar to Radom i czy ulica znajduje się w polu obszaru\n if (entry.obszar.includes(msg.obszar) && (entry.obszar.includes(msg.ulica) || msg.ulica == \"\")) {\n // Jeśli znaleziono, zapisz daty rozpoczęcia i zakończenia\n found = {\n obszar: entry.obszar,\n data_rozpoczecia: entry.data_rozpoczecia,\n data_zakonczenia: entry.data_zakonczenia,\n godziny: entry.godziny,\n stacja: entry.stacja\n };\n }\n});\nflow.set(\"nogrid\",found || undefined) // kiedy znaleziono zapisz również do flow.nogrid\n// Jeśli nie znaleziono, ustaw wynik na null i nie posyłaj wiadomości dalej\nmsg.payload = found || null;\nif (msg.payload != null)\n{\n return msg;\n}","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":820,"y":220,"wires":[["debug_node_id"]]},{"id":"b03227cb6395e156","type":"debug","z":"e5f6c47f48f3cf14","name":"Tabela","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":970,"y":160,"wires":[]},{"id":"b36aa30.3a7276","type":"http request","z":"e5f6c47f48f3cf14","name":"","method":"GET","ret":"txt","url":"","x":670,"y":880,"wires":[["1ef9987c.956c78"]]},{"id":"11167f67.5d5031","type":"inject","z":"e5f6c47f48f3cf14","name":"cars on craigslist","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":"","topic":"","payload":"http://vancouver.craigslist.org/search/sss?format=rss&query=cars","payloadType":"str","x":340,"y":880,"wires":[["70154cd4.de1444"]]},{"id":"70154cd4.de1444","type":"change","z":"e5f6c47f48f3cf14","name":"","rules":[{"t":"set","p":"url","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":510,"y":880,"wires":[["b36aa30.3a7276"]]},{"id":"1ef9987c.956c78","type":"debug","z":"e5f6c47f48f3cf14","name":"","active":true,"console":"false","complete":"false","x":830,"y":880,"wires":[]},{"id":"e95c6faa.ab2e1","type":"http request","z":"e5f6c47f48f3cf14","name":"","method":"GET","ret":"txt","url":"https://query.yahooapis.com/v1/public/yql?q={{{query}}}&format=json","tls":"","x":670,"y":1000,"wires":[["7cf30700.5bc978"]]},{"id":"7cf30700.5bc978","type":"debug","z":"e5f6c47f48f3cf14","name":"","active":true,"console":"false","complete":"payload","x":830,"y":1000,"wires":[]},{"id":"637d3c55.eb3084","type":"inject","z":"e5f6c47f48f3cf14","name":"query parameter","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":"","topic":"","payload":"select astronomy.sunset from weather.forecast where woeid in (select woeid from geo.places(1) where text=\"maui, hi\")","payloadType":"str","x":320,"y":1000,"wires":[["b001d489.d8f818"]]},{"id":"b001d489.d8f818","type":"change","z":"e5f6c47f48f3cf14","name":"","rules":[{"t":"set","p":"query","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":500,"y":1000,"wires":[["e95c6faa.ab2e1"]]},{"id":"8c1b3ef25f737d84","type":"comment","z":"e5f6c47f48f3cf14","name":"Nazwy rejonów","info":"Aktualne nazwy regionów można sprawdzić pod linkiem:\nhttps://pgedystrybucja.pl/planowane-wylaczenia\n# Oddział Łódź:\n Bełchatów\n Łódź\n Łowicz\n Piotrków-Trybunalski\n Sieradz\n Żyrardów\n Tomaszów-Mazowiecki\n Zgierz-Pabianice\n# Oddział Warszawa:\nLegionowo\nMińsk-Mazowiecki\nOstrołęka\nOtwock\nPruszków\nSiedlce\nWyszków\nKonstancin-Jeziorna\n# Oddział Białystok:\nBiałystok-Miasto\nBiałystok-Teren\nBielsk-Podlaski\nEłk\nŁomża\nSuwałki\n# Oddział Lublin:\nBiała-Podlaska\nKraśnik\nLublin-Miasto\nLublin-Teren\nPuławy\nRadzyń-Podlaski\n# Oddział Rzeszów:\nStaszów\nJanów-Lubelski\nKrosno\nMielec\nRzeszów\nSanok\nStalowa-Wola\nLeżajsk\nOddział Zamość:\nZamość\nJarosław\nTomaszów-Lubelski\nChełm\nPrzemyśl\n# Oddział Skarżysko-Kamienna:\nGrójec\nBusko\nOstrowiec\nRadom\nSkarżysko\nKozienice\nKielce\n","x":240,"y":120,"wires":[]},{"id":"dfd154036dcb4a6f","type":"comment","z":"e5f6c47f48f3cf14","name":"Wprowadź rejon,obszar ewentualnie ulica.","info":"","x":320,"y":160,"wires":[]}]