Closed tommiSF closed 6 years ago
Hallo Thomas, ich habe eine neue Version hochgeladen wo ich als Beispiel deinen Wunsch eingebaut habe. Du müsstest die "parameter.h" erweitern und die RscpMain.cpp erneuern oder anpassen.
Um neue Werte zur HM zu senden muss zum einen ein Parameter für die ISE_ID angelegt werden und zum anderen der Befehl zum senden an die entsprechende stelle in den Code eingeführt werden. Für die Tracker habe ich das jetzt mal gemacht dann kann man es als Beispiel für weitere Wünsche nutzen. In der "parameter.h" sind die Zeilen für die ISE_ID eingefügt (eigentlich egal wo):
#define TRACKER_POWER 1
#define TAG_EMS_ISE_TRACKER_1 38884
#define TAG_EMS_ISE_TRACKER_2 38885
#define TRACKER_VOLTAGE 1
#define TRACKER_CURRENT 1
Die Beispiel ISE_IDs müssen natürlich durch die korrekte ISE der HM für die Systemvariable ersetzt werden. Den Namen der Systemvariable kannst du wie oben erwähnt in der HM einrichten, aber wie die Systemvariable heißt ist eigentlich egal nur die ISE_ID ist wichtig,
Der Bereich in der Datei "RscpMain.cpp" sieht jetzt wie folgt aus:
case TAG_PVI_DC_POWER: {
int index = -1;
float TAG_OUT_PVI_DC_POWER = 0;
std::vector<SRscpValue> container = protocol->getValueAsContainer(&PVIData[i]);
for(size_t n = 0; n < container.size(); n++) {
if((container[n].tag == TAG_PVI_INDEX) ) {
index = protocol->getValueAsUInt16(&container[n]);
}
else if((container[n].tag == TAG_PVI_VALUE)) {
TAG_OUT_PVI_DC_POWER = protocol->getValueAsFloat32(&container[n]);
if (index == 0){
cout << "PVI DC-Power 1 = " << TAG_OUT_PVI_DC_POWER << " \n";
writeRscp(PosPVIDCP1,TAG_OUT_PVI_DC_POWER);
printsendHM(CounterHM, TAG_EMS_ISE_TRACKER_1, TAG_OUT_PVI_DC_POWER);
}
else if (index == 1){
cout << "PVI DC-Power 2 = " << TAG_OUT_PVI_DC_POWER << " \n";
writeRscp(PosPVIDCP2,TAG_OUT_PVI_DC_POWER);
printsendHM(CounterHM, TAG_EMS_ISE_TRACKER_2, TAG_OUT_PVI_DC_POWER);
}
}
}
protocol->destroyValueData(container);
break;
}
Folgende Funktion übernimmt das Senden zur HM:
printsendHM(CounterHM, TAG_EMS_ISE_TRACKER_1, TAG_OUT_PVI_DC_POWER);
printsendHM() startet die Funktion, deklariert in der Rscp/RWData.cpp CounterHM ist der Zähler für den Zeitabstand für das senden zur HM TAG_EMS_ISE_TRACKER_1 ist der Parameter aus der "parameter.h" für die ISE_ID der Systemvariable TAG_OUT_PVI_DC_POWER ist der Wert der zuvor mit der RSCP Applikation vom S10 gelesen
So ich hoffe meine Erklärung ist verständlich, damit du diese ggf. auch für weitere Variablen nutzen kannst.
Viele Grüße Nico
Kleine Erweiterung in der Anleitung für HomeMatic eingefügt, somit schliße dieser Issue erst einmal.
Hallo Nico,
vielen Dank, die Trackerdaten werden nun an die HM gesendet.
Übrigens, die E3dcGui und E3dctoHM sind 1a, genau das hatte ich gesucht (E3DC + Grünbeck + Display). Super Arbeit!
Grüße
Thomas
Am Mo., 25. Juni 2018 um 21:44 Uhr schrieb nischram < notifications@github.com>:
Hallo Thomas, ich habe eine neue Version hochgeladen wo ich als Beispiel deinen Wunsch eingebaut habe. Du müsstest die "parameter.h" erweitern und die RscpMain.cpp erneuern oder anpassen.
Um neue Werte zur HM zu senden muss zum einen ein Parameter für die ISE_ID angelegt werden und zum anderen der Befehl zum senden an die entsprechende stelle in den Code eingeführt werden. Für die Tracker habe ich das jetzt mal gemacht dann kann man es als Beispiel für weitere Wünsche nutzen. In der "parameter.h" sind die Zeilen für die ISE_ID eingefügt (eigentlich egal wo):
define TRACKER_POWER 1
define TAG_EMS_ISE_TRACKER_1 38884
define TAG_EMS_ISE_TRACKER_2 38885
define TRACKER_VOLTAGE 1
define TRACKER_CURRENT 1
Die Beispiel ISE_IDs müssen natürlich durch die korrekte ISE der HM für die Systemvariable ersetzt werden. Den Namen der Systemvariable kannst du wie oben erwähnt in der HM einrichten, aber wie die Systemvariable heißt ist eigentlich egal nur die ISE_ID ist wichtig,
Der Bereich in der Datei "RscpMain.cpp" sieht jetzt wie folgt aus:
case TAG_PVI_DC_POWER: { int index = -1; float TAG_OUT_PVI_DC_POWER = 0; std::vector<SRscpValue> container = protocol->getValueAsContainer(&PVIData[i]); for(size_t n = 0; n < container.size(); n++) { if((container[n].tag == TAG_PVI_INDEX) ) { index = protocol->getValueAsUInt16(&container[n]); } else if((container[n].tag == TAG_PVI_VALUE)) { TAG_OUT_PVI_DC_POWER = protocol->getValueAsFloat32(&container[n]); if (index == 0){ cout << "PVI DC-Power 1 = " << TAG_OUT_PVI_DC_POWER << " \n"; writeRscp(PosPVIDCP1,TAG_OUT_PVI_DC_POWER); printsendHM(CounterHM, TAG_EMS_ISE_TRACKER_1, TAG_OUT_PVI_DC_POWER); } else if (index == 1){ cout << "PVI DC-Power 2 = " << TAG_OUT_PVI_DC_POWER << " \n"; writeRscp(PosPVIDCP2,TAG_OUT_PVI_DC_POWER); printsendHM(CounterHM, TAG_EMS_ISE_TRACKER_2, TAG_OUT_PVI_DC_POWER); } } } protocol->destroyValueData(container); break; }
Folgende Funktion übernimmt das Senden zur HM:
printsendHM(CounterHM, TAG_EMS_ISE_TRACKER_1, TAG_OUT_PVI_DC_POWER);
printsendHM() startet die Funktion, deklariert in der Rscp/RWData.cpp CounterHM ist der Zähler für den Zeitabstand für das senden zur HM TAG_EMS_ISE_TRACKER_1 ist der Parameter aus der "parameter.h" für die ISE_ID der Systemvariable TAG_OUT_PVI_DC_POWER ist der Wert der zuvor mit der RSCP Applikation vom S10 gelesen
So ich hoffe meine Erklärung ist verständlich, damit du diese ggf. auch für weitere Variablen nutzen kannst.
Viele Grüße Nico
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/nischram/E3dcGui/issues/30#issuecomment-400071848, or mute the thread https://github.com/notifications/unsubscribe-auth/Amrj4eQtB8aZve0iQAZL7PnZCgVshQpkks5uAT2kgaJpZM4U1ov- .
Hallo, gibt es eine Empfehlung, wie oft man die Daten von der S10E zur Homematic schicken lassen sollte? In der S10E werden diese ja sekündlich aktualisiert. Ziel sollte es schon sein, so viele Details wie möglich zu erhalten. Viele Grüße Bernd
Hallo Bernd,
kleiner wie jede Sekunde geht nicht in meiner RSCP Applikation. Wenn du die Daten speichern willst ist 1x je Sekunde eine Riesen Datenmenge. Wenn die Daten in die Homematic übertragen werden sollen, kommt die API nicht mit einer Übertragung von 1x je Sekunde zurecht, hier würde ich nicht häufiger übertragen als alle 15 Sekunden. Gruß Nico
Hallo Nico,vielen Dank für die schnelle Antwort! Welche Häufigkeit hast Du gewählt? Ich habe mir noch nicht alles angesehen.Werden über die Schnittstelle die Vergangenheitswerte aus dem E3DC Portal genommen oder erfolgt die Aggregierung auf Basis der erfassten täglich kumulierten Werte um kurz vor 24h?Dann hab ich noch eine Frage zu den negativen Werten. Wieso kann die CCU hier nicht mit umgehen? Hab gestern mal einen Test gemacht und zumindest größer und kleiner Funktionen haben im Skript bei negativen Werten funktioniert. Mir wäre eine Variable für beides lieber. Die Variablen muss ich alle händisch anlegen oder hast Du das auch in ein Skript verpackt? Sehr cooles Projekt übrigens!! Viele Grüße Bernd
Hallo,
Ich frage für das Display jede Sekunde die Werte ab. An die Homematic sende ich aktuell alle 30 Sekunden. In der HM habe ich keine Darstellung oder kein Logging, für die Spülmaschine oder Waschmaschine reicht es alle 30 Sekunden zu berechnen ob die loslaufen dürfen. Die Leistungskurve die ich im Display anzeige ist nur eine 15 Minuten-Mittelwertbildung aus den Sekundenwerten als durchlaufende Grafik. Im Hauptschirm vom Display die "Vergangenheitswerte" sind die HistoryValues die ich vom System abfrage. Hierfür haben in der Software nichts eingebaut um die Werte zur HM zu übertragen. Die HistoryValues sind die Daten die vom System gespeichert werden und dann auch zum Portal übertragen werden.
Da du zwei Anfragen gestellt hast habe ich dir natürlich auch in zwei Mal geantwortet ;-) Issue #37
Viele Grüße Nico
Kann man die parameter.h für die Leistungen Tracker 1und 2 als weitere Systemvariablen in der Homematic erweitern? Wenn ja, was muss noch angepasst werden? z.B. S10_EMS_POWER_TRACKER1 S10_EMS_POWER_TRACKER2
Viele Grüße
Thomas