ITCooky Recetas

Vamos a cocinar it cositas

¡Duplicador de USB flash en Raspberry Pi con interfaz Wi-Fi en Node-RED!

дата junio 14, 2020

Haré un aparato para copiar datos de una unidad flash USB a otra. Como base usare Raspberry Pi 4, acceso atraves de Wi-Fi, ¡el engine Node-RED!

Existen duplicadores USB, estas son torretas de 15 a 199 unidades flash, ¡a precios de coche! El más parecido que encontré aquí es Duplicador y borrador de unidad flash USB 2.0 StarTech 1: 2 Standalone (negro) en el oeste por 100$, aca en Rusia por 300$ cada uno, pero es USB 2 (y sin Wi-Fi), ¡y hay un USB 3 en la Raspberry!

Hoy tendré una frambuesa en el estuche Argon NEO Pi 4 Raspberry Pi Case Muy agradable carcasa – metal, elegante y cool, ¡los PINs gracias a tapa en imanes están disponibles en cualquier momento! Pero es muy caliente!







PRECAUCIÓN:
debemos tener en cuenta una cosillas: ¡Raspberry Pi 4 tiene cosillas!
1. Los puertos USB están calientes y las unidades flash están tan calientes que imposible sostenerlas en la mano. Pensé que el firmware era viejo, era caliente, no, es el último firmware. Aparentemente, debido al hecho de que las revisiones 1.1 de Rpi 4 tienen problemas con la alimentación USB-C de fuentes de alimentación no nativas, ¡Y también por el case!
2. Los conectores USB 3 en sí mismos son malos. Se resisten al intentar insertar una unidad flash USB de Samsung. Tuve que apretar ligeramente estas abrazaderas (4 piezas), ¡no están en USB 2!

Es necesario instalar Raspberry Pi OS (32 bits) Lite (anteriormente conocido como Raspbian) en esta versión no hay entorno de escritorio.

Lo descargo aquí www.raspberrypi.org/downloads/raspbian/
Y aquí descargo el instalador – hay para Ubuntu – ¡genial! www.raspberrypi.org/downloads/


Sin embargo, nada funcionó en Ubuntu … lo hizo en Windows, ¡oh! No estamos hablando de eso, pero para decirlo suavemente, Ubuntu no funciona bien con unidades flash enchufables… y la velocidad de copia en una unidad flash usb, y el momento en que se puede quitar, todavía no puede determinar (junio de 2020) – no creas al Prog bar: solo desmonte por software, ¡él dirá con seguridad que puedes sacarlo o no!

Para que ssh funcione, en el mapa en la sección BOOT, debe crear un archivo llamado ssh y luego funcionará. Después de eso, puede insertar la tarjeta en la frambuesa y ver qué frambuesa obtuvo una IP, yo miré en el enrutador. Se puede ir a la frambuesa con manos y ver IP con el comando
ifconfig

Name: pi
Password: raspberry

Veré qué tipo de modelo tengo
cat /sys/firmware/devicetree/base/model

Raspberry Pi 4 Model B Rev 1.1

Veamos cuanta memoria
free -h

              total        used        free      shared  buff/cache   available
Mem:          3.8Gi        90Mi       3.5Gi       8.0Mi       242Mi       3.6Gi
Swap:          99Mi          0B        99Mi

о 4Gb!

sudo apt update
sudo apt full-upgrade

mida la temperatura inmediatamente después de la actualización
vcgencmd measure_temp

temp=46.0'C

¡No sudo en absoluto!

Compruebo la velocidad de escritura del archivo en rpi4 en la tarjeta SD
dd if=/dev/zero of=test.file count=10000 bs=1048576

10485760000 bytes (10 GB, 9.8 GiB) copied, 1050.75 s, 10.0 MB/s

El mismo resultado fue con la Raspberry Pi 4 en 2 Gb

Ahora a la unidad flash USB 3.1 a través de USB 3 en la frambuesa. Los fabricantes de unidades de memoria flash los suministran con formato vFAT también son FAT32, fs inútil tamaño máximo de archivo 4GB

