Buderus KM200 Kommunikationsmodul

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

Vorheriges Thema - Nächstes Thema

DLindner

#870
Habe den Schreibbefehl in meine ReadingsGroup eingebaut.
Das Ergebnis sieht nun so aus, dass der Set-Befehl sporadische Fehler erzeugt. Das Heraufsetzen des Parameters ReadbackDelay auf 1000 bringt keine nenneswerte Verbesserung, obgleich ich vermute, dass es ein zeitliches Problem ist.

Vor dem Schreibbefehl: hp1.png
Ergebnis nach dem Schreibbefehl: hp2.png
Eigene Log-Datei (debug.txt): hp3.png
fhem.log:hp4.png

DLindner

Nach dem Schreiben des Wertes 2050 oder 2250 bekomme ich 2049 bzw. 2249 zurück.

Zitat2015.05.16 13:40:00 3: set heizung /heatingCircuits/hc2/switchPrograms/Eigen2/3-We 0400 day 2300 night : The service /heatingCircuits/hc2/switchPrograms/Eigen2 has been changed succesfully!
2015.05.16 13:40:23 3: set heizung /heatingCircuits/hc2/switchPrograms/Eigen2/4-Th 0400 day 2250 night : The service /heatingCircuits/hc2/switchPrograms/Eigen2 has been changed succesfully!
2015.05.16 13:44:06 3: set heizung /heatingCircuits/hc2/switchPrograms/Eigen2/4-Th 0400 day 2050 night : The service /heatingCircuits/hc2/switchPrograms/Eigen2 has been changed succesfully!

Der Wert 2300 geht unverändert durch.

DLindner

#872
Hallo Sailor,
bezugnehmend auf meinen vorherigen Post habe ich den Fehler gefunden. Ich habe mal einen Code-Snip aus der 73_km200 ausgeschnitten (get) und meinen Vorschlag mit eingefügt.
Zitatmy $time = $item->{time};
my $temptime     = $time / 60;
my $temptimeHH   = int($temptime);
my $temptimeMM   = ($temptime - $temptimeHH) * 60;
my $temptimeMM   = ($time - ($temptimeHH * 60));
diese ursprüngliche Umrechnung ergibt bei einem Übergabewert von 1370 (entspricht 22:50) den Wert 22:49.9999999999999.
Bei einem 15er Zeitraster kommt dies nicht vor, aber ich habe eine 10er-Raster.
Du musst nur markierten Zeilen ändern in und schon passt es wieder.

Vorschlag für's Schreiben:
Zitatmy $TempHours                = substr($TempReadingMo[$i], 0, length($TempReadingMo[$i])-2);
my $TempMinutes              = substr($TempReadingMo[$i], -2);
if ($TempMinutes != 0) {$TempMinutes     = $TempMinutes / 60;}
$TempHashSend->{"time"}      = ($TempHours + $TempMinutes) * 60;

kürzer ohne if und Fließkommazahl:
Zitatmy $TempHours                = substr($TempReadingMo[$i], 0, length($TempReadingMo[$i])-2);
my $TempMinutes              = substr($TempReadingMo[$i], -2);
$TempHashSend->{"time"} = ($TempHours * 60 ) + $TempMinutes;





Sailor

Hallo DLindner

Zitat von: DLindner am 17 Mai 2015, 20:20:27
Hallo Sailor,
bezugnehmend auf meinen vorherigen Post habe ich den Fehler gefunden. Ich habe mal einen Code-Snip aus der 73_km200 ausgeschnitten (get) und meinen Vorschlag mit eingefügt.diese ursprüngliche Du musst nur markierten Zeilen ändern in und schon passt es wieder.

Vorschlag für's Schreiben:
kürzer ohne if und Fließkommazahl:

Hallo DLindner

vielen Dank, habe ich in 0050 mit aufgenommen.

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

Sailor

Hallo DLindner

Zitat von: DLindner am 15 Mai 2015, 11:03:28
Habe den Schreibbefehl in meine ReadingsGroup eingebaut.
Das Ergebnis sieht nun so aus, dass der Set-Befehl sporadische Fehler erzeugt. Das Heraufsetzen des Parameters ReadbackDelay auf 1000 bringt keine nenneswerte Verbesserung, obgleich ich vermute, dass es ein zeitliches Problem ist.

Hmmmm

das ist mir ebenfalls ein Rätsel, wenn nicht mal ReadbackDelay auf 1000 was bringt.

Versuche mal ReadbackDelay auf 2500.

Wie sieht denn Deine Netzwerklast und deine RasPi-Auslastung aus?

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

Sailor

#875
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.

Hall DLindner,

für Experten habe ich die Möglichkeit ab Version 0050 das Osterei eingeräumt, den "string of hashes" direkt zu übergeben:


[
{"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"}
]


Der Befehl lautet dann beispielsweise wie folgt:

set myKm200 /dhwCircuits/dhw1/switchPrograms/A [{"setpoint":"high","dayOfWeek":"Mo","time":240},{"setpoint":"off","dayOfWeek":"Mo","time":1320},{"setpoint":"high","dayOfWeek":"Tu","time":240},{"setpoint":"off","dayOfWeek":"Tu","time":1320},{"setpoint":"high","dayOfWeek":"We","time":240},{"setpoint":"off","dayOfWeek":"We","time":1320},{"setpoint":"high","dayOfWeek":"Th","time":240},{"setpoint":"off","dayOfWeek":"Th","time":1320},{"setpoint":"high","dayOfWeek":"Fr","time":240},{"setpoint":"off","dayOfWeek":"Fr","time":1320},{"setpoint":"high","dayOfWeek":"Sa","time":360},{"setpoint":"off","dayOfWeek":"Sa","time":1320},{"setpoint":"high","dayOfWeek":"Su","time":360},{"setpoint":"off","dayOfWeek":"Su","time":1320}]


Nachtrag: Wer eine Erfolgsmeldung sehen will, muss sich GENAUSTENS an die Reihenfolge oben halten: setpoint, dayOfWeek, time und nirgendwo ein Leerzeichen.


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

DLindner

#876
Wann stellst Du die neue Version ein?

Meine Befehl sieht dann z.B. so aus:
Zitatset heizung /heatingCircuits/hc2/switchPrograms/Eigen2 [{"dayOfWeek":"Mo","time":240,"setpoint":"day"},{"dayOfWeek":"Mo","time":540,"setpoint":"night"},{"dayOfWeek":"Tu","time":240,"setpoint":"day"},{"dayOfWeek":"Tu","time":1320,"setpoint":"night"},{"dayOfWeek":"We","time":240,"setpoint":"day"},{"dayOfWeek":"We","time":1330,"setpoint":"night"},{"dayOfWeek":"Th","time":240,"setpoint":"day"},{"dayOfWeek":"Th","time":1320,"setpoint":"night"},{"dayOfWeek":"Fr","time":240,"setpoint":"day"},{"dayOfWeek":"Fr","time":1310,"setpoint":"night"},{"dayOfWeek":"Sa","time":240,"setpoint":"day"},{"dayOfWeek":"Sa","time":1380,"setpoint":"night"},{"dayOfWeek":"Su","time":240,"setpoint":"day"},{"dayOfWeek":"Su","time":1390,"setpoint":"night"}]

Die markierten Werte werden von mir abhängig von der eingesetzten Hard-/Software gemacht (day/night oder Comfort/Eco, etc.). Ebenfalls wird das TimeRaster und max anzahl Switchpoints berücksichtigt.

DLindner

Hi Sailor,
ZitatVersuche mal ReadbackDelay auf 2500.
Mit 2500 geht gar nichts:
Zitat2015.05.18 10:51:39 3: set heizung /heatingCircuits/hc2/switchPrograms/Eigen2/1-Mo 0400 day 0900 night : The service /heatingCircuits/hc2/switchPrograms/Eigen2 has been changed succesfully!
2015.05.18 10:51:43 3: set heizung /heatingCircuits/hc2/switchPrograms/Eigen2/2-Tu 0400 day 0900 night : ERROR - The service /heatingCircuits/hc2/switchPrograms/Eigen2 could not changed!

2015.05.18 10:51:47 3: set heizung /heatingCircuits/hc2/switchPrograms/Eigen2/3-We 0400 day 2100 night : ERROR - The service /heatingCircuits/hc2/switchPrograms/Eigen2 could not changed!

2015.05.18 10:51:50 3: set heizung /heatingCircuits/hc2/switchPrograms/Eigen2/4-Th 0400 day 2100 night : ERROR - The service /heatingCircuits/hc2/switchPrograms/Eigen2 could not changed!

