Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
| it:iot:nodered [2023/01/05 09:16] – Petr Nosek | it:iot:nodered [2023/10/06 13:30] (aktuální) – [tutoriály na Node RED] Petr Nosek | ||
|---|---|---|---|
| Řádek 199: | Řádek 199: | ||
| {{: | {{: | ||
| + | |||
| + | |||
| + | ===== node-red-node-mysql | ||
| + | |||
| + | Chtěl jsem využít node [[https:// | ||
| + | |||
| + | V Dockeru mi ale běží Node RED a chci, aby přistupoval k localhostu hostnovaného počítače, | ||
| + | |||
| + | První překážka k tomu, aby se Node RED dokázal připojit k databázi je, že pokud zadám v Node RED localhost, tak se bude snažit připojit na port MySQL databáze v Node RED, kde žádná databáze neběží. O mém problému popisuje tato [[https:// | ||
| + | |||
| + | Zkoušel jsem nejdříve, aby MySQL naslouchala na IP adrese síťového bridge Node RED, ale pak bych musel vyřadit naslouchání MySQL na localhostu. A to jsme nechtěl. Proto jsem zvolil variantu, kdy kontejner v Node RED dostane k dispozici localhost hostitelského počítače. Není to úplně doporučované řešení, nicméně aktuálně mi to problém řeší a tím, že Node RED také může běžet pouze na localhostu, tak mi to až tak nevadí. | ||
| + | |||
| + | Konfigurace Node RED pro docker-composer tedy vypadá takto (přidán parametr **network_mode: | ||
| + | |||
| + | <code yaml> | ||
| + | version: ' | ||
| + | |||
| + | services: | ||
| + | |||
| + | nodered: | ||
| + | container_name: | ||
| + | ports: | ||
| + | - ' | ||
| + | environment: | ||
| + | - LANG=cs_CZ.UTF-8 | ||
| + | - TZ=Europe/ | ||
| + | volumes: | ||
| + | - ' | ||
| + | image: nodered/ | ||
| + | network_mode: | ||
| + | |||
| + | </ | ||
| + | |||
| + | To mi pomohlo, aby byla databáze dostupná. Pak jsem ale narazil na to, že uživatel neměl do databáze přístup. Setkal jsem se s hlášením: | ||
| + | |||
| + | Z hostitelského počítače jsem problém s připojením neměl, takže to byl problém z kontejneru s Node RED. Někdo přede mnou měl také podobný problém: [[https:// | ||
| + | |||
| + | <code JavaScript> | ||
| + | const mysql = require(' | ||
| + | |||
| + | var connection = mysql.createConnection({ | ||
| + | host : ' | ||
| + | user : ' | ||
| + | port : ' | ||
| + | password : ' | ||
| + | database : ' | ||
| + | }); | ||
| + | |||
| + | |||
| + | connection.connect((err) => { | ||
| + | if(!err) | ||
| + | console.log(' | ||
| + | else | ||
| + | console.log(' | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | |||
| + | Skript jsem pak spustil v kontejneru: | ||
| + | |||
| + | <code bash> | ||
| + | node jmenoskriptu.js | ||
| + | </ | ||
| + | |||
| + | |||
| + | Nakonec jsem přišel na to, že problém byl v MySQL databázi u uživatele. Vytvořil jsem uživatele s omezeným oprávněním přístupu do databáze. Namísto uživatele **mujzivatel@localhost** jsem měl vytvořil uživatele **mujuzivatel@%**. Tady se promítá to, že nepřistupuji jako uživatel z localhostu, ale kontejneru. | ||
| + | |||
| + | |||
| + | V mém případě jsem u modulu zjistil ještě jednu zradu. Pro každý příkaz, který jde na nod MySQL, se vytvoří zvlášť připojení do MySQL databáze. Protože mám počet připojení do databáze limitovaný, | ||
| + | |||
| + | Dalším průzkumem jsem zjistil, že v pluginu je max connection nastaven na 50. Například [[https:// | ||
| + | |||
| + | Pro vypsání všech uživatelů a procesů v databázi slouží dotaz: | ||
| + | |||
| + | <code sql> | ||
| + | show processlist; | ||
| + | </ | ||
| + | |||
| + | |||
| + | V kódu pluginu jsem vyčetl tento řádek: | ||
| + | |||
| + | <code JavaScript> | ||
| + | connectionLimit: | ||
| + | </ | ||
| + | |||
| + | Řádek říká, že pokud je nastavená proměnná **RED.settings.mysqlConnectionLimit** v Node RED, tak vezme číslo z ní a pokud nastavená není, tak defaultní connectionLimit je 50. | ||
| + | |||
| + | Řešením pro mě bylo nastavit proměnnou v Node RED v souboru **settings.js**: | ||
| + | |||
| + | <code JavaScript> | ||
| + | module.exports = { | ||
| + | |||
| + | // tady přidávám proměnnou pro limit spojení s databází | ||
| + | // přidání musí být za definicí module.exports = { | ||
| + | mysqlConnectionLimit: | ||
| + | |||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Animace v Node RED ===== | ||
| + | |||
| + | Toto video popisuje práci s pluginem [[https:// | ||
| + | |||
| + | {{youtube> | ||
| + | |||
| + | Nabízí se připravit si v Inkscape SVG grafiku a pak jí v NodeRED dodělat " | ||
| + | |||
| + | {{youtube> | ||
| + | |||
| + | |||
| + | ===== tutoriály na Node RED ===== | ||
| + | |||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | |||
| + | {{youtube> | ||
| + | |||
| + | |||
| + | {{youtube> | ||
| + | ==== InfluxDB ==== | ||
| + | |||
| + | {{youtube> | ||
| + | |||
| + | ==== InfluxDB2 ==== | ||
| + | Zdá se, že je pouze pro 64 bit verzi operačního systému. Takže minimálně RPi4 a 64 bit verzi. | ||
| + | |||
| + | {{youtube> | ||
| + | |||
| + | {{youtube> | ||
| + | |||
| + | {{youtube> | ||