Subida de archivos
This commit is contained in:
commit
d9963a7ddd
13 changed files with 329 additions and 0 deletions
74
bin/nodemecu
Normal file
74
bin/nodemecu
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
#!/bin/bash
|
||||||
|
if [ $UID -ne 0 ]; then
|
||||||
|
echo "Ejecute 'sudo $0'"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
# LECTURA FICHERO DE CONFIGURACION
|
||||||
|
|
||||||
|
config=/etc/nodemecu.conf
|
||||||
|
source $config
|
||||||
|
|
||||||
|
[ -z $1 ] && exit
|
||||||
|
|
||||||
|
|
||||||
|
com=$1
|
||||||
|
|
||||||
|
case $com in
|
||||||
|
|
||||||
|
start)
|
||||||
|
if [ -z $interval ]; then
|
||||||
|
echo "Asegurese de haber establecido 'intervalo' de regitro y envio de datos."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [ -z $name ]; then
|
||||||
|
echo "Asegurese de haber establecido el 'nombre' de dispositivo."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "El modo de operación es '$mode', puede cambiar el modo con el comando:"
|
||||||
|
echo "'nomecu modo MODE' donde 'MODE' puede ser 'test' para generar y enviar datos simulados o 'sensores' para enviar datos tomados de los sensores."
|
||||||
|
echo ""
|
||||||
|
read -p "Desea continuar? Presione 'enter' para continuar o 'ctrl-c' para cancelar..."
|
||||||
|
echo "*/$interval * * * * /opt/nodemecu/data_gen.sh" > /tmp/nodemecu.crontab
|
||||||
|
crontab -u root /tmp/nodemecu.crontab
|
||||||
|
echo ""
|
||||||
|
echo "Se enviarán datos cada $interval minutos."
|
||||||
|
echo ""
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
stop)
|
||||||
|
crontab -u root -r
|
||||||
|
echo "Se detuvo la toma y envio de datos."
|
||||||
|
echo ""
|
||||||
|
;;
|
||||||
|
intervalo)
|
||||||
|
if [[ $1 == intervalo && $2 -ge 1 && $2 -le 60 ]]; then
|
||||||
|
sed -i 's/interval=[0-9]*/interval='$2'/' $config
|
||||||
|
echo "intervalo seteado en $2"
|
||||||
|
exit
|
||||||
|
else
|
||||||
|
echo "Establezca un valor entre 1 y 60."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
nombre)
|
||||||
|
|
||||||
|
parametros=$*
|
||||||
|
nombre=$(echo $parametros | sed 's/nombre //g' | sed 's/ /_/g')
|
||||||
|
if [[ "$nombre" =~ ^[a-zA-Z0-9_]+$ ]];then
|
||||||
|
sed -i 's/name=[a-z A-Z 0-9]*/name='"$nombre"'/' $config
|
||||||
|
else
|
||||||
|
echo "El nombre solo puede contener carateres alfanumericos."
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
monitor)
|
||||||
|
$install_dir/monitor.sh
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
|
||||||
|
esac
|
||||||
|
|
||||||
|
|
4
bin/reset
Normal file
4
bin/reset
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
rm stack/*
|
||||||
|
rm historical/*
|
||||||
|
printf "" > errors.log
|
||||||
|
printf "0" > counter
|
34
controller.py
Executable file
34
controller.py
Executable file
|
@ -0,0 +1,34 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
import time
|
||||||
|
import serial
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
ser = serial.Serial(
|
||||||
|
port='/dev/serial0', #Replace ttyS0 with ttyAM0 for Pi1,Pi2,Pi0
|
||||||
|
baudrate = 14400,
|
||||||
|
parity=serial.PARITY_NONE,
|
||||||
|
stopbits=serial.STOPBITS_ONE,
|
||||||
|
bytesize=serial.EIGHTBITS,
|
||||||
|
timeout=1
|
||||||
|
)
|
||||||
|
|
||||||
|
ser.flush()
|
||||||
|
|
||||||
|
cw = int(sys.argv[1], 0)
|
||||||
|
com = [cw]
|
||||||
|
ser.write(serial.to_bytes(com))
|
||||||
|
ser.flush()
|
||||||
|
while True:
|
||||||
|
if ser.in_waiting > 0:
|
||||||
|
line = ser.readline().decode('utf-8', errors='replace').rstrip()
|
||||||
|
time.sleep(0.5)
|
||||||
|
print(line)
|
||||||
|
ser.flush()
|
||||||
|
break
|
||||||
|
|
||||||
|
quit()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
1
counter
Normal file
1
counter
Normal file
|
@ -0,0 +1 @@
|
||||||
|
0
|
53
data_gen.sh
Executable file
53
data_gen.sh
Executable file
|
@ -0,0 +1,53 @@
|
||||||
|
#!/bin/bash
|
||||||
|
source /etc/nodemecu.conf
|
||||||
|
|
||||||
|
case $mode in
|
||||||
|
test)
|
||||||
|
lecturas="id:dummy_plug-01 ts:$(date +%s) tp:temp vl:$(( $RANDOM % 20 + 15 )) un:C er:99 AD_SENSOR ts:$(date +%s) tp:hum vl:$(( $RANDOM % 50 + 35 )) un:percent er:99 AD_ARDUINO id:dummy_plug-02 ts:$(date +%s) tp:temp vl:$(( $RANDOM % 20 + 15 )) un:C er:99 AD_SENSOR ts:$(date +%s) tp:hum vl:$(( $RANDOM % 50 + 35 )) un:percent er:99 AD_ARDUINO id:dummy_plug-03 ts:$(date +%s) tp:temp vl:$(( $RANDOM % 20 + 15 )) un:C er:99 AD_SENSOR ts:$(date +%s) tp:hum vl:$(( $RANDOM % 50 + 35 )) un:percent er:99 AD_ARDUINO id:dummy_plug-04 ts:$(date +%s) tp:temp vl:$(( $RANDOM % 20 + 15 )) un:C er:99 AD_SENSOR ts:$(date +%s) tp:hum vl:$(( $RANDOM % 50 + 35 )) un:percent er:99 END"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
for i in $lecturas;do
|
||||||
|
case $i in
|
||||||
|
id*)
|
||||||
|
sensores="$sensores { $(echo \"id\":\"$(echo $i | cut -d ":" -f 2)\", \"sensores\": [ )"
|
||||||
|
;;
|
||||||
|
ts*)
|
||||||
|
sensores="$sensores { $(echo \"timestamp\": $(echo $i | cut -d ":" -f 2),)"
|
||||||
|
;;
|
||||||
|
tp*)
|
||||||
|
sensores="$sensores $(echo \"type\": \"$(echo $i | cut -d ":" -f 2)\",)"
|
||||||
|
;;
|
||||||
|
vl*)
|
||||||
|
sensores="$sensores $(echo \"value\": $(echo $i | cut -d ":" -f 2),)"
|
||||||
|
;;
|
||||||
|
un*)
|
||||||
|
sensores="$sensores $(echo \"unit\": \"$(echo $i | cut -d ":" -f 2)\",)"
|
||||||
|
;;
|
||||||
|
er*)
|
||||||
|
sensores="$sensores $(echo \"error\": $(echo $i | cut -d ":" -f 2) })"
|
||||||
|
;;
|
||||||
|
AD_SENSOR)
|
||||||
|
sensores="$sensores,"
|
||||||
|
;;
|
||||||
|
AD_ARDUINO)
|
||||||
|
sensores="$sensores]},"
|
||||||
|
;;
|
||||||
|
END)
|
||||||
|
sensores="$sensores]}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
counter=$(cat $install_dir/counter)
|
||||||
|
uuid="$(uuidgen)"
|
||||||
|
timestamp="$(date +%s)"
|
||||||
|
json="{\"transaction_uuid\":\"$uuid\",\"controller_id\":\"$name\",\"timestamp\":\"$timestamp\",\"error_code\":\"10\",\"coordinates\":{\"lat\":1,\"lng\":1},\"battery_status\":\"98\",\"sample\":\"0\",\"storage\":\"uso del almacenamiento\",\"arduinos\":[$sensores]}"
|
||||||
|
touch /opt/nodemecu/lock
|
||||||
|
file=$(date +%Y%m%d%H%M%S)-$(uuidgen)
|
||||||
|
for ((i=1 ; i <=3 ; i++));do
|
||||||
|
if echo $json | jsonlint-php 2> /dev/null;then
|
||||||
|
echo $json > /opt/nodemecu/stack/$file && rm /opt/nodemecu/lock && echo $((counter+1)) > $install_dir/counter && break
|
||||||
|
else
|
||||||
|
echo "$(date +%Y-%m-%d-%H:%M:%S) - No se pudo obtener información." >> /opt/nodemecu/errors.log && sleep 1
|
||||||
|
fi
|
||||||
|
done
|
10
functions
Normal file
10
functions
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
get_stack () {
|
||||||
|
if [[ ! -z $1 && $1 == "wc" ]];then
|
||||||
|
ls /opt/nodemecu/stack | wc -l
|
||||||
|
else
|
||||||
|
ls /opt/nodemecu/stack | tail -1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
42
install.sh
Executable file
42
install.sh
Executable file
|
@ -0,0 +1,42 @@
|
||||||
|
#!/bin/bash
|
||||||
|
files="data_gen.sh monitor.sh register.sh uninstall.sh monitor.web bin functions counter"
|
||||||
|
config=nodemecu.conf.sample
|
||||||
|
source $config
|
||||||
|
|
||||||
|
echo -e "1. Instalando dependencias"
|
||||||
|
|
||||||
|
#sudo apt update && sudo apt install -y jq uuid-runtime dnsmasq dnsutils
|
||||||
|
sudo pip install pyserial
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
|
||||||
|
# Estructura de directorios
|
||||||
|
echo -e "2. Creando directorios y copiando archivos"
|
||||||
|
|
||||||
|
sudo mkdir -vp $install_dir/archives/historical
|
||||||
|
sudo mkdir -vp $install_dir/archives/logs
|
||||||
|
sudo mkdir $historical
|
||||||
|
sudo mkdir $stack
|
||||||
|
echo ""
|
||||||
|
sudo cp -vr $files $install_dir
|
||||||
|
sudo cp -v $config /etc/nodemecu.conf
|
||||||
|
sudo ln -s $install_dir/bin/nodemecu /usr/bin/nodemecu
|
||||||
|
sudo touch $log
|
||||||
|
echo ""
|
||||||
|
echo "3. Configurando systemd"
|
||||||
|
|
||||||
|
sudo cp nodemecu.service /lib/systemd/system/
|
||||||
|
sudo systemctl daemon-reload
|
||||||
|
sudo systemctl enable nodemecu.service
|
||||||
|
sudo systemctl start nodemecu.service
|
||||||
|
sudo systemctl status nodemecu.service
|
||||||
|
echo ""
|
||||||
|
echo ". Alias de comandos."
|
||||||
|
echo "alias nodemecu='sudo nodemecu'" >> $HOME/.bashrc
|
||||||
|
echo ""
|
||||||
|
echo "Ejecute 'source ~/.bashrc' para aplicar los cambios."
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
16
monitor.sh
Executable file
16
monitor.sh
Executable file
|
@ -0,0 +1,16 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
source /etc/nodemecu.conf
|
||||||
|
while :;do
|
||||||
|
clear
|
||||||
|
echo "$(date)"
|
||||||
|
echo "Stack: $(ls $stack | wc -l) ficheros"
|
||||||
|
echo "Historicos: $(ls $historical | wc -l) ficheros"
|
||||||
|
echo "Testigo: $(cat $install_dir/counter)"
|
||||||
|
echo "Errores: $(wc -l $log) registros"
|
||||||
|
echo "Ultimo error registrado:"
|
||||||
|
tail -1 $log
|
||||||
|
echo ""
|
||||||
|
echo "'ctrl-c' para salir."
|
||||||
|
sleep 100
|
||||||
|
done
|
11
monitor.web
Executable file
11
monitor.web
Executable file
|
@ -0,0 +1,11 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
source /etc/nodemecu.conf
|
||||||
|
echo "<p>$(date)<br>"
|
||||||
|
echo "Stack: $(ls $stack | wc -l) ficheros<br>"
|
||||||
|
echo "Historicos: $(ls $historical | wc -l) ficheros<br>"
|
||||||
|
echo "Testigo: $(cat $install_dir/counter)<br>"
|
||||||
|
echo "Errores: $(wc -l $log) registros<br>"
|
||||||
|
echo "Ultimos errores registrados<br>"
|
||||||
|
tail -1 $log
|
||||||
|
echo "<br></p>"
|
16
nodemecu.conf.sample
Normal file
16
nodemecu.conf.sample
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
url=https://ectomobile.sutty.nl/transactions
|
||||||
|
name=
|
||||||
|
interval=
|
||||||
|
mode=test
|
||||||
|
|
||||||
|
|
||||||
|
# AJUSTES GENERALES
|
||||||
|
# SE RECOMIENDA NO MODIFICAR ESTAS LINEAS
|
||||||
|
curl_err=/tmp/curl_err
|
||||||
|
historical_file_size=1440
|
||||||
|
logs_file_size=1440
|
||||||
|
install_dir=/opt/nodemecu
|
||||||
|
stack=$install_dir/stack
|
||||||
|
historical=$install_dir/historical
|
||||||
|
log=$install_dir/errors.log
|
||||||
|
corrupt=$install_dir/corrupt
|
8
nodemecu.service
Normal file
8
nodemecu.service
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Procesador de pila y transmisor de datos Nodemecu.
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/opt/nodemecu/register.sh
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
47
register.sh
Executable file
47
register.sh
Executable file
|
@ -0,0 +1,47 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#set -e
|
||||||
|
source /etc/nodemecu.conf
|
||||||
|
source /opt/nodemecu/functions
|
||||||
|
|
||||||
|
|
||||||
|
# Revisando stack
|
||||||
|
|
||||||
|
for filename in /opt/nodemecu/stack/*;do
|
||||||
|
test "$filename" = "/opt/nodemecu/stack/\*" || break
|
||||||
|
jsonlint-php $filename > /dev/null || mv -v $filename $corrupt
|
||||||
|
done
|
||||||
|
|
||||||
|
while :;do
|
||||||
|
ping -c 1 fsf.org > /dev/null 2>&1 || continue
|
||||||
|
test_url="$(curl -s -X POST -o /dev/null -w "%{http_code}" $url)"
|
||||||
|
if [ $test_url -eq 404 ];then
|
||||||
|
echo "$(date +%Y-%m-%d-%H:%M:%S) - $url - $test_url" >> /opt/nodemecu/errors.log && sleep 300 && continue
|
||||||
|
fi
|
||||||
|
[ -f $install_dir/lock ] && continue
|
||||||
|
file=$(get_stack)
|
||||||
|
[ -z $file ] && continue
|
||||||
|
local_transaction_uuid=$(jq -r '."transaction_uuid"' $stack/$file)
|
||||||
|
remote_transaction=$(curl -s --connect-timeout 0,9 --show-error -w "~%{http_code}" -X POST -H "Content-Type: application/json" -d @$stack/$file $url 2> $curl_err)
|
||||||
|
remote_response="$(echo $remote_transaction | cut -d '~' -f 1)"
|
||||||
|
server_error="$(echo $remote_transaction | cut -d '~' -f 2)"
|
||||||
|
if [ ${#remote_response} -eq 36 ];then
|
||||||
|
|
||||||
|
if [ $local_transaction_uuid == $remote_response ]; then
|
||||||
|
mv $stack/$file $historical
|
||||||
|
echo -e "$remote_response: \e[92mOK\e[0m"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -e "$local_transaction_uuid: \e[91mFAIL\e[0m"
|
||||||
|
# errores
|
||||||
|
unset srv_msg
|
||||||
|
unset curl_msg
|
||||||
|
err_time=$(date +%Y-%m-%d-%H:%M:%S)
|
||||||
|
[ ! -z "$remote_response" ] && srv_msg="- $( echo $remote_response | grep -o '<body.*>.*</body>')"
|
||||||
|
[ -s "$curl_err" ] && curl_msg="- $(</tmp/curl_err)"
|
||||||
|
echo $err_time - $local_transaction_uuid - server status: $server_error $srv_msg $curl_msg >> $log
|
||||||
|
rm $curl_err
|
||||||
|
fi
|
||||||
|
|
||||||
|
done
|
||||||
|
exit
|
||||||
|
|
13
uninstall.sh
Executable file
13
uninstall.sh
Executable file
|
@ -0,0 +1,13 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
sudo rm /etc/nodemecu.conf
|
||||||
|
sudo rm /usr/bin/nodemecu
|
||||||
|
sudo crontab -u root -r
|
||||||
|
sudo rm -rf /opt/nodemecu/
|
||||||
|
sed -i '/*sudo nodemecu*/d' $HOME/.bashrc
|
||||||
|
sudo rm /lib/systemd/system/nodemecu.service
|
||||||
|
sudo systemctl stop nodemecu.service
|
||||||
|
sudo systemctl disable nodemecu.service
|
||||||
|
sudo systemctl daemon-reload
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue