Script virtmeter.php [GUIDA]

Discussioni relative al software di monitoraggio energetico METERN
Garluk
Messaggi: 80
Iscritto il: 01/10/2017, 22:00

Re: Script virtmeter.php [GUIDA]

Messaggioda Garluk » 18/12/2018, 0:34

miki8989 ha scritto:questo e script live.sh
-rwxrwxrwx 1 pi pi 2722 dic 1 21:17 live.php*

questo è del pooler485.sh
-rwxrwxrwx 1 www-data www-data 1453 dic 16 16:05 pooler485.sh*

ho provato a mettere in www-data lo script live.php ma niente...
ho provato anche a metter sudo /var/www/MyScripts/live.sh ma niente...

comunque sei un mago...
in effetti il problema di passare qualche dato "sporco" a domoticz c'è...
e la domanda se potevo passarlo nel pooler485 era l'idea per bypassare il problema...
comunque anche l'idea di controllare se esiste il file in shm non è male...

ho provato ad inserire

Codice: Seleziona tutto

// controllo esistenza file

if (file_exists('/dev/shm/mN_MEMORY.json')) {

------- ciclo di lettura parametri ed invio a domoticz

} else {
}


corretto???

grazie


Sudo non c'entra e i permessi sembrano ok. Non capisco perchè non viene eseguito.
Prova a aggiungere dentro la if prima di chiamare lo script live.sh un test presenza.... qualcosa del tipo
echo "Eseguo\n" >> /dev/shm/log
e vedi che succede dopo un paio di minuti al file log.
Se viene correttamente popolato allora la variabile viene correttamente incrementata e il test è ok e non ci sono errori di sintassi o altro.
Se il file log non viene generato o è vuoto c'è un errore dentro pooler485.sh

Fai qualche prova e dirmi.

Preferisco che live.sh lo richiami da pooler mentre gli altri da cron: questo perchè sfasamenti su live sono poco importanti mentre uno sfasamento temporale sugli altri potrebbe creare disallinamenti e visto che non devi chiamare lo script con questa frequenza va bene da cron.
In realtà ci sarebbe un altro metodo ancora più raffinato ed è quello che ho utilizzato io per lo script pvoutput......

In ogni caso in tutti gli script devi aggiungere il controllo sull'esistenza dei file altrimenti la sporcizia è sicuro che la becchi!

Ciao
G.


megamarco83
Messaggi: 246
Iscritto il: 22/08/2016, 14:13

Re: Script virtmeter.php [GUIDA]

Messaggioda megamarco83 » 18/12/2018, 10:52

Garluk ha scritto:Preferisco che live.sh lo richiami da pooler mentre gli altri da cron: questo perchè sfasamenti su live sono poco importanti mentre uno sfasamento temporale sugli altri potrebbe creare disallinamenti e visto che non devi chiamare lo script con questa frequenza va bene da cron.
In realtà ci sarebbe un altro metodo ancora più raffinato ed è quello che ho utilizzato io per lo script pvoutput......

In ogni caso in tutti gli script devi aggiungere il controllo sull'esistenza dei file altrimenti la sporcizia è sicuro che la becchi!

Ciao
G.

Ciao Garluk, cosa ne pensi invece del mio metodo di usare dzvents (lua) che è già dentro a domoticz ed andare a leggere i due json:
nm_memory per i totali, leggendo il "lastXX" ogni 5min.
nm_livememory per i live, leggendo il valore del meter, ad esempio "Produzione2" ogni 10secondi.
non sarebbe un metodo pulito ?
grazie

miki8989
Messaggi: 299
Iscritto il: 22/01/2016, 6:39

Re: Script virtmeter.php [GUIDA]

Messaggioda miki8989 » 18/12/2018, 21:40

x Garluk

ho provato a scrivere uno script con il ciclo di conteggio a 5
lanciato e funziona
lo copio nel pooler485 e non và!!!!

ma mi viene un dubbio...
io uso il tuo virtmeter per la lettura dei contatori e nel config.daemon il pooler485 non viene chiamato!!!!

ciao

Garluk
Messaggi: 80
Iscritto il: 01/10/2017, 22:00

Re: Script virtmeter.php [GUIDA]

Messaggioda Garluk » 18/12/2018, 22:11

megamarco83 ha scritto:Ciao Garluk, cosa ne pensi invece del mio metodo di usare dzvents (lua) che è già dentro a domoticz ed andare a leggere i due json:
nm_memory per i totali, leggendo il "lastXX" ogni 5min.
nm_livememory per i live, leggendo il valore del meter, ad esempio "Produzione2" ogni 10secondi.
non sarebbe un metodo pulito ?
grazie


