+ Antworten
Seite 2 von 2 ErsteErste 1 2
Ergebnis 11 bis 16 von 16
  1. #11
    Registriert seit
    May 2006
    Ort
    Hannover
    Beiträge
    3,153

    Zitat Zitat von gwanjek Beitrag anzeigen
    Ähmmm.... Nix "execute":

    PHP-Code:
    include "_globals.ips.php"
    Includes werden zur Laufzeit Bestandteil des laufenden Scripts, so als wenn der Code da vorher reinkopiert worden wäre...
    Das war schon klar, habe ich natürlich auch so gemacht.

    Zitat Zitat von gwanjek Beitrag anzeigen
    Das Script selber hat einfach bei "Script Events" ein Timer-Interval von 1200 Sekunden bekommen, schneller kommen vom Powerchut eh keine neuen Daten. Da gibt es auch keinen "Dauerläufer", im Gegenteil, notfalls killt das die maximale PHP-Scriptlaufzeit ja sogar schon nach 150 Sekunden.
    Ich drücke zum Testen immer erstmal "execute".

    Test mit leerer Logdatei führt zur sofortigen Beendigung.

    Erster Test mit Inhalt, hier 4 Datensätze, beendet korrekt. Die weiteren auch.

    Das wird aber nicht lange so weitergehen, denn wenn ich das Script richtig verstehe liest du immer die komplette Datei ein und verarbeitest das Datumsfeld. Ist ja auch klar, du willst ja nur die Neuen.

    Zweiter Test mit 2000 Datensätzen (neuen) führt zum 150 Sekunden Timeout. Ist ja auch logisch, da 38*4 Sekunden mehr als 150 Sekunden sind.

    Ich passe mal die Zeiten und Mengen aufeinander an, dann sollte es klappen.


    Ich kann übrigens bei der Powerchute den Timer auf minimal 10 Sekunden stellen und die werden auch sofort ins Log geschrieben. Somit könnten schon Daten vor Ablauf der 1200 Sekunden kommen, sogar mehr wie das Script auf einmal verarbeiten kann .
    MfG Ralf

  2. #12
    Registriert seit
    Jan 2007
    Ort
    Ostseeküste, da wo der Strand am weißesten und am breitesten ist
    Beiträge
    632

    Zitat Zitat von ralf Beitrag anzeigen
    Zweiter Test mit 2000 Datensätzen (neuen) führt zum 150 Sekunden Timeout. Ist ja auch logisch, da 38*4 Sekunden mehr als 150 Sekunden sind.

    Ich passe mal die Zeiten und Mengen aufeinander an, dann sollte es klappen.
    Brauchst du nicht. Im nächsten Zyklus macht das Script da weiter in der Logdatei, wo es vorher abgebrochen war. Nach ein paar Zyklen pendelt sich das ein.

    Die eigentliche Verarbeitungszeit pro Record ist vernachlässigbar, sagen wir mal 1 Sek. Zusammen mit der 4 Sek Wartzezeit im sleep() am Ende der Schleife sind das 5 Sek pro Record. Also bekommst du pro Scriptaufruf und Timeout von 150 Sek. 30 Records rein, bei einem Zuwachs von 1.

    Zitat Zitat von ralf Beitrag anzeigen
    Das wird aber nicht lange so weitergehen, denn wenn ich das Script richtig verstehe liest du immer die komplette Datei ein und verarbeitest das Datumsfeld.
    Doch, wird es. Im Powerchute stellt man auch ein, nach welcher Zeit sich das Log "hinten" selbst bereinigt. Der kleinste Zyklus ist "täglich". Damit ist eine stets konstante Länge vorgegeben. USVs sind glücklicherweise auf unüberwachten Langzeitbetrieb getrimmt


    Zitat Zitat von ralf Beitrag anzeigen
    Ich kann übrigens bei der Powerchute den Timer auf minimal 10 Sekunden stellen und die werden auch sofort ins Log geschrieben. Somit könnten schon Daten vor Ablauf der 1200 Sekunden kommen, sogar mehr wie das Script auf einmal verarbeiten kann .
    Deswegen steht ja oben als Kommentar in Zeile 5:
    PHP-Code:
    /*
    ...
    Interval : Zyklus wie Zeitabstand UPS-Data-Log  (Default 20 min = 1200 Sec) 
    ...
    */ 
    Also: Zyklus des Scriptaufrufes an den im Powerchute eingestellten Daten-Schreib-Zyklus anpassen!

    Das Script verarbeitet soviel Records, wie es schafft vor Timeout. Im Neuen Zyklus macht es weiter. Wenn du es also alle 180 Sekunden (3 Min) neu starten läßt bei Timeout von 150 Sekunden, arbeitet es (wieder bei 4 Sek. Sleep) 600 Records in der Stunde.

    Ich bezweifle mal, das es sinnvoll ist, die Abtastrate für die anliegende Spannungs-Qualität derart hoch zu setzen. Es geht hier wie gesagt um das DATA-Log der USV, nicht etwa um das Event-Log, wo Ereignisse wie kurzzeitige Unter-/Überspannung, Selbsttest usw. drin stehen. Die kann man z.B. direkt aus dem Windows-Eventlog auslesen.

    Warum also derart hochfrequent abtasten? Alle 10 Sekunden ändert sich die Umgebungstemp. nicht wirklich. Auch Spannungshöhe und -Frequenz haben größere Zyklen.

    Weiterhin wenn z.B. Graphen im WIIPS erzeugt werden sollen, liegt die Abtastfrequenz des RRD-Datenloggers auch im Minutenbereich. Also würde ich die Inputwerte (ohne anderen triftigen Grund) nicht höherfrequent abtasten, da die überschüssig "zwischendurch reinkommenden" dann ohnehin redundant wären und verloren gingen, ohne das sie verarbeitet würden.

    Und selbst wenn es Anlass gäbe für noch höhere Abtastfrequenz:
    Man kann ja noch das Sleep in der Schleife selber niedriger setzen oder auch ganz rausnehmen, welches bei mir nur dazu dient, anderen Scripts sicher ermöglichen, per Output-Variablen getriggert, die her reinkommenden Daten recordweise weiter zu verarbeiten, z.B. bei mir: in Datenbank zu schreiben.

    Die Änderungszyklen der anliegenden Werte sind derart langsam, das man ohnehin alle Zeit der Welt hat, das auf diesen Weg sicherzustellen. Zwischendurch bleibt sogar Zeit genug, evtl. entstandene Lücken (mehrere unverarbeitete Records) aufzuarbeiten.

    ...Und dann könnte man sogar noch die maximale Scriptlaufzeit in der PHP.ini hochsetzen. Torro empfielt nach letztem WIIPS-Update da nun ohnehin 250 Sekunden. Aber vorsicht, da sind alle Scrupts von betroffen!

    Gruß Gerd
    Geändert von gwanjek (06.03.08 um 08:13 Uhr)
    V1 (60%), V2.5(40%), Kopplung per Client-/Server-Socket; MS-SQL; Server-OS: W7/64, XP, ~400 Komponenten (HM, EnOcean, HMS100, FS20, ISDN/GigaSet, Gardena, LevelJet, Wetter), PTZ-IP-CAMs; USV --- Interessen: Synerget. Anwendgn. (passive Klimatisierung, Szenarienerkennung und -steuerung, Look ahead, Datamining...), behindertenspezifische Unterstützungen und Absicherungen

  3. #13
    Registriert seit
    Jan 2007
    Ort
    Ostseeküste, da wo der Strand am weißesten und am breitesten ist
    Beiträge
    632

    Standard USV-Log lesen Teil 2: Eventlog lesen

    Hier nun als Ergänzung zum bisher beschriebenen Einlesen des Datenlogs, das Einlesen des Eventlogs. Um Irritationen bzgl. meiner speziellen Anpassungen zu vermeiden, lege ich es hier als "Prinzipstudie" mit "echo"-Ausgabe ab, die sich dann ja jeder selber an seine Bedürfnisse anpassen kann.

    Es gibt zwar auch ein eventlog-File, aber das hat ein spezielles Datenformat. Einfacher ist es, die Events direkt aus dem Windows-Eventlog auszulesen. Die Abfrage in MS-SQL-Syntax filtert bereits nach USV-spezifischen Einträgen.

    Gegebenenfalls ist der Inhalt der 1. Zeile
    $apcname = "APCPBEAgent";
    dafür anzupassen.

    PHP-Code:
    $apcname "APCPBEAgent";
    $WMIService = new COM("WinMgmts://./root/cimv2");
    $logItems $WMIService->ExecQuery("SELECT * FROM Win32_NTLogEvent WHERE SourceName='".$apcname."'""WQL"0x10 0x20);
    foreach (
    $logItems as $logItem) {
       echo 
    $logItem->TimeGenerated ': '.
            
    $logItem->EventCode ': ' .
            
    $logItem->SourceName ': ' .
            
    $logItem->EventType ': ' .
            
    $logItem->Message"\n";

    Als Ergebnis erscheinen die (gegenüber dem Datenlog in Anzahl viel weniger) Zeilen des Eventlogs, welches ebenfalls im Powerchute bezüglich seiner maximalen Länge konfigurierbar ist (aber hier: maximale Anzahl Records; logisch, da ja ein Tages- oder Wochenbezug der Ereignisse unbestimmt ist)

    Hier das Beispiel, wie das Ergebnis mit obigem Script "roh eingelesen" aussieht:

    Code:
    20080302224000.000000+060: 1002: APCPBEAgent: 3: "Communications Established"
    20080302223953.000000+060: 3000: APCPBEAgent: 1: "Lost Communication With UPS"
    20080302223952.000000+060: 1002: APCPBEAgent: 3: "Communications Established"
    20080302223952.000000+060: 1001: APCPBEAgent: 3: "Monitoring Started"
    20080301192304.000000+060: 1004: APCPBEAgent: 3: "UPS Self-Test Passed"
    20080301182612.000000+060: 1002: APCPBEAgent: 3: "Communications Established"
    20080301182612.000000+060: 1001: APCPBEAgent: 3: "Monitoring Started"
    Da würden dann auch (so aufgetreten) die "momentary power sac"- oder "power failed, ups is switching to battery"-Meldungen erscheinen.

    Prinzipiell reichen die Zeitstempel (TimeGenerated) sowie die Message. Aber ich habe der Vollständigkeit halber mal andere Werte stehen lassen, vielleicht braucht das jemand.

    Ansonsten gibt es weitere Informationen zum Windows-Event-Log und seinen Feldern in der MS-Technet. Oder per Google.

    Technet-Beispiel in JScript (wegen der möglichen Parameter)

    Leider habe ich noch keinen Weg gefunden, zum dieses oder andere Logs eventgesteuert ins IPS einzulesen, also nicht erst evtl. zeitverzögert bis zum nächsten Zyklus verzögert zu lesen, bzw. ohne die sinnlose Last, es ständig in kurzen Zyklen laufen lassen zu müssen, obwohl tagelang nichts auftritt.

    Aber vielleicht hat da ja jemand anders eine Idee?

    Andererseits hat Powerchut u.a. auch den Benachrichtigungs-Kanal "eMail", der bei Angabe eines SMTP-Servers genau diese Meldungen als Events versendet, was mir wiederum ausreicht.

    Gruß Gerd
    Geändert von gwanjek (06.03.08 um 11:34 Uhr)
    V1 (60%), V2.5(40%), Kopplung per Client-/Server-Socket; MS-SQL; Server-OS: W7/64, XP, ~400 Komponenten (HM, EnOcean, HMS100, FS20, ISDN/GigaSet, Gardena, LevelJet, Wetter), PTZ-IP-CAMs; USV --- Interessen: Synerget. Anwendgn. (passive Klimatisierung, Szenarienerkennung und -steuerung, Look ahead, Datamining...), behindertenspezifische Unterstützungen und Absicherungen

  4. #14
    Registriert seit
    Oct 2007
    Beiträge
    18

    Sehr interessant,
    ich mache das schon eine Weile so, habe gerade vorgestern das Script angepasst. Von den hier genannten Problemen habe ich bisher nichts gemerkt. Zum Aufbereiten der Datei nehme ich $data = fgetcsv ($fp, 300, "\t")

    Visualisiert wird das ganze übrigens mit jpgraph.

    Gruß
    Maik
    [IMG][/IMG]

  5. #15
    Registriert seit
    Nov 2007
    Ort
    Weißensee/Thüringen
    Beiträge
    360

    hallo,

    da das script mit meinem ips (2.1) nichtmehr lief hier eine angepasste variante:
    einziger nachteil: die werte kommen als string raus, alle variablen müssen von hand angelegt und verändert werden!

    PHP-Code:
    <?

    //bitte setzen!

    $datei='c:\Programme\APC\PowerChute Business Edition\agent\DataLog'//Pfad zur DataLog von PowerChute
    $leistungusv=700//Wattzahl deiner USV (smart usv 1500 dann muss hier 1500 stehen) 


    function liesFile ($file) {
    // Zeilenweises Einlesen einer Textdatei in ein Array
       
    $lines = array();
       if (
    file_exists ($file)) {
          
    $msg file_get_contents($file);
          
    $lines explode("\n"$msg);    // nach Zeilenumbruch trennen
       
    }
       return 
    $lines;
    }






    $lastTs GetValueInteger(16021 /*[USV auslesen\lastts]*/ );
    $zTs 0;

    if (
    file_exists ($datei)) {
       
    $zeilen liesFile($datei);
       foreach (
    $zeilen as $zeile) {
          
    $zeile preg_replace("/\s+/""|"$zeile);
    //      echo $zeile."\n";
          
    $dat explode("|"$zeile);
          if (
    sizeof($dat) > 9) {
             if ((
    strpos($dat[0], "/") === 2) and (strpos($dat[1], ":") === 2)) {
                list(
    $monat$tag$jahr) = explode("/"$dat[0]);
                list(
    $stunde$minute$sekunde) = explode(":"$dat[1]);
                
    $zTs mktime($stunde$minute$sekunde$monat$tag$jahr);
    //            echo $zTs."\n";
                
    if ($zTs $lastTs)
                    {
    //               echo makeFloat($dat[2])."\n";
                   
    SetValue(45037 /*[USV auslesen\maxV]*/ $dat[2]);
                   
    SetValue(11032 /*[USV auslesen\minV]*/ $dat[3]);
                   
    SetValue(34713 /*[USV auslesen\lineV]*/ ,$dat[4]);
                   
    SetValue(51290 /*[USV auslesen\outV]*/ $dat[5]);
                   
    SetValue(31823 /*[USV auslesen\batV]*/ $dat[6]);
                   
    SetValue(36567 /*[USV auslesen\outFrequ]*/ ,$dat[7]);
                   
    SetValue(42094 /*[USV auslesen\load]*/ ,$dat[8]);
                   
    SetValue(39651 /*[USV auslesen\temp]*/ ,$dat[9]);
                   
    SetValue(38005 /*[USV auslesen\ts]*/ $zTs);
                   
    SetValue(59857 /*[USV auslesen\time]*/ date("d.m.Y"$zTs)." ".date("H:i:s"$zTs));
                   
    SetValue(16021 /*[USV auslesen\lastts]*/  $zTs);
                   
    SetValue(48890 /*[USV auslesen\loadVA]*/  ,($dat[8]*($leistungusv/100)));
                   
    SetValue(26175 /*[USV auslesen\akkustatus]*/  ROUND($dat[6]/0.27,0));

                   
                   

                }
             }
          }
       }
    }
    ?>
    vieleicht hilft es jemandem
    getestet mit einer smart ups 700 und selbst gelötetem kabel.

    natürlich basiert das script zu fast 99,9 prozent auf dem originalscript

    grüße
    danny
    Geändert von pinki99 (04.06.10 um 01:53 Uhr)

  6. #16
    Registriert seit
    Jan 2007
    Ort
    Ostseeküste, da wo der Strand am weißesten und am breitesten ist
    Beiträge
    632

    also bei mir läuft das auch unter 2.2 und Win7 ohne Probleme....

    Ok, die Variablen. Da habe ich mir natürlich eine Function geschrieben, die mit den alten Namen umgehen kann und notfalls Variable eben anlegt...

    Was aber anzupasen war bei neuer Installation des Powerchutes: Im Agent (nicht in der Konsole) kann man einstellen, welche Spalten der Output-Datei mit welchen Werten gefüllt werden sollen. Und die Defaulteinstellug war: Alle auf "Disabled"

    Da man natürlich erst nur in der Konsole sucht, dort dieser Punkt aber fehlt, kann das ganz schön verwirrend sein!

    Aber sonst gab es bisher hier keine Probleme

    Doch: APC hat die Lizenzbedingungen vom Powerchute geändert. Unter Win7 läuft nur noch V8.x und besser. Die Konsole gibt es bei V8 aber nur noch gegen Bares! Sprich: Kauflizenz!

    Workaround:
    Win7-Kiste als Sekundär-PC laufen lassen, also per hellgrauem SIMPLE signaling Kabel an Erweiterungs-Karte in USV (so man hat), und den Primär-Steuereingang (schwarzes SMART signaling Kabel) an eine XP-Machine, auf der auch die Vorversion (7.x) noch läuft, mit Konsole in der freien Basislizenz. Die andere Maschine mit dem V8-Agent wird in der V7-Konsole (bei mir) problemlos erkannt.

    Die Konsole brauche ich vor allem, um per dem dort vorhandenen Scheduler die Anlage sauber von der USV aus geplant rebooten zu können, also notfalls auch von der einen Maschine aus, die andere, remote nicht mehr erreichbare, rebooten. Von einem anderen Kontinent aus macht das dann besonders Spaß :-)
    Geändert von gwanjek (07.06.10 um 12:44 Uhr)
    V1 (60%), V2.5(40%), Kopplung per Client-/Server-Socket; MS-SQL; Server-OS: W7/64, XP, ~400 Komponenten (HM, EnOcean, HMS100, FS20, ISDN/GigaSet, Gardena, LevelJet, Wetter), PTZ-IP-CAMs; USV --- Interessen: Synerget. Anwendgn. (passive Klimatisierung, Szenarienerkennung und -steuerung, Look ahead, Datamining...), behindertenspezifische Unterstützungen und Absicherungen

Ähnliche Themen

  1. Newbie hat eine Frage! Mail per IPS?
    Von Xanon im Forum Allgemeine Diskussion
    Antworten: 7
    Letzter Beitrag: 14.10.10, 18:40
  2. Velleman USB Board - IPS "übersieht" Impulse
    Von UweP im Forum Haustechnik
    Antworten: 20
    Letzter Beitrag: 18.12.07, 12:22
  3. IPS runterfahren während Designer noch läuft !
    Von guyabano im Forum Dashboard
    Antworten: 11
    Letzter Beitrag: 14.01.07, 22:42
  4. Fernbedienung und IPS: Wie kann ich beides zur Steuerung verwenden?
    Von Budgreg im Forum Sonstige Funkkomponenten / Wetterstationen
    Antworten: 10
    Letzter Beitrag: 29.11.06, 09:11
  5. ips friert ein und kann nicht beendet werden
    Von pleibling im Forum Allgemeine Diskussion
    Antworten: 0
    Letzter Beitrag: 02.07.06, 14:24