SUSV Hardware Rev 2.0 Integration in FHEM ohne Modul

Begonnen von Neitcom, 14 Januar 2017, 16:24:36

Vorheriges Thema - Nächstes Thema

Neitcom

Leider ist das bestehende SUSV Modul nicht mit der Hardware Revision 2.0 kompatibel.

Meine Kenntnisse des I²C-Bus  sind leider nicht ausreichend, um das bestehende Modul auf HW Revision 2.0 zu portieren.
Ich habe die Einbindung in FHEM nun wie folgt gelöst, vielleicht ist es ja für jemanden nützlich.


1.  Die SW der SUSV hat einen Schalter "mail", der bei Verlust der primären Spannung eine E-Mail versendet. Statt einer E-Mail schreibe ich ein Reading in FHEM.
2a. Darauf reagiert das Modul "Alarmanlage" und versendet eine Mail/SMS.
2b. Parallel reagiert darauf ein Notify, welches die myUtil Funktion "susv_status_chk" startet.
3. susv_status_chk  prüft in einer Schleife mit dem SUSV Schalter "status" ob der Strom wieder da ist. Ist dies nicht der Fall, wird ein Reading geschrieben, welches erneut das Notify auslöst.
4. Ist der Strom wieder da, wird ein anderes Reading geschrieben, welches die Alarmanlage triggert, die "Cancel" Aktion auszuführen.
5. Modul "Alarmanlage" versendet als "Cancel-Action" eine Mail/SMS.

Zusätzlich implementieren will ich noch einen weiteren Mailversand, wenn die Spannung unter 20% fällt. In diesem Fall soll eine Mail versendet werden "Shutdown des Systems steht bevor."

Die Schleife ist zwar mit Polling realisiert, der initiale Trigger allerdings nicht.  Polling findet also nur statt, wenn der Strom weg ist, insofern kann ich mit dieser Lösung ganz gut leben.
Die Lösung ist getestet mit HW Rev 2.0, FW 2.1, SW 2.1. Im Anhang ein Ablaufdiagramm.

Dazu sei noch gesagt, dass ich Anfänger in Perl und FHEM bin, einiges lässt sich bestimmt eleganter umsetzen.

Gruß,
Neitcom


######## Check susv -status for power source ############
sub
susv_status_chk
{
my $n = 0;
my $i ="";
my $stat_in = shift;
my $ret = "";
my $cmd = '/opt/susvd/susv -status';

my $p_source ="";
my $bat_cap ="";
my @stat_out = ();


#Execute command and fetch stdout
@stat_out = `$cmd`;

#For Testing: print stdout
#print $stat_in;

# foreach $i (@stat_out) {
# print "LINE $n: $i";
# $n=$n+1;
# }

#if current state is "Battery" go on, otherwise nothing to do
if ($stat_in eq "Battery") {

#Content of line 21
# * Powering Source: Primary     *
$p_source = $stat_out[21];

$p_source=~s/^[^:]*: //; # Remove "Powering Source: "
$p_source=~s/\*//;          # Remove trailing asterix
$p_source=~s/\s+$//;        # Remove trailing blanks

#Primary power back?
if ($p_source eq "Primary") {
fhem ("sleep 5;setreading susv powering_source Primary");
fhem ("setreading susv capacity ok");
Log 1, "SUSV Status: Primary Power returned.";
}

# Still on battery? start next cycle with delay, sleep has to be used as fhem cmd to avoid blocking

if ($p_source eq "Battery") {
fhem ("sleep 15;setreading susv powering_source Battery");

#Content of line 26
# * Battery capacity: 100.00%    *
$bat_cap = $stat_out[26];

$bat_cap=~s/^[^:]*: //;    # Remove "Battery capacity: "
$bat_cap=~s/\*//;          # Remove trailing asterix
$bat_cap=~s/\s+$//;        # Remove trailing blanks
$bat_cap=~s/\%//;          # Remove trailing percent

fhem ("setreading susv capacity $bat_cap");
Log 1, "SUSV Status: Still on battery, capacity $bat_cap";
}
}
# ToDo: Another email/SMS when power is belows 20%
}



Wallmeier

Das Modul I2C_SUSV unterstützt mittlerweile auch die Hardware Revision 2 der S.USV. Zu finden über den Thread - https://forum.fhem.de/index.php/topic,51664.msg521667.html#msg521667 .