Autor Thema: läuft: (Geekworm Raspi UPS HAT Board v1.0) RasPi USV  (Gelesen 3532 mal)

Online Frank_Huber

  • Hero Member
  • *****
  • Beiträge: 2391
läuft: (Geekworm Raspi UPS HAT Board v1.0) RasPi USV
« am: 09 Januar 2018, 14:49:39 »
Hallo allerseits,

nachdem ich ein paar Tage experimentieren musste bis die Geekworm USV schön mit FHEM zusammengespielt hat will ich den Code natürlich gerne mit euch teilen.

Es geht um diese Raspberry USV:
https://www.banggood.com/Geekworm-UPS-HAT-Board-2500mAh-Lithium-Battery-For-Raspberry-Pi-3-Model-B-Pi-2B-B-A-p-1105260.html
Geliefert wird die Platine samt 2500mAh Akku zu einem Preis von ca 15 Euro inkl Versand.
Diese hält mein Testsystem um die 6 Stunden am Rennen.

Einen Shutdown erreiche ich über DOIF, über den darauf folgenden Boot Up mach ich mir keine Gedanken, da es wohl eher selten mehr als 6 Stunden Stromausfall geben wird. :-)
Und wenn dann doch muss ich eben am UPS board 2x den Taster drücken...

Hinweis:
Den Code (abgesehen von der myUtils) bitte über raw config importieren!

Kommunizieren tut das ganze über I2C. I2C sollte also in FHEM eingerichtet sein.
Hier am Beispiel für den RPI2:
defmod I2C RPII2C 1
Damit können wir jetzt schon per manuellem Kommando die USV abfragen.
Abrufbare Werte sind "nur" der Ladestand in % und die Spannung in V.
gelöst habe ich dies mit einem Dummy und Userreadings. Es ist bestimmt noch nicht perfekt und würde sich bestimmt auch vereinfachen lassen.
Aber es funktioniert. :-) Meine Programmierkenntnisse waren damit erschöpft.

zuerst in die 99_myUtils.pm folgendes eintragen:
sub i2c_USV_Batt_Voltage()
{
my @parts = split(/ /,fhem "get I2C read 36 2 2",1);
$parts[8] eq "Ok" ? return ($parts[2] * 256 + $parts[3])*0.000078125 : return "9999";
}

sub i2c_USV_Batt_Percent()
{
my @parts = split(/ /,fhem "get I2C read 36 4 2",1);
$parts[8] eq "Ok" ? return ($parts[2] * 256 + $parts[3])/256 : return "9999";
}

Der Dummy dazu:
defmod I2C_USV dummy
attr I2C_USV DbLogExclude V_direct,P_direct,state
attr I2C_USV DbLogInclude Voltage,Percent,Trend
attr I2C_USV room USV
attr I2C_USV stateFormat Battery: Percent % | Voltage V\
Ladung/Entladung letzte 10min: Trend %
attr I2C_USV userReadings V_direct {i2c_USV_Batt_Voltage},\
P_direct {i2c_USV_Batt_Percent},\
Voltage {sprintf("%.2f", ReadingsVal("I2C_USV","V_direct",0))},\
Percent {sprintf("%.1f", ReadingsVal("I2C_USV","P_direct",0))},\
Trend difference {ReadingsVal("I2C_USV","Percent",0)}
Das logging kann auch wieder raus.
Also dann DbLogExclude .* und den Include löschen.
Die hab ich zur Analyse noch drin. musste ja irgendwie sehen wie schnell der sich entläd und wieder läd... :-)

Aktuelisierung beim Systemstart per notify:
defmod USV_state_at_bootup notify global:INITIALIZED set I2C_USV get
attr USV_state_at_bootup room USV

Zyklische Aktualisierung alle 10 Minuten:
defmod I2C_USV_get at +*00:10:00 set I2C_USV get
attr I2C_USV_get DbLogExclude .*
attr I2C_USV_get room USV

