nischram / E3dcGui

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

E3dcGui as CCU addon #31

Closed skriessen closed 6 years ago

skriessen commented 6 years ago

Hi, is there a chance that e3dcgui will run as an ccu addon, or at least can be added into a raspberrymatic installation manually? I have searched for the required executables. (Git, make, gcc) using ssh but to no avail. Adding another raspberry can't be the only solution. Regards, Stefan

nischram commented 6 years ago

Hallo Stefan,

die Homematic basiert zwar auf Linux aber die Grundebene steht nicht frei zur Verfügung zumindest nicht mit den bekannten Linux-Befehlen. Somit habe ich keine Möglichkeit gefunden meine Software direkt auf der Homematic / RaspberryMatic laufen zu lassen. Das Display kann sicherlich auf keinen Fall zusammen mit der Homematic laufen. Leider habe ich nicht die Programmiererfahrung um aus meiner Applikation (oder aus der E3DC RSCP-Applikation) ein Add-On zu machen. Als alternative zu meiner Applikation kann man auch die Daten per Modbus vom S10 Abfragen, hier könnte man die Zusatz Software ioBroker verwenden (aber dafür ist auch ein Raspberry nötig). Viele Grüße Nico

VDRainer commented 6 years ago

Wäre es evtl. möglich die Werte an einen MQTT Broker zu publishen? Damit könnte das Programm in jede Home Automation (Ich verwende Home Assistant) eingebunden werden.

nischram commented 5 years ago

Hallo VDRainer, hatte die Nachricht übersehen... Über meine Applikation sehe ich da nicht so einfach die Möglichkeit, aber das sollte mit der Beispielsapplikation von E3DC kein Problem sein. So Ähnlich habe ich es mit der Applikation und dem senden der Daten zur Homematic gemacht. In der Applikation "RscpMain" habe ich für jeden TAG einen CURL Befehl integriert um die Daten an die API der Homematic zu senden. Hier ein Beispiel: (Rcp.Main.cpp)

      case TAG_EMS_POWER_HOME: {    // response for TAG_EMS_REQ_POWER_HOME
        int32_t TAG_EMS_OUT_POWER_HOME = protocol->getValueAsInt32(response);
        cout << "House Power is " << TAG_EMS_OUT_POWER_HOME << " W\n";
        writeRscp(PosHome,TAG_EMS_OUT_POWER_HOME);
        char file[20];
        snprintf (file, (size_t)20, "Home900");
        write900(PosHome900, file, TAG_EMS_OUT_POWER_HOME, Counter900);
        printsendHM(CounterHM, TAG_EMS_ISE_POWER_HOME, TAG_EMS_OUT_POWER_HOME);
        break;
      }

entscheidend ist die Zeile printsendHM(CounterHM, TAG_EMS_ISE_POWER_HOME, TAG_EMS_OUT_POWER_HOME); Die Funktion dazu sieht so aus: (Rscp/RWData.cpp)

{
  if(Homematic_E3DC == 1){
    if(CounterHM == HM_Intervall){
      char batch[128];
      memset(batch, 0x00, sizeof(batch));
      snprintf(batch, sizeof(batch), "curl -s \"http://%s/config/xmlapi/statechange.cgi?ise_id=%i&new_value=%i\" > /dev/null 2>&1",HM_IP , id, value);
      printf("send to Homematic ISE_ID %i new Value = %i\n",id, value);
      system(batch);
    }
  }
}

Vielleicht hilft dir das weiter. Viele Grüße Nico