Buderus KM200 Kommunikationsmodul

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

Vorheriges Thema - Nächstes Thema

Sailor

Hallo Carsten

Zitat von: Jorge3711 am 06 Mai 2015, 15:42:16
Hihi, den Andreas kenne ich persönlich (nicht gut, aber immerhin). Soll ich mal ein gutes Wort für "uns" einlegen?

Sehr gerne!

Was ich braeuchte waere eine Kopie eines decodierten Strings, welcher von der APP and das KM200 Modul gesendet wird.
Und zwar nachdem in der Easy-Control App das Wochenprogramm geaendert wurde.

Das wuerde mir schon sehr helfen!

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

cyberterminal

Servus,
Ihr seit nicht alleine, damit kämpfe ich auch schon seit Wochen, ohne nennenswerte Erfolge :-(
Aber aufgeben gibt's nicht, das bekommen wir auch noch hin!
Gruß
Manfred

Sailor

Moin Manfred

Zitat von: cyberterminal am 06 Mai 2015, 23:39:23
Ihr seit nicht alleine, damit kämpfe ich auch schon seit Wochen, ohne nennenswerte Erfolge :-(
Aber aufgeben gibt's nicht, das bekommen wir auch noch hin!

So schaut's aus!  ;)

Wenn ich bloß wüsste, wie die EasyControl-App den JSON-String bzw. den #hash aufbaut...  >:(

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

cyberterminal

Ja mal sehen, bin noch in der Türkei, aber am Wochenende werde ich mal wieder einen weiteren Versuch starten.
Gruß
Manfred

Sailor

Moin zusammen

Für den Fall der Fälle, dass Ihr Euch versuchen wollt mittels Wireshark ein Script zur Decodierung zu erzeugen, anbei die Vorgehensweise als Blockbild.

Viel Glück... Ich warte gespannt auf Eure Ergebnisse  ;)

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

Jorge3711

Zitat von: Sailor am 06 Mai 2015, 20:14:05
Hallo Carsten

Sehr gerne!

Was ich braeuchte waere eine Kopie eines decodierten Strings, welcher von der APP and das KM200 Modul gesendet wird.
Und zwar nachdem in der Easy-Control App das Wochenprogramm geaendert wurde.

Das wuerde mir schon sehr helfen!

Gruss
    Sailor

Hi,

habe ihn mal darauf angesprochen. Helfen gern, allerdings wollte er sich hier jetzt nicht "extra" anmelden. Er verwies mich auf einen Thread:

https://twitter.com/skyslasher/status/596701479588777984 ==> https://www.symcon.de/forum/threads/25211-Buderus-Logamatic-Web-KM200-Reloaded

In wie weit Du daraus jetzt hilfreiches ziehen kannst, weiß ich aber nicht.

Viele Grüße
Carsten (Meine Heizung wird in 2 Wochen eingebaut)

Sailor

Hallo Carsten

Zitat von: Jorge3711 am 08 Mai 2015, 21:36:51
Er verwies mich auf einen Thread:
https://twitter.com/skyslasher/status/596701479588777984 ==> https://www.symcon.de/forum/threads/25211-Buderus-Logamatic-Web-KM200-Reloaded
In wie weit Du daraus jetzt hilfreiches ziehen kannst, weiß ich aber nicht.

Danke. Habe dort eine Anfrage an den "Manni" gesendet.
Er programmiert ebenfalls gerade an einem Skript für das Auslesen der Wochenprogramme.

Allerdings hat er scheinbar die gleichen Schreib-Probleme wie ich...  :(

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

cyberterminal

Alles wird gut, braucht nur alles seine Zeit ;-)

Gruß
Manfred

furban

Mal ne Frage...

Ich würde gerne das warme Wasser steuern
Bei meinem RC300 kann ich das so einstellen das warmes Wasser erzeugt wird, wenn die Heizung auch heizt:
Oder aber ich kann das auch unabhängig mit eigenen Zeiteinstellungen steuern.
So ist das aktuell bei mir eingestellt und somit steht bei  mir

/dhwCircuits/dhw1/operationMode ownprogram

Ich habe irgendwo gelesen das man bei anderen diesen Wert auf (auto;on;off) stellen kann. Das geht bei mir nicht. Dann wäre das Problem gelöst. Ich habe noch keinen anderen Wert gefunden mit dem ich diesen Wert befüllten könnte.
Wenn ich z.B. "on" versuche, sehe in der Konsole

2015-05-11_15:21:01 KM200 /dhwCircuits/dhw1/operationMode: ownprogram
km200_Set - jsonRead type: stringValue
km200_Set - JsonContent-String: {"value":"on"}
2015-05-11_15:21:02 KM200 /dhwCircuits/dhw1/operationMode: ownprogram

Hat da jemand eine Idee?
Gruß
Frank


cyberterminal

Servus Sailor,

Ich denke, ich habe da etwas für Dich  ;D
Haste mal Lust zu probieren?

Das ist jetzt mal ein Beispiel:
Täglich um 6:30 auf Tagestemperatur und um 22:30 auf Nachttemperatur

Es muss immer der gesamte Block übertragen werden, auch wenn man nur einen Teil ändert.
Die Steuerung speichert genau das was geschickt wird.

  • Wochentage auf Englisch
  • Zeit immer ein vielfaches von 60 ...... 6:00 => 6x60 = 360
  • 24 Uhr muss mit 0 eingegeben werden, da funktioniert das vielfache von 60 nicht!
  • maximal 42 Einträge gesamt
Und ganz wichtig: alles muss auf den Punkt genau eingegeben werden sonst spielt das Ding verrückt!

Aufbau des jsonStrings:

'[
{"dayOfWeek":"Mo","time":360,"setpoint":"day"},
{"dayOfWeek":"Mo","time":1350,"setpoint":"night"},
{"dayOfWeek":"Tu","time":360,"setpoint":"day"},
{"dayOfWeek":"Tu","time":1350,"setpoint":"night"},
{"dayOfWeek":"We","time":360,"setpoint":"day"},
{"dayOfWeek":"We","time":1350,"setpoint":"night"},
{"dayOfWeek":"Th","time":360,"setpoint":"day"},
{"dayOfWeek":"Th","time":1350,"setpoint":"night"},
{"dayOfWeek":"Fr","time":360,"setpoint":"day"},
{"dayOfWeek":"Fr","time":1350,"setpoint":"night"},
{"dayOfWeek":"Sa","time":360,"setpoint":"day"},
{"dayOfWeek":"Sa","time":1350,"setpoint":"night"},
{"dayOfWeek":"Su","time":360,"setpoint":"day"},
{"dayOfWeek":"Su","time":1350,"setpoint":"night"}
]'