Formatearemos en NTfS
sudo apt-get install ntfs-3g

sudo mkntfs --fast --label USB32gb /dev/sda1
sudo mkdir /mnt/usb1
sudo mkdir /mnt/usb2
sudo mount /dev/sda1 /mnt/usb1
cd /mnt/usb1

date&&dd if=/dev/zero of=test.file count=10000 bs=1048576&&date&&vcgencmd measure_temp
tenemos

Mon Jun  8 14:12:18 BST 2020
10000+0 records in
10000+0 records out
10485760000 bytes (10 GB, 9.8 GiB) copied, 437.284 s, 24.0 MB/s
Mon Jun  8 14:19:35 BST 2020
temp=56.0'C

Ahora conecto la segunda unidad flash de ese tipo y pongo
sudo apt-get install pv
para hacer test de copia de la unidad flash a la unidad flash
pv /mnt/usb1/test.file > /mnt/usb2/test.file

Mon Jun  8 15:24:58 BST 2020
9.77GiB 0:07:07 [23.4MiB/s] [=======================================>] 100%            
Mon Jun  8 15:32:06 BST 2020
temp=61.0'C

Hacemos punto de acceso de rpi4 Wi-Fi
Todo está perfectamente descrito aquí https://learn.sparkfun.com/tutorials/setting-up-a-raspberry-pi-3-as-an-access-point/all para RPI4 solo necesita agregar un comando más!

Sin embargo, primero debe actualizar, pero no está configurado
sudo apt-get update
sudo apt install dnsmasq hostapd

igual no se instala, lo pongo así
sudo apt install dnsmasq hostapd --fix-missing

luego editamos muchas cosas
sudo vi /etc/dhcpcd.conf
Añadir

denyinterfaces wlan0

sudo vi /etc/network/interfaces
Añadir

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet static
    address 10.100.10.1
    netmask 255.255.255.0
    network 10.100.10.0
    broadcast 10.100.10.255

sudo vi /etc/hostapd/hostapd.conf
Añadir

interface=wlan0
driver=nl80211
ssid=Itcooky
hw_mode=g
channel=6
ieee80211n=1
wmm_enabled=1
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_passphrase=QWErty123
rsn_pairwise=CCMP

sudo vi /etc/default/hostapd
Añadir

DAEMON_CONF="/etc/hostapd/hostapd.conf"

sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
sudo vi /etc/dnsmasq.conf

Añadir

interface=wlan0 
listen-address=10.100.10.1
bind-interfaces 
server=8.8.8.8
domain-needed
bogus-priv
dhcp-range=10.100.10.10,10.100.10.250,24h

ejecuta
sudo systemctl start dnsmasq
sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl start hostapd

Y para RPI4 todavía necesitas hacer
sudo rfkill unblock wlan

reboot
sudo reboot


Instalamnos Node Red

Para RPI hay una solucion de los mismos rojos
https://nodered.org/docs/getting-started/raspberrypi

Solo tienes que ejecutar
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
Y para que arranque en boot
sudo systemctl enable nodered.service

Y es todo, entramos a http://111.222.33.44:1880 y hacemos lo que queremos

No diré que fue simple, pero un script simple para copiar de una unidad flash a otra está listo!
Aquí están los ladrillos.

Aquí el código

