S.USV beim RaspberryPi -> Daten auslesen

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

das war mein Freitagsschmunzler :smiley:

Super Sache. Danke

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
       }
?>

…gibt es hierauch 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