Script RPI Power Pack Hat Pro V1.1 with MeterN [GUIDA]

Discussioni relative a software necessario per il monitoraggio e il Raspberry
Avatar utente
Flane
Messaggi: 2460
Iscritto il: 16/01/2016, 15:02

Script RPI Power Pack Hat Pro V1.1 with MeterN [GUIDA]

Messaggioda Flane » 08/08/2018, 11:52

WIKI: Geekworm Power Pack Pro V1.1 UPS HAT


Nell'immagine Solarstretch 3.1 ho aggiunto un file /var/www/MyScripts/ups/upshat.py per gestire la scheda aggiuntiva per il Raspberry RPI Power Pack Hat Pro V1.1, che svolge la funzione di UPS.

ATTENZIONE che solo la versione 1.1 pro di questa scheda ups funziona correttamente. La versione 1.0 aveva qualche problemino che non ne permetteva un corretto utilizzo come UPS.
Evidenzio che in realtà un problemino è rimasto anche nella versione 1.1. In caso di spegnimento (comando poweroff o spegnimento automatico a fine batteria con script) è infatti necessario spegnere manualmente l'ups mediante il pulsante integrato e poi riaccenderlo con lo stesso pulsante per riattivare l'RPI.
Ecco quindi che in caso di assenza prolungata di alimentazione che comporti il totale scaricamento della batteria, al ritorno dell'alimentazione sarà quindi necessario riattivare manualmente il Raspberry.

Script for RPI Power Pack Hat Pro V1.1 with MeterN
upshat.py rev. 1.1


Come riportato nello script stesso, lo script legge tramite bus i2C il valore di tensione e capacita della batteria della scheda RPI Power Pack Hat Pro V1.1

Lo script effettua un controllo ogni 60s (per non stressare troppo il Raspi) sulla capacita della batteria ed invia delle notifiche push sul cellulare tramite il servizio gratuito RPINotify (Telegram) nei seguenti casi:
1 capacita < 95% notifica il funzionamento a batteria
2 avviso per capacita residua < 20%
3 con capacita residua < 5% esegue lo spegnimento del Raspberry-Pi per evitare possibili danneggiamenti della scheda SD in seguito ad un improvviso spegnimento per fine batteria.

Le letture vengono salvate nel file temporaneo /dev/shm/ups.txt pronte per essere poi lette tramite reqsdm e visualizzate in MeterN. Il contenuto del file è formattato come di seguito:

Codice: Seleziona tutto

ups_1(4.17*V)
ups_2(100*%)


UTILIZZO DELLO SCRIPT

Come prima cosa è necessario attivare la funzione i2c dell'hat con il comando:

Codice: Seleziona tutto

i2cset -y 1 0x62 0x0A 0x00

Questo comando va eseguito solo la prima volta ed eventualmente nel caso che per qualche motivo scollegate la batteria dalla scheda.

Per abilitare l'avvio automatico al boot del servizio:

Codice: Seleziona tutto

sudo systemctl enable upshat.service
sudo reboot

A riavvio avvenuto è possibile controllare lo stato del servizio:

Codice: Seleziona tutto

sudo systemctl status upshat.service

Se il servizio è stato correttamente avviato si avrà una risposta del tipo:

Codice: Seleziona tutto

root@raspberrypi:~# sudo systemctl status upshat.service
● upshat.service - RPI UPS Hat Service
   Loaded: loaded (/etc/systemd/system/upshat.service; enabled)
   Active: active (running) since sab 2017-10-07 11:54:23 CEST; 1min 19s ago
 Main PID: 674 (python)
   CGroup: /system.slice/upshat.service
           └─674 /usr/bin/python /home/pi/ups/UPS-HAT.py

ott 07 11:54:23 raspberrypi systemd[1]: Started RPI UPS Hat Service.

Potete ora controllare la tensione e la capacità della batteria (nel formato MeterN) digitando da terminale:

Codice: Seleziona tutto

reqsdm bat_ten
reqsdm bat_cap

Infine per avere in metern un indicatore con la tensione della batteria ed uno con la capacità della batteria:
Immagine

Non ho la certezza di aver lasciato in /var/www/comapps/reqsdm.php i comandi per l'ups, in caso non ci fossero basta aggiungere le righe:

