HomeMatic Raspberry Pi Tutorial

HomeMatic – Eine externe USV an einer RaspberryMatic betreiben

RaspberryMatic USV

Einplatinencomputer quittieren das Entfernen der Stromversorgung bei laufendem Betrieb oftmals mit einem Crash, der ein erneutes Aufsetzen des Systems erforderlich macht, insbesondere, wenn bei Wegfall der Stromversorgung gerade auf die Speicherkarte zugegriffen wurde.

Es ist daher sinnvoll, auch bei einem RaspberryMatic-System eine unabhängige Stromversorgung (USV) einzusetzen.

Nach – wenig zufriedenstellenden – Versuchen mit einem Strompi und einer längeren – sehr gut funktionierenden – Einsatzdauer einer S.USV bin ich vor einiger Zeit auf eine externe USV umgestiegen, die mittels der in RaspberryMatic bereits integrierten Network UPS Tools (NUT)-Unterstützung über einen USB Anschluss angebunden ist.

Der wesentliche Grund für den Umstieg war, dass ich neben der RaspberryMatic auch den Router mit versorgen wollte, um während eines Stomausfalls weiterhin Zugriff von außen zu haben und über das Festnetz telefonieren zu können.

Ich habe mich für eine FSP Fortron USV-Anlage EP 650 SP, 650VA entschieden, weil diese den hier benötigten Daten entspricht und erfolgreich im Zusammenwirken mit der RaspberryMatic getestet wurde.

Einrichten des NUT-Servers auf der RaspberryMatic

Hierzu wird eine Anleitung von ELV zur Verfügung gestellt, die ich hier nicht wiederholen möchte. Ergänzend kann aber noch erwähnt werden, dass in den Einstellungen der Software WinNUTClient, folgendes einzutragen ist, damit die Verbindung zum NUT Server funktioniert…

RaspberryMatic USV

Einlesen von Daten der USV in Systemvariable

Die EP 650 SP stellt verschiedene Daten zur Verfügung, die nach dem Einloggen auf die RaspberryMatic mittels Putty und Eingabe des Befehls…

upsc ep650@localhost

…gelistet werden (die Angaben können für andere NUT-fähige USV-Anlagen abweichen)…

# upsc ep650@localhost
battery.charge: 100
battery.voltage: 13.70
battery.voltage.high: 13.00
battery.voltage.low: 10.40
battery.voltage.nominal: 12.0
device.type: ups
driver.name: blazer_usb
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.parameter.synchronous: no
driver.version: 2.35.16.20180708-20-g6b5bf56
driver.version.internal: 0.12
input.current.nominal: 2.0
input.frequency: 50.1
input.frequency.nominal: 50
input.voltage: 234.9
input.voltage.fault: 237.0
input.voltage.nominal: 230
output.voltage: 237.0
ups.beeper.status: enabled
ups.delay.shutdown: 30
ups.delay.start: 180
ups.load: 2
ups.productid: 5161
ups.status: OL
ups.type: offline / line interactive
ups.vendorid: 0665

Hiervon habe ich mir folgende Werte ausgesucht, und für diese jeweils eine Systemvariable wie folgt angelegt:

USV ParameterSystemvariableTypminmaxEinheitAnmerkung
battery.chargeUPS.CapBatterieZahl0100%Ladezustand Akku
battery.voltageUPS.VoltBatterieZahl020VSpannung des Akkus
input.voltageUPS.VoltEingangZahl0250VEingangsspannung der USV
output.voltageUPS.VoltAusgangZahl0250VAusgangsspannung der USV
ups.loadUPS.LastZahl0100%Last
ups.statusUPS.SourceZeichenkette---Spannungsquelle:
OB = USV
OL = Netz

Mit folgendem, per Zeitmodul oder CUxD-Timer ca. minütlich aufgerufenen Skript wird der Wert in die jeweilige Systemvariablen geschrieben…

RaspberryMatic USV

var vb = dom.GetObject("UPS.VoltBatterie");
string stdout;
string stderr;
system.Exec("upsc ep650@localhost battery.voltage", &stdout, &stderr);
vb.State(stdout);

Wer SystemExec nicht mag und den CUxD verwendet, kann das alternativ wie folgt erledigen lassen…

var vb = dom.GetObject("UPS.VoltBatterie");
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("upsc ep650@localhost battery.voltage");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
vb.State(dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State());

…und hier ein CUxD-Skript für alle genannten Werte…

var cb = dom.GetObject("UPS.CapBatterie");
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("upsc ep650@localhost battery.charge");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
cb.State(dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State());

var la = dom.GetObject("UPS.Last");
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("upsc ep650@localhost ups.load");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
la.State(dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State());

var us = dom.GetObject("UPS.Source");
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("upsc ep650@localhost ups.status");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
us.State(dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State());

var va = dom.GetObject("UPS.VoltAusgang");
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("upsc ep650@localhost output.voltage");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
va.State(dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State());

var vb = dom.GetObject("UPS.VoltBatterie");
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("upsc ep650@localhost battery.voltage");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
vb.State(dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State());

var ve = dom.GetObject("UPS.VoltEingang");
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("upsc ep650@localhost input.voltage");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
ve.State(dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State());

Netzbetrieb:

RaspberryMatic USV

USV-Betrieb:

RaspberryMatic USV

Integration der Daten in aio NEO

Um eine Übersicht der USV-Parameter im aio NEO Frontend zu erhalten, wurden diese wie folgt integriert…

Netzbetrieb:

RaspberryMatic USV

USV-Betrieb:

RaspberryMatic USV

Dabei wurde dem Ladestand des Akkus „UPS.CapBatterie“ diese Stausregel hinterlegt…

RaspberryMatic USV

Für die Betriebsart der USV (Netz/USV) wurde der Wert „UPS.VoltEingang“ mit dieser Stausregel verwendet…

RaspberryMatic USV

…, da die Eingangsspannung der EP 650 SP im USV-Betrieb ca. 10 V beträgt…

RaspberryMatic USV

Man kann alternativ auch den Wert „UPS.Source“ benutzen.

Nachricht per Pushover verschicken

Da mit jedem Wechsel von Netz- in USV-Betrieb und vice versa die „Alarmzone 1“ der RaspberryMatic aktiviert wird…

RaspberryMatic USV

RaspberryMatic USV

…, lasse ich mir mit folgendem Programm…

RaspberryMatic USV

…über dieses Skript…

string tmpN;
string tmpO = system.Date("%d.%m.%Y, %T");
tmpN = "%C3%84nderung bei der Stromversorgung seit (" # tmpO # ")!!";
string tmpP;
string tmpQ = "";
foreach(tmpP, tmpN.Split(" ")) {
tmpQ = tmpQ # "+" # tmpP;
}
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("extra/curl -s -d token=TOKEN -d user=USER -d message='"#tmpQ#"' -d priority=2 -d retry=30 -d  expire=3600 -d sound=persistent  http://api.pushover.net/1/messages.json");

eine Pushover-Nachricht senden…

RaspberryMatic USV

 

Bitte beachten...

SMART WOHNEN by sTeRn AV ist ein rein privates Projekt. Support kann ich daher nur im Rahmen meiner begrenzten Freizeit leisten, hierfür bitte ich um Verständnis. Meine Hinweise, Anleitungen, Schaltungen und Software werden so angeboten, „wie sie sind“. Die Verwendung erfolgt auf eigenes Risiko, ich übernehme hierfür keinerlei Gewährleistung bzw. Haftung.
Creative Commons Lizenzvertrag
Copyright © Jens-Peter Stern | SMART WOHNEN by sTeRn AV | smart-wohnen.org

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

* Die Checkbox für die Zustimmung zur Speicherung ist nach DSGVO zwingend.

Ich akzeptiere