nischram / E3dcGui

E3DC S10 / HomeMatic Daten abfragen, darstellen oder senden
36 stars 14 forks source link

Unknown tag 03840000 #83

Closed SK0660 closed 1 year ago

SK0660 commented 1 year ago

Hallo, ich habe nach dem Schema zum Einbau der Tracker Informationen versucht auch die Batterietemperaturen abzufragen und an die Homematic zu übermitteln. Das habe ich vor Jahren schonmal gemacht aber leider habe ich nur noch die exe auf der Homematic (Raspberrymatic) und die damals von mir geänderten Quellen habe ich durch eigene Dummheit leider alle gelöscht. Dabei war ich schon kurz davor es als Homematic addon zu generieren. Ich kann die neue RscpMain.cpp auch fehlerlos kompilieren aber es erfolgt keine Übermittlung der min/max Temperaturen in die entsprechende Variable. Wenn ich die alte exe starte erhalte ich aber Werte so dass ich davon ausgehen kann, dass es die entsprechenden Tags noch gibt. In der Ausgabe vom neu kompilierten RscpMain erscheint dann die oben genannte Fehlermeldung Unknown tag 03840000, allerdings nur einmal (jeweils in cyclic data und in der Homematic Übermittlung). Noch dazu erscheint sie nicht an der Stelle wo ich es erwarten würde bei den Batteriedaten sondern erst später in einem ganz anderen Abschnitt bei den Wallbox Ausgaben. Das genanne Tag TAG_BAT_DATA wird auch im Quellcode gar nicht erwähnt.

Ich hänge mal meinen RscpMain quelltext und den output ran. Kannst Du mir einen Tip geben was ich hier falsch mach? Ich muss zugeben, dass ich schon Jahre lang nichts mehr programmiert habe und mir auch die Erfahrung fehlt. Danke und Grüße Stefan PS: Entschuldigung wenn ich das hier falsch angelegt habe, ich habe mich heute erst hier angemeldet nur um diese Fargen zu stellen.

RscpMain-cpp.txt RscpMain-Output.txt

nischram commented 1 year ago

Hallo Stefan, gut das du gleich alles mitgesendet hast, so ist die Fehlersuche möglich gewesen. Du hast im oberen Bereich bei Zeile 102/103 die neunen TAGs eingefügt (wieder auskommentiert). Du hast dort innerhalb des BAT-Containers die TAGs TAG_BAT_REQ_MAX_DCB_CELL_TEMPERATURE und TAG_BAT_REQ_MIN_DCB_CELL_TEMPERATURE verwendet. Das sollte korrekt sein und die Abfrage starten.

Die Rückmeldung hast du im Bereich 543-554 eingebaut. Der Gesamtaufbau sieht auch gut aus. Nun zum Fehler: du hast als TAG für die Rückantwort den selben TAG wie für die Anfrage genommen. Hier musst du den TAG für die Antwort verwenden. Diese wären wie folgt TAG_BAT_MAX_DCB_CELL_TEMPERATURE und TAG_BAT_MIN_DCB_CELL_TEMPERATURE. Also Anfrage immer mit TAG_xxx_REQ_yyy und Antworten immer TAG_xxx_yyy Dein Bereich würde dann so aussehen:

                case TAG_BAT_MAX_DCB_CELL_TEMPERATURE: {    // response for TAG_BAT_REQ_MAX_DCB_CELL_TEMPERATURE
                    float fBatMaxTemp = protocol->getValueAsFloat32(&batteryData[i]);
                            if (RSCP_DETAILED_OUTPUT) cout << "Battery Max Temp " << fBatMaxTemp << " \n";
                    printsendHM(CounterHM, ISE_BAT_MAX_TEMP, fBatMaxTemp);
                    break;
                }
                case TAG_BAT_MIN_DCB_CELL_TEMPERATURE: {    // response for TAG_BAT_REQ_MIN_DCB_CELL_TEMPERATURE
                    float fBatMinTemp = protocol->getValueAsFloat32(&batteryData[i]);
                            if (RSCP_DETAILED_OUTPUT) cout << "Battery Min Temp " << fBatMinTemp << " \n";
                    printsendHM(CounterHM, ISE_BAT_MIN_TEMP, fBatMinTemp);
                    break;
                }

Testen konnte ich es gerade nicht, somit musst du es testen und dich ggf. wieder melden.

Viel Erfolg und viele Grüße Nico

SK0660 commented 1 year ago

Hallo Nico, vielen Dank für die schnelle Antwort und den wichtigen Hinweis mit den Frage/Antwort Tags. Da ist mir aufgefallen, dass ich mit meinem Versuch und Irrtum auch aus dem ganzen Block TAG_BAT_DATA keine Antworten gesehen habe weil ich den auch in TAG_BAT_REQ_DATA umbenannt hatte. Jetzt funktioniert alles wie gewollt. Nochmal Danke und viele Grüße Stefan