+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 16
  1. #1
    Registriert seit
    Jan 2007
    Ort
    Ostseeküste, da wo der Strand am weißesten und am breitesten ist
    Beiträge
    632

    Standard [Script] USV-Datenlog in IPS einlesen

    Hallo,
    nachfolgend als Ergebnis der Orkan-Emma-Vorsorge des letzten Wochenendes (endlich mal USV in Betrieb genommen, falls Strom wieder ausfällt...), ein Script, dass das Datenlog einer USV (im konkreten Beispiel: Smart-UPS von APC) in IPS-Variablen einliest.

    [edit 6.3.08:]Ergänzung: (APC-)USVs schreiben zwei Logs: Ein Datenlog und ein Eventlog. Dieser Artikel beinhaltet das Einlesen des Datenlogs. Hier dagegen ein Beispielscript zum Einlesen des Eventlogs der USV[/edit]

    Die Steuersoftware von APC heißt "Powerchute" und kann in der Basic-Version von APC.com kostenfrei nach Registrierung runtergeladen werden. Aktuelle Version: 7.0.5 Build 108. Es gibt auch ein Patch für Vista, ansonsten ist die Basic-Version im LAN auch remote betreibbar (getrennte Agent-Server-Client-Architektur, auch mehrere USV-gepufferte Maschinen=Agents mit einem Powerchute-Server managebar)

    Das Powerchute selbst, das natürlich erstmal als Hauptaufgabe das "geordnete Herunterfahren, falls Batterie dann auch leer ist" usw. macht, legt zyklisch Daten-Records in ein Log auf den Server. Im Programm kann dazu u.a. der Bereinigungszyklus sowie die "Dichte der Signalaufzeichnung" eingestellt werden. (Zitat Help-Datei: "From a minimum of 10 seconds, through a maximum of 59 minutes (20 minutes is the default)."

    Was sind das für Daten:

    Die APC-USVs haben bereits einen internen Temperatursensor (per Offset: Aussage zur umgebenden Raumtemp.). Weiterhin werden pro Record z.B. aufgezeichnet: anliegende Spannung, gelieferte Spannung, Batteriespannung, "Load" also Last an der USV, Netzfrequenz usw. Ist natürlich alles für Serverraumüberwachung usw. gedacht, aber hier auch ganz nützlich, besonders wenn der IPS-Server "irgendwo klimarelevant untergebracht" stehen sollte. ...und man sowieso schon so eine USV zum Abfedern von Stromausfällen bzw. -aussetzern und -schwankungen in Betrieb hat.

    Schließt man optionale APC-Sensoren an die USV an, kann man sogar Daten zur Feuchtigkeit und weitere externe Temp-Werte bekommen, die ebenfalls in dieses Log einfließen.

    Mein Ziel ist vor allem, Aussagen zur Qualität der gelieferten Spannung zu bekommen. Z.B. ist es im regionalen Umfeld in letzter Zeit üblich geworden, statt 230V insbesonders nachts regelmäßig >240V zu liefern. Wenn man bedenkt, das die Rotation der Zähler-Scheibe spannungsabhängig zunimmt.... Ich möchte (erstmal) zumindest ein Auge drauf haben können, wo sich IPS und WIIPS natürlich automatisch anbieten.

    Das Log wird im folgenden Script zyklisch ausgelesen sowie recordweise (=alle Werte einer Zeile im Log) in Variablen gelegt. Die 4-Sekunden-Verzögerung ("sleep(4)") am Ende der Schleife bewirkt, dass bei evtl. mehreren zwischenzeitlich als "neu" aufgelaufenen und zu verarbeitenden Records dazwischen genügend Zeit bleibt, um diese durch andere Scripts weiter zu verarbeiten (z.B. per "OnUpdate" getriggert in Datenbank eintragen o.ä.)

    Eine Besonderheit ist die Variable "UPS.Datalog.lastTs". Diese hält den Zeitstempel (=Timestamp), bezogen auf die Record-Logzeit der letzten erfolgreich eingelesenen Log-Zeile. Also wenn die letzte erfolgreich gelesene Zeile den Zeitstempel "01.03.2008 10:38:15" hatte, werden im nächsten Aufruf des Scripts nur nach darauf bezogen neueren Log-Zeilen gesucht und diese eingelesen.

    Damit ist das Script derart robust, dass selbst ein Abbruch wegen maximaler Script-Laufzeit von 150(?) Sekunden nichts ausmacht. Im nächsten Zyklus macht es einfach beim nächsten Log-Record weiter.

    Meine Funktion "SetValue()" ist übrigens eine Vereinfachung bzgl. der unterschiedlichen Typen (Int, Boolean, Float, String), die darin automatisch erkannt werden. Außerdem werden auch gleich, wenn noch nicht vorhanden, passende Variablen im IPS anzulegen. Wenn ich Paresy richtig verstanden habe auf dem IPS-Together, ist das ja bei V2.0 dann ohnehin so.
    [Edit]"SetValue()" steht einen Beitrag tiefer![/EDIT]

    Wer das nicht hat/will: einfach aus "SetValue()" dann "SetValueFloat()" oder "SetValueInteger()" machen.

    Ebenfalls in der Include-Datei "_globals.ips.php":
    - semaset() und semareset() = Semaphoren-Handling
    - Bildung der Variable "$myself" = Scriptname
    Wer es nicht braucht: einfach auskommentieren.

    Viel Spass damit
    Gerd

    PHP-Code:
    <?
    /*
    *******************************
     IP-SYMCON Event Scripting
    *******************************
    File     : readApcLog.ips.php
    Trigger  : ---
    Interval : Zyklus wie Zeitabstand UPS-Data-Log  (Default 20 min = 1200 Sec)

    APC Powerchute Data Log einlesen

    Rel. 1   GW    01.03.2008

    */

    include "_globals.ips.php";
    semaset($myself10000);

    if (!
    IPS_VariableExists("UPS.Datalog.Path")) {    // wenn Variable fehlt: anlegen
       
    IPS_CreateVariable("UPS.Datalog.Path""String");
       
    SetValueString("UPS.Datalog.Path""c:\Programme\APC\PowerChute Business Edition\agent\DataLog");
    }
    $datei GetValueString("UPS.Datalog.Path");

    if (!
    IPS_VariableExists("UPS.Datalog.lastTs")) {    // wenn Variable fehlt: anlegen
       
    IPS_CreateVariable("UPS.Datalog.lastTs""Integer");
       
    SetValueInteger("UPS.Datalog.lastTs"0);
    }
    $lastTs GetValueInteger("UPS.Datalog.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("UPS.Data.MaxLineVoltage"makeFloat($dat[2]));
                   
    SetValue("UPS.Data.MinLineVoltage"makeFloat($dat[3]));
                   
    SetValue("UPS.Data.LineVoltage"makeFloat($dat[4]));
                   
    SetValue("UPS.Data.OutputVoltage"makeFloat($dat[5]));
                   
    SetValue("UPS.Data.BatteryVoltage"makeFloat($dat[6]));
                   
    SetValue("UPS.Data.OutputFrequency"makeFloat($dat[7]));
                   
    SetValue("UPS.Data.UpsLoad"makeFloat($dat[8]));
                   
    SetValue("UPS.Data.UpsInternalTemperature"makeFloat($dat[9]));
                   
    SetValue("UPS.Data.Ts"$zTs);
                   
    SetValue("UPS.Data.Time"date("d.m.Y"$zTs)." ".date("H:i:s"$zTs));
                   
    SetValue("UPS.Datalog.lastTs"$zTs);
                   
    sleep(4);
                }
             }
          }
       }
    }

    semareset($myself);

    function 
    makeFloat($wert) {
       return 
    floatval(preg_replace("/,/""."$wert));
    }
    ?>
    Geändert von gwanjek (06.03.08 um 11:31 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

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

    Standard ...und hier die "SetValue()"-Funktion

    ok... Vielleicht auch in anderem Zusammenhang mal ganz nützlich. Deshalb hier nun die "SetValue()"-Funktion:

    - trägt übergebenen Wert in eine IPS-Variable ein
    - erkennt selber welchen Typ die einzutragene Variable haben muß
    - legt notfalls eine Variable an
    - erkennt Typkonflikte bei schon bestehenden Variablen --> Log / Returncode

    ACHTUNG:
    - die Funktion "loggen()" (4.letzte Zeile) anpassen oder notfalls auskommentieren

    Viel Spass damit
    Gerd

    PHP-Code:
    function SetValue ($var$wert) {   // Variable setzen, wenn Variable fehlt: anlegen
    // GW   1/2008
       
    $typErr "";
       
    $strFlag false;
       if (
    is_string($wert)) {
          
    $strFlag true;
       }
       if ((!
    $strFlag) and (is_numeric($wert))) {
          if (
    is_int($wert)) {
             if (!
    IPS_VariableExists($var)) {
                
    IPS_CreateVariable($var"Integer");
             }
             
    $vTyp IPS_GetVariableType($var);
             if (
    $vTyp == "Integer") {
                
    SetValueInteger($var$wert);
             } else {
                
    $typErr "Integer";
             }
          } else {
             if (!
    IPS_VariableExists($var)) {
                
    IPS_CreateVariable($var"Float");
             }
             
    $vTyp IPS_GetVariableType($var);
             if (
    $vTyp == "Float") {
                
    SetValueFloat($var$wert);
             } else {
                
    $typErr "Float";
             }
          }
       } elseif ((!
    $strFlag) and (is_bool($wert))) {
          if (!
    IPS_VariableExists($var)) {
             
    IPS_CreateVariable($var"Boolean");
          }
          
    $vTyp IPS_GetVariableType($var);
          if (
    $vTyp == "Boolean") {
             
    SetValueBoolean($var$wert);
          } else {
             
    $typErr "Boolean";
          }
       } else {
          
    $strFlag true;
       }
       if (
    $strFlag) {
          if (!
    IPS_VariableExists($var)) {
             
    IPS_CreateVariable($var"String");
          }
          
    $vTyp IPS_GetVariableType($var);
          if (
    $vTyp == "String") {
    #echo $wert;
             
    SetValueString($var$wert);
          } else {
             
    $typErr "String";
          }
       }
       
    $rc true;
       if (
    strlen($typErr) > 0) {
          
    loggen("Variable \"".$var."\" vom falschen Typ! Ist/Soll(Wert): ".$vTyp." / ".$typErr." (\"".$wert."\")"$myself);
          
    $rc false;
       }
       return 
    $rc;

    Geändert von gwanjek (03.03.08 um 13:02 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. #3
    Registriert seit
    Jun 2007
    Beiträge
    255

    Hallo Gerd

    > (im konkreten Beispiel: Smart-UPS von APC)

    Welches Modell hast Du denn genau?

    VG
    Stephan

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

    Zitat Zitat von StephanBonn Beitrag anzeigen
    Hallo Gerd

    > (im konkreten Beispiel: Smart-UPS von APC)

    Welches Modell hast Du denn genau?

    VG
    Stephan
    Ich habe sie im Moment nicht vor der Nase, aber es war (soweit ich mich erinnere) eine Smart UPS 1000VA. Ist schon älter und Akku auch schon mal ausgetauscht, aber für die Software ist das egal.

    Das Powerchute ist das aktuellste, am Wochenende frisch bei APC gezogen. Das kann auch mit anderen Modellen von USVs umgehen, z.B. auch die "Matix"-Modelle usw. In der Fa. und bei Kunden haben wir das Powerchute auch mit noch anderen USV-Versionen im Einsatz, sowohl Rack-Modelle als auch Standalone, große wie kleine.

    Und erst das Powerchute holt und speichert ja die originalen Datenlogs, die ich dann mit dem Script ins IPS hole.

    Notfalls wäre das Datenformat anzupassen sowie evtl. der Pfad. Aber (ohne 100%-Garantie): diese Daten-Dateien gab es in dieser Form auch schon vor 10 Jahren sogar schon unter Novell, zumindest inhaltlich (evtl. Spalten nur getauscht) auch in dieser Form, Arbeitsweise und Syntax.

    Zu USV-Modellen anderer Hersteller kann ich jetzt nichts sagen, da ich diese nicht im Einsatz habe. Bietet sich nunmal an, das zentralisiert zu managen, ergo bleibts bei einem Hersteller. Aber wenn die zumindest eine Textdate mit Daten ablegen, sollte das ähnlich verarbeitbar sein. Und APC ist ja inzwischen auch für Privatuser erschwinglich und ohnehin sehr weit verbreitet.

    Bezugsquelle USV z.B.: http://www.alternate.de (dort: Hardware / Energie / USV)

    Gruß Gerd




    Gruß Gerd
    Geändert von gwanjek (04.03.08 um 12:12 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

  5. #5
    Registriert seit
    May 2006
    Ort
    Hannover
    Beiträge
    3,156

    PHP-Code:
       $zeilen liesFile($datei); 
    Machst du etwas besonderes bei "liesFile"?

    Schade das du nicht alle notwendigen Funktionen mit angibst .
    MfG Ralf

  6. #6
    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
    PHP-Code:
       $zeilen liesFile($datei); 
    Machst du etwas besonderes bei "liesFile"?

    Schade das du nicht alle notwendigen Funktionen mit angibst .

    Danke für den Tipp. War nicht beabsichtigt es vorzuenthalten und ich habe es schlichtweg übersehen. Die Function liegt natürlich auch in der Include-Datei.

    Ich bin es nunmal gewohnt, bestimmte Dinge zu zentralisieren, die ich an mehreren Stellen gebrauche. Dateien einlesen gehört da sicher dazu. Ist einfach eine Frage der Wartbarkeit von Software, sowas bedarfsweise nur an einer Stelle anpassen zu müssen.

    PHP-Code:
    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;

    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

  7. #7
    Registriert seit
    May 2006
    Ort
    Hannover
    Beiträge
    3,156

    Danke, passt schon . Ordentliche Strukturierung/Programmierung ist erheblich übersichtlicher.


    Allerdings führt der Start über "Execute" zum Dauerläufer für die maximale Scriptlaufzeit.
    Das muss ich mir heute Abend noch mal genauer ansehen.

    Immerhin werde die Variablen gesetzt .
    MfG Ralf

  8. #8
    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
    Allerdings führt der Start über "Execute" zum Dauerläufer für die maximale Scriptlaufzeit.
    Ä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 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. Das wird aber auch nur "ausgereizt", wenn viele neue Logeinträge nachzutragen sind, z.B. weil IPS aus war. Normalerweise liegt die Laufzeit im Bereich <1 Sekunde.

    Nicht mißverstehen! Das "Powerchute" ist ein eigener, von IPS unabhängiger Windows-Dienst mit eigener Client-Komponente zum Managen. Dieser stellt die Schnittstelle zwischen USV und Computer dar, nimmt also Befehle an von der USV, um z.B. den Rechner geordnet runterzufahren, wenn auch die USV-Batterie leer ist, oder weckt den Server wieder auf, sobald der Ladezustand das wieder erlaubt. "Nebenbei" schreibt dieser Dienst auch besagtes Datenlog, im Defaultfall alle 20 Minuten eine Zeile.

    Das o.g. Script arbeitet, IPS intern zyklisch gestartet, davon völlig unabhängig, und holt einfach zwischenzeitlich neu angefallene Daten ins IPS. Und das auch noch robust "Lücken aufarbeitend nach Ausfall".

    Sinn des Ganzen (neben IPS-Server-Anlagenüberwachung inkl. deren lokaler Temperatur): Daten zur im Haus anliegenden Stromversorgung bekommen, Spannung, Frequenz usw., und das über die gesamte Zeit, und direkt, wie es direkter nicht geht. Denn die USV liest sowas nunmal naturgemäß sehr genau
    Geändert von gwanjek (04.03.08 um 19:51 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

  9. #9
    Registriert seit
    Dec 2005
    Beiträge
    917

    Hallo Gerd,

    es gibt in PHP die Funktion file(...).

    Diese liest eine Datei zeilenweise in ein Array ein.

    Mir scheint sie tut dasselbe wie Deine Funktion liesFile(...).

    Ich selbst bin immer bestrebt vorhandene Funktionen zu verwenden, da diese meist wesentlich effizienter laufen als Skript-Code.


    Gruß
    HJH

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

    Zitat Zitat von HJH Beitrag anzeigen
    Hallo Gerd,

    es gibt in PHP die Funktion file(...).

    Diese liest eine Datei zeilenweise in ein Array ein.

    Mir scheint sie tut dasselbe wie Deine Funktion liesFile(...).

    Ich selbst bin immer bestrebt vorhandene Funktionen zu verwenden, da diese meist wesentlich effizienter laufen als Skript-Code.


    Gruß
    HJH
    tja, PHP ist für mich im Gegensatz zu anderen Sprachen eben immer noch Neuland. Da habe ich eben all die Befehle noch nicht "live drauf". Aber bei dem, was da im Listing der Function noch zu sehen ist, mag das sogar zutreffen, das die nun im Verhalten identisch ist zu einer Function des Standard-Sprachumfanges.

    Ich mache in der Function aber mehr, als hier im Print noch zu sehen ist, weil ich das andere rausgenommen habe, denn der Rest hat nichts mit der eigentlichen USV-Funktionalität zu tun. Stichwort: Datei ggf. nicht lokal sondern aus dem Netz holen und das auch noch evtl unterschieden nach LAN-Freigaben oder remote per FTP. Die Entscheidung darüber fällt anhand zur Laufzeit ermittelter Aussagen zur Systemumgebung und -konfiguration. Dafür gibt es sicher in Gänze keine "build in function".

    Anwendung findet die gleiche Function z.B. auch beim Verarbeiten von Bildern und AVIs, die CAMs zyklisch oder bei Bewegungserkennung ablegen. Und das kann schon mal woanders sein als auf der lokalen Maschine, die den Backgroundprozess durchführt (das Perl-Original auch noch zufällig verteilt bei Lastverteilung in Mehrserverumgebungen, Applikationsserver holen sich das dann selbstentscheidend von der Datei-Input-Maschine ab). Dazu kommt dann noch diverses Logging- und Fehlerhandling.

    Bei USVs kann das m.E. auch zutreffen, denn es kann ja mehrere Maschinen geben, deren Datenlogs in ein IPS einfließen sollen.

    Aber damit wollte ich den "Normalanwender" nicht auch noch verwirren / mir die Option offenhalten, durch Verwendung dieser bei mir ja vorhandenen Function mir zumindest den Weg dazu bei dieser Anwendung nicht a priori zu verbauen.

    Es macht (für mich) also sehr wohl Sinn, diese gesondert und zentralisiert in einer Include zu halten. Und jedem anderen steht es frei, das bei sich anzupassen.

    Gruß Gerd
    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