Buderus KM200 Kommunikationsmodul

Begonnen von Sailor, 21 Juli 2014, 12:39:47

Vorheriges Thema - Nächstes Thema

Sailor

Zitat von: DLindner am 03 März 2015, 13:18:50
Eigendlich doch:



#!/usr/bin/perl

use strict;
use warnings;
my $number="3.14";
#my $number="-3.14";
#my $number="TeddyBaer";

if ( $number =~ /^\d.+$/) {
      $number = $number*1;
      print "Zahl: $number\n";
} else {
        print "String: $number\n";
}


Beide Pi-Zahlen müssen bei " print "Zahl:" rauskommen
Nur TeddyBaer darf bei " print "String:" rauskommen.

Gruss
    Sailor
******************************
Man wird immer besser...

DLindner

#571
Ich denke ich habe den Ausdruck:

if ( $Value =~ /^[0-9.-]+$/ ) {
                    Zahl      }
    else {
                    String    }


Erkennt positive, wie negative Zahlen. Ein alpha-Zeichen an irgendeiner stelle ergibt String. In der letzten Version ist -3.13b boch als Zahl erkannt worden.


Sailor

H DLindner

Zitat von: DLindner am 03 März 2015, 14:41:51
Ich denke ich habe den Ausdruck:

if ( $Value =~ /^[0-9.-]+$/ ) {
                    Zahl      }
    else {
                    String    }


Erkennt positive, wie negative Zahlen. Ein alpha-Zeichen an irgendeiner stelle ergibt String. In der letzten Version ist -3.13b boch als Zahl erkannt worden.


Danke, probiere ich aus

Gruss
    Sailor
******************************
Man wird immer besser...

DLindner

nach Get km200 /notification gibt das System eine Liste von gespeicherten Fehlern der Heizung aus, werden aber derzeit nicht ausgegeben. Ist das ein Problem der readingGroups-Definition?

Sailor

An alle:

Version 0042 ist raus.

a) Neue Services aufgenommen
b) Bug um das Zurücklesen der geschriebenen Werte gefixt. Liest jetzt wirklich nochmal aus und gibt bei Unterschied zwischen IST und SOLL eine Fehlermeldung aus.
c) Schreiben von numerischen Werten klappt jetzt.

Anmerkung:

Bei mir funktioniert das beschreiben des Services "/system/heatSources/hs1/fuel/caloricValue" mit einem numerischen Wert tadelos.
Das Beschreiben der Services
"/heatingCircuits/hc1/temperatureLevels/comfort2"
" /heatingCircuits/hc1/temperatureLevels/eco"
mit einem numerischen Wert funktioniert hingegen nicht.

Gebt mir mal Rückmeldung wie es bei Euch mit numerischen Werten aussieht.

Gruss
    Sailor
******************************
Man wird immer besser...

Sailor

Hallo DLindner

Zitat von: DLindner am 04 März 2015, 21:39:13
nach Get km200 /notification gibt das System eine Liste von gespeicherten Fehlern der Heizung aus, werden aber derzeit nicht ausgegeben. Ist das ein Problem der readingGroups-Definition?

Das sieht interessant aus!

Kannst Du mir die Ausgabe noch mal als Text geben, damit ich das zwecks Lesbarkeit ein bisschen im Texteditor sortieren kann.
Die Ausgabe hat mich neugierig gemacht - Das sieht nach JSON String aus, die vom KM200 kommen...

Muss ich mal genauer unter die Lupe nehmen.

Gruß
    Sailor
******************************
Man wird immer besser...

DLindner

#576
@Sailor:
get km200 /notifications
{"id":"/notifications","type":"errorList","recordable":0,"writeable":0,"values":[{"cat":"L","act":"H","dcd":"6A","ccd":227,"orig":"0","t":"2013-10-30T09:01:00"},{"cat":"L","act":"H","dcd":"6A","ccd":227,"orig":"0","t":"2013-10-30T07:27:00"},{"cat":"L","act":"H","dcd":"6A","ccd":227,"orig":"0","t":"2013-10-29T16:26:00"},{"cat":"L","act":"H","dcd":"6A","ccd":227,"orig":"0","t":"2013-10-28T18:15:00"},{"cat":"B","act":"H","dcd":"2E","ccd":207,"orig":"0","t":"2015-01-17T15:21:00"},{"cat":"A","act":"H","dcd":"A33","ccd":816,"orig":"34","t":"2015-02-22T11:57:00"},{"cat":"A","act":"H","dcd":"A16","ccd":816,"orig":"21","t":"2015-02-18T19:17:00"},{"cat":"A","act":"H","dcd":"A16","ccd":816,"orig":"21","t":"2015-02-18T18:48:00"},{"cat":"A","act":"H","dcd":"A16","ccd":816,"orig":"21","t":"2015-02-18T18:30:00"}]}

Kommentar:
Fehler 3E / 207 = Wasserdruck im Heizkreis kleiner 0.8 (?) bar.

Wäre schon toll wenn Du das hinkriegst, denn ich halte diese Werte für einer der wichtigsten Readings im Alltagsleben um Störungen frühzeitig erkennen zu können ( z.B.  mail-Info )

Noch eine Anmerkung zur NUM-Prüfung.

my $number="--1..1";
#$number =~ s/-+/-/g;
#$number =~ s/\.+/\./g;

if ( $number =~ /^[0-9.-]+$/) {
        $number *= 1;
        print "Zahl: $number\n";
} else {
        print "String: $number\n";
}

Dieses Beispiel ergibt: Argument "--1..1" isn't numeric in multiplication (*) at test.pm line 10.
Zahl: 0

Der Vergleich ergibt zwar Zahl aber perl kann nicht multiplizieren.
Man könnte noch die beiden auskommentierten Anweisungen reinbringen, die aus beliebig vielen . oder - nur exakt einen macht (--1..1 => -1.1), oder den Wert mit einer Fehlermeldung zurückweisen.
if ($number =~ m/-{2,}/ || $number =~ m/\.{2,}/) {
        print "Fehler\n"
}



Gruß DLindner

Sailor

Hallo DLindner

Zitat von: DLindner am 05 März 2015, 08:13:33
Wäre schon toll wenn Du das hinkriegst, denn ich halte diese Werte für einer der wichtigsten Readings im Alltagsleben um Störungen frühzeitig erkennen zu können ( z.B.  mail-Info )

Schau mer mal. Ich werde mir da heute Abend mal was überlegen...
Kannst Du mir Bitte mal den Auszug aus deinem Bedienerhandbuch (Oder den Link auf der Buderus Seite) geben, damit ich die Fehlercodes zuordnen kann?
Danke!


Zitat von: DLindner am 05 März 2015, 08:13:33
Noch eine Anmerkung zur NUM-Prüfung.

my $number="--1..1";
#$number =~ s/-+/-/g;
#$number =~ s/\.+/\./g;

if ( $number =~ /^[0-9.-]+$/) {
        $number *= 1;
        print "Zahl: $number\n";
} else {
        print "String: $number\n";
}

Dieses Beispiel ergibt: Argument "--1..1" isn't numeric in multiplication (*) at test.pm line 10.
Zahl: 0

Der Vergleich ergibt zwar Zahl aber perl kann nicht multiplizieren.
Man könnte noch die beiden auskommentierten Anweisungen reinbringen, die aus beliebig vielen . oder - nur exakt einen macht (--1..1 => -1.1), oder den Wert mit einer Fehlermeldung zurückweisen.
if ($number =~ m/-{2,}/ || $number =~ m/\.{2,}/) {
        print "Fehler\n"
}



Also wenn Jemand "--1..1" eingeben würde, wir der Wert als String belassen und das Modul gibt die Fehlermeldung an den User raus, dass der Wert nicht geschrieben warden konnte.
Mein Ansatz ist nicht, und sollte als Programmierer auch niemals sein, die falschen Eingaben eines Users zwecks Interpretations-Korrektur "hinzubiegen".
Entweder der User hat eine gültige Eingabe gemacht (String oder korrekte numerische Zahl) oder es gibt eine Fehlermeldung!

Hast Du Version 0042 schon getestet?

Gruss
   Sailor
******************************
Man wird immer besser...

DLindner

#578
ZitatAlso wenn Jemand "--1..1" eingeben würde, wir der Wert als String belassen und das Modul gibt die Fehlermeldung an den User raus, dass der Wert nicht geschrieben warden konnte.
Mein Ansatz ist nicht, und sollte als Programmierer auch niemals sein, die falschen Eingaben eines Users zwecks Interpretations-Korrektur "hinzubiegen".
Entweder der User hat eine gültige Eingabe gemacht (String oder korrekte numerische Zahl) oder es gibt eine Fehlermeldung!

