Ankündigung

Einklappen
Keine Ankündigung bisher.

Daikin Klimanalage über http (WLAN) steuern

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Daikin Klimanalage über http (WLAN) steuern

    Hallo liebe Foristen,

    verstreut über viele Threads finde ich einige Informationen zum Steuern von DAIKIN Klimaanlagen.

    Daikin hat einen eigenen WiFi Controller (bei mir BRP069B41) der über ein eApp gesteuert werden kann.

    Hier aus dem Forum hab ich den Github Link mit der Dokumentation der Befehle gefischt: https://github.com/ael-code/daikin-control

    Schnell eine virutellen Ausgang definiert .. und läuft.

    ABER: Das Kilmagerät erwartet immer eine vollständige Konfiguration aus

    - Modus (Kühlen, Heizen,...)
    - Temperatur SOLL
    - Ventilatorgeschwindigigkeit
    - Modus für die Luftschaufeln (also schwenken des Luftstroms oder konstant / automatisch)

    Damit die Menge der gültigen Kombinationen sehr groß, der Virtuelle Ausgang verdaut nur einern Parameter.

    Nach einigem Überlegen habe ich mir ein PicoC Script geschrieben, das den Befehl zusammenbaut und per httpget auch sendet.

    Das funktioniert sehr gut, hat aber eine Downside:

    - Wenn ich die Klimasteuerung in die Raumseiten einbeiden will (ich hab 4 Innen-Geräte) müsste ich das Script für jeden Raum laufen lassen, damit auf einen Wechsel von z.B. der Temperatur in Raum 1 reagiert werden kann. Ich kann nicht ausschliessen, das wer in Raum 2 den "Ventilator" hochdrehen will.

    - KEINE Zuordnung zu den Räumen in der UX, sondern nur die Kategorie "Klima / Zentral" und dort über einen Radio-Button den Raum vorwählen und dann einen "Vorwählen / Senden" Prozess.


    Hat wer eine bessere Idee?

    Zuletzt geändert von jensmh; 30.Sep.2019, 13:57.

  • #2
    Hier noch das Script:

    /*
    Create the URL to control DAIKIN AC
    Using HTTP over WiFi Controller

    Input
    AI1: On/Off
    AI2: FanSpeed (FanRate)
    AI3: Swing Mode
    AI4: Temperature
    TI1: IP for AC WiFi Adapter

    Output: Result String (OK or ERROR)

    Created by Jens M Hoevelmann 2019,
    Version 1.0

    */

    // EXAMPLE OF RESULT: http://192.168.1.201/aircon/set_cont...rate=A&f_dir=0
    /* Parameters

    FanSpeed
    A = Auto
    B = Silent
    3-7 = Manual Levels

    SwingMode
    0 all wings stopped
    1 vertical wings motion
    2 horizontal wings motion
    3 vertical and horizontal wings motion

    Operating Modes (here fixed to 3)
    value desc
    2 DEHUMDIFICATOR
    3 COLD
    4 HOT
    6 FAN
    0-1-7 AUTO

    Temperature in Centigrades
    */

    #define SLEEPTIME 1000 //Sleep in ms -> only one change per second is processed
    #define LOGGING 2 // Log all here (0-1 = Log nothing)


    // Globals
    char cACCommand[128]; //Command String
    char cTargetIP[18]; //IP Adress for AC

    int nEvents; // Event: Input Value Changes as Bit-Field from SPS

    float fPowState; // Power State
    float fTemp; // Target Temperature
    float fFanSpeed; // Speed for Fan
    float fSwingMode; // Moving Wings

    char cFanSpeed[2]; // Char Versions of above
    char cPowState[2]; // used for command string
    char cTemp[2];
    char cSwingMode[2];

    int iCheckLen; // Length-Check



    while(1==1){ // Main loop
    sleep(SLEEPTIME); // Limit CPU Load and sleed for

    nEvents = getinputevent(); // Read Input Values from SPS

    if (nEvents & 0xF8){ //Input Values Bit Mask --> React to all changes
    // Initialise the Input Values
    // --> SPS delivers always float for standard building blocks
    fPowState = getinput(0);
    fFanSpeed = getinput(1);
    fSwingMode = getinput(2);
    fTemp = getinput(3);

    // Read Text Input --> IP Adress (Use Status Block to get configurable text)
    cTargetIP = getinputtext(0);

    // Check if length is correct, no other IP syntax check
    iCheckLen = strlen(cTargetIP);

    // If IP has wrong length (1.1.1.1 -> Min 7
    // 123.123.123.123 > 15 + /0 -> Max 16)
    // Do nothing but log
    if ((iCheckLen<=6) || (iCheckLen>16))
    {
    setoutputtext(0,"IP Format Error"); // to UI
    if (LOGGING>=2)
    {
    printf("Check IP Format %s",cTargetIP); // LogFile
    }
    }
    else
    {
    // Check if input values are allowed and set result string
    // If any value is invalid, default setting is chosen

    switch (fFanSpeed) {
    case 10: cFanSpeed = "A"; break;
    case 11: cFanSpeed = "B";break;
    case 3: cFanSpeed = "3";break;
    case 4: cFanSpeed = "4";break;
    case 5: cFanSpeed = "5";break;
    case 6: cFanSpeed = "6";break;
    case 7: cFanSpeed = "7";break;
    default: cFanSpeed = "A";break;
    }

    switch (fPowState) {
    case 0: cPowState = "0"; break;
    case 1: cPowState = "1";break;
    default: cPowState = "0";break;
    }

    switch (fSwingMode) {
    case 0: cSwingMode = "0"; break;
    case 1: cSwingMode = "1";break;
    case 2: cSwingMode = "2";break;
    case 3: cSwingMode = "3";break;
    default: cSwingMode = "0";break;
    }

    // Limit temperature to 18 to 31 C
    if (fTemp < 18)
    {
    fTemp=18;
    }

    if (fTemp >31)
    {
    fTemp=31;
    }

    //Create Command-String
    sprintf(cACCommand,"/aircon/set_control_info?pow=%s&mode=3&stemp=%f&shum=0&f_r ate=%s&f_dir=%s",cPowState,fTemp,cFanSpeed, cSwingMode );

    // Send Command to AC
    char* cRequestResult = httpget(cTargetIP,cACCommand);

    //Send Result to Output
    if (strlen(cRequestResult)>= 6) // Expected result:
    // ret=OK,adv=
    { // Check for OK in response string
    if (strlen(strstr(cRequestResult,"OK"))>0)
    {
    setoutputtext(0,"AC Command OK");

    }
    else // No OK --> Error
    {
    setoutputtext(0,"AC Command ERROR");

    }

    }
    else // No Response (wrong IP, connectivity
    {
    setoutputtext(0,"AC No Response");

    }

    //Send to logfile of SPS
    if (LOGGING>=2)
    {
    printf(cTargetIP); // Used IP
    printf(cACCommand); // Command as sent
    printf(cRequestResult); // Response from AC

    }

    free(cRequestResult); // Free Memory for Result-String
    }
    }
    // End Main Loop
    }

    Kommentar


    • #3
      Im Grunde lässt sich das auch über einen Statusbaustein machen. Vier Eingänge mit den unterschiedlichen Werten.
      Am Textausgang lassen sich die vier Werte zu einem einzelnen String kombinieren, der mit v im virtuellen Http-Ausgang übernommen wird.
      Jede Änderung eines Eingangs liefert einen neuen String am Ausgang.
      PN/PM: Ich bevorzuge die Beantwortung von Fragen in öffentlichen Threads, wo andere mithelfen und mitprofitieren können. Herzlichen Dank!

      Kommentar


      • #4
        Gute Idee Christian!

        Wenn das klappt kann ich das Script wegwerfen. Eigene Programmierung mit Zeigern und ohne echten Debugger ist immer ein Risiko für Memory-Leaks!

        Danke,

        Jens
        Zuletzt geändert von jensmh; 07.Okt.2019, 15:25. Grund: Typo

        Kommentar


        • #5
          Zitat von Christian Fenzl Beitrag anzeigen
          Im Grunde lässt sich das auch über einen Statusbaustein machen. Vier Eingänge mit den unterschiedlichen Werten.
          Am Textausgang lassen sich die vier Werte zu einem einzelnen String kombinieren, der mit v im virtuellen Http-Ausgang übernommen wird.
          Jede Änderung eines Eingangs liefert einen neuen String am Ausgang.
          Hallo Christian,
          habe da schon eine Weile rumprobiert

          gibt es eine Möglichkeit eine Auswahl aus:

          FanSpeed
          A = Auto
          B = Silent
          3-7 = Manual Levels

          dem Statusbaustein am Eingang zur Verfügung zu stellen?

          Kommentar


          • Christian Fenzl
            Christian Fenzl kommentierte
            Kommentar bearbeiten
            Mit den Radiotasten zum Beispiel.

        • #6
          Danke für den Hinweis

          Habe es mal für einen Raum umgesetzt - Radiobutton und Statusbaustein für Lüfterstufe (A,S,3-7)

          und dann auf einen Statusbaustein für den String


          Klicke auf die Grafik für eine vergrößerte Ansicht  Name: Bildschirmfoto 2019-10-10 um 16.34.53.png Ansichten: 0 Größe: 65,9 KB ID: 215873
          Klicke auf die Grafik für eine vergrößerte Ansicht  Name: Bildschirmfoto 2019-10-10 um 16.36.54.png Ansichten: 0 Größe: 496,3 KB ID: 215874


          Edit: wobei das Problem mit dem HTTP "Befehl bei EIN" beim Neustart, seitens Loxone noch nicht geklärt ist
          Zuletzt geändert von ledchab; 10.Okt.2019, 17:44.

          Kommentar


          • jensmh
            jensmh kommentierte
            Kommentar bearbeiten
            Den Modus Kühlen hast Du fest verdrahtet? Der Statusbaustein hat ja nur vier Eingänge

          • ledchab
            ledchab kommentierte
            Kommentar bearbeiten
            ja erstmal fest verdrahtet könnte man aber m.e. auch über einen weiteren Statusbaustein lösen - brauche ich aber momentan nicht

        • #7
          Hi,

          ich habe auch meine Daikin mittles HTTP angebunden. Jetzt wollte ich das Spasshalber auch mal mit Temperatur über Statusbaustein probieren, aber irgendwie will der virtuelle HTTP Ausgang nichts schicken. Ich übergebe nach dem Statusbaustein den String an den virtuellen HTTP Ausgang. Statt der URL hab ich dort jetzt die Variable "<v>" eingefügt. Das sollte doch passen oder? Ich schalte bereits die Klima ein und aus mittels HTTP Ausgang. Aber da verwende ich halt die fixe URL!

          Klicke auf die Grafik für eine vergrößerte Ansicht  Name: 20-10-_2019_02-30-36.png Ansichten: 0 Größe: 12,9 KB ID: 216845Klicke auf die Grafik für eine vergrößerte Ansicht  Name: 20-10-_2019_02-30-16.png Ansichten: 0 Größe: 9,6 KB ID: 216846Klicke auf die Grafik für eine vergrößerte Ansicht  Name: 20-10-_2019_02-29-40.png Ansichten: 0 Größe: 7,8 KB ID: 216847
          Zuletzt geändert von croxxi; In den letzten 4 Wochen.

          Kommentar


          • #8

            Ausgangsbefehl ist kein Digitalausgang ???

            Edit: bei mir kein Digitalausgang
            Zuletzt geändert von ledchab; In den letzten 4 Wochen.

            Kommentar


            • croxxi
              croxxi kommentierte
              Kommentar bearbeiten
              Ahh Danke, muss ich checken ich glaube es steht tatsächlich auf Digital

              EDIT: Yes Sir das wars Funktioniert jetzt pipi fein, danke nochmal für den Hinweis!
              Zuletzt geändert von croxxi; In den letzten 4 Wochen.
          Lädt...
          X