Codice: Seleziona tutto

      } elseif ($argv[1] == 'bat_ten') {
         $outstr =  exec('cat /dev/shm/ups.txt | grep "*V)"');
      } elseif ($argv[1] == 'bat_cap') {
         $outstr =  exec('cat /dev/shm/ups.txt | grep "*%)"');

per leggere la tensione (con il comando reqsdm bat_ten) e la capacita della batteria (con il comando reqsdm bat_cap)

NOTA IMPORTANTE
Nell'immagine Solarstretch 3.1 è erroneamente rimasta la vecchia versione 1.0 dello script :oops:

E' quindi necessario sostituire il file /var/www/MyScripts/ups/upshat.py ed il file /etc/systemd/system/upshat.service
con quelli scaricabili dal seguente link (sono necessari i permessi di root), e mi raccomando di assegnare gli stessi proprietari e permessi ai file se necessario.
Quindi riavviate il raspberry con:

Codice: Seleziona tutto

sudo reboot


upshat_v1.1


Avatar utente
Flane
Messaggi: 2460
Iscritto il: 16/01/2016, 15:02

Re: Script RPI Power Pack Hat Pro V1.1 with MeterN

Messaggioda Flane » 08/08/2018, 11:54

ambramia ha scritto:intanto grazie Flane, aggiorno la mia situazione, ho effettuato i passaggi da te indicati ma riscontro una differenza rispetto a quanto da te scritto e cioé:
in /dev/shm/ non trovo il file /ups.txt ma /metern12.txt, poi ti confermo che nel file reqsdm.php sono da inserire i comandi in quanto mancanti.
Per effettuare le prove ho modificato la parte:

Codice: Seleziona tutto

      } elseif ($argv[1] == 'bat_ten') {
         $outstr =  exec('cat /dev/shm/ups.txt | grep "*V)"');
      } elseif ($argv[1] == 'bat_cap') {
         $outstr =  exec('cat /dev/shm/ups.txt | grep "*%)"');

così:

Codice: Seleziona tutto

      } elseif ($argv[1] == 'bat_ten') {
         $outstr =  exec('cat /dev/shm/metern12.txt | grep "*V)"');
      } elseif ($argv[1] == 'bat_cap') {
         $outstr =  exec('cat /dev/shm/metern12.txt | grep "*%)"');

e lanciando i comandi da terminale mi da i risultati di tensione e percentuale batteria corretti.
Ora volendo modificare metern12.txt in ups.txt, anche per avere una corrispondenza rispetto alla guida, credo che si debba modificare lo script upshat.py immaggino in questa parte:

Codice: Seleziona tutto

if len(sys.argv) == 2:
        meterID = sys.argv[1] # MeterN ID per lo stato della batteria]
else:
        print 'usage: ./upshat.py metern_id'
        print 'example: ./upshat.py 8 - for use metern id 8 and write /dev/shm/metern8.txt'
        sys.exit(1)

ho provato ma non cambia nulla, sicuramente sbaglio io come posso fare per modificarlo correttamente?


il file upshat.py crea il file /dev/shm/ups.txt.
Se non lo hai significa che il servizio upshat.service non è attivo o c'è qualcosa che non funziona.
Oppure hai modificato il file upshat.py ?
Hai fatto il controllo sul servizio che ho descritto sopra?

metern12.txt è qualche altro misuratore che hai creato con ID12. Che cosa contiene?

ambramia
Messaggi: 111
Iscritto il: 22/01/2016, 11:38

Re: Script RPI Power Pack Hat Pro V1.1 with MeterN

Messaggioda ambramia » 08/08/2018, 13:13

il servizio è attivo poiché da terminale risulta "active (running) lo script upshat.py è quello dell'immagine. il suo contenuto attuale è questo:

Codice: Seleziona tutto

#!/usr/bin/python
#
# Script for RPI Power Pack Hat Pro V1.1 with MeterN
#
# enable I2C via raspi-config
# sudo apt-get install i2c-tools
# sudo apt-get install python-smbus
# sudo apt-get install python-requests
# ln -s /var/www/MyScripts/ups/upshat.py /usr/bin/ups
#

import struct
import smbus
import sys
import os
import time
import requests

# Inserire il token per l'invio dei messaggi con RPInotify - Lasciare vuoto se non si utilizza il servizio di notifica
TOKEN = ""


if len(sys.argv) == 2:
        meterID = sys.argv[1] # MeterN ID per lo stato della batteria]
else:
        print 'usage: ./upshat.py metern_id'
        print 'example: ./upshat.py 8 - for use metern id 8 and write /dev/shm/metern8.txt'
        sys.exit(1)


# da qui in poi non sono necessarie modifiche
file = "/dev/shm/metern"+ meterID +".txt"
control20 = 0
control95 = 0

sys.stdout=open(file,"w")
print "%s_1(0*V)" % meterID  # Tensione
print "%s_2(0*%%)" % meterID # Capacita
sys.stdout.close()

while True:
   def readVoltage(bus):
      "This function returns as float the voltage from the Raspi UPS Hat via the provided SMBus object"
      address = 0x62
      read = bus.read_word_data(address, 2)
      swapped = struct.unpack("<H", struct.pack(">H", read))[0]
      voltage = swapped * 305.0 /1000000
      return voltage

   def readCapacity(bus):
      "This function returns as a float the remaining capacity of the battery connected to the Raspi UPS Hat via the provided SMBus object"
      address = 0x62
      read = bus.read_word_data(address, 4)
      swapped = struct.unpack("<H", struct.pack(">H", read))[0]
      capacity = swapped/256
      return capacity

   bus = smbus.SMBus(1)  # 0 = /dev/i2c-0 (port I2C0), 1 = /dev/i2c-1 (port I2C1)
   
   sys.stdout=open(file,"w")
   print "%s_1({0:0.2f}*V)".format(readVoltage(bus)) % meterID # Tensione
   print "%s_2({0:0.0f}*%%)".format(readCapacity(bus)) % meterID # Capacita %
   sys.stdout.close()
   
   # Notifiche con RPINotify
   if TOKEN != "":
      if readCapacity(bus) > 20:
         control20 = 0
      
      if readCapacity(bus) <= 20 and control20 == 0:
         MSG = "RPI UPS Hat - ATTENZIONE Batteria residua 20%"
         req = requests.post('https://api.rpinotify.it/message/' + TOKEN + '/', data={'text': MSG})
         control20 = 1
         #print(req.text)

      if readCapacity(bus) > 95:
         control95 = 0
      
      if readCapacity(bus) <= 95 and control95 == 0:
         MSG = "RPI UPS Hat - Funzionamento a batteria - Batteria residua 95%"
         req = requests.post('https://api.rpinotify.it/message/' + TOKEN + '/', data={'text': MSG})
         control95 = 1
         
   # Shutdown system
   if readCapacity(bus) < 5:
      #print "System will shutdown now,bye!"
      os.system("sudo poweroff")
      sys.exit(1)
   time.sleep(60)

il file metern12.txt lo crea lo script upshat.py ed al suo interno ci sono appunto tensione e percentuale della batteria quindi è corretto.
Prova a guardare il contenuto dell script che ti ho messo sopra e vedi se c'è un errore
grazie

Avatar utente
Flane
Messaggi: 2460
Iscritto il: 16/01/2016, 15:02

Re: Script RPI Power Pack Hat Pro V1.1 with MeterN

Messaggioda Flane » 08/08/2018, 14:24

Cavolo mi è rimasta nella Solarstretch la vecchia versione dello script 1.0 :oops:
Una delle modifiche era proprio svincolare il file temporaneo dal numero di ID in quanto non serviva e creava solo possibili problemi.

Sostituisci il file /var/www/MyScripts/ups/upshat.py ed il file /etc/systemd/system/upshat.service
con quelli che allego, e mi raccomando di assegnare gli stessi proprietari e permessi se necessario.
Quindi riavvia il raspberry.


Ho evidenziato la cosa anche nel primo post ;)
Allegati
upshat_v1.1.zip
(2.16 KiB) Scaricato 382 volte

