Buderus KM200 Kommunikationsmodul

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

Vorheriges Thema - Nächstes Thema

DLindner

 :) bin stolz auf euch beide, die Zusammenarbeit hat ja wirklich gut geklappt.  :D :D :D :D

@Sailor: wenn es dir nichts ausmacht, würde ich den String mit einem Set-Befehl in der geforderten Form übergeben wollen, wenn ihr soweit seid.
Zitat'[
{"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"}
]'
Ich gehe davon aus, dass keine CR und LF vorkommen dürfen.



cyberterminal

Und machst vielleicht noch eine Überprüfung auf die maximal 42 Einträge mit rein sonst gibts wieder Probleme. :-D

DLindner


DLindner

Heist das, dass pro Tag nur 3 Schaltzyklen erlaubt sind?
1. 08:00 an und 11:00 aus
2. 13:00 an und 15:00 aus
3. 17:00 an und 23:00 aus

Oder dürfen es 6 Schaltzyklen sein, was mir wahrscheinlicher erscheint.

Sailor

Hallo Manni

Zitat von: cyberterminal am 12 Mai 2015, 11:08:49
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

Ich probiere meinen Code heute Abend mal aus..

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

Sailor

#860
Hallo Manni

Zitat von: cyberterminal am 12 Mai 2015, 12:17:30
Und machst vielleicht noch eine Überprüfung auf die maximal 42 Einträge mit rein sonst gibts wieder Probleme. :-D

Das ist etwas anders gelagert...

Mein Modul liest zunächst die Wochenprogramme aus.
Innerhalb dieses Auslesestrings

{
"id":"/heatingCircuits/hc1/switchPrograms/B",
"type":"switchProgram",
"setpointProperty":
{
"id":"/heatingCircuits/hc1/temperatureLevels",
"uri":"http://192.168.178.58/heatingCircuits/hc1/temperatureLevels"
},
"maxNbOfSwitchPoints":42,
"maxNbOfSwitchPointsPerDay":6,
"switchPointTimeRaster":15,
"writeable":1,
"switchPoints":
[
{"dayOfWeek":"Mo","setpoint":"comfort2","time":360},
{"dayOfWeek":"Mo","setpoint":"eco",     "time":480},
{"dayOfWeek":"Mo","setpoint":"comfort2","time":960},
{"dayOfWeek":"Mo","setpoint":"eco",     "time":1380},
{"dayOfWeek":"Tu","setpoint":"comfort2","time":360},
{"dayOfWeek":"Tu","setpoint":"eco",     "time":480},
{"dayOfWeek":"Tu","setpoint":"comfort2","time":960},
{"dayOfWeek":"Tu","setpoint":"eco",     "time":1380},
{"dayOfWeek":"We","setpoint":"comfort2","time":360},
{"dayOfWeek":"We","setpoint":"eco",     "time":480},
{"dayOfWeek":"We","setpoint":"comfort2","time":960},
{"dayOfWeek":"We","setpoint":"eco",     "time":1380},
{"dayOfWeek":"Th","setpoint":"comfort2","time":360},
{"dayOfWeek":"Th","setpoint":"eco",     "time":480},
{"dayOfWeek":"Th","setpoint":"comfort2","time":960},
{"dayOfWeek":"Th","setpoint":"eco",     "time":1380},
{"dayOfWeek":"Fr","setpoint":"comfort2","time":360},
{"dayOfWeek":"Fr","setpoint":"eco",     "time":480},
{"dayOfWeek":"Fr","setpoint":"comfort2","time":960},
{"dayOfWeek":"Fr","setpoint":"eco",     "time":1380},
{"dayOfWeek":"Sa","setpoint":"comfort2","time":480},
{"dayOfWeek":"Sa","setpoint":"eco",     "time":1380},
{"dayOfWeek":"Su","setpoint":"comfort2","time":480},
{"dayOfWeek":"Su","setpoint":"eco",     "time":1380}
]
}