Si può fare. Non conosco a fondo domoticz e non so quale dei due "metodi" è più veloce e meno oneroso.
A pelle quello via php perchè con l'ambiente lua c'è un doppio passaggio oltre che c'è di mezzo pyton e quindi un minimo di risorse in più.
Prova.

In ogni caso il controllo sull'esistenza dei file va fatto comunque....

Garluk
Messaggi: 80
Iscritto il: 01/10/2017, 22:00

Re: Script virtmeter.php [GUIDA]

Messaggioda Garluk » 18/12/2018, 22:13

miki8989 ha scritto:x Garluk

ho provato a scrivere uno script con il ciclo di conteggio a 5
lanciato e funziona
lo copio nel pooler485 e non và!!!!

ma mi viene un dubbio...
io uso il tuo virtmeter per la lettura dei contatori e nel config.daemon il pooler485 non viene chiamato!!!!

ciao


Miki ma a cosa ti riferisci?
Hai fatto la prova del log?
Ogni volta che fai una modifica a pooler lo stoppi e lo rilanci? Perchè se non lo stoppi e lo rilanci non hai fatto nulla....

Ciao
G.

miki8989
Messaggi: 299
Iscritto il: 22/01/2016, 6:39

Re: Script virtmeter.php [GUIDA]

Messaggioda miki8989 » 18/12/2018, 22:32

si si riavvio il raspberry...
la prova del log l'ho fatta sia su uno script di prova e va ma sul 485 no...

a scanso di equivoci questo è il pooler485

Codice: Seleziona tutto

#!/bin/bash

ADDRESSES="$1"
BAUD_RATE="$2"
DEVICE="$3"
LIVE=0

ADDR_ARR=$(echo $ADDRESSES | tr "," "\n")

while [ true ]; do

    ID=0
    POWER=""
    ENERGY=""
   CHECK=""

    for ADDRESS in $ADDR_ARR
    do
    #((ID++))
    ID=$ADDRESS
   CMD="sdm120c -a ${ADDRESS} -b ${BAUD_RATE} -z 10 -i -p -v -c -f -g -P N -w 10 -j 10 -d 0 -q ${DEVICE}"

    #echo $CMD
   
    VALUE=`$CMD`
    VOLTAGE=$(echo ${VALUE}   | awk '{print $1}')
   CURRENT=$(echo ${VALUE}   | awk '{print $2}')
   POWER=$(echo ${VALUE}     | awk '{print $3}')
   FACTOR=$(echo ${VALUE}    | awk '{print $4}')
   FREQUENCY=$(echo ${VALUE} | awk '{print $5}')
   ENERGY=$(echo ${VALUE}    | awk '{print $6}')
   CHECK=$(echo ${VALUE}      | awk '{print $7}')
   
   if [ "$CHECK" = "OK" ]; then
      echo -e "$ID($POWER*W)\n$ID($ENERGY*Wh)\n${ID}_1($VOLTAGE*V)\n${ID}_2($CURRENT*A)\n${ID}_3($FREQUENCY*Hz)\n${ID}_4($FACTOR*F)" > /dev/shm/metern${ADDRESS}.txt
    else
        if [ -f /dev/shm/metern${ADDRESS}.txt ]; then
            POWER="0.00"
            ENERGY=`sed -n '2p' /dev/shm/metern${ADDRESS}.txt`
         VOLTAGE="0.00"
         CURRENT="0.00"
         FREQUENCY="0.00"
         FACTOR="0.00"
            echo -e "$ID($POWER*W)\n$ENERGY\n${ID}_1($VOLTAGE*V)\n${ID}_2($CURRENT*A)\n${ID}_3($FREQUENCY*Hz)\n${ID}_4($FACTOR*F)" > /dev/shm/metern${ADDRESS}.txt
        fi
    fi
    sleep 2s

LIVE=$(($LIVE+1))
echo $LIVE >> /dev/shm/log
if [ "$LIVE" -eq 5 ]
then
sudo /var/www/MyScripts/live.php
LIVE=0
fi

    done

done

Garluk
Messaggi: 80
Iscritto il: 01/10/2017, 22:00

Re: Script virtmeter.php [GUIDA]

Messaggioda Garluk » 19/12/2018, 1:00

Miki lo script è sbagliato.

Hai inserito il blocco che chiama live dentro il for che scandisce i contatori....