Da hast Du vollkommen recht. Da es in diesem Fall zu einer Fehlinterpretation des Regex (er erkennt den Wert als Zahl und multipliziert diesen mit 1, was zu einem Perl-Fehler führt) kommt, kann man ja den Fehler vorher schon abfangen und eine Meldung ausgeben oder den Wert nicht multiplizieren (also als String behandeln).
Zitatif ($number =~ m/-{2,}/ || $number =~ m/\.{2,}/) {
        print "Fehler\n"
        return
} else ....

Getestet habe ich schon, funktioniert soweit prima.

Im Anhang findest zu eine Datei mit allen Fehlercodes.

Klaus Rubik

#579
Hallo Sailor

ich habe  einen neuen Buderus Öl-Brennwertkessel (Logano GB145) mit integrierter Netzwerkschnittstelle, leider bekomme ich diese mit deinem Modul nur teilweise in FHEM eingebunden.
Nach der Definition des Moduls erhalte ich im Log bei Verbose 5 folgende Meldungen:

2015.03.05 13:19:45 5: Heizkessel : km200 - Starting to define module with version: 0042
2015.03.05 13:19:45 5: Heizkessel : km200 - IPv4-address is valid                 : 192.168.0.160
2015.03.05 13:19:45 5: Heizkessel : km200 - Provided GatewayPassword provided as bareword has the correct length at least.
2015.03.05 13:19:45 5: Heizkessel : km200 - Provided PrivatePassword exists at least
2015.03.05 13:19:45 5: Heizkessel : km200 - Define H                              : HASH(0x2f6f760)
2015.03.05 13:19:45 5: Heizkessel : km200 - Define D                              : Heizkessel km200 192.168.0.160 rVPWWVTV4kVJrdxd <password>
2015.03.05 13:19:45 5: Heizkessel : km200 - Define A                              : 5
2015.03.05 13:19:45 5: Heizkessel : km200 - Define Name                           : Heizkessel
2015.03.05 13:19:45 5: Heizkessel : km200 - Define Adr                            : 192.168.0.160
2015.03.05 13:19:45 5: Heizkessel : km200 - decryptData2 - decipher_len           : 144
2015.03.05 13:19:45 5: Heizkessel : km200 - decryptData2 - deciphertext           : {"id":"/gateway/DateTime","type":"stringValue","writeable":0,"recordable":0,"value":"2015-03-05T13:19:23","allowedValues":["459350162"]}
2015.03.05 13:19:45 5: Heizkessel : km200_GetSingleService        : HASH(0x273b220)
2015.03.05 13:19:45 5: Heizkessel : km200 - /gateway/DateTime              : AVAILABLE
2015.03.05 13:19:45 5: Heizkessel : km200 - Internal timer for Initialisation of services started for the first time.
2015.03.05 13:19:50 5: Heizkessel : km200_ParseHttpResponseInit: Try to parse     : /
2015.03.05 13:19:50 5: Heizkessel : km200 - decryptData2 - decipher_len           : 0
2015.03.05 13:19:50 5: Heizkessel : km200 - decryptData2 - deciphertext           :
2015.03.05 13:19:50 4: Heizkessel : km200_ParseHttpResponseInit: / NOT available
2015.03.05 13:19:50 5: Heizkessel : km200_ParseHttpResponseInit    : response         :