befinden sich Datenfelder
  • maxNbOfSwitchPoints: Maximale Anzahl der Datenpunkte
  • maxNbOfSwitchPointsPerDay: Maximale Anzahl der Datenpunkte pro Tag
  • switchPointTimeRaster: Kleinst möglichstes Zeitraster in Minuten

Diese könnten sich von Modul zu Modul ändern und sind daher individuell zu betrachten.

Mein Modul überprüft die Eingaben daraufhin bereits und rundet entsprechend des Zeitrasters auf und ab, bzw. verweigert die fehlerhafte Anzahl der gewünschten Datenpunkte.

Wenn schon, den schon!  ;D

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

Sailor

#861
Hallo DLindner

Zitat von: DLindner am 12 Mai 2015, 12:12:57
@Sailor: wenn es dir nichts ausmacht, würde ich den String mit einem Set-Befehl in der geforderten Form übergeben wollen, wenn ihr soweit seid.Ich gehe davon aus, dass keine CR und LF vorkommen dürfen.

Nein, bitte an den fhem Standard halten und den Wochentag mit dem "set"-Befehl wie im folgenden Beispiel ändern:

set myKm200 /heatingCircuits/hc1/switchPrograms/B/1-Mo 0600 comfort2 0800 eco 1600 comfort2 2300 eco

Ggf. mal unter "readingsBulkUpdate" bzw. "readingsEndUpdate" nachlesen.


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

Sailor

Hallo DLindner

Zitat von: DLindner am 12 Mai 2015, 12:32:53
Heist das, dass pro Tag nur 3 Schaltzyklen erlaubt sind?
Oder dürfen es 6 Schaltzyklen sein, was mir wahrscheinlicher erscheint.

7 x 6 = 42  ;)

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

DLindner

#863
Zitat7 x 6 = 42
8)
Die magische Zahl 42 steht wohl für die Schaltpunkte und nicht für die Schaltzyklen (ich weiß nicht welchen Begriff ich dafür verwenden soll). Mit Schaltzyklus meine ich 2 Schaltpunkte. Dies bedeute wiederum, dass max. 3 Schaltzyklen ( 42 / (7 * 2) ) pro Wochentag zur Verfügung stehen.
Dies wiederum bedeutet, dass man 7 set-Befehle absetzen muss - ob in der fhem-Kommandozeile oder aus einer ReadingsGroup heraus.

ZitatNein, bitte an den fhem Standard halten und den Wochentag mit dem "set"-Befehl wie im folgenden Beispiel ändern:
set myKm200 /heatingCircuits/hc1/switchPrograms/B/1-Mo 0600 comfort2 0800 eco 1600 comfort2 2300 eco

Die ursprüngliche Ausgabe des get-Befehls sah mal so bei mir aus:
Zitat{"id":"/heatingCircuits/hc1/switchPrograms/Eigen1","type":"switchProgram","setpointProperty":{"id":"/heatingCircuits/hc1/temperatureLevels","uri":"http://192.168.174.22/heatingCircuits/hc1/temperatureLevels"},"maxNbOfSwitchPoints":42,"maxNbOfSwitchPointsPerDay":42,"switchPointTimeRaster":10,"writeable":1,"switchPoints":[{"dayOfWeek":"Mo","setpoint":"day","time":360},{"dayOfWeek":"Mo","setpoint":"night","time":1430},{"dayOfWeek":"Tu","setpoint":"day","time":360},{"dayOfWeek":"Tu","setpoint":"night","time":1430},{"dayOfWeek":"We","setpoint":"day","time":360},{"dayOfWeek":"We","setpoint":"night","time":1430},{"dayOfWeek":"Th","setpoint":"day","time":360},{"dayOfWeek":"Th","setpoint":"night","time":1430},{"dayOfWeek":"Fr","setpoint":"day","time":360},{"dayOfWeek":"Fr","setpoint":"night","time":1430},{"dayOfWeek":"Sa","setpoint":"day","time":360},{"dayOfWeek":"Sa","setpoint":"night","time":1430},{"dayOfWeek":"Su","setpoint":"day","time":360},{"dayOfWeek":"Su","setpoint":"night","time":1430}]}