ambramia
Messaggi: 111
Iscritto il: 22/01/2016, 11:38

Re: Script RPI Power Pack Hat Pro V1.1 with MeterN

Messaggioda ambramia » 08/08/2018, 17:25

fatto, ora è OK.
Ora faccio qualche test di durata batteria e relativi avvisi/spegnimento su RPINotify.
grazie

Avatar utente
Flane
Messaggi: 2460
Iscritto il: 16/01/2016, 15:02

Re: Script RPI Power Pack Hat Pro V1.1 with MeterN

Messaggioda Flane » 08/08/2018, 18:27

Tieni presente che in caso di spegnimento del raspberry, per riaccenderlo è necessario spegnere l'UPS tenendo premuto il suo pulsante e poi riaccenderlo ripremendolo.
E' direi l'unica pecca che è rimasta a questo dispositivo.

ambramia
Messaggi: 111
Iscritto il: 22/01/2016, 11:38

Re: Script RPI Power Pack Hat Pro V1.1 with MeterN

Messaggioda ambramia » 09/08/2018, 8:52

ho fatto le seguenti prove ieri:
con raspberry acceso e Power pack carico al 100% ho tolto alimentazione. Sarebbe dovuta arrivarmi una notifica al <95% ma non è arrivata, mi è arrivata quella al <20%, infine non è arrivata quella del <5% ma ha eseguito correttamente lo il poweroff.
Ho ricollegato l'alimentazione spento e riacceso il Power pack di conseguenza è ripartito il raspberry.
Stamattina vedo dai led che la batteria è carica mi ricollego per fare le letture è noto che sono ferme all'ora di riaccensione di ieri del raspberry (verificato tramite il file ups.txt in /dev/shm)
verifico lo status del servizio da terminale è noto un errore, faccio un restart del servizio è riprende il finzionamento, cosa sia successo non lo so, allego interrogazioni da terminale:

Codice: Seleziona tutto

root@raspberrypi:~# reqsdm bat_ten
ups_1(3.94*V)root@raspberrypi:~# reqsdm bat_cap
ups_2(6*%)root@raspberrypi:~# reqsdm bat_cap
ups_2(6*%)root@raspberrypi:~# systemctl status upshat.service
● upshat.service - RPI UPS Hat Service
   Loaded: loaded (/etc/systemd/system/upshat.service; enabled; vendor preset: e
   Active: failed (Result: exit-code) since Wed 2018-08-08 20:14:48 CEST; 12h ag
  Process: 672 ExecStart=/usr/bin/ups (code=exited, status=1/FAILURE)
 Main PID: 672 (code=exited, status=1/FAILURE)

ago 08 20:14:48 raspberrypi ups[672]:   File "/usr/lib/python2.7/dist-packages/r
ago 08 20:14:48 raspberrypi ups[672]:     resp = self.send(prep, **send_kwargs)
ago 08 20:14:48 raspberrypi ups[672]:   File "/usr/lib/python2.7/dist-packages/r
ago 08 20:14:48 raspberrypi ups[672]:     r = adapter.send(request, **kwargs)
ago 08 20:14:48 raspberrypi ups[672]:   File "/usr/lib/python2.7/dist-packages/r
ago 08 20:14:48 raspberrypi ups[672]:     raise SSLError(e, request=request)
ago 08 20:14:48 raspberrypi ups[672]: requests.exceptions.SSLError: ("bad handsh
ago 08 20:14:48 raspberrypi systemd[1]: upshat.service: Main process exited, cod
ago 08 20:14:48 raspberrypi systemd[1]: upshat.service: Unit entered failed stat
ago 08 20:14:48 raspberrypi systemd[1]: upshat.service: Failed with result 'exit

root@raspberrypi:~# systemctl restart upshat.service
root@raspberrypi:~# systemctl status upshat.service
● upshat.service - RPI UPS Hat Service
   Loaded: loaded (/etc/systemd/system/upshat.service; enabled; vendor preset: e
   Active: active (running) since Thu 2018-08-09 08:29:47 CEST; 4s ago
 Main PID: 5137 (ups)
   CGroup: /system.slice/upshat.service
           └─5137 /usr/bin/python /usr/bin/ups

ago 09 08:29:47 raspberrypi systemd[1]: Started RPI UPS Hat Service.

root@raspberrypi:~# reqsdm bat_cap
ups_2(94*%)root@raspreqsdm bat_ten
root@raspberrypi:~#

subito dopo mi è arrivata la notifica dello stato batteria al <95% :roll: :roll: :roll:

edit:
dando uno sguardo allo script effettivamente l'invio della notifica tramite RPINotify a <5% non c'è deve eseguire solo lo spegnimento


Opizzio
Messaggi: 10
Iscritto il: 19/03/2018, 10:15

Re: Script RPI Power Pack Hat Pro V1.1 with MeterN [GUIDA]

Messaggioda Opizzio » 18/09/2018, 22:37

Sapete se questo UPS va bene anche con il Raspberri P3 B+?
Grazie



Torna a “Software”

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti