cz
en

Jak dostat do PLC spotové ceny elektřiny nebo předpověď počasí? Funkce Text Parser

Pokud potřebujeme do programu běžícího na PLC dostat nějaká data z internetu, typicky spotové ceny energií nebo předpověď počasí, můžeme využít nové funkce Text Parser. Pro tuto funkci je potřeba PLC s podporou .NET driverů, z aktuální nabídky to jsou modely markMXL, mark520, w751-9301 a Windows Runtime. Ukážeme si to s Windows Runtim, ten se instaluje automaticky s Domat IDE a je k dispozici na PC s vývojovým prostředím. Jde o nelicencovanou verzi zdarma, která běží 20 minut. Spustíme si tedy Domat Runtime a Domat IDE. Přiřadíme PLC v podobě Domat Runtime a stáhneme konfiguraci. Přidáme kanál s protokolem Text Parser a do něj dvě zařízení - první bude na předpověď počasí a druhé na spotovou cenu elektřiny.

Pro předpověď počasí můžeme najít zdroj dat např. na serveru api.met.no. To se vyplní jako adresa zařízení a parametr s konkrétní zeměpisnou lokaci se vyplní do políčka Cesta, v našem případě tedy /weatherapi/locationforecast/2.0/compact?lat=50.01&lon=15.68.

Na zkoušku si můžeme celou adresu dát do prohlížeče a měli bychom se dostat na stránku, kde jsou všechny údaje ve formátu XML. V nich musíme najít potřebnou hodnotu: zajímá nás například aktuální teplota, tu najdeme zanořenou v properties.timeseries[0].data.instant.details.air_temperature, takže ji zkopírujeme jako parametr skupiny. Dále http metoda je GET a typ je Jpath (další podporované jsou Xpath a regex).

Do této skupiny přidáme datový bod a nazveme ho teplota, datový typ je real.

Pro spotové ceny existuje API například na adrese spotovaelektrina.cz. Když klikneme dole na API, dostaneme se k cestě pro JSON API, takže podobně jako u teploty dáme od políčka zařízení adresu spotovaelektrina.cz a do cesty zadáme /api/v1/price/get-actual-price-json.

Dále opět vytvoříme skupinu a jpath je nyní jednoduše $.priceCZK,

přidáme datový bod a hotovo - můžeme sestavu nahrát do PLC, zapnout ladění a měli bychom vidět správné hodnoty.

Mějte prosím na paměti že tímto využíváte služby třetích stran, takže pokud poskytovatel něco změní nebo úplně zruší, vyčítání dat přestane fungovat i v PLC programu.

text-parser.zip - ukázkový program

Video s postupem

Pokud má PLC dva ethernetové porty, musí být internet připojen do primárního portu X1 (někde značeno jako ETH0)

Načtení dat ze souboru

Pro načtení dat ze souboru lze využít funkce File (.NET).

Ve vlastnostech zařízení zvolíme cestu k souboru, zde např. http://192.168.0.101/topeni/topeni.dat. Tento soubor je čistý text ve formátu číslo pokoje, tabulátor a režim obsazenosti (1 - rezervace, 2 - obsazeno, 3 - neobsazeno).

Do zařízení přidáme skupinu pro čtení, pro vyčítání použijeme RegEx.

Rozklikneme si políčko RegEx a zadáme vzorec zde 101\t(\d+)

Do pole pod vzorec si můžeme vložit vzorová data a kliknout na občerstvit. Výsledek vidíme vpravo. Vzorec nám hledá text 101 a tabulátor (101\t) a vrátí nám číslo které následuje po tomto textu (\d pokud je víceznakové tak \d+). Nás zajímá ta dvojka, takže si vytvoříme datový bod se jménem 101 který má index 0 a podindex 1 (viz výsledek z předchozího kroku)

Další pokoj bude mít novou skupinu, nyní je vzorec 102\t(\d)

A datový bod v této skupině se bude jmenovat 102 a opět mít index 0 a podindex 1

Takto můžeme pokračovat i pro ostatní pokoje. Podporované regulární výrazy najdete v helpu Domat IDE u tématu Komunikační protokol Text Parser (.NET), případně se můžete poradit například s Chatgpt.com nebo Regexr.com.

Pro vyzkoušení si můžeme spustit runtime (ikona Domat RT na ploše) ve vlastnostech PLC povolit .Net drivery, nahrát konfiguraci do PLC, poté nahrát projekt do PLC a umístit si vzorový soubor někam na disk viz obrázek. Po spuštění ladění by měl program vracet obsazenost pokojů.

file-driver.zip - ukázkový program