Dies ist die Ausgabe, die du gepostet hast:
Zitat{"id":"/heatingCircuits/hc1/switchPrograms/B","type":"switchProgram","setpointProperty":{"id":"/heatingCircuits/hc1/temperatureLevels","uri":"http://192.168.178.58/heatingCircuits/hc1/temperatureLevels"},
"maxNbOfSwitchPoints":42,
"maxNbOfSwitchPointsPerDay":6,
"switchPointTimeRaster":15,"

writeable":1,"switchPoints":[
{"dayOfWeek":"Mo","setpoint":"comfort2","time":360},
{"dayOfWeek":"Mo","setpoint":"eco","time":480},
{"dayOfWeek":"Mo","setpoint":"comfort2","time":960},
{"dayOfWeek":"Mo","setpoint":"eco","time":1380},
{"dayOfWeek":"Tu","setpoint":"comfort2","time":360},
{"dayOfWeek":"Tu","setpoint":"eco","time":480},
{"dayOfWeek":"Tu","setpoint":"comfort2","time":960},
{"dayOfWeek":"Tu","setpoint":"eco","time":1380},
{"dayOfWeek":"We","setpoint":"comfort2","time":360},
{"dayOfWeek":"We","setpoint":"eco","time":480},
{"dayOfWeek":"We","setpoint":"comfort2","time":960},
{"dayOfWeek":"We","setpoint":"eco","time":1380},
{"dayOfWeek":"Th","setpoint":"comfort2","time":360},
{"dayOfWeek":"Th","setpoint":"eco","time":480},
{"dayOfWeek":"Th","setpoint":"comfort2","time":960},
{"dayOfWeek":"Th","setpoint":"eco","time":1380},
{"dayOfWeek":"Fr","setpoint":"comfort2","time":360},
{"dayOfWeek":"Fr","setpoint":"eco","time":480},
{"dayOfWeek":"Fr","setpoint":"comfort2","time":960},
{"dayOfWeek":"Fr","setpoint":"eco","time":1380},
{"dayOfWeek":"Sa","setpoint":"comfort2","time":480},
{"dayOfWeek":"Sa","setpoint":"eco","time":1380},
{"dayOfWeek":"Su","setpoint":"comfort2","time":480},
{"dayOfWeek":"Su","setpoint":"eco","time":1380}
]}

Man sieht schon, dass sich die Parameter "maxNbOfSwitchPoints", "maxNbOfSwitchPointsperDay" und "switchPointTimeRaster" unterscheiden. Um eine variable ReadingsGroup zu definieren, wäre es schön, wenn ich diese Parameter irgendwie übermittelt bekäme.

Ich möchte deine hervorragenden Arbeit nicht kritisieren, aber du programmierst viele Dinge in die Schnittstelle, die meiner Ansicht nach da nicht hingehören. Bitte, bitte nicht falsch verstehen. Ich werde deine Vorgaben dann halt entsprechend umsetzen, nur ich brauche die genannten Parameter.

Noch eins: lt. meiner Ausgabe auf den get-Befehl stünden mir 42 Schaltpunkte pro Tag zur Verfügung, aber auch nur 42 insgesamt. Wo steckt da die Logik?

cyberterminal

#864
42 auf den Montag geht doch, sind halt dann für die anderen Tage keiner mehr übrig  ;D

Aber ehrlich jetzt, wer braucht mehr als 42?

Lange Rede, kurzer Sinn -> kommt von Buderus und somit eh nicht änderbar  :o

Gruß
Manfred

Sailor

Hallo DLindner

Zitat von: DLindner am 12 Mai 2015, 14:33:36
Man sieht schon, dass sich die Parameter "maxNbOfSwitchPoints", "maxNbOfSwitchPointsperDay" und "switchPointTimeRaster" unterscheiden. Um eine variable ReadingsGroup zu definieren, wäre es schön, wenn ich diese Parameter irgendwie übermittelt bekäme.

Du must nur den Befehl

get myKm200 /heatingCircuits/hc1/switchPrograms/B json

eingeben, und schon bekommst du den rohen JSON String übermittelt.

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