Ein DOIF welches mir regelmäßig Telegram schickt und das System bei 2% herunterfährt:
Laden / Entladen wird über den Trend überwacht. Deshalb die Datenabfrage der USV auch nur alle 10 Minuten. Der % Unterschied wird sonst zu gering.
defmod I2C_USV_DOIF DOIF ([I2C_USV:Trend] <= -2 and [I2C_USV:Percent] <= 90 and [I2C_USV:Percent] > 2) (set TelegramBot message Test-PI auf USV-Strom! Ladestand [I2C_USV:Percent] %)\
DOELSEIF ([I2C_USV:Percent] <= 2) (set TelegramBot message Test-PI USV unter 2 Prozent. System wird heruntergefahren!) (sysshutdown)\
DOELSEIF ([I2C_USV:Trend] >= 2 and [I2C_USV:Percent] < 94)  (set TelegramBot message Test-PI hat wieder Netzstrom. Ladestand [I2C_USV:Percent] %)\
DOELSEIF ([I2C_USV:Percent] >= 94) (set TelegramBot message Test-PI USV voll geladen. Ladestand [I2C_USV:Percent] %)
attr I2C_USV_DOIF DbLogExclude .*
attr I2C_USV_DOIF repeatcmd 2400::1800:
attr I2C_USV_DOIF room USV

Der Systemshutdown muss allerdings erst eingerichtet werden. Hier half mir Otto's Blog, Danke Otto!
auf Raspbian Ebene folgenden Code ausführen:
sudo -i
echo "fhem ALL=(ALL) NOPASSWD: /sbin/shutdown" >/etc/sudoers.d/011_fhem-nopasswd
chmod 0440 /etc/sudoers.d/011_fhem-nopasswd
Dann in FHEM einen cmdAlias einrichten:
defmod Alias_SystemShutdown cmdalias SysShutdown AS "sudo /sbin/shutdown"
attr Alias_SystemShutdown DbLogExclude .*
attr Alias_SystemShutdown room USV

Mein Plot zum testen,
FHEM device:
defmod Plot_I2C_USV SVG logdb:Plot_I2C_USV:HISTORY
attr Plot_I2C_USV DbLogExclude .*
attr Plot_I2C_USV captionPos auto
attr Plot_I2C_USV endPlotNow 1
attr Plot_I2C_USV endPlotToday 1
attr Plot_I2C_USV label "USV-Akku - Ladestand $data{currval2} %, Spannung $data{currval1}V DC"
attr Plot_I2C_USV plotsize 800,200
attr Plot_I2C_USV room USV
gplot file:
# Created by FHEM/98_SVG.pm, 2018-01-03 00:26:38
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title '<L1>'
set ytics
set y2tics
set grid y2tics
set ylabel "Spannung"
set y2label "Prozent"
set yrange [3.5:4.2]
set y2range [0:100]

#logdb I2C_USV:Voltage::
#logdb I2C_USV:Percent::

plot "<IN>" using 1:2 axes x1y1 title 'Spannung' ls l2 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Prozent' ls l0 lw 1 with lines

Im Anhang noch ein Screenshot des FHEM Raums.

Wenn es Fragen gibt lasst es mich hier wissen, Vrbesserungen sind ebenfalls Willkommen. :-)

Quellen:
https://www.banggood.com/Geekworm-UPS-HAT-Board-2500mAh-Lithium-Battery-For-Raspberry-Pi-3-Model-B-Pi-2B-B-A-p-1105260.html
http://www.raspberrypiwiki.com/index.php/Raspi_UPS_HAT_Board
http://www.raspberrypiwiki.com/index.php/File:How-to-use-via-i2c.pdf
http://heinz-otto.blogspot.de/2017/08/raspberry-ausschalten-mit-fhem.html

EDIT:
- 2018-03-08 Korrektur für die myUtils: das Logging ausgeschaltet. https://forum.fhem.de/index.php?topic=85480
- 2018-03-07 Korrektur der Schritte auf Raspbian, "sudo -i" eingefügt.
« Letzte Änderung: 28 März 2018, 08:19:33 von Frank_Huber »

Offline FFHEM

  • Full Member
  • ***
  • Beiträge: 133
Antw:läuft: (Geekworm Raspi UPS HAT Board) RasPi USV
« Antwort #1 am: 21 Februar 2018, 16:08:39 »
Tolle Arbeit, vielen Dank!
Da ich z. Zt. etwas Ähnliches suche, ist das sehr interessant.

Eine Frage bzgl. des Neustarts habe ich dennoch: Du schreibst, wenn der Spannungsausfall länger als 6 Std. dauert, drückst Du auf dem Board 2 x einen Taster.
Heißt das, dass der Raspi, wenn er einmal heruntergefahren ist, nicht mehr selbst hochfährt (egal, ob dabei der Akku nach mehr als 6 Stunden leer ist oder die Netzspannung nach 5 Minuten wieder da ist)?

Vielen Dank!
Gruß
Friedhelm
FHEM 5.8 auf Raspberry Pi B, Raspbian Stretch, Homematic-Komponenten

Online Frank_Huber

  • Hero Member
  • *****
  • Beiträge: 2391
Antw:läuft: (Geekworm Raspi UPS HAT Board) RasPi USV
« Antwort #2 am: 21 Februar 2018, 16:15:05 »
Hi Friedhelm,

Ja, das ist so. nach ca 6 Stunden fährt der Pi bei 2% runter.
Irgendwann dannach schaltet dann auch die USV aus.

Vorgehensweise wenn usv noch an:
-> Taster an USV drücken -> AUS -> Taster an USV drücken -> AN -> PI fährt hoch.

man kann aber über größere Akkus auch weit höhere Zeiten erreichen.
die USV gibt es auch ohne Akku für paar Euro weniger.
Ein beliebiger Lithium Akku mit 3,7V Nennspannung tut es.

Man könnte bestimmt mit entsprechendem Aufwand den PI wieder starten lassen.
im "GANZ AUS" Fall würde wohl ein Y-Kabel in der Stromversorgung reichen.

Wenn aber der PI noch an ist wird es schwierig ihn zu starten.

Grüße
Frank

Offline Foxm66

  • New Member
  • *
  • Beiträge: 6
Antw:läuft: (Geekworm Raspi UPS HAT Board) RasPi USV
« Antwort #3 am: 23 Februar 2018, 09:29:33 »
Hi,
habe gerade etliche Zeit verbracht, meine USV zu integrieren.
Läuft aber über ein Python Skript.
(http://www.linuxblognf.de/usv-fuer-den-raspberry-pi-mit-raspi-ups-hat/)
Fährt auch mittlerweile sauber runter bei 10%.
Aber!
Ich habe ein Y Kabel. Lt. Hersteller soll er selber wieder hochfahren. Funktioniert aber nicht.
Ich muss erst das RPI Kabel abziehen. Dann warten, bis die USV auf laden umschaltet . Dann fährt der RPI wieder hoch. (evtl. den Taster 1x drücken)
Kabel anstecken. Fertig.
Wahrscheinlich ist das Y Kabel überflüssig.
... aber es ist schon so - wann ist die Spannung mal so weg, das es länger als 6 h dauert. Zu dem Schluss bin ich auch gekommen.
Eigentlich reicht es, das USV anzustecken. Fertig.

VG

Tilo

Online Frank_Huber

  • Hero Member
  • *****
  • Beiträge: 2391
Antw:läuft: (Geekworm Raspi UPS HAT Board) RasPi USV
« Antwort #4 am: 23 Februar 2018, 10:15:54 »
Hi,
habe gerade etliche Zeit verbracht, meine USV zu integrieren.
Läuft aber über ein Python Skript.
(http://www.linuxblognf.de/usv-fuer-den-raspberry-pi-mit-raspi-ups-hat/)
Fährt auch mittlerweile sauber runter bei 10%.
Aber!
Ich habe ein Y Kabel. Lt. Hersteller soll er selber wieder hochfahren. Funktioniert aber nicht.
Ich muss erst das RPI Kabel abziehen. Dann warten, bis die USV auf laden umschaltet . Dann fährt der RPI wieder hoch. (evtl. den Taster 1x drücken)
Kabel anstecken. Fertig.
Wahrscheinlich ist das Y Kabel überflüssig.
... aber es ist schon so - wann ist die Spannung mal so weg, das es länger als 6 h dauert. Zu dem Schluss bin ich auch gekommen.
Eigentlich reicht es, das USV anzustecken. Fertig.

Hi Tilo,

Du könntest ihn später runterfahren lassen. So dass kurz nach dem Shutdown auch die USV leer ist und der PI aus geht.
Dann fährt er auch wieder hoch wenn die Spannung zurück ist.

Aber wie Du es ja auch schreibst, wann ist denn schon der Strom so lange weg...

/Frank

Offline Ralph

  • Full Member
  • ***
  • Beiträge: 431
  • ... mit RegExp auf Kriegsfuß
    • Ende des Internet
Antw:läuft: (Geekworm Raspi UPS HAT Board) RasPi USV
« Antwort #5 am: 03 März 2018, 18:45:01 »
läuft - bei mir leider nicht so gut.

Hallo Frank,
habe versucht Dir zu folgen.
Ich brauche nicht wirklich alles, aber bei mir scheiterts schon am Anfang.

Internals:
   CFGFN     
   NAME       I2C_USV
   NR         548
   STATE      Battery: Percent % | Voltage V Ladung/Entladung letzte 10min: Trend %
   TYPE       dummy
   READINGS:
     2018-03-03 18:23:18   P_direct        95.37109375
     2018-03-03 18:23:18   V_direct        4.156171875
     2018-03-03 18:23:18   state           get
Attributes:
   room       BinDa,U_USV_RasPi
   stateFormat Battery: Percent % | Voltage V Ladung/Entladung letzte 10min: Trend %
   userReadings V_direct {i2c_USV_Batt_Voltage},P_direct {i2c_USV_Batt_Percent},\
Voltage {sprintf("%.2f", ReadingsVal("I2C_USV","V_direct",0))},\
Percent {sprintf("%.1f", ReadingsVal("I2C_USV","P_direct",0))},\
Trend difference {ReadingsVal("I2C_USV","Percent",0)}
Hier hatte ich erhofft, dass die Volt und der %uale Ladezustand im state gezeigtr werden.
Ist aber nicht und ich weiß nicht warum ?

Die DOIF meldet beim Einrichten schon Fehler:
-------
I2C_USV_DOIF DOIF: expected DOELSEIF or DOELSE: \ DOELSEIF ([I2C_USV:Percent] <= 2) (set TelegramBot message Test-PI USV unter 2 Prozent. System wird heruntergefahren!) (sysshutdown)\ DOELSEIF ([I2C_USV:Trend] >= 2 and [I2C_USV:Percent] < 94)  (set TelegramBot message Test-PI hat wieder Netzstrom. Ladestand [I2C_USV:Percent] %)\ DOELSEIF ([I2C_USV:Percent] >= 94) (set TelegramBot message Test-PI USV voll geladen. Ladestand [I2C_USV:Percent] %)
--------

Den Rest habe ich mir dann erstmal verkniffen.
FHEM auf RaspberryPi3 + USB-CUL mit 4 FHT, 3 RM100, 2 HMS100, 5 CUL_WS, 5 CUL_FHTTK, 8 FS20 und 5 FS20V Spannungsüberwachungen

Online Frank_Huber

  • Hero Member
  • *****
  • Beiträge: 2391
Antw:läuft: (Geekworm Raspi UPS HAT Board) RasPi USV
« Antwort #6 am: 03 März 2018, 19:42:46 »
Dir fehlt noch das at zur zyklischen Aktualisierung.
Bei Aktualisierung werden dann die userReadings berechnet und erzeugt.

Das doif muss ich mir nachher am PC anschauen.
Melde mich dann nochmal.

Hast du das doif über raw config importiert, zeilenweise über die Befehlszeile oder direkt in die cfg?

Wenn du den Code in der raw config importierst sollte er problemlos reinrutschen.

Edit
Mit dem dummy kann auch ein Import Fehler passiert sein.
Lade am besten die Codes über raw config rein, so hab ich sie auch exportiert.

Werde ich oben im Text noch ergänzen.


Grüße
Frank
« Letzte Änderung: 03 März 2018, 19:47:31 von Frank_Huber »
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline Ralph

  • Full Member
  • ***
  • Beiträge: 431
  • ... mit RegExp auf Kriegsfuß
    • Ende des Internet
Antw:läuft: (Geekworm Raspi UPS HAT Board) RasPi USV
« Antwort #7 am: 03 März 2018, 20:27:10 »
Ich arbeite - weil unbedarft - über die Befehlszeile und ergänze dann.

Das at und das start-notify hatte ich schon.

Editor ist Ultra-Edit, der spricht auch Linux-Zeilenschaltungen.

Von raw config höre ich nun erstmalig, mal schauen.
Nachtisch:
Kannte ich nicht, funktioniert gut, nun ging darüber auch die DOIF einzurichten.
Geht nun auch fast alles, die Plots habe ich mangels DB nicht eingerichtet.

Nicht funktionieren tut:
echo "fhem ALL=(ALL) NOPASSWD: /sbin/shutdown" >/etc/sudoers.d/011_fhem-nopasswd
chmod 0440 /etc/sudoers.d/011_fhem-nopasswd

« Letzte Änderung: 03 März 2018, 20:57:27 von Ralph »
FHEM auf RaspberryPi3 + USB-CUL mit 4 FHT, 3 RM100, 2 HMS100, 5 CUL_WS, 5 CUL_FHTTK, 8 FS20 und 5 FS20V Spannungsüberwachungen

Online Frank_Huber

  • Hero Member
  • *****
  • Beiträge: 2391
Antw:läuft: (Geekworm Raspi UPS HAT Board) RasPi USV
« Antwort #8 am: 03 März 2018, 20:40:15 »
In jedem Gerät gibt es ganz unten einen link für raw config.
Öffne ihn in einem beliebigen Gerät und füge dort den Code ein und drücke execute commands.
Lösche am besten die Geräte der usv vorher nochmal.

Für die Befehlszeile müsstest du die Zeilenumbrüche rausnehmen.
Also alles von define bis attr in eine Zeile.
Jeweils den backslash (\) und den Zeilenumbruch raus.

Anfangs kannte ich die raw config auch nicht, mittlerweile möchte ich es nicht mehr missen. Gibt nichts einfacheres.
Kannst das ganze Gerät samt Attribute auf einen Rutsch rein importieren.

Mit dem Handy online, daher kurz gefasst...
« Letzte Änderung: 03 März 2018, 20:46:15 von Frank_Huber »
Gefällt mir Gefällt mir x 1 Liste anzeigen

Online Frank_Huber

  • Hero Member
  • *****
  • Beiträge: 2391
Antw:läuft: (Geekworm Raspi UPS HAT Board) RasPi USV
« Antwort #9 am: 05 März 2018, 19:44:02 »


Nicht funktionieren tut:
echo "fhem ALL=(ALL) NOPASSWD: /sbin/shutdown" >/etc/sudoers.d/011_fhem-nopasswd
chmod 0440 /etc/sudoers.d/011_fhem-nopasswd
Das sind Eingaben auf der system shell.
Also per ssh auf den RasPi und dort eingeben.


Mit dem Handy online, daher kurz gefasst...


Offline Ralph

  • Full Member
  • ***
  • Beiträge: 431
  • ... mit RegExp auf Kriegsfuß
    • Ende des Internet
Antw:läuft: (Geekworm Raspi UPS HAT Board) RasPi USV
« Antwort #10 am: 05 März 2018, 20:07:14 »
Moin, ja klar,
weiß ich doch.
Ebendort gehts nicht.
FHEM auf RaspberryPi3 + USB-CUL mit 4 FHT, 3 RM100, 2 HMS100, 5 CUL_WS, 5 CUL_FHTTK, 8 FS20 und 5 FS20V Spannungsüberwachungen

Offline Tom_S

  • Full Member
  • ***
  • Beiträge: 255
Antw:läuft: (Geekworm Raspi UPS HAT Board) RasPi USV
« Antwort #11 am: 07 März 2018, 11:49:15 »
Zitat
Moin, ja klar,
weiß ich doch.
Ebendort gehts nicht.

geht schon. Kommt eine Fehlermeldung? vielleicht "keine Berechtigung"?
bist du root?

LG Tom_S
RaspberryPI2 + pilight, 3x AVR-NetIO, LW12, LW12HX, LW12FC; MAX-Lan, ESP8266, Arduino, H801, Neopixel, Solaredge, Modbus

Online Frank_Huber

  • Hero Member
  • *****
  • Beiträge: 2391
Antw:läuft: (Geekworm Raspi UPS HAT Board) RasPi USV
« Antwort #12 am: 07 März 2018, 11:57:01 »
geht schon. Kommt eine Fehlermeldung? vielleicht "keine Berechtigung"?
bist du root?
Danke für den Hinweis, hab das "sudo " oben eingefügt. ixch arbeite in der Konsole immer mit "sudo -i". :-)


Moin, ja klar,
weiß ich doch.
Ebendort gehts nicht.
Ralph, die Konsole muss im Admin Modus sein.
Also sudo -i zuerst und dann die Befehle, oder ein "sudo " vor jeden Befehl setzen.
Eine klare Fehlermeldung hätte uns da bestimmt früher drauf gebracht. :-)

Und sorry dass ich erst heute antworte. Hab deinen Post leider übersehen.
« Letzte Änderung: 07 März 2018, 12:15:42 von Frank_Huber »

Offline Tom_S

  • Full Member
  • ***
  • Beiträge: 255
Antw:läuft: (Geekworm Raspi UPS HAT Board) RasPi USV
« Antwort #13 am: 07 März 2018, 17:49:55 »
Zitat
Also sudo -i zuerst und dann die Befehle, oder ein "sudo " vor jeden Befehl setzen

hallo Frank_Huber
ist nicht ganz richtig. Die sudosers darf nur root schreiben. Mit sudo bekommst du nur root Rechte.

oder ein "sudo " vor jeden Befehl setzenwird also nicht funktionieren.

sudo -idagegen schon

LG Tom_S
« Letzte Änderung: 07 März 2018, 17:54:55 von Tom_S »
RaspberryPI2 + pilight, 3x AVR-NetIO, LW12, LW12HX, LW12FC; MAX-Lan, ESP8266, Arduino, H801, Neopixel, Solaredge, Modbus

Online Frank_Huber

  • Hero Member
  • *****
  • Beiträge: 2391
Antw:läuft: (Geekworm Raspi UPS HAT Board) RasPi USV
« Antwort #14 am: 07 März 2018, 18:04:43 »
hallo Frank_Huber
ist nicht ganz richtig. Die sudosers darf nur root schreiben. Mit sudo bekommst du nur root Rechte.

oder ein "sudo " vor jeden Befehl setzenwird also nicht funktionieren.

sudo -idagegen schon

LG Tom_S
Hmmmm,

Ich dachte immer sudo - i macht das gleiche wie sudo vor dem Befehl, nur dauerhaft?
Werd ich auf jeden Fall testen. :-)
Danke für den sudo Kurs falls das stimmt.

Edit:

Recht hatter!
Geht nur mit sudo -i vorab.
Habs im ersten Post schon angepasst.

Danke nochmal Tom!
« Letzte Änderung: 08 März 2018, 15:27:19 von Frank_Huber »