Buderus KM200 Kommunikationsmodul

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

Vorheriges Thema - Nächstes Thema

MatthiasG

Hallo Sailor,

Ich betreibe mein KM200 hinter einem DNAT, wodurch es mit einem Port != 80 angesprochen werden muss.
Das funktioniert prima, ich muss nur den Port mit angeben:
define Heating km200 1.2.3.4:81 xxxx-xxxx-xxxx-xxxx XXXXXXXX


Lediglich den Validitaetscheck musste ich um eine optionale Portangabe erweitern:
                ###START### Check whether IPv4 address is valid
-               if ($url =~ m/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/)
+               if ($url =~ m/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(:[0-9]{1,5})?$/)


Koenntest Du bitte diese kleine Erweiterung upstream mit aufnehmen?

Gruss,
Matthias

Rahmi

Habe versucht ein notify geschrieben ohne Auswirkung bei Fehler, bitte um Hilfe bzw. schreiweise

define Error_01_Mail_notify notify Buderus:/notifications/Error.*: {} 

Buderus:/notifications/Error.*: {set telegram message Heizung meldet Fehler}

attr Buderus event-on-update-reading .*notifications.*

Notify steht auf active, erzeuge ich ein Fehler ( Temp.Fühler abstöpseln ) keine Reaktion auf notify

set telegram message Heizung meldet Fehler sendet mir das Text, getestet am Handy auf Telegram 

Sailor

Hallo Matthias

Zitat von: MatthiasG am 05 November 2021, 23:38:22
Könntest Du bitte diese kleine Erweiterung upstream mit aufnehmen?

Eingecheckt!

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

xasher

Hallo zusammen,

habe gerade das neue Update gesehen. In diesem Zuge möchte ich nochmals bezüglich Firmware nachfragen und der Kindersicherung auf der Fritzbox.
Ist das Modul mit einer aktuellen Firmware kompatibel?
Ich verwende seit Beginn meiner Anlage diese Version:


gateway/versionFirmware    04.07.07


Die Frage für mich ist, warum die Kindersicherung drin ist? Bzw. ob ich das System mal updaten lassen kann und ob hinterher noch alles läuft.

VG
Alex

ergerd

Hallo Alex,

Ich habe die Version 04.06.07 und ich empfehle die Kindersicherung aktiv zu lassen.
Buderus denkt sich ständig etwas neues aus und im Nachhinein werden Readings vermisst.

LG
ergerd
FHEM auf RasPi 4, CUNO, ZigBee, 1Wire2WLAN, DS2423, C-Control II, Buderus KM200, LaCrosseGateway, PCA301, ConBee II, LuftdatenInfo, OneWireGW, Div. ESPs u. Shellys

MatthiasG

Zitat von: Sailor am 07 November 2021, 17:32:12
Hallo Matthias
Eingecheckt!
Gruß
    Sailor

Hallo Sailor,

Super, vielen Dank!

Gruss,
Matthias

maehole

Hallo zusammen,
ich kämpfe nun schon eine Weile mit meiner Buderus-Wärmepumpe und finde es toll, dass hier dieses Modul zur Verfügung gestellt wird. So ganz läuft es allerdings nicht, weil die Dame noch nicht wirklich auskunftsfreudig ist. Ich bekomme immer Fehlermeldungen dieser Art

2021.12.09 08:22:29 5: WLW196 : km200 - decryptData2 - decipher_len                : 0
2021.12.09 08:22:29 5: WLW196 : km200 - decryptData2 - deciphertext                :
2021.12.09 08:22:29 4: WLW196 : km200_ParseHttpResponseInit -  NOT available       : /

Vermute ganz stark, dass das ein Passwort-Problem ist. In der ersten Version enthielt mein Passwort aus der App ein @, da ist es schon wahrscheinlich, dass es zum Schluckauf kommt. Dann habe ich ein + genutzt (Nutzung von Sonderzeichen ist bei Passwort-Änderung vorgeschrieben), aber weiterhin kein Erfolg. Gibt es hier Erfahrungen, welche Sonderzeichen keine Probleme verursachen?

Danke schon im Voraus!

Sailor

Hallo maehole

Zitat von: maehole am 09 Dezember 2021, 10:49:46
Vermute ganz stark, dass das ein Passwort-Problem ist. In der ersten Version enthielt mein Passwort aus der App ein @, da ist es schon wahrscheinlich, dass es zum Schluckauf kommt. Dann habe ich ein + genutzt (Nutzung von Sonderzeichen ist bei Passwort-Änderung vorgeschrieben), aber weiterhin kein Erfolg. Gibt es hier Erfahrungen, welche Sonderzeichen keine Probleme verursachen?

Sorry, aber ohne ein list und einen kompletten Ausdruck auf verbose=5 kann ich keine Aussage machen.

So wie ich das damals festgestellt habe, gab es in der Vergangenheit nur Probleme mit den deutschen Umlauten.

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

maehole

Hallo Sailor,

danke für die schnelle Hilfsbereitschaft.
Mein device sieht so aus wie im Screenshot aus dem Anhang. Das Gatewaypasswort ist mir Bindestrichen gesetzt und das Internetpasswort wie in der App.

Abfragen verschiedener Parameter sehen im log eigentlich immer gleich aus:
2021.12.10 06:02:02 5: WLW196 : km200 - GetSingleService - service            : /dhwCircuits
2021.12.10 06:02:02 5: WLW196 : km200 - GetSingleService - url                : http://192.168.178.30/dhwCircuits
2021.12.10 06:02:02 5: WLW196 : km200 - GetSingleService - err                :
2021.12.10 06:02:02 5: WLW196 : km200 - GetSingleService - data               :

