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
  1. Hallo, versuche dies super Anleitung umzusetzen. Alle Eingaben werden akzeptiert.
    Leider bekomme ich bei:
    upsc ep650@localhost
    # Error: Connection failure: Connection refused
    diese Medung.

    was mache ich falsch ?
    MfG
    KHK

    • Hallo KHK,
      ich verstehe dich so, dass du die Fehlermeldung bekommst, wenn du dich über Putty an der RaspberryMatic anmeldest.
      Hast du dich als root angemeldet und in der Firewall der CCU die IP des Gerätes, von dem aus du zugreifst, freigegeben?
      Hast du Zugriff auf andere Befehle der RaspberryMatic über Putty?
      Grüße Jens

      • Peter Arens

        Hallo Jens,
        auf Grund des entspannten Umgangs hier erlaube ich mir die persönliche Anrede.
        Ich hoffe das ist so ok.
        Im Grunde habe ich das gleiche Problem wie KHK. Leider gibt es noch keine Rückmeldung zu
        Deiner Antwort.
        Ich kann mich in Putty einloggen und auch in den Verzeichnissen wechseln. Da ich ein neues
        Verzeichnis anlegen konnte, gehe ich davon aus, dass meine Berechtigungen ausreichend sind.
        Gestern habe ich die aktuelle RaspMatic-Version (3.47.18.20190918) eingespielt. Anschließend wollte ich dann endlich die USV verbinden. Mit meinem Laptop habe ich die USV, ein-schließlich USB-Kabel, erfolgreich getestet. Die Einstellungen habe ich anhand der ELV-Anleitung vorgenommen und dann den Rasp neu gestartet. Die Alarmmeldung sieht etwas anders aus als in der Anleitung, aber ich denke das liegt an der RaspMatic-Version.
        Leider kann ich hier keinen Screenshot einfügen:
        Alarmname : ep650@localhost.Alarm
        Alarmmeldung : NOCOMM
        Damit scheitern leider auch die Scripte zum Auslesen der Werte.
        Hast Du eine Idee was hier nicht korrekt sein könnte?
        Vielen Dank schon einmal im Voraus
        Peter (Anfänger)

  2. Peter Arens

    Hallo Jens,
    kaum macht man(n), in diesem Falle ich, alles richtig und schon klappt es.
    Nicht nur mit dem Nachbarn sondern auch mit der USV.
    In der usp.conf hatte ich eine Tippfehler {ep650] statt [ep650]. Nach Korrektur läuft auch das Script hervorragend.
    Vielen Dank für die ausführliche Anleitung.
    Gruß
    Peter

  3. Hallo Jens,
    ich möchte dieses Projekt mit der FSP PPF4800114 Fortron EP850 850VA/480W umsetzen (deine vorgeschlagene Variante ist aktuell nicht lieferbar) und damit meine Raspberrymatic (ELV-Charly) und mein Modem/Router (ConnextBox) damit versorgen.
    Wie lange (geschätzt) würden die beiden Geräte in etwa bei einem Stromausfall „durchhalten“?
    Deine Meinung wäre mir wichtig, bevor ich diese USV bestelle!
    Vielen Dank im Voraus
    LG
    Wolfgang

    • Hallo Wolfgang,

      leider kann ich dir da keine wirklich verlässliche Aussage liefern, da das Ganze sehr von der individuellen Last deiner Geräte abhängt und anscheinend auch der individuell eingebaute Typ/Hersteller des USV-Akkus eine Rolle spielt.

      Zum Vergleich kann ich aber aus Erfahrung berichten, dass meine EP-650 mit einer RaspberryMatic mit dem neuen Funkmodul und einer Fritzbox 7590 mit einem USB-Stick und einer externen Festplatte (als Last wird bei der EP-650 insgesamt 2 % angezeigt) schon einen Stromausfall von 35 Minuten problemlos überstanden hat. Die EP-850 sollte das bei deiner Konfiguration also mindestens auch schaffen. Diese Einschätzung ist natürlich ohne Gewähr 😉 .

      Einen längeren Stromausfall hatte ich bisher nicht und habe ihn auch noch nicht simuliert.

      Ich bin mir übrigens nicht ganz sicher, ob der EP-850 vom NUT-Server des RaspberryMatic unterstützt wird. Gelistet sind nur die beiden Modelle EP-650 und EP-1000. Vielleicht fragst du vor einer Bestellung zur Sicherheit mal im RaspberryMatic Forum nach.

      Liebe Grüße Jens

Schreibe einen Kommentar

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