Seite 3 von 3

Re: SUSV Auswertung über Callback Funktion

Verfasst: 11.11.2018, 22:23
von Black
joah, da hab ich dir geschrieben, das deine Sysvar "USV:Source" heissen wird, in meinem programm aber auf eine Zugegriffen wird, welche sich "USV.Source" nennt.(Ich nutz immer eine Punkt Notation bei mir) Damit griff das dom.GetObject ins leere --> Scriptabbruch

egal, kleine Ursache, grosse Wirkung..

tuts ja nun,

Black

Re: SUSV Auswertung über Callback Funktion

Verfasst: 13.11.2018, 09:50
von Depechem
Was leider nicht ausgegeben wird ist die mA Anzeige

Code: Alles auswählen

USV.CurrBatterier:
dort steht immer 0.00mA egal in welchem Strommodus!?
in der Shell Console wird bei Akkubetrieb der mA Verbrauch angezeigt.

und

Code: Alles auswählen

USV.System
"Versorgesystem der Raspimatik" gibt auch immer nur den Wert "Akku" an also wird nicht geändert, egal ob im Netz oder Akkumodus!?

Hast du noch eine Idee für mich an was dies liegen kann?

Gruß Thomas

Re: SUSV Auswertung über Callback Funktion

Verfasst: 13.11.2018, 10:08
von Black
guck ich mir zuhause mal an...

kannst mir aber im vorfeld mal gefallen tun:

Code: Alles auswählen

!- Kapazität der USV auslesen
!- Michael Thelen Januar 2018

!- Kapazität der USV auslesen (CallBack version benötigt noch programm CallBackExec11_SUSV)
!- Michael Thelen September 2018
!- Bash Kommandozeile zusammensetzen
!-
  string q= 's=$(/opt/susvd/susv -status|tr -s "*" " ");';
  q= q# 'b=${s#*Source: };list=${b%% *};';
  q= q# 'b=${b#*age in: };list=$list";"${b%% *};';
  q= q# 'b=${b#*capacity: };list=$list";"${b%%%*};';
  q= q# 'b=${b#*voltage: };list=$list";"${b%%V*};';
  q= q# 'b=${b#*Battery: };list=$list";"${b%% *};';
  q= q# 'echo $list';
  WriteLine (q);
!------------------------------
Für das programm mal bitte unter script testen aus.
Den string, wie shcon mal gehabt, dann mit ctrl-C kopieren, mit putty per SSH auf die CCU und dann führst du den string nach dem einfügen einmal im Normallauf und einmal im akkubetrieb aus. Poste mir dnan mal bitte beide male den Ausgabestring dann.

dann guck ich mir das zuhause mal in ruhe an, kann nix wildes sein eigentlich

eins hab ich jetzt schin direkt gesehen:
du hast noch eine Systemvariable falsch geschrieben.
die soll so heissen: USV.CurrBatterie

Re: SUSV Auswertung über Callback Funktion

Verfasst: 13.11.2018, 10:19
von Depechem
Danke dir, also Thema
" USV.CurrBatterie:" habe ich rausgefunden das war wieder ein Schreibfehler von mir :oops:

Nur beim Thema "USV.System" komme ich nicht ganz weiter. Ich weiß nicht was er da genau nimmt.

Skript teste ich gleich

Edit: es werden doch nur 5 Werte ausgegeben mit "USV.System" sind es doch aber 6 Systemvariablen!?
es geht ja eigentlich hierum:

Code: Alles auswählen

real usv=100.0; !- Einstellen Netzbetrieb
if (s=="Battery") {usv=r;}
dom.GetObject (ID_SYSTEM_VARIABLES).Get ("USV.System").State (usv);
WriteLine ("DONE");

Re: SUSV Auswertung über Callback Funktion

Verfasst: 13.11.2018, 10:33
von Black
In USV.System... das stammt noch aus einer Zeit, als die S.USV nicht so sauber funktionierte und die Raspberrymatik gar nicht herrunterfuhr.
Da hatte ich auhc mal ein Programm, welches bei unterschreitung einer Kapazität ein System.Save ausführte und dann ein runterfahren des raspberry.

Aus der zeit stammte die Sysvar.
eigentlich sollte da eine Zahl drinstehen. Bei Netzbetrieb 100%, bei Akkubetrieb die aktuelle kapazität. Die Systemvariable sollt ebei dir also eine Typ Zahl sein. Das war die entscheidungsvariante für das Down programm.

brauchen tuts die nicht, ist eine alte Leiche.

drum mach aus

Code: Alles auswählen

dom.GetObject (ID_SYSTEM_VARIABLES).Get ("USV.System").State (usv);
ein

Code: Alles auswählen

!-dom.GetObject (ID_SYSTEM_VARIABLES).Get ("USV.System").State (usv);
und lösch die sysvar (vorher aber noch aus eventuell startseite und der kanalzuordnung rausnehmen)

und gut is...

Black

Re: SUSV Auswertung über Callback Funktion

Verfasst: 13.11.2018, 11:27
von Depechem
Super Danke.
Kann ich bei "USV.Source" aus dem angezeigten Wert(Zeichenkette) "Primary" den Namen "Netzbetrieb" machen?

Und gibt es vorn auf der Starseite die Möglichkeit mit alle 5 USV Infos anzeigen zu lassen ohe das die Tastersymbole des EXEC_SUSV:11 mit angezeigt wird? Siehe Foto

Re: SUSV Auswertung über Callback Funktion

Verfasst: 13.11.2018, 12:28
von Black
gehen tut alles:

in quick and dirty in dem callback programm:

aus

Code: Alles auswählen

string s= sout.StrValueByIndex (";",0);
dom.GetObject (ID_SYSTEM_VARIABLES).Get ("USV.Source").State (s);
mache

Code: Alles auswählen

string s= sout.StrValueByIndex (";",0);
if (s=="Primary") {
   dom.GetObject (ID_SYSTEM_VARIABLES).Get ("USV.Source").State ("Netzbetrieb");
} else {
dom.GetObject (ID_SYSTEM_VARIABLES).Get ("USV.Source").State (s);
}

Re: SUSV Auswertung über Callback Funktion

Verfasst: 03.12.2018, 18:21
von Depechem
Hallo Black, ich dann nochmal wieder :)

ist es möglich noch eine Systemvariable der USV zusätzlich abzufragen?

Ich hätte gern den "Charging current" Wert (300mA) mit angezeigt.
Siehe Bild Ist dies möglich?

Re: SUSV Auswertung über Callback Funktion

Verfasst: 02.04.2019, 21:05
von Black
Auf Nachfrage, wie sich die S.USV unter IOBroker auslesen lässt,
- mein altes Script , lief auf einem ASUS Tinkerboard mit S.USV, bevor der Broker auf einen NUC umgezogen ist.

Code: Alles auswählen

var pfad            = "javascript.0.Systeminfos.SUSV.";
// Datenpunktnamen:
var idVin     = pfad + 'Vin';
var idCapBatt = pfad + 'Capacity';
var idSource  = pfad + 'Source';

function AktualisierenWerte () {
    exec('/opt/susvd/susv -status', function (error, stdout, stderr) {
        var erg;
        var reg= /Voltage in: (\d*\.?\d*)/gi;
        var match= reg.exec (stdout);
        if (match !== undefined && match !== null && match.length !== undefined) {
            erg= parseFloat (match [match.length-1]);
            setState (idVin,erg,true);
        }   
        reg= /ry capacity: (\d*\.?\d*)/gi;
        match= reg.exec (stdout);
        if (match !== undefined && match !== null && match.length !== undefined) {
            erg= parseFloat (match [match.length-1]);
            setState (idCapBatt,erg,true); 
        }    
        reg= /ing Source: ([a-zA-Z]*)/gi;
        match= reg.exec (stdout);
        if (match !== undefined && match !== null && match.length !== undefined) {
            erg= match [match.length-1];
            setState (idSource,erg,true); 
        }           
    });
}    

function AnlegensysVars () {
    createState (idVin, "", {
     name: 'Vin',
     desc: 'Volt eingehend',
     type: 'number',
     unit: 'V',
     role: 'object'
    });
    createState (idCapBatt, "", {
     name: 'Capacity',
     desc: 'Vapazität Akku',
     type: 'number',
     unit: '%',
     role: 'object'
    });    
    createState (idSource, "", {
     name: 'Source',
     desc: 'Versorgung Board',
     type: 'string',
     unit: '',
     role: 'object'
    });      
}   
  
AnlegensysVars ();

schedule("30 * * * * *", function () {
// Jede Minute zur 30. Sekunde
    AktualisierenWerte ();
});

nicht vergessen, exec muss im javascript Adapter erlaubt sein !