Dovresti scrivere lo script in modo diverso.
Prova così

Codice: Seleziona tutto

#!/bin/bash

ADDRESSES="$1"
BAUD_RATE="$2"
DEVICE="$3"
LIVE=0

ADDR_ARR=$(echo $ADDRESSES | tr "," "\n")

while [ true ]; do
    ID=0
    POWER=""
    ENERGY=""
    CHECK=""

    for ADDRESS in $ADDR_ARR
    do
    ID=$ADDRESS
    CMD="sdm120c -a ${ADDRESS} -b ${BAUD_RATE} -z 10 -i -p -v -c -f -g -P N -w 10 -j 10 -d 0 -q ${DEVICE}"

    #echo $CMD
    VALUE=`$CMD`
    VOLTAGE=$(echo ${VALUE}   | awk '{print $1}')
    CURRENT=$(echo ${VALUE}   | awk '{print $2}')
    POWER=$(echo ${VALUE}     | awk '{print $3}')
    FACTOR=$(echo ${VALUE}    | awk '{print $4}')
    FREQUENCY=$(echo ${VALUE} | awk '{print $5}')
    ENERGY=$(echo ${VALUE}    | awk '{print $6}')
    CHECK=$(echo ${VALUE}      | awk '{print $7}')
   
    if [ "$CHECK" = "OK" ]; then
        echo -e "$ID($POWER*W)\n$ID($ENERGY*Wh)\n${ID}_1($VOLTAGE*V)\n${ID}_2($CURRENT*A)\n${ID}_3($FREQUENCY*Hz)\n${ID}_4($FACTOR*F)" > /dev/shm/metern${ADDRESS}.txt
    else
        if [ -f /dev/shm/metern${ADDRESS}.txt ]; then
            POWER="0.00"
            ENERGY=`sed -n '2p' /dev/shm/metern${ADDRESS}.txt`
            VOLTAGE="0.00"
            CURRENT="0.00"
            FREQUENCY="0.00"
            FACTOR="0.00"
            echo -e "$ID($POWER*W)\n$ENERGY\n${ID}_1($VOLTAGE*V)\n${ID}_2($CURRENT*A)\n${ID}_3($FREQUENCY*Hz)\n${ID}_4($FACTOR*F)" > /dev/shm/metern${ADDRESS}.txt
        fi
    fi
    sleep 2s

    done
   
    LIVE=$(($LIVE+1))
    if [ "$LIVE" -eq 5 ]; then
        echo $LIVE >> /dev/shm/log

        CMD="/var/www/MyScripts/live.php"
        echo $CMD
        VALUE=`$CMD`

        LIVE=0
    fi

done

miki8989
Messaggi: 299
Iscritto il: 22/01/2016, 6:39

Re: Script virtmeter.php [GUIDA]

Messaggioda miki8989 » 20/12/2018, 12:18

ciao Garluk

ho fatto tantissime prove...
il pezzo di script che conta e poi lancia il php l'ho provato esternamente al pooler485 (in altro php con un ciclo di wile infinito e scivendo a video il conteggio ed il reset)

il fatto che non funzioni all'interno del pooler485 credo che sia dovuto al fatto che io uso il tuo virtmeter.
lanciando egrep -v poooler485 non mi da 1 (pooler in esecuzione)

ora volendo uscire dal crontab pensavo di creare un php che lancio in avvio e fa un ciclo di wile infinito con all'interno il conteggio e l'invio del php per trasferirie i dati in domoticz.
tu che ne pensi???

eventualmente potrei inserire nel php anche il lancio degli altri script di importazione uscendo del tutto dal crontab

spero di essermi spiegato bene

grazie

Garluk
Messaggi: 80
Iscritto il: 01/10/2017, 22:00

Re: Script virtmeter.php [GUIDA]

Messaggioda Garluk » 21/12/2018, 0:21

Miki, il tuo script era sbagliato.
Chiamavi il conteggio dentro il for e non dentro il While....
Inoltre come lo hai scritto non funziona perchè echo stampa il comando ma quello che lo esegue è l'istruzione
VALUE=`$CMD`

Prova come ho fatto lo script io.

Ciao
G.

miki8989
Messaggi: 299
Iscritto il: 22/01/2016, 6:39

Re: Script virtmeter.php [GUIDA]

Messaggioda miki8989 » 21/12/2018, 8:23

grazie stasera provo...


Torna a “MeterN”

Chi c’è in linea

Visitano il forum: Nessuno e 17 ospiti