it:iot:nodered

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
it:iot:nodered [2023/01/18 17:25] Petr Nosekit:iot:nodered [2023/10/06 13:30] (aktuální) – [tutoriály na Node RED] Petr Nosek
Řádek 200: Řádek 200:
 {{:it:iot:pasted:20230105-101637.png}} {{:it:iot:pasted:20230105-101637.png}}
  
 +
 +===== node-red-node-mysql  =====
 +
 +Chtěl jsem využít node [[https://flows.nodered.org/node/node-red-node-mysql|node-red-node-mysql ]] pro ukládání dat do databáze na hostovaném počítači. Situace se má tak, že na počítači mi běží MySQL databáze, která není v Dockeru. Je to z historických důvodů - ještě jsem neznal Docker. 
 +
 +V Dockeru mi ale běží Node RED a chci, aby přistupoval k localhostu hostnovaného počítače, na kterém naslouchá MySQL databáze. 
 +
 +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://stackoverflow.com/questions/24319662/from-inside-of-a-docker-container-how-do-i-connect-to-the-localhost-of-the-mach| diskuse]]. 
 +
 +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: host**):
 +
 +<code yaml>
 +version: '3.6'
 +
 +services:
 +
 +    nodered:
 +        container_name: nodered
 +        ports:
 +          - '127.0.0.1:1880:1880'
 +        environment:
 +            - LANG=cs_CZ.UTF-8
 +            - TZ=Europe/Prague
 +        volumes:
 +            - './volumes/nodered/data:/data'
 +        image: nodered/node-red
 +        network_mode: host
 +
 +</code>
 +
 +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: //Error: ER_ACCESS_DENIED_ERROR: Access denied for user 'root'@'localhost' (using password: YES)//
 +
 +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://stackoverflow.com/questions/53283060/node-js-and-mysql-not-connecting-client-does-not-support-authentication-protoco|Node JS and mysql not connecting (client does not support authentication protocol requested by server consider upgrading mysql client)]] a vytvořil skript v kontejneru, který posloužil i mě na odhalení problému:
 +
 +<code JavaScript>
 +const mysql      = require('mysql2');
 +
 +var connection = mysql.createConnection({
 +    host     : 'localhost',
 +    user     : 'root',
 +    port     : '3306',
 +    password : 'test12310',
 +    database : 'fys'
 +});
 +
 +
 +connection.connect((err) => {
 +    if(!err)
 +        console.log('Database is geconnect!');
 +    else
 +        console.log('Database connectie niet gelukt!  : '+ JSON.stringify(err, undefined,2));
 +});
 +</code>
 +
 +
 +Skript jsem pak spustil v kontejneru:
 +
 +<code bash>
 +node jmenoskriptu.js
 +</code>
 +
 +
 +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ý, tak při velkém počtu připojení mi databáze spadla. 
 +
 +Dalším průzkumem jsem zjistil, že v pluginu je max connection nastaven na 50. Například [[https://discourse.nodered.org/t/mysql-too-many-connections/68943/4| tady]] je o tom diskuse. 
 +
 +Pro vypsání všech uživatelů a procesů v databázi slouží dotaz:
 +
 +<code sql>
 +show processlist;
 +</code>
 +
 +
 +V kódu pluginu jsem vyčetl tento řádek:
 +
 +<code JavaScript>
 +connectionLimit: RED.settings.mysqlConnectionLimit || 50,
 +</code>
 +
 +Řá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: 5,   
 +
 +}
 +</code>  
 +
 +
 +===== Animace v Node RED ===== 
 +
 +Toto video popisuje práci s pluginem [[https://flows.nodered.org/node/node-red-contrib-ui-svg|node-red-contrib-ui-svg]], který vypadá poměrně zajímavě právě na tvorbu animací v NodeRED.
 +
 +{{youtube>sQx7dC1xtsk?}}
 +
 +Nabízí se připravit si v Inkscape SVG grafiku a pak jí v NodeRED dodělat "animace".
 +
 +{{youtube>8d3fbDEnuFo?}}
  
  
Řádek 206: Řádek 314:
   * [[https://www.youtube.com/watch?v=L4RTrXKXd7M| How to create a data table in Node RED Dashboard]]   * [[https://www.youtube.com/watch?v=L4RTrXKXd7M| How to create a data table in Node RED Dashboard]]
   * [[https://www.youtube.com/playlist?list=PLyNBB9VCLmo1hyO-4fIZ08gqFcXBkHy-6|Official channerl Node-RED Essesntials]]   * [[https://www.youtube.com/playlist?list=PLyNBB9VCLmo1hyO-4fIZ08gqFcXBkHy-6|Official channerl Node-RED Essesntials]]
 +  * [[https://www.youtube.com/playlist?list=PL5OK9BbV3Q0MmbrS_sxhNxY3wZ0ZI8YmK|Node-RED UIBuilder]] 
 +
 +
 +{{youtube>wX1_6W2GmNI?}}
 +
 +
 +{{youtube>lBTIo-z9fSI?}}
 +==== InfluxDB ====
 +
 +{{youtube>yHTWzFpgCuk?}}
 +
 +==== 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>4_kCNBfv1t4?}}
 +
 +{{youtube>T6lf39TYjAY?}}
 +
 +{{youtube>0osGkVHMugI?}}
  • it/iot/nodered.1674062729.txt.gz
  • Poslední úprava: 2023/01/18 17:25
  • autor: Petr Nosek