2021.12.10 06:02:02 5: WLW196 : km200 - decryptData2 - decipher_len                : 0
2021.12.10 06:02:02 5: WLW196 : km200 - decryptData2 - deciphertext                :
2021.12.10 06:02:02 4: WLW196 : km200_GetSingleService: /dhwCircuits NOT available
2021.12.10 06:02:02 1: PERL WARNING: Use of uninitialized value $option in pattern match (m//) at ./FHEM/73_km200.pm line 630.
2021.12.10 06:02:50 5: WLW196 : km200 - GetSingleService - service            : /system
2021.12.10 06:02:50 5: WLW196 : km200 - GetSingleService - url                : http://192.168.178.30/system
2021.12.10 06:02:50 5: WLW196 : km200 - GetSingleService - err                :
2021.12.10 06:02:50 5: WLW196 : km200 - GetSingleService - data               :

2021.12.10 06:02:50 5: WLW196 : km200 - decryptData2 - decipher_len                : 0
2021.12.10 06:02:50 5: WLW196 : km200 - decryptData2 - deciphertext                :
2021.12.10 06:02:50 4: WLW196 : km200_GetSingleService: /system NOT available
2021.12.10 06:05:09 5: WLW196 : No dynamic values available to be read. Skipping download.


Da kommen einfach keine Werte zurück. Könnte ich noch etwas vergessen haben, das mit dem Passwort nichts zu tun hat?
Grüße maehole

maehole

Hallo Sailor,
Ist aus meinen Informationen eine Erkenntnis zu ziehen, ob der Fehler bei mir liegt oder die Heizung einfach nicht sprechen möchte? Sind noch mehr Angaben notwendig?
Danke und viele Grüße
maehole

Sailor

Ho maehole

Zitat von: maehole am 19 Dezember 2021, 13:24:12
Ist aus meinen Informationen eine Erkenntnis zu ziehen, ob der Fehler bei mir liegt oder die Heizung einfach nicht sprechen möchte? Sind noch mehr Angaben notwendig?

Gibst du da auch wirklich 2 Passwoerter an?

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

maehole

Hallo Sailor,

ich denke ja, hier noch ein log nach etwas Rumprobieren heute Morgen.


2021.12.20 08:13:55 4: WLW196 : km200 - Starting to define module
2021.12.20 08:13:55 4: WLW196 : km200 - InternalTimer has been removed.
2021.12.20 08:13:55 4: WLW196 : km200 - IPv4-address is valid                  : 192.168.178.30
2021.12.20 08:13:55 4: WLW196 : km200 - Provided GatewayPassword provided as bareword has the correct length at least.
2021.12.20 08:13:55 4: WLW196 : km200 - Provided PrivatePassword exists at least
2021.12.20 08:13:55 4: WLW196 : km200 - Define H                               : HASH(0x2c95e08)
2021.12.20 08:13:55 4: WLW196 : km200 - Define D                               : WLW196 km200 192.168.178.30 MeinGatewayPasswort MeinAppPasswort
2021.12.20 08:13:55 4: WLW196 : km200 - Define A                               : 5
2021.12.20 08:13:55 4: WLW196 : km200 - Define Name                            : WLW196
2021.12.20 08:13:55 4: WLW196 : km200 - Define Adr                             : 192.168.178.30
2021.12.20 08:13:55 5: WLW196 : km200 - GetSingleService - service            : /gateway/DateTime
2021.12.20 08:13:55 5: WLW196 : km200 - GetSingleService - url                : http://192.168.178.30/gateway/DateTime
2021.12.20 08:13:55 5: WLW196 : km200 - GetSingleService - err                :
2021.12.20 08:13:55 5: WLW196 : km200 - GetSingleService - data               :


MeinGatewayPasswort ist der 16-stellige Code vom Controller, getrennt durch die Bindestriche. Die Bindestriche habe ich auch mit gesetzt in der Definition.
MeinAppPasswort ist das Passwort, welches mit der App funktioniert.

Viele Grüße und Danke für die Hilfe
maehole

Sailor

Hi maehole

Zitat von: maehole am 20 Dezember 2021, 13:00:21
ich denke ja, hier noch ein log nach etwas Rumprobieren heute Morgen.


2021.12.20 08:13:55 4: WLW196 : km200 - Starting to define module
2021.12.20 08:13:55 4: WLW196 : km200 - InternalTimer has been removed.
2021.12.20 08:13:55 4: WLW196 : km200 - IPv4-address is valid                  : 192.168.178.30
2021.12.20 08:13:55 4: WLW196 : km200 - Provided GatewayPassword provided as bareword has the correct length at least.
2021.12.20 08:13:55 4: WLW196 : km200 - Provided PrivatePassword exists at least
2021.12.20 08:13:55 4: WLW196 : km200 - Define H                               : HASH(0x2c95e08)
2021.12.20 08:13:55 4: WLW196 : km200 - Define D                               : WLW196 km200 192.168.178.30 MeinGatewayPasswort MeinAppPasswort
2021.12.20 08:13:55 4: WLW196 : km200 - Define A                               : 5
2021.12.20 08:13:55 4: WLW196 : km200 - Define Name                            : WLW196
2021.12.20 08:13:55 4: WLW196 : km200 - Define Adr                             : 192.168.178.30
2021.12.20 08:13:55 5: WLW196 : km200 - GetSingleService - service            : /gateway/DateTime
2021.12.20 08:13:55 5: WLW196 : km200 - GetSingleService - url                : http://192.168.178.30/gateway/DateTime
2021.12.20 08:13:55 5: WLW196 : km200 - GetSingleService - err                :
2021.12.20 08:13:55 5: WLW196 : km200 - GetSingleService - data               :


MeinGatewayPasswort ist der 16-stellige Code vom Controller, getrennt durch die Bindestriche. Die Bindestriche habe ich auch mit gesetzt in der Definition.
MeinAppPasswort ist das Passwort, welches mit der App funktioniert.

Danke für die Daten.
Ich kann mir das absolut nicht erklären.

Ich würde nochmals versuchen dein App-Passwort zurückzusetzen und neu einzugeben.
Verzichte dabei versuchsweise auf Sonderzeichen - Nur Groß/Kleinschreibung und Zahlen.
Und achte dabei genau auf die Eingabe.

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

maehole

Hallo Sailor,

vielen Dank für deinen Tipp. Ich habe das volle Programm aufgefahren und zwischendurch eine ganz neue Bosch-ID erstellt. Es hat 5 Anläufe gebraucht bis das System wenigstens in der App wieder verfügbar war. Aber nun klappt es auch mit deinem Modul. Herzlichen Dank nochmal und schöne Feiertage

Maehole

jual

#1844
Hallo Zusammen, Hallo liebe Energiedaten-Sammler,

nachdem es hier bereits auch schonmal diskutiert wurde und ich mich parallel versucht habe, bei github und iobroker schlauer zu machen, habe ich jetzt eine erste Lösung, wie man die Recordings auswerten kann.

Bei meinem ersten Versuch habe ich alle "Power" recordings ausgewertet. Entsprechende Links wurden hier ja auch schon mal gepostet. Ich bin mir aber nicht ganz sicher, ob die Daten bereits richtig ausgewertet werden. Buderus hat hier irgendwie eine seltsame Art, die Werte zu speichern. Das muß ich in den nächsten Tagen nochmal verifizieren oder es hat noch jemand eine Idee.

Für meine Tests habe ich das Modul 73_km200.pm leicht modifiziert. Das Problem war, dass die Services vom Typ "YRecording" bisher nicht ausgewertet wurden. Dies habe ich jetzt für die "Power"-Werte für den aktuellen Tag, den aktuellen Monat und das aktuelle Jahr umgesetzt. Der Service "/hs/actualPower" könnte man noch ausklammern.

Den nachfolgenden Code sollte man in die Funktion "km200_ParseHttpResponseInit($)" an der folgenden Stelle einbauen:

### Check whether the type is a systeminfo
elsif ($json -> {type} eq "systeminfo")
                {
                 ....
                }
HIER DEN NACHFOLGENDEN CODE EINBAUEN

           ### Check whether the type is unknown
else
                {


Diesen Code einbauen:

### Check whether the type is a recording and is a 'power' recording
elsif ($json -> {type} eq "yRecording" and ($json->{id} =~ /Power$/ or $json -> {interval} ne ""))
{
my $JsonId         = $json->{id};
my $JsonType       = $json->{type};

### Log entries for debugging purposes
Log3 $name, 5, $name. " : km200_ParseHttpResponseInit - value found for      : " .$Service;
Log3 $name, 5, $name. " : km200_ParseHttpResponseInit - id                   : " .$JsonId;
Log3 $name, 5, $name. " : km200_ParseHttpResponseInit - type                 : " .$JsonType;

#check if it is parent of recording values and build the interval services
if($json -> {interval} eq "")
{
### Log file entry for debugging
Log3 $name, 4, $name . " : The following Service is parent for recordings                  : " .$JsonId;

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
my @intervals = (sprintf ('%04d-%02d-%02d', $year+1900,$mon+1,$mday), sprintf ('%04d-%02d', $year+1900,$mon+1),sprintf ('%04d', $year+1900));

for(@intervals)
{
my $tmpid = $JsonId.'?interval='.$_;
### Log recording service for debugging
Log3 $name, 4, $name. " : km200_GetRecordings - add service: ". $tmpid;

### Add service to the list of all known services
push (@{$hash ->{Secret}{KM200ALLSERVICES}}, $tmpid);
}
### Sort the list of all services alphabetically
@{$hash ->{Secret}{KM200ALLSERVICES}} = sort @{$hash ->{Secret}{KM200ALLSERVICES}};
}
else
{
my $interval = $json->{interval};
my $sampleRate = $json->{sampleRate};

### Log recording values for debugging
Log3 $name, 4, $name. " : km200_ParseHttpResponseInit : ".$JsonId.':'.$interval.':'.$sampleRate;

my $energySum = 0;
foreach my $item (@{ $json->{recording} })
{
if($item->{c} ne 0)
{
if($sampleRate eq "P1H")
{
$energySum = $energySum + $item->{y} / $item->{c}
}
elsif($sampleRate eq "P1D")
{
$energySum = $energySum + $item->{y} / ($item->{c} / 24)
}
elsif($sampleRate eq "P31D")
{
### don't know which values für 'c' should be used
$energySum = $energySum + $item->{y} / ($item->{c} / 30 / 24)
}
}
}

### Create new Recording Result and write reading for fhem
my $intervalText = $sampleRate eq "P1H" ? "_Today_kWh" : $sampleRate eq "P1D" ? "_ThisMonth_kWh" : "_ThisYear_kWh";
my $TempJsonId = '/recordings'.$json->{recordedResource}{id}. $intervalText;
$energySum = sprintf('%.02f', $energySum);
readingsSingleUpdate( $hash, $TempJsonId, $energySum, 1);

### Log recording values for debugging
Log3 $name, 4, $name. " : km200_ParseHttpResponseInit energySum: ".$JsonId.':'.$energySum;

### Add service to the list of responding services
push (@KM200_RespondingServices, $Service);
}

### Log file entry for debugging
Log3 $name, 4, $name . " : The following Service can be read                  : " .$JsonId;
}



In der Funktion km200_ParseHttpResponseDyn wird nachfolgender Code quasi an der gleichen Stelle wie oben eingebaut:


### Check whether the type is a recording
elsif ($json -> {type} eq "yRecording" and ($json -> {interval} ne ""))
{
my $JsonId         = $json->{id};
my $JsonType       = $json->{type};

### Log entries for debugging purposes
Log3 $name, 5, $name. " : km200_ParseHttpResponseDyn - value found for      : " .$Service;
Log3 $name, 5, $name. " : km200_ParseHttpResponseDyn - id                   : " .$JsonId;
Log3 $name, 5, $name. " : km200_ParseHttpResponseDyn - type                 : " .$JsonType;

my $interval = $json->{interval};
my $sampleRate = $json->{sampleRate};

### Log recording values for debugging
Log3 $name, 4, $name. " : km200_ParseHttpResponseDyn : ".$JsonId.':'.$interval.':'.$sampleRate;

my $energySum = 0;
foreach my $item (@{ $json->{recording} })
{
if($item->{c} ne 0)
{
if($sampleRate eq "P1H")
{
$energySum = $energySum + $item->{y} / $item->{c}
}
elsif($sampleRate eq "P1D")
{
$energySum = $energySum + $item->{y} / ($item->{c} / 24)
}
elsif($sampleRate eq "P31D")
{
### don't know which values für 'c' should be used
$energySum = $energySum + $item->{y} / ($item->{c} / 30 / 24)
}
}
}

### write reading for fhem
my $intervalText = $sampleRate eq "P1H" ? "_Today_kWh" : $sampleRate eq "P1D" ? "_ThisMonth_kWh" : "_ThisYear_kWh";
my $TempJsonId = '/recordings'.$json->{recordedResource}{id}. $intervalText;
$energySum = sprintf('%.02f', $energySum);
readingsSingleUpdate( $hash, $TempJsonId, $energySum, 1);

### Log recording values for debugging
Log3 $name, 4, $name. " : km200_ParseHttpRecordings energySum: ".$JsonId.':'.$energySum;
}


Da ich noch nicht allzu intensiv getestet habe, gibt es vielleicht noch ein paar Bugs. Profis können bestimmt auch noch besseren Code schreiben ;-).

In dem beigefügten Bild sieht man die Einträge aus meiner Device.

Ansonsten habe ich mal die gelesenen Werte beigefügt:

Für den Tag:

{"id":"/recordings/system/heatSources/hs1/actualPower?interval=2021-12-30","type":"yRecording","writeable":0,"recordable":0,"recordedResource":{"id":"/heatSources/actualPower","uri":"http://192.168.2.97/heatSources/actualPower"},"interval":"2021-12-30","sampleRate":"P1H","recording-type":"actual","recording":[{"y":115,"c":60},{"y":120,"c":60},{"y":120,"c":60},{"y":120,"c":60},{"y":118,"c":59},{"y":120,"c":60},{"y":120,"c":60},{"y":120,"c":60},{"y":175,"c":60},{"y":15,"c":60},{"y":108,"c":59},{"y":120,"c":60},{"y":120,"c":60},{"y":120,"c":60},{"y":65,"c":60},{"y":60,"c":60},{"y":5,"c":59},{"y":0,"c":60},{"y":55,"c":60},{"y":1,"c":0},{"y":1,"c":0},{"y":1,"c":0},{"y":1,"c":0},{"y":1,"c":0}]}


Für den Monat:

{"id":"/recordings/system/heatSources/hs1/actualPower?interval=2021-12","type":"yRecording","writeable":0,"recordable":0,"recordedResource":{"id":"/heatSources/actualPower","uri":"http://192.168.2.97/heatSources/actualPower"},"interval":"2021-12","sampleRate":"P1D","recording-type":"actual","recording":[{"y":4128,"c":1436},{"y":4782,"c":1436},{"y":5266,"c":1436},{"y":4912,"c":1436},{"y":4786,"c":1436},{"y":5027,"c":1436},{"y":4782,"c":1436},{"y":4607,"c":1436},{"y":3533,"c":928},{"y":1010,"c":422},{"y":1410,"c":355},{"y":228,"c":295},{"y":110,"c":160},{"y":3030,"c":1204},{"y":3537,"c":1436},{"y":3232,"c":1436},{"y":3524,"c":1436},{"y":4486,"c":1436},{"y":3707,"c":1436},{"y":4484,"c":1436},{"y":6450,"c":1436},{"y":8202,"c":1436},{"y":3795,"c":912},{"y":2372,"c":1065},{"y":1808,"c":668},{"y":2700,"c":958},{"y":1882,"c":804},{"y":2249,"c":949},{"y":3351,"c":1406},{"y":1796,"c":1137},{"y":0,"c":0}]}


Für das Jahr:

{"id":"/recordings/system/heatSources/hs1/actualPower?interval=2021","type":"yRecording","writeable":0,"recordable":0,"recordedResource":{"id":"/heatSources/actualPower","uri":"http://192.168.2.97/heatSources/actualPower"},"interval":"2021","sampleRate":"P31D","recording-type":"actual","recording":[{"y":144071,"c":39165},{"y":94399,"c":28754},{"y":89772,"c":38037},{"y":79773,"c":40221},{"y":37617,"c":29436},{"y":7477,"c":38356},{"y":9559,"c":40209},{"y":9144,"c":40209},{"y":10579,"c":40209},{"y":59168,"c":40205},{"y":82241,"c":28903},{"y":59098,"c":19582}]}


Hinweise und weitere Ideen nehme ich gerne auf.

Vielleicht wandert dieser Ansatz ja auch mal in das Originalmodul. Wäre schön, wenn die Werte tatsächlich richtig berechnet würden.

[UPDATE 31.12.2021]
Nachdem ich heute nochmal ein wenig getestet habe, ist mir natürlich direkt ein "dummer" Fehle aufgefallen. Bei der Initialisierung der Services bzw. der entsprechenden URL wird ja einmal das Datum ermittelt und eingetragen. Am nächsten Tag passt das Datum natürlich nicht mehr. Dafür habe ich jetzt noch eine kleine Funktion erstellt. Wahrscheinlich sollte man bei der Initialisierung einfach ein paar Platzhalter einbauen.

Die folgende Funktion prüft die URL und setzt ein neues Datum:
###START###### Subroutine check date of recording and change it for today #####################################START####
sub km200_CheckRecordingUrl($$)
{
my ($name, $url) = @_;
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
my @intervals = (sprintf ('%04d-%02d-%02d', $year+1900,$mon+1,$mday), sprintf ('%04d-%02d', $year+1900,$mon+1),sprintf ('%04d', $year+1900));

my @tmpurl = split("[?]interval=", $url);
$url = $tmpurl[0];

if(length($tmpurl[1]) eq 10)
{
$url = $url.'?interval='.$intervals[0];
}
elsif(length($tmpurl[1]) eq 7)
{
$url = $url.'?interval='.$intervals[1];
}
elsif(length($tmpurl[1]) eq 4)
{
$url = $url.'?interval='.$intervals[2];
}

Log3 $name, 5, $name. " : km200_CheckRecordingUrl new Url=".$url;

return $url;
}
###END###### Subroutine check date of recording and change it for today #####################################END####


Der Aufruf dieser Funktion erfolgt in der Funktion km200_GetDynService($) an folgender Stelle:
my $url = "http://" . $km200_gateway_host . $Service;

                ### START - NEUE FUNKTION ZUR ÄNDERUNG DES DATUMS
if($url =~ m/\?interval/ )
{
### Log file entry for debugging
Log3 $name, 5, $name . " - km200_GetDynService - Change Recording Url  : " . $Service;
$url = km200_CheckRecordingUrl($name, $url);
}
                ### ENDE - NEUE FUNKTION ZUR ÄNDERUNG DES DATUMS

my $param = {
url        => $url,
timeout    => $PollingTimeout,
hash       => $hash,
method     => "GET",
header     => "agent: TeleHeater/2.2.3\r\nUser-Agent: TeleHeater/2.2.3\r\nAccept: application/json",
callback   =>  \&km200_ParseHttpResponseDyn
};


Mal sehen, was mir sonst noch so an Fehlern auffällt ;-).