2015.05.18 10:51:54 3: set heizung /heatingCircuits/hc2/switchPrograms/Eigen2/5-Fr 0400 day 2100 night : ERROR - The service /heatingCircuits/hc2/switchPrograms/Eigen2 could not changed!

2015.05.18 10:51:58 3: set heizung /heatingCircuits/hc2/switchPrograms/Eigen2/6-Sa 0400 day 2100 night : ERROR - The service /heatingCircuits/hc2/switchPrograms/Eigen2 could not changed!

2015.05.18 10:52:01 3: set heizung /heatingCircuits/hc2/switchPrograms/Eigen2/7-Su 0400 day 2100 night : ERROR - The service /heatingCircuits/hc2/switchPrograms/Eigen2 could not changed!

Habe dann mal ReadBackDelay ganz rausgenommen:
Zitat2015.05.18 10:55:43 3: set heizung /heatingCircuits/hc2/switchPrograms/Eigen2/1-Mo 0400 day 1000 night : The service /heatingCircuits/hc2/switchPrograms/Eigen2 has been changed succesfully!
2015.05.18 10:55:45 3: set heizung /heatingCircuits/hc2/switchPrograms/Eigen2/2-Tu 0400 day 2000 night : The service /heatingCircuits/hc2/switchPrograms/Eigen2 has been changed succesfully!
2015.05.18 10:55:46 3: set heizung /heatingCircuits/hc2/switchPrograms/Eigen2/3-We 0400 day 2000 night : ERROR - The service /heatingCircuits/hc2/switchPrograms/Eigen2 could not changed!

2015.05.18 10:55:48 3: set heizung /heatingCircuits/hc2/switchPrograms/Eigen2/4-Th 0400 day 2000 night : The service /heatingCircuits/hc2/switchPrograms/Eigen2 has been changed succesfully!
2015.05.18 10:55:49 3: set heizung /heatingCircuits/hc2/switchPrograms/Eigen2/5-Fr 0400 day 2000 night : ERROR - The service /heatingCircuits/hc2/switchPrograms/Eigen2 could not changed!

2015.05.18 10:55:51 3: set heizung /heatingCircuits/hc2/switchPrograms/Eigen2/6-Sa 0400 day 2000 night : The service /heatingCircuits/hc2/switchPrograms/Eigen2 has been changed succesfully!
2015.05.18 10:55:52 3: set heizung /heatingCircuits/hc2/switchPrograms/Eigen2/7-Su 0400 day 2000 night : The service /heatingCircuits/hc2/switchPrograms/Eigen2 has been changed succesfully!
Das Log sagt zwar, dass 5 von 7 Schreibversuche erfolgreich waren, aber wenn ich einen get mache habe ich wieder die alten Werte drin stehen (Bild2 und Bild3).

Habe dann zweimal versucht den Montag-Wert zu ändern. Klappte aber erst nach dem zweiten mal (Bild4 und 5).
Zitat2015.05.18 11:04:56 3: set heizung /heatingCircuits/hc2/switchPrograms/Eigen2/1-Mo 0400 day 1100 night : ERROR - The service /heatingCircuits/hc2/switchPrograms/Eigen2 could not changed!

2015.05.18 11:06:21 3: set heizung /heatingCircuits/hc2/switchPrograms/Eigen2/1-Mo 0400 day 1100 night : The service /heatingCircuits/hc2/switchPrograms/Eigen2 has been changed succesfully!

Ich bin erst vor einigen Tagen auf einen Raspi2 B umgestiegen. Auf meinem Ubuntu-Server auf dem fhem vorher lief und ich nie Probleme hatte, funktioniert überhaupt kein Schreibvorgang der Heizprogramme. Habe ich gestern Abend mehrmals ausprobiert.

DLindner

Mir ist noch etwas aufgefallen. Seit der vorletzten oder letzten Version wird nur noch ein Eintrag nach get km200 /notifications (json) angezeigt, obwohl 4 Fehler im BC 10 eingetragen sind.

Sailor

#879
Hi DLindner

Zitat von: DLindner am 18 Mai 2015, 12:20:01
Mir ist noch etwas aufgefallen. Seit der vorletzten oder letzten Version wird nur noch ein Eintrag nach get km200 /notifications (json) angezeigt, obwohl 4 Fehler im BC 10 eingetragen sind.

So was Ähnliches habe ich auch: Ich habe 10 Einträge im BC und keine in den "/notifications".

Ich vermute nach einem gewissen Alter der Fehlermeldungen werden diese nicht mehr an das KM200 Modul übertragen.

Lass uns einen Quercheck machen: Welchen Zeitstempel (seitens des BC) hat die verbliebende Meldung des KM200?
Welche Zeitstempel haben die Fehlermeldungen im BC?

Evtl. vergleichen wir das sogenannte "Schwellendatum" mit anderen Usern hier im Forum.


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

Sailor

An alle:

Version 0050 ist raus.


Mit dieser Version kann man jetzt das Wochenprogramm komplett als String ändern

Beispiel

set myKm200 /dhwCircuits/dhw1/switchPrograms/A [{"setpoint":"high","dayOfWeek":"Mo","time":240},{"setpoint":"off","dayOfWeek":"Mo","time":1320},{"setpoint":"high","dayOfWeek":"Tu","time":240},{"setpoint":"off","dayOfWeek":"Tu","time":1320},{"setpoint":"high","dayOfWeek":"We","time":240},{"setpoint":"off","dayOfWeek":"We","time":1320},{"setpoint":"high","dayOfWeek":"Th","time":240},{"setpoint":"off","dayOfWeek":"Th","time":1320},{"setpoint":"high","dayOfWeek":"Fr","time":240},{"setpoint":"off","dayOfWeek":"Fr","time":1320},{"setpoint":"high","dayOfWeek":"Sa","time":360},{"setpoint":"off","dayOfWeek":"Sa","time":1320},{"setpoint":"high","dayOfWeek":"Su","time":360},{"setpoint":"off","dayOfWeek":"Su","time":1320}]


Wer eine Erfolgsmeldung sehen will, muss sich GENAUSTENS an die Reihenfolge oben halten: setpoint, dayOfWeek, time und nirgendwo ein Leerzeichen innerhalb der eckigen Klammern.




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...

DLindner

Hi Sailor,
ZitatIch vermute nach einem gewissen Alter der Fehlermeldungen werden diese nicht mehr an das KM200 Modul übertragen.

Lass uns einen Quercheck machen: Welchen Zeitstempel (seitens des BC) hat die verbliebende Meldung des KM200?
Welche Zeitstempel haben die Fehlermeldungen im BC?

Meine 4 Fehler sind alle vom 18.06.15 zw. 02:52 und 13:25.

In den vorherigen Versionen wurden diese auch angezeigt. Kann es sein, dass durch deine Sortierung Einträge vom gleichen Tag verschluckt werden?

Sailor

Hi DLindner

Zitat von: DLindner am 19 Mai 2015, 13:56:01
Hi Sailor,
Meine 4 Fehler sind alle vom 18.06.15 zw. 02:52 und 13:25.
In den vorherigen Versionen wurden diese auch angezeigt. Kann es sein, dass durch deine Sortierung Einträge vom gleichen Tag verschluckt werden?

Gib mal get myKm200 /notifications json ein.

Tauchen die Fehlermeldungen dort auf?

Wenn nicht, dann stellt sie das KM200 nicht mehr bereit.

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

Sailor

#883
Hallo DLindner

magst Du deine finale Versionen der nun als Beitrags ins fhemWiki stellen.

Habe dir dort auch schon ein Plätzchen mit Einladung reserviert.  ;)

Bitte dabei die Standard-Nomenklatur für Code im Wiki beachten.
Z.B: das Device heißt immer mit Prefix "my" gefolgt vom Modulnamen... also "myKm200".

Im Namen der Community: Danke vorab!

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

DLindner

#884
Hi Sailor,
Zitatmagst Du deine finale Versionen der nun als Beitrags ins fhemWiki stellen.
werde ich in den nächsten Wochen anfangen. Muss mir erst sicher sein, dass alles funktioniert.

Noch eine Frage zu dem Übergabestring. In welcher Reihenfolge müssen die Werte denn übergeben werden?
Zitat{"setpoint":"high","dayOfWeek":"Mo","time":240},
oder
Zitat{"dayOfWeek":"Mo","time":360,"setpoint":"day"}

Hat sich erledigt. 2.Version