Was auch noch wichtig ist, die Standardfunktion zum Senden funktioniert dabei nicht.
Irgendwie funktioniert das umwandeln mit json_encode nicht richtig.
Hab nur die PHP Version sorry  :)


function km200_SetData( $REST_URL, $value )
{
    $content = json_encode(
        array(
            "value" => $value
        )
    );
    $options = array(
        'http' => array(
           'method' => "PUT",
            'header' => "Content-type: application/json\r\n" .
                        "User-Agent: TeleHeater/2.2.3\r\n",
            'content' => km200_Encrypt( $content )
        )
    );
    $context = stream_context_create( $options );
    @file_get_contents(
        'http://' . km200_gateway_host . ':' . km200_gateway_port . $REST_URL,
        false,
        $context
    );
}



Darum habe ich eine neue Funktion für's Programmschreiben wo der 1. Teil mit dem $content einfach wegfällt,
da ich die Wert direkt als jsonString absetzte und nicht erst in der Funktion.


function km200_SetData_Prog( $REST_URL, $value )
{
    $options = array(
        'http' => array(
           'method' => "PUT",
            'header' => "Content-type: application/json\r\n" .
                        "User-Agent: TeleHeater/2.2.3\r\n",
            'content' => km200_Encrypt( $value )
        )
    );
    $context = stream_context_create( $options );
    @file_get_contents(
        'http://' . km200_gateway_host . ':' . km200_gateway_port . $REST_URL,
        false,
        $context
    );
}


Ist ja nicht so schlimm, hauptsache es funktioniert  8)

Viel Spass,
Gruß
Manfred

cyberterminal

Zitat von: furban am 11 Mai 2015, 15:23:01
Mal ne Frage...

Ich würde gerne das warme Wasser steuern
Bei meinem RC300 kann ich das so einstellen das warmes Wasser erzeugt wird, wenn die Heizung auch heizt:
Oder aber ich kann das auch unabhängig mit eigenen Zeiteinstellungen steuern.
So ist das aktuell bei mir eingestellt und somit steht bei  mir

/dhwCircuits/dhw1/operationMode ownprogram

Ich habe irgendwo gelesen das man bei anderen diesen Wert auf (auto;on;off) stellen kann. Das geht bei mir nicht. Dann wäre das Problem gelöst. Ich habe noch keinen anderen Wert gefunden mit dem ich diesen Wert befüllten könnte.
Wenn ich z.B. "on" versuche, sehe in der Konsole

2015-05-11_15:21:01 KM200 /dhwCircuits/dhw1/operationMode: ownprogram
km200_Set - jsonRead type: stringValue
km200_Set - JsonContent-String: {"value":"on"}
2015-05-11_15:21:02 KM200 /dhwCircuits/dhw1/operationMode: ownprogram

Hat da jemand eine Idee?
Gruß
Frank

Hallo Frank,

Was kommt bei dir unter "/dhwCircuits/dhw1/activeSwitchProgram"
Meine Anlage hat hier als Programme Eigen1 und Heizkreis.

Stelle ich nun auf Heizkreis, dann läuft die WW-Bereitung automatisch (irgendwann) und ich kann nicht mehr auto|on|off einstellen.
Stelle ich dann wieder auf Eigen1 funktioniert das auto|on|off wieder.

Gruß
Manfred

furban

Zitat von: cyberterminal am 11 Mai 2015, 22:06:41
Hallo Frank,

Was kommt bei dir unter "/dhwCircuits/dhw1/activeSwitchProgram"
Meine Anlage hat hier als Programme Eigen1 und Heizkreis.

Stelle ich nun auf Heizkreis, dann läuft die WW-Bereitung automatisch (irgendwann) und ich kann nicht mehr auto|on|off einstellen.
Stelle ich dann wieder auf Eigen1 funktioniert das auto|on|off wieder.

Gruß
Manfred

Hi Manfred,

Na das wird ja immer lustiger. Ein /dhwCircuits/dhw1/activeSwitchProgram habe ich gar nicht. Nur ein /heatingCircuits/hc1/activeSwitchProgram das auf "A" steht

Das ist alles was ich zu /dhwCircuits sehe


/dhwCircuits/dhw1/actualTemp 47.1 2
/dhwCircuits/dhw1/currentSetpoint 55
/dhwCircuits/dhw1/operationMode ownprogram
/dhwCircuits/dhw1/status ACTIVE
/dhwCircuits/dhw1/switchPrograms/A/1-Mo 0800 high 0900 off 1725 high 2250 off
/dhwCircuits/dhw1/switchPrograms/A/2-Tu 0800 high 0900 off 1725 high 2250 off
/dhwCircuits/dhw1/switchPrograms/A/3-We 0800 high 0900 off 1725 high 2250 off
/dhwCircuits/dhw1/switchPrograms/A/4-Th 0800 high 0900 off 1725 high 2250 off
/dhwCircuits/dhw1/switchPrograms/A/5-Fr 0800 high 0900 off 1725 high 2250 off
/dhwCircuits/dhw1/switchPrograms/A/6-Sa 0850 high 0950 off 1750 high 2250 off
/dhwCircuits/dhw1/switchPrograms/A/7-Su 0850 high 0950 off 1750 high 2250 off
/dhwCircuits/dhw1/temperatureLevels/high 55
/dhwCircuits/dhw1/temperatureLevels/off 0
/dhwCircuits/dhw1/waterFlow 0
/dhwCircuits/dhw1/workingTime 32147


Gruß

Frank

Sailor

Hallo Manni

Zitat von: cyberterminal am 11 Mai 2015, 15:43:32
Aufbau des jsonStrings:

'[
{"dayOfWeek":"Mo","time":360,"setpoint":"day"},
{"dayOfWeek":"Mo","time":1350,"setpoint":"night"},
{"dayOfWeek":"Tu","time":360,"setpoint":"day"},
{"dayOfWeek":"Tu","time":1350,"setpoint":"night"},
{"dayOfWeek":"We","time":360,"setpoint":"day"},
{"dayOfWeek":"We","time":1350,"setpoint":"night"},
{"dayOfWeek":"Th","time":360,"setpoint":"day"},
{"dayOfWeek":"Th","time":1350,"setpoint":"night"},
{"dayOfWeek":"Fr","time":360,"setpoint":"day"},
{"dayOfWeek":"Fr","time":1350,"setpoint":"night"},
{"dayOfWeek":"Sa","time":360,"setpoint":"day"},
{"dayOfWeek":"Sa","time":1350,"setpoint":"night"},
{"dayOfWeek":"Su","time":360,"setpoint":"day"},
{"dayOfWeek":"Su","time":1350,"setpoint":"night"}
]'


Gehe ich Recht in der Annahme, dass der o.g. Code der Variable "$value" entspricht?

Ich werde das dann mal ausprobieren.


Wenn du wie oben beschrieben übrigens den JSON Wert bereits als String vorliegen hast, dann kann das auch nicht mit json_encode funktionieren, da diese Funktion nur hashes in einen JSON kompatiblen String verwandelt aber wenn schon ein String vorliegt...

Ist es wirklich der Fall, dass nur der o.g. Code übertragen wird und nicht etwa mit Namen:



{"values":
   [
      {"dayOfWeek":"Mo","time":360,"setpoint":"day"},
      {"dayOfWeek":"Mo","time":1350,"setpoint":"night"},
      {"dayOfWeek":"Tu","time":360,"setpoint":"day"},
      {"dayOfWeek":"Tu","time":1350,"setpoint":"night"},
      {"dayOfWeek":"We","time":360,"setpoint":"day"},
      {"dayOfWeek":"We","time":1350,"setpoint":"night"},
      {"dayOfWeek":"Th","time":360,"setpoint":"day"},
      {"dayOfWeek":"Th","time":1350,"setpoint":"night"},
      {"dayOfWeek":"Fr","time":360,"setpoint":"day"},
      {"dayOfWeek":"Fr","time":1350,"setpoint":"night"},
      {"dayOfWeek":"Sa","time":360,"setpoint":"day"},
      {"dayOfWeek":"Sa","time":1350,"setpoint":"night"},
      {"dayOfWeek":"Su","time":360,"setpoint":"day"},
      {"dayOfWeek":"Su","time":1350,"setpoint":"night"}
   ]
}


Das verwirrt mich jetzt etwas...

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

Sailor

Zitat von: cyberterminal am 11 Mai 2015, 15:43:32
  • Zeit immer ein vielfaches von 60 ...... 6:00 => 6x60 = 360

Oh Shit! Ich glaube ich habe den Fehler gefunden!
Anstelle mit Faktor 60 auf Kommazeiten (22:30 ist 22,5; 22,5 * 60 = 1350) zu arbeiten, habe ich mit Faktor 0,6 gearbeitet.
Das geht auch gut, solange man nur volle Stunden und keine Halben bzw. Viertel hat...

Ich berichte!

Gruß
    Sailor

******************************
Man wird immer besser...

cyberterminal

Der zu übertragende String passt so.
Nix extra einfügen, nix umwandeln und in kein Array schreiben -> einfach direkt kodieren und weg damit.

Aber wie schon gesagt, es muss wirklich alles korrekt sein sonst "zick" die Dame nur rum  ;D

Hab mir gestern nicht nur 1x die Schaltprogramm zerschossen.
Musste zwischenzeitlich sogar mal die Anlage spannungslos machen, weil nix mehr ging  :o

Aber wir nähern uns dem Ziel mit großen Schritten.

Und wenn ich ehrlich bin, soweit war ich schon vor Monaten  >:(
Genau der gleiche String, nur von einem Array in der Standardfunktion mit json_encode umgewandelt in den jsonstring (sah genau so aus) nur kam nix bei der Anlage an.

Aber Du hast jetzt wieder meinen Ehrgeiz geweckt, dass auch das Problem endlich vom Tisch muss  ::)
Danke dafür.
Alles wird gut

Dank meiner Firma bin ich jetzt doch länger zu Hause als geplant, jetzt könnte ich die Baustelle Buderus wohl wirklich zu einem Ende bringen!

Gruß
Manfred