2015.03.05 13:19:51 5: Heizkessel : km200_ParseHttpResponseInit: Try to parse     : /dhwCircuits
2015.03.05 13:19:51 5: Heizkessel : km200 - decryptData2 - decipher_len           : 208
2015.03.05 13:19:51 5: Heizkessel : km200 - decryptData2 - deciphertext           : {"id":"/dhwCircuits","type":"refEnum","references":[{"id":"/dhwCircuits/dhw1","uri":"http://192.168.0.160/dhwCircuits/dhw1"},{"id":"/dhwCircuits/dhw2","uri":"http://192.168.0.160/dhwCircuits/dhw2"}]}
2015.03.05 13:19:51 4: Heizkessel : km200_ParseHttpResponseInit - value not found for:/dhwCircuits
2015.03.05 13:19:51 5: Heizkessel : km200_ParseHttpResponseInit    : response         :
/tgEjOQSsjYISBqYvhk0NhWS6QKQdNfh3pBgot6fwbF+b986yAS9D2USbRnEc6ivLh0u6uhR19a9LOX2uiUIYIhidoxI7IbzOAmJchhtl0MSJKkn/TP8HstI4DJCMA09ZtZC+TP4MClqzPDzP25pdUJhJTMdh+9UM/86ErnueVquMVUfoo4xXPdMZ0W5sIPx0pzPfggRLHMAhT0TtFRBGIFRnWy/K1lLi1RQR8mLzZQkcx5nl1sCdo8oNMU17Fuv29thrDhvDq1Of1oAk3Y2Sg==
2015.03.05 13:19:51 5: Heizkessel : km200_ParseHttpResponseInit: Try to parse     : /dhwCircuits/dhw1
2015.03.05 13:19:51 5: Heizkessel : km200 - decryptData2 - decipher_len           : 368
2015.03.05 13:19:51 5: Heizkessel : km200 - decryptData2 - deciphertext           : {"id":"/dhwCircuits/dhw1","type":"refEnum","references":[{"id":"/dhwCircuits/dhw1/dhwOperationMode","uri":"http://192.168.0.160/dhwCircuits/dhw1/dhwOperationMode"},{"id":"/dhwCircuits/dhw1/dhwTimePrograms","uri":"http://192.168.0.160/dhwCircuits/dhw1/dhwTimePrograms"},{"id":"/dhwCircuits/dhw1/dhwSpLevels","uri":"http://192.168.0.160/dhwCircuits/dhw1/dhwSpLevels"}]}
2015.03.05 13:19:51 4: Heizkessel : km200_ParseHttpResponseInit - value not found for:/dhwCircuits/dhw1
2015.03.05 13:19:51 5: Heizkessel : km200_ParseHttpResponseInit    : response         :
/tgEjOQSsjYISBqYvhk0NjPR8Tob84cRP8vuy3R83V9yranoWapAchPQxokHtUxBkVgEcMy51Aa53HBsBPqyqOQHXmi82ENB7cvktUyi8Xs1i0lpDTvPgzk3c2ulslNFgR5t/dtYPII3QxuQk7xCULEdk/xn5LwuTn/NPWJQOwyUw4N0d9Dlu5hLohgCfv6tKPsO+FfOxq3I7Cc9/sqC976BWgl7ohuBVrSyuHFr0HrhUbdQjkLXrdiETkHuUwP7gQU9bGLQD3fH6lp31PCTYxIkqSf9M/wey0jgMkIwDT1m1kL5M/gwKWrM8PM/bml1dm6LSHFQvAZGaO2jVkwvNIIzCtVQwm8VPOsGwNrP3DeuMVUfoo4xXPdMZ0W5sIPx527bofgl3hpoE31aY7Bm8Ov4aHhr0Gf3Z7FmjJy2oYYbfU02ltlD8qh3Yih/R/ZEzxXfvs5MUrSbHkrsbIGjsGbCTi7+GigNuP5HPBibCRw=
2015.03.05 13:19:56 5: Heizkessel : km200_ParseHttpResponseInit: Try to parse     : /dhwCircuits/dhw1/operationMode
2015.03.05 13:19:56 2: Heizkessel : ERROR: Service: /dhwCircuits/dhw1/operationMode: No proper Communication with Gateway: read from http://192.168.0.160:80 timed out


Einzelne Werte kann mit get jedoch abfragen:
2015.03.05 13:24:10 5: Heizkessel : km200 - decryptData2 - decipher_len           : 144
2015.03.05 13:24:10 5: Heizkessel : km200 - decryptData2 - deciphertext           : {"id":"/gateway/DateTime","type":"stringValue","writeable":0,"recordable":0,"value":"2015-03-05T13:23:48","allowedValues":["459350162"]}
2015.03.05 13:24:10 5: Heizkessel : km200_GetSingleService        : HASH(0x218b9c0)


Das Device bleibt in FHEM im Status "Sounding..." stehen.

Irgendwelche Tipps?

Viele Grüße

Klaus
FHEM 6.0 auf RPI4 mit CUL868, AEOTEC, RFXTRX 433
CUL_WS  : S300TH              FHT         : FHT80B, FHT80TF
HMS        : HMS100-TF         FBDECT   : DECT!200, FRITZ!Powerline 546E
FS20       : FS20DI10, FS20ST, FS20WS1, FS20DU-2, FS20 FMS

Sailor

Hallo Klaus

Zitat von: Klaus Rubik am 05 März 2015, 13:25:43
Das Device bleibt in FHEM im Status "Sounding..." stehen.
Irgendwelche Tipps?

Nur ein Schnellschuss vorweg da zwischen Tür und Angel: Setze mal das Attribut "PollingTimeout" auf 20 und "ConsoleMessage" auf 1.

Öffne ein Konsolenfenster und gebe die Befehle

sudo Service fhem stop
sudo Service fhem start


und kopiere mal den Inhalt der Konsole ins Forum.

Gruss
    Sailor
******************************
Man wird immer besser...

Klaus Rubik

Hallo Sailor,

danke für die schnelle Reaktion, hier der Output:

1. FHEM-Log:
2015.03.05 14:32:51 5: Heizkessel : km200_ParseHttpResponseInit: Try to parse     : /
2015.03.05 14:32:51 5: Heizkessel : km200 - decryptData2 - decipher_len           : 0
2015.03.05 14:32:51 5: Heizkessel : km200 - decryptData2 - deciphertext           :
2015.03.05 14:32:51 4: Heizkessel : km200_ParseHttpResponseInit: / NOT available
2015.03.05 14:32:51 5: Heizkessel : km200_ParseHttpResponseInit    : response         :

2015.03.05 14:32:51 5: Heizkessel : km200_ParseHttpResponseInit: Try to parse     : /dhwCircuits
2015.03.05 14:32:51 5: Heizkessel : km200 - decryptData2 - decipher_len           : 208
2015.03.05 14:32:51 5: Heizkessel : km200 - decryptData2 - deciphertext           : {"id":"/dhwCircuits","type":"refEnum","references":[{"id":"/dhwCircuits/dhw1","uri":"http://192.168.0.160/dhwCircuits/dhw1"},{"id":"/dhwCircuits/dhw2","uri":"http://192.168.0.160/dhwCircuits/dhw2"}]}
2015.03.05 14:32:51 4: Heizkessel : km200_ParseHttpResponseInit - value not found for:/dhwCircuits
2015.03.05 14:32:51 5: Heizkessel : km200_ParseHttpResponseInit    : response         :
/tgEjOQSsjYISBqYvhk0NhWS6QKQdNfh3pBgot6fwbF+b986yAS9D2USbRnEc6ivLh0u6uhR19a9LOX2uiUIYIhidoxI7IbzOAmJchhtl0MSJKkn/TP8HstI4DJCMA09ZtZC+TP4MClqzPDzP25pdUJhJTMdh+9UM/86ErnueVquMVUfoo4xXPdMZ0W5sIPx0pzPfggRLHMAhT0TtFRBGIFRnWy/K1lLi1RQR8mLzZQkcx5nl1sCdo8oNMU17Fuv29thrDhvDq1Of1oAk3Y2Sg==
2015.03.05 14:32:51 5: Heizkessel : km200_ParseHttpResponseInit: Try to parse     : /dhwCircuits/dhw1
2015.03.05 14:32:51 5: Heizkessel : km200 - decryptData2 - decipher_len           : 368
2015.03.05 14:32:51 5: Heizkessel : km200 - decryptData2 - deciphertext           : {"id":"/dhwCircuits/dhw1","type":"refEnum","references":[{"id":"/dhwCircuits/dhw1/dhwOperationMode","uri":"http://192.168.0.160/dhwCircuits/dhw1/dhwOperationMode"},{"id":"/dhwCircuits/dhw1/dhwTimePrograms","uri":"http://192.168.0.160/dhwCircuits/dhw1/dhwTimePrograms"},{"id":"/dhwCircuits/dhw1/dhwSpLevels","uri":"http://192.168.0.160/dhwCircuits/dhw1/dhwSpLevels"}]}
2015.03.05 14:32:51 4: Heizkessel : km200_ParseHttpResponseInit - value not found for:/dhwCircuits/dhw1
2015.03.05 14:32:51 5: Heizkessel : km200_ParseHttpResponseInit    : response         :
/tgEjOQSsjYISBqYvhk0NjPR8Tob84cRP8vuy3R83V9yranoWapAchPQxokHtUxBkVgEcMy51Aa53HBsBPqyqOQHXmi82ENB7cvktUyi8Xs1i0lpDTvPgzk3c2ulslNFgR5t/dtYPII3QxuQk7xCULEdk/xn5LwuTn/NPWJQOwyUw4N0d9Dlu5hLohgCfv6tKPsO+FfOxq3I7Cc9/sqC976BWgl7ohuBVrSyuHFr0HrhUbdQjkLXrdiETkHuUwP7gQU9bGLQD3fH6lp31PCTYxIkqSf9M/wey0jgMkIwDT1m1kL5M/gwKWrM8PM/bml1dm6LSHFQvAZGaO2jVkwvNIIzCtVQwm8VPOsGwNrP3DeuMVUfoo4xXPdMZ0W5sIPx527bofgl3hpoE31aY7Bm8Ov4aHhr0Gf3Z7FmjJy2oYYbfU02ltlD8qh3Yih/R/ZEzxXfvs5MUrSbHkrsbIGjsGbCTi7+GigNuP5HPBibCRw=
2015.03.05 14:33:11 5: Heizkessel : km200_ParseHttpResponseInit: Try to parse     : /dhwCircuits/dhw1/operationMode
2015.03.05 14:33:11 2: Heizkessel : ERROR: Service: /dhwCircuits/dhw1/operationMode: No proper Communication with Gateway: read from http://192.168.0.160:80 timed out


und hier der Output an der Konsole:
/etc/init.d/fhem start
Starting fhem...


Sounding and importing of services started
The following Service CANNOT be read                   : /
km200_ParseHttpResponseInit ERROR: read from http://192.168.0.160:80 timed out


Viele Grüße

Klaus
FHEM 6.0 auf RPI4 mit CUL868, AEOTEC, RFXTRX 433
CUL_WS  : S300TH              FHT         : FHT80B, FHT80TF
HMS        : HMS100-TF         FBDECT   : DECT!200, FRITZ!Powerline 546E
FS20       : FS20DI10, FS20ST, FS20WS1, FS20DU-2, FS20 FMS

grossi33

Hallo Sailor,

hattest Du nicht diese beiden Services implementiert: ???
/recordings/system/sensors/outdoorTemperatures/t1
/recordings/dhwCircuits
.... die fehlen noch in der 0042 :'(

Grossi33

DLindner

#583
Hallo grossi,

Zitat/recordings/system/sensors/outdoorTemperatures/t1

versuch's mal mit "/system/sensors/temperatures/outdoor_t1"

Dass die Services in die Readings aufgenommen wurden heißt ja nicht, dass sie auch funktionieren.  So wie ich die "recordings" interpretiere, werden diese für die interne Darstellung (RC30, RC35) geloggt, um die Temperaturkurven aufzuzeichnen.
Wenn ich get km200 /recordings/system/sensors/outdoorTemperatures/t1 in die Console eingebe kommt dies bei raus:
{"id":"/recordings/system/sensors/temperatures/outdoor_t1","type":"yRecording","writeable":9,"recordable":0,"recordedResource":{"id":"/system/sensors/temperatures/outdoor_t1","uri":"http://192.168.174.22/system/sensors/temperatures/outdoor_t1"},"interval":"","sampleRate":"","recording-type":"actual","recording":[]}

DLindner

#584
Hallo Sailor,

ich habe das Reading mal mit einem kleinen Perl-Script ein bisschen aufgearbeitet. Ich meine eine solche Ausgabe würde schon reichen.
ZitatKategorie: L Störungscode: 6A Zusatzcode: 227 Datum: 2013-10-30T09:01:00 <br>
Kategorie: L Störungscode: 6A Zusatzcode: 227 Datum: 2013-10-30T07:27:00 <br>
Kategorie: L Störungscode: 6A Zusatzcode: 227 Datum: 2013-10-29T16:26:00 <br>
Kategorie: L Störungscode: 6A Zusatzcode: 227 Datum: 2013-10-28T18:15:00 <br>
Kategorie: B Störungscode: 2E Zusatzcode: 207 Datum: 2015-01-17T15:21:00 <br>
Kategorie: A Störungscode: A33 Zusatzcode: 816 Datum: 2015-02-22T11:57:00 <br>
Kategorie: A Störungscode: A16 Zusatzcode: 816 Datum: 2015-02-18T19:17:00 <br>
Kategorie: A Störungscode: A16 Zusatzcode: 816 Datum: 2015-02-18T18:48:00 <br>
Kategorie: A Störungscode: A16 Zusatzcode: 816 Datum: 2015-02-18T18:30:00 <br>
Nicht glauben, dass ich es schon implementiert habe, dafür sind meine Perl-Kenntnisse zu oberflächlich (siehe Bild).