Sailor

Also die gute Nachricht ist, ich habe schon mal das Programm ändern können.

Ich muss jetzt nur noch rausfinden, warum bei einem Befehl die Zeiten auf 5:15 bzw. 23:00 zu ändern, diese auf 07:00 und 13:45 Uhr geändert werden!  :o

Pas á Pas...

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

Sailor

An alle:

Version 0049 ist raus.


Mit dieser Version kann man jetzt endlich die Wochenprogramme tageweise ändern!!!

Beispiel
set myKm200 /heatingCircuits/hc1/switchPrograms/B/1-Mo 0600 comfort2 0800 eco

oder für mehrere Punkte

set myKm200 /heatingCircuits/hc1/switchPrograms/B/1-Mo 0600 comfort2 0800 eco 1600 comfort2 2300 eco

Ganz besonderes Dank an Manni aka cyberterminal !

Die Fehlerlisten haben jetzt die chronologische Sortierung mit der jüngsten Meldung oben.

Ggf. "deletereading myKm200 .*" zur Bereinigung der alten Readings eingeben.

Bitte ausgiebig auch mit "krummen" oder falschen Werten testen!


Status

Update

Lister der mir bekannten und offenen Punkte die ich zur Zeit als Problem innerhalb des Moduls sehe:

BSxxxx: Bug-Symptom
BFxxxx: BugFix (Möglichkeit und way-forward)


BS0001) IMPLEMENTIERT in 0046: Manche Werte insbesondere Zahlen lassen sich nicht schreiben.
BF0001) IMPLEMENTIERT in 0046: Einführung des Attributs "ReadBackDelay" in Verbindung mit "usleep" - Befehl

BS0002) IMPLEMENTIERT in 0047:Sporadisches Verschlucken beim get/set Befehl
BF0002) IMPLEMENTIERT in 0047: Setzen eines Flag im Geräte-hash. Sobald "individiual get" oder "-set" um diese während der Initialisierungsphase zu blocken.


BS0003) Keine Einheiten im DbLog
BF0003) X_DbLog_splitFn verwenden. Allerdings rätsel ich noch, wie ich an den Geräte - hash komme da dieser nicht übermittelt wird. Forum


BS0004) IMPLEMENTIERT in 0047: Keine Fehlerberichte als Reading verfügbar.
BF0004) IMPLEMENTIERT in 0047: Auf Basis eines Forumsbeitrags programmiert. Noch kein Feedback erhalten.


BS0005) Keine Recordings als Reading verfügbar.
BF0005) Der Service "Recordings" ist bisher noch von keinem User (mit Daten gefüllt) entdeckt worden. Aus diesem Grunde sehe ich zur Zeit hierbei die Prio ganz unten.


BS0006) IMPLEMENTIERT in 0049: Kein Schreiben der Wochenprograme möglich
BF0006) IMPLEMENTIERT in 0049: set Befehl entsprechend umgeschrieben...

BS0007) IMPLEMENTIERT in 0045: Vielzahl der möglichen Services zu hoch. Teilweise sind Namen der Services auch vom User im RC-Modul änderbar. Statische Liste daher unsinnig.
BF0007) IMPLEMENTIERT in 0045: Über den Datentyp "eRefnum" durch die Verzeichnisse suchen und alles in ein Reading konvertieren was Werte liefert.


Liste der Prioritäten
1) BF0003
2) BF0005

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

cyberterminal

Moin Sailor,

Hab ja nix gemacht, aber trotzdem bitte gerne, wir sind doch eine große "verrückte" Gemeinschaft  8)

Gruß
Manfred

furban

erst wollte es ja nicht so recht klappen. Aber dann ist mir eingefallen das ich den "deletereading myKm200 .*"  vergessen hatte und nach diesem Kommando konnte ich jetzt auch das Warmwasserzeitprogramm anpassen. Damit erledigt sich dann auch mein Problem das ich das Warmwasser nicht einfach ein- und ausschalten kann. Muss ich halt die Zeitschaltung manipulieren. Nicht schön, aber es funktioniert.
Gruß
Frank