[{"id":"b44d7514.83389","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"54fb509b.2c2ed","type":"exec","z":"b44d7514.83389","command":"bash /home/pi/sda1m.sh","addpay":true,"append":"","useSpawn":"true","timer":"","oldrc":false,"name":"","x":370,"y":160,"wires":[["becfcd98.7c18f"],[],[]]},{"id":"e32b03af.b293f","type":"ui_text","z":"b44d7514.83389","group":"7f5c3aa5.c49854","order":0,"width":0,"height":0,"name":"","label":"Size of data:","format":"{{msg.payload}}Mb","layout":"row-left","x":1150,"y":160,"wires":[]},{"id":"58b931c3.744ac8","type":"ui_button","z":"b44d7514.83389","name":"","group":"7f5c3aa5.c49854","order":1,"width":0,"height":0,"passthru":false,"label":"Mount","tooltip":"","color":"","bgcolor":"","icon":"","payload":"","payloadType":"str","topic":"","x":130,"y":160,"wires":[["54fb509b.2c2ed"]]},{"id":"4de280ba.95e15","type":"switch","z":"b44d7514.83389","name":"","property":"payload","propertyType":"msg","rules":[{"t":"cont","v":"asize","vt":"str"},{"t":"cont","v":"label","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":730,"y":200,"wires":[["cea5bb16.b5a5a8"],["cedce86d.2aa818"]]},{"id":"cea5bb16.b5a5a8","type":"split","z":"b44d7514.83389","name":"","splt":"#","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":870,"y":180,"wires":[["e32b03af.b293f"]]},{"id":"284f5a3e.56b85e","type":"ui_text","z":"b44d7514.83389","group":"7f5c3aa5.c49854","order":0,"width":0,"height":0,"name":"","label":"Label:","format":"{{msg.payload}}","layout":"row-left","x":1170,"y":220,"wires":[]},{"id":"cedce86d.2aa818","type":"split","z":"b44d7514.83389","name":"","splt":"#","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":870,"y":220,"wires":[["284f5a3e.56b85e"]]},{"id":"becfcd98.7c18f","type":"split","z":"b44d7514.83389","name":"","splt":";","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":610,"y":200,"wires":[["4de280ba.95e15"]]},{"id":"54348537.5cdffc","type":"ui_button","z":"b44d7514.83389","name":"","group":"7f5c3aa5.c49854","order":3,"width":0,"height":0,"passthru":false,"label":"Un mount","tooltip":"","color":"","bgcolor":"","icon":"","payload":"","payloadType":"str","topic":"","x":140,"y":240,"wires":[["e2c3bf55.06fee"]]},{"id":"e2c3bf55.06fee","type":"exec","z":"b44d7514.83389","command":"bash /home/pi/sda1u.sh","addpay":true,"append":"","useSpawn":"true","timer":"","oldrc":false,"name":"","x":370,"y":240,"wires":[["becfcd98.7c18f"],[],[]]},{"id":"826e7da6.89bc","type":"exec","z":"b44d7514.83389","command":"bash /home/pi/sda2m.sh","addpay":true,"append":"","useSpawn":"true","timer":"","oldrc":false,"name":"","x":370,"y":340,"wires":[["5ca805f5.1e5734"],[],[]]},{"id":"ee6a802b.3ad798","type":"ui_text","z":"b44d7514.83389","group":"ec3ace8.c36b93","order":3,"width":0,"height":0,"name":"","label":"Free size:","format":"{{msg.payload}}Mb","layout":"row-left","x":1160,"y":340,"wires":[]},{"id":"baa5392d.c28648","type":"ui_button","z":"b44d7514.83389","name":"","group":"ec3ace8.c36b93","order":1,"width":0,"height":0,"passthru":false,"label":"Mount","tooltip":"","color":"","bgcolor":"","icon":"","payload":"","payloadType":"str","topic":"","x":130,"y":340,"wires":[["826e7da6.89bc"]]},{"id":"bda8585a.0472e8","type":"switch","z":"b44d7514.83389","name":"","property":"payload","propertyType":"msg","rules":[{"t":"cont","v":"asize","vt":"str"},{"t":"cont","v":"label","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":890,"y":420,"wires":[["6b20dc3b.1afd9c"],["ce94c5f1.65b9b"]]},{"id":"6b20dc3b.1afd9c","type":"split","z":"b44d7514.83389","name":"","splt":"#","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":1010,"y":340,"wires":[["ee6a802b.3ad798"]]},{"id":"9c0610b1.2325c8","type":"ui_text","z":"b44d7514.83389","group":"ec3ace8.c36b93","order":4,"width":0,"height":0,"name":"","label":"Label:","format":"{{msg.payload}}","layout":"row-left","x":1170,"y":460,"wires":[]},{"id":"ce94c5f1.65b9b","type":"split","z":"b44d7514.83389","name":"","splt":"#","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":1010,"y":460,"wires":[["9c0610b1.2325c8"]]},{"id":"bc7259c4.a27fd","type":"split","z":"b44d7514.83389","name":"","splt":";","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":770,"y":420,"wires":[["bda8585a.0472e8"]]},{"id":"3592ca8.0bf7db6","type":"ui_button","z":"b44d7514.83389","name":"","group":"ec3ace8.c36b93","order":2,"width":0,"height":0,"passthru":false,"label":"Un mount","tooltip":"","color":"","bgcolor":"","icon":"","payload":"","payloadType":"str","topic":"","x":140,"y":420,"wires":[["692f75d5.160f24"]]},{"id":"692f75d5.160f24","type":"exec","z":"b44d7514.83389","command":"bash /home/pi/sda2u.sh","addpay":true,"append":"","useSpawn":"true","timer":"","oldrc":false,"name":"","x":370,"y":420,"wires":[["bc7259c4.a27fd"],[],[]]},{"id":"154aa879.197de","type":"ui_button","z":"b44d7514.83389","name":"","group":"2fa9608d.2ce59","order":2,"width":0,"height":0,"passthru":false,"label":"Start copy","tooltip":"","color":"","bgcolor":"","icon":"","payload":"reset","payloadType":"str","topic":"","x":140,"y":560,"wires":[["7ee0395c.eba5b","611d713d.726e48"]]},{"id":"611d713d.726e48","type":"exec","z":"b44d7514.83389","command":"bash /home/pi/sdacopy.sh","addpay":true,"append":"","useSpawn":"true","timer":"","oldrc":false,"name":"","x":670,"y":620,"wires":[["44ed3481.f21c14"],[],[]]},{"id":"9abe71d5.48763","type":"ui_text","z":"b44d7514.83389","group":"2fa9608d.2ce59","order":3,"width":0,"height":0,"name":"","label":"","format":"Coping to USB IN to folder /{{msg.payload}}","layout":"row-left","x":1170,"y":520,"wires":[]},{"id":"fdd997bc.69107","type":"ui_gauge","z":"b44d7514.83389","name":"","group":"2fa9608d.2ce59","order":4,"width":0,"height":0,"gtype":"donut","title":"progress","label":"%","format":"{{value}}","min":0,"max":"100","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":640,"y":560,"wires":[]},{"id":"7ee0395c.eba5b","type":"exec","z":"b44d7514.83389","command":"bash /home/pi/sdaspeed.sh","addpay":true,"append":"","useSpawn":"true","timer":"","oldrc":false,"name":"","x":380,"y":560,"wires":[["fdd997bc.69107","a0ec9eaa.97de38"],[],[]]},{"id":"5ca805f5.1e5734","type":"exec","z":"b44d7514.83389","command":"bash /home/pi/sda2s.sh","addpay":true,"append":"","useSpawn":"true","timer":"","oldrc":false,"name":"","x":650,"y":320,"wires":[["bc7259c4.a27fd"],[],[]]},{"id":"207aabab.8d4fc4","type":"inject","z":"b44d7514.83389","name":"","topic":"null on start","payload":" ","payloadType":"str","repeat":"","crontab":"","once":true,"onceDelay":0.1,"x":170,"y":80,"wires":[["e32b03af.b293f","284f5a3e.56b85e","ee6a802b.3ad798","9c0610b1.2325c8","fdd997bc.69107","9abe71d5.48763"]]},{"id":"7fd33d21.b6d0dc","type":"exec","z":"b44d7514.83389","command":"bash /home/pi/sdatemp.sh","addpay":true,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"","x":380,"y":680,"wires":[["3ad9aa64.4a2d8e"],[],[]]},{"id":"3ad9aa64.4a2d8e","type":"ui_text","z":"b44d7514.83389","group":"2fa9608d.2ce59","order":4,"width":0,"height":0,"name":"","label":"Rpi4","format":"{{msg.payload}}","layout":"row-left","x":590,"y":680,"wires":[]},{"id":"3b1fe249.a09c66","type":"inject","z":"b44d7514.83389","name":"","topic":"","payload":"","payloadType":"date","repeat":"5","crontab":"","once":false,"onceDelay":0.1,"x":170,"y":680,"wires":[["7fd33d21.b6d0dc"]]},{"id":"a0ec9eaa.97de38","type":"exec","z":"b44d7514.83389","command":"bash /home/pi/sda2sup.sh","addpay":true,"append":"","useSpawn":"true","timer":"","oldrc":false,"name":"","x":670,"y":480,"wires":[["6b20dc3b.1afd9c"],[],[]]},{"id":"44ed3481.f21c14","type":"switch","z":"b44d7514.83389","name":"","property":"payload","propertyType":"msg","rules":[{"t":"cont","v":"pathonusb","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":890,"y":560,"wires":[["2ed432f3.bb44be"]]},{"id":"2ed432f3.bb44be","type":"split","z":"b44d7514.83389","name":"","splt":"#","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":1010,"y":560,"wires":[["9abe71d5.48763"]]},{"id":"7f5c3aa5.c49854","type":"ui_group","z":"","name":"USB OUT","tab":"636d4846.38f48","order":1,"disp":true,"width":"6","collapse":false},{"id":"ec3ace8.c36b93","type":"ui_group","z":"","name":"USB IN","tab":"636d4846.38f48","order":2,"disp":true,"width":"6","collapse":false},{"id":"2fa9608d.2ce59","type":"ui_group","z":"","name":"Copy","tab":"636d4846.38f48","order":3,"disp":true,"width":"5","collapse":false},{"id":"636d4846.38f48","type":"ui_tab","z":"","name":"USB dublicator","icon":"dashboard","order":1,"disabled":false,"hidden":false}]

Es necesario instalar para la consola Linux
sudo apt-get install bc
También debería haber carpetas
/mnt/usb1
/mnt/usb2

Y en Node-Red en sí mismo necesita instalar node-red-dashboard

Todo se basa en un ladrillo exec , que ejecuta un script bash, ¡no puede ejecutar comandos de Linux directamente! ¡Entonces necesitamos scripts bash!

En la carpeta /home/pi/ crea scripts siguientes

sda1m.sh - este script monta la primera unidad flash desde la que copiaremos, después de hacer clic en el botón. ¡Y ademas comprueba si el lugar para montar es libre y no importa qué letra haya recogido la unidad flash!

#!/bin/bash
for m1 in $( ls /dev/sd*[0-9]* )
do 
if df -h | grep /mnt/usb1
then
echo "busy"
break
else
sudo mount $m1 /mnt/usb1
label=`lsblk -o mountpoint,label| grep /mnt/usb1|awk '{print $2}'`
frees=`du -sm --exclude='.Trash*' /mnt/usb1| awk '{print $1}'`
echo "label#"$label";asize#"$frees
break
fi
done

¡De sí mismo, este script lanza una línea con datos sobre el tamaño de los datos y la etiqueta de la unidad flash!

sda1u.sh - este script simplemente desmonta la unidad flash después de hacer clic en el botón

#!/bin/bash
sudo umount /mnt/usb1
echo "label#no usb flash;asize#0"

sda2m.sh - este script monta la segunda unidad flash

#!/bin/bash
if df -h | grep /mnt/usb2
then
echo "Busy"
else	
sdam=`df -h | grep usb1 | awk '{print $1}'`
for m1 in $( ls /dev/sd*[0-9]* )
do
if [ $m1 != $sdam ] 
then	
sudo mount $m1 /mnt/usb2
fi
done
fi

sda2s.sh - seguido de un script que brinda información sobre la ubicación y la etiqueta disponibles de la unidad flash

#!/bin/bash
m1=`df -h | grep /mnt/usb2|awk '{print $1}'`
label=`lsblk -o mountpoint,label| grep /mnt/usb2|awk '{print $2}'`
frees=`df -m|grep $m1 | awk '{print $4}'`
echo "label#"$label";asize#"$frees

El script está especialmente dividido.

sda2u.sh - este script simplemente desmonta la unidad flash después de hacer clic en el botón

#!/bin/bash
sudo umount /mnt/usb2
echo "label#no usb flash;asize#0"

Es bueno que para desmontar solo necesite saber el nombre de la carpeta, no el dispositivo

Los siguientes son los ladrillos responsables de copiar
sdacopy.sh : con solo hacer clic en un botón, busca ver si hay unidades flash y comienza a copiar en una nueva carpeta con el nombre de la fecha en que comenzó la copia.

#!/bin/bash
if df -h | grep /mnt/usb1
then
if df -h | grep /mnt/usb2
then
pathnew=`date +"%Y%m%d%H%M%S"`
echo "pathonusb#"$pathnew
sudo mkdir /mnt/usb2/$pathnew
#sudo cp -rf /mnt/usb1/*  /mnt/usb2/$pathnew
sudo rsync -av  --exclude=".\Tra*" /mnt/usb1/* /mnt/usb2/$pathnew
fi
fi

sdaspeed.sh - maravilloso script, dibuja progres bar. Supervisa el tamaño del espacio ocupado en la unidad flash, conoce el tamaño de los datos que deben copiarse. Pero de todos modos, es solo para visualización.

#!/bin/bash

fsize=`du -s --exclude='.Trash*' /mnt/usb1| awk '{print $1}'`
frees=`df -k | grep /mnt/usb2 | awk '{print $3}'`
fres=0
ndelay=0
echo $fres
while [ $fres -lt 100 ]; do
fresold=$fres
frees2=`df -k | grep /mnt/usb2 | awk '{print $3}'`
fres=`echo "(100*($frees2-$frees))/$fsize" | bc`

if [ $fres -gt 100 ]
then
fres=100
fi

if [ $fres -eq $fresold ]
then
let ndelay++
if [ $ndelay -gt 500 ]
then	
fres=100
fi
else
ndelay=0	
fi

echo $fres
done

Y el script sda2sup.sh que actualiza el espacio libre en la segunda unidad flash se ejecuta junto con sdaspeed.sh

#!/bin/bash
m1=`df -h | grep /mnt/usb2|awk '{print $1}'`
frees=`df -m|grep $m1 | awk '{print $4}'`
echo "asize#"$frees

Y el último script sdatemp.sh con un comando para mostrar la temperatura de la frambuesa

#!/bin/bash
vcgencmd measure_temp

¿Cómo funciona el duplicador de unidad flash?
Vamos a la direccion http://111.222.33.44:1880/ui/

1. Insertamos la primera unidad flash en una de los ports USB azules - hicimos clic en el botón USB OUT MOUNT - no funcionará de inmediato, espere. Y no pulse inmediatamente después de pegar la unidad flash, no aparece inmediatamente en el sistema
2. Inserte la segunda unidad flash USB en uno de los conectores azules: haga clic en el botón USB IN MOUNT
3. Luego, cuando aparezcan todas las unidades flash, haga clic en el botón COPIAR INICIAR COPIA

Y ves esp

Cuando se llegó al 100%, la copia se completó exactamente

Conéctese a un duplicador USB a través de Wi-Fi
¡Todo para esto ya está listo!

Conectate a la red Wi-Fi itcooky
Vaya a 10.100.10.1:1880/ui
Y vemos nuestra interfaz, podemos copiar:

Uf, ya que todo funciono, debes cerrar el panel de administración de Node-Red con una contraseña!
Hay que instalar
npm install bcryptjs
vamos a
cd /home/pi/.node-red
Generamos contraseñas cifrada
node -e "console.log(require('bcryptjs').hashSync(process.argv[1], 8));" your-password-here
Y en el archivo settings.js
vi /home/pi/.node-red/settings.js
encontramos las líneas y descomentamos que debería ser así, con su propio kryakazabra en lugar de contraseña

adminAuth: {
    sessionExpiryTime: 86400,
    type: "credentials",
    users: [{
        username: "admin",
        password: "$2a$08$ToLl/u9QXxbIWcP2Xjsul.fTgujmnDjVLAgyOwpxNtIRU7TWr.XBu",
        permissions: "*"
    }]
},

Reiniciar node-Red
sudo service nodered restart
Y vaya bajo su contraseña, inicie sesión admin


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *