Ich betreibe 2 RaspberryPi mit S.SUSV.
Zum Auslesen nutze ich ein eigenes Script. Ist nicht fertig, wirds auch nie, aber ich bin ein Freund von unfertigen Dingen.
Vielleicht hilft es dem einen oder anderen:
<?
// Pi S.USV Werte auslesen von Audi2010 30.12.2016
// Kategorie anlegen, ID eintragen
// Script starten
//legt die Variablen automatisch an
// Profile müssen man. erstellt werden
$id_parent = 25279 /*[S.USV]*/;
exec("/opt/susvd/susv -status", $e); //Werte holen
// Zeit umwandeln in
$zeit = substr($e[17], 6, 24);
$e[17] = "* Zeit: " . strtotime($zeit). " *";
//Testausgabe um Zeilennummer anzuzeigen
//print_r ($e);
//Array abarbeiten Zeile für Zeile
$i = 0 ;
foreach ($e as $zeile) {
$pos = strpos($zeile, ":");
if( $pos <> 0 ) {
$name = substr($zeile, 2, $pos-2);
// echo $i . " Name = " . $name ."
";
$id = @IPS_GetVariableIDByName($name, $id_parent);
$wert = trim(substr($zeile, $pos+1, -2));
//Boolean
if ( ($i == 9) || ($i == 11) || ($i == 14) || ($i == 22) || ($i == 32)) {
$typ = 0 ;
if (($wert == "Enabled") || ($wert == "enabled") || ($wert == "ONLINE")) {
$wert = true ;
$profil = "AnAus";
}
else {
$wert = false ;
}
}
elseif (($i == 17) || ($i == 12) || ($i == 15) || ($i == 31) || ($i == 33) ) {
//Integer
$typ = 1;
$wert = intval(trim(substr($zeile, $pos+1, -2)));
}
elseif ( ($i == 25) ||($i == 27) ||($i == 23)||($i == 26)||($i == 28)||($i == 29)) {
//Float
$typ = 2 ;
$wert = floatval(trim(substr($zeile, $pos+1, -2)));
}
else {
//String
$typ = 3;
$wert = trim(substr($zeile, $pos+1, -2));
}
if ($id === false) {
anlegen($id, $typ, $id_parent, $zeile, $pos);
}
// echo "Wert = " . $wert ."
";
SetValue($id,$wert);
// echo $i . "Ende
";
}
$i++;
}
function anlegen($id, $typ, $id_parent, $zeile,$pos,$i) {
$id = IPS_CreateVariable($typ);
IPS_SetName($id, substr($zeile, 2, $pos-2)); // Variable benennen
IPS_SetParent($id, $id_parent); // Variable in die Kategorie bringen
IPS_SetPosition($id, $i); // Variable in der Kategorie nach Zeilennummer sortieren
}
?>
Übertragen vom Thema „USV für Raspberry Pi“, um es besser zu finden
BeLo
27. Januar 2017 um 11:39
2
das war mein Freitagsschmunzler
jnicke
16. September 2018 um 17:19
4
Hallo,
habe das Skript mal etwas überarbeitet.
<?
// Pi S.USV Werte auslesen von Audi2010 30.12.2016
// Kategorie anlegen, ID eintragen
// Script starten
//legt die Variablen automatisch an
// Profile müssen man. erstellt werden
// 14.09.2018 jnicke
// Anpassung an Windows sowie 2 Korrekturen
// $i um 1 erhöht und in Zeile 79 $i ergänzt
//SSH Login : Beginn
include('Net/SSH2.php');
// IP vom Raspberry
$ssh = new Net_SSH2('192.168.x.x');
//Anmeldeuser und Passwort für Raspberry nach UFT8 konvertieren
//nur mit UTF8 Einstellung klappt auch ein putty login
//ohne diese Konvertierung erscheint immer "Login Failed" auch hier per ssh->login
$username = utf8_encode( 'pi' );
$password = utf8_encode( 'xxxxxxxx' );
if (!$ssh->login($username, $password)) // Hier der echte Login
{
exit('Login Failed');
}
//SSH Login: Ende
$id_parent = 48423 /*[Hardware\Raspberry\Raspi.pivCCU2.70N\S.USV.60N]*/;
//exec("/opt/susvd/susv -status", $e); //Werte holen direkt auf PI
//#### unter Windows #################################################
$a = $ssh->exec("/opt/susvd/susv -status"); //Werte holen
//echo $a;
$e = explode( "
", $a); // Array aus der Meldung erstellen
//####################################################################
// Zeit umwandeln in
$zeit = substr($e[17], 6, 24);
$e[18] = "* Zeit: " . strtotime($zeit). " *";
//Testausgabe um Zeilennummer anzuzeigen
//print_r ($e);
//Array abarbeiten Zeile für Zeile
$i = 0 ;
foreach ($e as $zeile) {
$pos = strpos($zeile, ":");
if( $pos <> 0 ) {
$name = substr($zeile, 2, $pos-2);
//echo $i . " Name = " . $name ."
";
$id = @IPS_GetVariableIDByName($name, $id_parent);
$wert = trim(substr($zeile, $pos+1, -2));
//echo $i . " Wert = " . $wert ."
";
//Boolean
if ( ($i == 10) || ($i == 12) || ($i == 15) || ($i == 23) || ($i == 33)) {
$typ = 0 ;
if (($wert == "Enabled") || ($wert == "enabled") || ($wert == "ONLINE")) {
$wert = true ;
$profil = "AnAus";
}
else {
$wert = false ;
}
}
elseif (($i == 18) || ($i == 13) || ($i == 16) || ($i == 32) || ($i == 34) ) {
//Integer
$typ = 1;
$wert = intval(trim(substr($zeile, $pos+1, -2)));
}
elseif ( ($i == 26) ||($i == 28) ||($i == 24)||($i == 27)||($i == 29)||($i == 30)) {
//Float
$typ = 2 ;
$wert = floatval(trim(substr($zeile, $pos+1, -2)));
}
else {
//String
$typ = 3;
$wert = trim(substr($zeile, $pos+1, -2));
}
if ($id === false) {
anlegen($id, $typ, $id_parent, $zeile, $pos, $i);
}
// echo "Wert = " . $wert ."
";
SetValue($id,$wert);
// echo $i . "Ende
";
}
$i++;
}
function anlegen($id, $typ, $id_parent, $zeile,$pos,$i) {
$id = IPS_CreateVariable($typ);
IPS_SetName($id, substr($zeile, 2, $pos-2)); // Variable benennen
IPS_SetParent($id, $id_parent); // Variable in die Kategorie bringen
IPS_SetPosition($id, $i); // Variable in der Kategorie nach Zeilennummer sortieren
}
?>
JPaeper
17. September 2018 um 17:54
5
…gibt es hier auch als Modul. Zufriedenheit mit der Hardware ist aber etwas anderes. Es sind diverse Fehler in der Dokumentation, die Hardware selbst hängt sich dann auch gerne mal auf, da hilft dann nur komplett - inkl. Akku - vom Netz trennen. Im FHEM-Forum ein ähnlicher Tenor…
Hatte die Entwickler in zwei langen Mails explizit auf die Fehler zum einen, aber auch auf Verbesserungspotentiale zum anderen aufmerksam gemacht - bisher außer der Standardantwort aber leider keine Reaktion in Firmware und Dokumentation…
Schade eigentlich…
Joachim