From 9ebc511ab05d07a2e492dcf87aa825b37383967d Mon Sep 17 00:00:00 2001 From: Sergio Pernas Date: Sat, 5 Mar 2022 15:13:50 -0300 Subject: [PATCH] generador_json --- desinstalar | 24 +++++++----- enviar | 47 ------------------------ generador_json | 61 +++++++++++++++++++++---------- instalador | 11 +++--- nodemecu.conf.ejemplo | 5 ++- nodemecu.service | 2 +- resgistrador | 85 +++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 152 insertions(+), 83 deletions(-) delete mode 100755 enviar create mode 100755 resgistrador diff --git a/desinstalar b/desinstalar index f7aa18d..da8cd47 100755 --- a/desinstalar +++ b/desinstalar @@ -1,13 +1,19 @@ #!/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 +if [ $UID -ne 0 ]; then + echo "Ejecute 'sudo $0'" + exit +fi + +source /etc/nodemecu.conf + +rm /etc/nodemecu.conf +rm /usr/bin/nodemecu +crontab -u root -r +rm -rf $directorio_instalacion +systemctl stop nodemecu.service +systemctl disable nodemecu.service +rm /lib/systemd/system/nodemecu.service +systemctl daemon-reload diff --git a/enviar b/enviar deleted file mode 100755 index 93dcdb6..0000000 --- a/enviar +++ /dev/null @@ -1,47 +0,0 @@ -#!/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 '.*')" - [ -s "$curl_err" ] && curl_msg="- $(> $log - rm $curl_err - fi - -done -exit - diff --git a/generador_json b/generador_json index da64e2f..27e470d 100755 --- a/generador_json +++ b/generador_json @@ -1,15 +1,24 @@ #!/bin/bash -#source /etc/nodemecu.conf +#set -x + +source /etc/nodemecu.conf source funciones - funcion_datos_simulados - echo $lecturas - exit -case $mode in + +conteo=$(cat $contador) +uuid="$(uuidgen)" +marca_de_tiempo="$(date +%s)" + + +case $modo in test) funcion_datos_simulados ;; + sensores) + funcion_datos_sensores + ;; esac + # ARMADO DE FICHERO JSON for i in $lecturas;do @@ -18,7 +27,8 @@ case $i in sensores="$sensores { $(echo \"id\":\"$(echo $i | cut -d ":" -f 2)\", \"sensores\": [ )" ;; ts*) - sensores="$sensores { $(echo \"timestamp\": $(echo $i | cut -d ":" -f 2),)" + #sensores="$sensores { $(echo \"timestamp\": $(echo $i | cut -d ":" -f 2),)" + sensores="$sensores { $(echo \"timestamp\": $marca_de_tiempo,)" ;; tp*) sensores="$sensores $(echo \"type\": \"$(echo $i | cut -d ":" -f 2)\",)" @@ -47,16 +57,29 @@ 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 +json="{\"transaction_uuid\":\"$uuid\",\"controller_id\":\"$name\",\"timestamp\":\"$marca_de_tiempo\",\"error_code\":\"10\",\"coordinates\":{\"lat\":1,\"lng\":1},\"battery_status\":\"98\",\"sample\":\"0\",\"storage\":\"uso del almacenamiento\",\"arduinos\":[$sensores]}" + +touch $lock +file=$(date +%Y%m%d%H%M%S -d @$marca_de_tiempo)-$uuid + + + +if echo $json | jsonlint-php 2> /dev/null;then + echo $json > $registros/$file && rm $lock && echo $((conteo+1)) > $contador +else + echo "$(date +%Y-%m-%d-%H:%M:%S -d @$marca_de_tiempo) - No se pudo obtener información." >> $log + rm $lock +fi + + +exit + +# habia una razon para esto, ya va a saltar + +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)) > $contador && break + else + echo "$(date +%Y-%m-%d-%H:%M:%S) - No se pudo obtener información." >> /opt/nodemecu/errors.log && sleep 1 + fi +done diff --git a/instalador b/instalador index 5d5e333..db208d7 100755 --- a/instalador +++ b/instalador @@ -1,5 +1,5 @@ #!/bin/bash -set -x +#set -x configuracion=nodemecu.conf.ejemplo source $configuracion @@ -8,12 +8,13 @@ if [ $UID -ne 0 ]; then exit fi -test -d $directorio_instalacion && $(echo "nodemec ya se encuentra instalado"; date) +if [ -d $directorio_instalacion ] ; then + echo "nodemecu ya se encuentra instalado" + exit -exit +fi - -ficheros="bin arduinos.py contador generador_json funciones instalador monitor monitor_web nodemecu.conf.ejemplo nodemecu.service enviar desinstalar" +ficheros="bin arduinos.py contador generador_json funciones instalador monitor monitor_web nodemecu.conf.ejemplo nodemecu.service registrador desinstalar" # Dependencias diff --git a/nodemecu.conf.ejemplo b/nodemecu.conf.ejemplo index ea938d1..2f1b904 100644 --- a/nodemecu.conf.ejemplo +++ b/nodemecu.conf.ejemplo @@ -1,7 +1,7 @@ url= name= interval= -mode=test +modo=test # AJUSTES GENERALES @@ -16,4 +16,5 @@ historicos=$directorio_instalacion/historicos log=/var/log/nodemecu_errors.log registros_corruptos=$directorio_instalacion/corruptos envios_fallidos=$directorio_instalacion/fallidos - +contador=$directorio_instalacion/contador +lock=$directorio_instalacion/lock diff --git a/nodemecu.service b/nodemecu.service index 29a714e..2f7447b 100644 --- a/nodemecu.service +++ b/nodemecu.service @@ -4,7 +4,7 @@ Description=Procesador de pila y transmisor de datos Nodemecu. [Service] Restart=on-failure RestartSec=5s -ExecStart=/opt/nodemecu/register.sh +ExecStart=/opt/nodemecu/registrador [Install] WantedBy=multi-user.target diff --git a/resgistrador b/resgistrador new file mode 100755 index 0000000..585e81c --- /dev/null +++ b/resgistrador @@ -0,0 +1,85 @@ +#!/bin/bash +#set -x + +source /etc/nodemecu.conf +source funciones + +conteo=$(cat $contador) +uuid="$(uuidgen)" +marca_de_tiempo="$(date +%s)" + +case $modo in + test) + funcion_datos_simulados + ;; + sensores) + funcion_datos_sensores + ;; +esac + + +# ARMADO DE FICHERO JSON + +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),)" + sensores="$sensores { $(echo \"timestamp\": $marca_de_tiempo,)" + ;; + 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 + + + + +json="{\"transaction_uuid\":\"$uuid\",\"controller_id\":\"$name\",\"timestamp\":\"$marca_de_tiempo\",\"error_code\":\"10\",\"coordinates\":{\"lat\":1,\"lng\":1},\"battery_status\":\"98\",\"sample\":\"0\",\"storage\":\"uso del almacenamiento\",\"arduinos\":[$sensores]}" + +touch $lock + +file=$(date +%Y%m%d%H%M%S -d @$marca_de_tiempo)-$uuid + + + +if echo $json | jsonlint-php 2> /dev/null;then + echo $json > $directorio_instalacion/$file && rm $lock && echo $((counter+1)) > $contador +else + echo "$(date +%Y-%m-%d-%H:%M:%S -d @$marca_de_tiempo) - No se pudo obtener información." >> $log +fi + + +exit + +# habia una razon para esto, ya va a saltar + +for ((i=1 ; i <=3 ; i++));do + if echo $json | jsonlint-php 2> /dev/null;then + echo $json > $registros/$file && rm /opt/nodemecu/lock && echo $((counter+1)) > $contador && break + else + echo "$(date +%Y-%m-%d-%H:%M:%S) - No se pudo obtener información." >> /opt/nodemecu/errors.log && sleep 1 + fi +done +