+ Antworten
Ergebnis 1 bis 2 von 2
  1. #1
    Registriert seit
    Sep 2018
    Beiträge
    6

    Standard Daikin Split Klimaanlage mit WiFi

    Hi zusammen,

    nachdem ich schon soviel hilfreiches aus dem Forum entnommen hab hier auch mal was zurück.
    Mir ist bewusst dass das immer noch rumgefrickelt ist und am liebsten hätte ich das in ein Modul gegossen - dafür fehlt mir aber im Moment sowohl Wissen als auch Zeit. Vielleicht hilft es aber ja jemand anders genau das zu tun.

    Zur Integration von Daikin Geräten gibt es schon einen sehr hiflfreichen Thread. Mir war das nur etwas zu manuell für mehrere Geräte und es hat zumindest für meine Daikin Geräte nicht alles korrekt funktioniert. Dazu wollte ich auch die Fehlercodes vernünftig aufgeschlüsselt haben und auch mehr Werte auslesen.

    Hier mal meine angepasste Version:
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Screenshot 2020-10-11 121518.png 
Hits:	49 
Größe:	65.4 KB 
ID:	55706

    Das ganze besteht aus zwei Scripten die dann einfach per Ereignis aufgerufen werden und sich die richtigen Variablen über die Variablennamen heraussuchen. Wenn jemand das übernehmen möchte: Beide Scripte (Daikin Get Data und Daiking Set Data) irgendwo hinpacken. Dann die Variablen und ein getData Script genauso wie im Screenshot anlegen und ein 5 min Ereignis dazupacken. Im Script wird nur das Daikin Get Data Script inkludiert (bei mir ID 14485):
    PHP-Code:
    <?php

    include(IPS_GetScriptFile(14485));
    Am Ende nur noch die Variable IP updaten auf die IP die das jeweilige Daikin Klimagerät hat. Für weitere Geräte einfach den kompletten Block duplizieren und wieder die IP anpassen.

    Die Profile hab ich von oben genannten Thread übernommen.
    Alle Variablen die Werte ändern sollen kriegen als Eigene Aktion das Daikin Set Data Script, hier als Beispiel für die Soll Feuchte:
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Screenshot 2020-10-11 122555.png 
Hits:	37 
Größe:	43.7 KB 
ID:	55707

    Daikin Get Data
    PHP-Code:
    <?php

    $aQueryTypes 
    = array("common/basic_info",
                         
    "aircon/get_control_info",
                         
    "aircon/get_sensor_info",
                         
    //"aircon/get_week_power",
                         //"aircon/get_year_power"
                        
    );

    if(
    $_IPS['SENDER'] !== 'TimerEvent') return false;

    // Fehlercodes Daikin
    $aErrorCodeTranslation = array("0" => "Kein Fehler",
                                   
    "10000" => "Konkurriende Modi (Kalt/Warm) angefordert",
                                   
    "U0" => "Zu wenig Kältemittel",
                                   
    "U2" => "Überspannung erkannt",
                                   
    "U4" => "Fehler bei Signalübertragung Innen<->Außen",
                                   
    "UA" => "Fehler bei Kombination Innen und Außengerät",
                                   
    "A1" => "Fehler bei Platine der Inneneinheit",
                                   
    "A5" => "Schutz gegen Einfrieren oder Hochdruck-Kontrolle",
                                   
    "AH" => "Fehler bei Streamer-Einheit",
                                   
    "C4" => "Fehler bei Wärmetauscher-Thermistor der Inneneinheit",
                                   
    "C7" => "Fehler bei Öffnen oder Schließen der Frontblende",
                                   
    "C9" => "Fehler bei Raumtemperatur-Thermistor",
                                   
    "CC" => "Fehler bei Feuchtigkeitssensor",
                                   
    "EA" => "Fehler bei 4-Wege-Ventil",
                                   
    "E1" => "Fehler bei Platine der Außeneinheit",
                                   
    "E5" => "Aktivierung des Überlastschutzes (Überlastung des Verdichters)",
                                   
    "E6" => "Verdichter-Blockierung",
                                   
    "E7" => "Blockierung des Gleichstrom-Ventilators",
                                   
    "E8" => "Eingangsstrom-Überstrom",
                                   
    "F3" => "Temperatursteuerung bei Abflussrohr",
                                   
    "F6" => "Hochdruck-Kontrolle (bei Kühlen)",
                                   
    "H0" => "Fehler bei Sensor des Verdichtersystems",
                                   
    "H6" => "Fehler bei Positionssensor",
                                   
    "H8" => "Fehler bei Sensor DC-Spannung / Stromstärke",
                                   
    "H9" => "Fehler bei Außenlufttemperatur-Thermistor",
                                   
    "J3" => "Fehler bei Thermistor des Abflussrohrs",
                                   
    "J6" => "Fehler bei Wärmetauscher-Thermistor der Außeneinheit",
                                   
    "L3" => "Fehler durch Überhitzung einer elektrischen Komponente",
                                   
    "L4" => "Anstieg bei Radiatorlamellen-Temperatur",
                                   
    "L5" => "Momentaner Überstrom bei Inverter (Gleichstrom)",
                                   
    "P4" => "Fehler bei Radiatiorlamellen-Thermistor",
                                   
    "F8" => "Fehler bei interner Temperatur des Verdichters",
                                  );

    // Fraegt die Klimaanlage ab
    function queryAircon($sIP$aTypes) {
        
    $context stream_context_create(array(
            
    'http' => array(
                
    'timeout' => 2
                
    )
            )
        );


        foreach(
    $aTypes as $sCurrent) {
            try {
                
    $result = @file_get_contents("http://$sIP/$sCurrent"0$context);

                if(
    $result === false || substr($result42) !== "OK") {
                    
    IPS_LogMessage(IPS_GetName($_IPS['SELF'])." (".$_IPS['SELF'].")""Fehler bei Abfrage von Klimaanlage $sIP:\n$result");
                    return 
    false;
                }
            } catch (
    Exception $e) {
                
    IPS_LogMessage(IPS_GetName($_IPS['SELF'])." (".$_IPS['SELF'].")""Fehler bei Abfrage von Klimaanlage $sIP:\n".$e->getMessage());
                return 
    false;
            }

            
    $sCurrent substr($sCurrentstrpos($sCurrent"/")+1);
            
    $aResult[$sCurrent] = sortReturnIntoArray($result);
        }

    return 
    $aResult;
    }

    // Packt die Daten der Klimaanlage sauber in ein Array
    function sortReturnIntoArray($aData) {
        
    $aTmp1 explode(","$aData);

        foreach(
    $aTmp1 as $aCurrent) {
            
    $aTmp2 explode("="$aCurrent);
            
    $aResult[$aTmp2[0]] = $aTmp2[1];
        }

    return 
    $aResult;
    }

    // Liefert Variablen ID zu einem Variablennamen, liefert direkt Wert wenn $bReturnValue = true
    function tryFindVariableIDAndValue($sName$bReturnValue false) {
            
    $iId = @IPS_GetObjectIDByName($sNameIPS_GetParent($_IPS['TARGET']));

            if(
    $iId === false) {
                
    IPS_LogMessage(IPS_GetName($_IPS['SELF'])." (".$_IPS['SELF'].")""Keine Variable ".$sName." gefunden");
                return 
    false;
            } elseif(
    $bReturnValue) return GetValue($iId);
            else return 
    $iId;
    }

    // Daten auslesen triggern
    $sIP tryFindVariableIDAndValue("IP"1);
    $aData queryAircon($sIP$aQueryTypes);
    if(
    $aData === false) return false;


    // Daten zuweisen

    // Firmware Version
    $iIdFirmwareVer tryFindVariableIDAndValue("Firmware Version");
    SetValueString($iIdFirmwareVer$aData["basic_info"]['ver']);

    // MAC
    $iIdMAC tryFindVariableIDAndValue("MAC");
    SetValue($iIdMACintval($aData["basic_info"]['mac']));

    // Fehlercode
    $iIdErrorCode tryFindVariableIDAndValue("Fehlercode");
    if(!
    array_key_exists($aData["basic_info"]['err'], $aErrorCodeTranslation)) SetValueString($iIdErrorCode$aData["basic_info"]['err']);
    else 
    SetValueString($iIdErrorCode$aErrorCodeTranslation[$aData["basic_info"]['err']]);

    // Status: Geraet an oder aus
    $iIdPower tryFindVariableIDAndValue("Status");
    SetValue($iIdPowerintval($aData["get_control_info"]['pow']));

    // Modus: Auto, Entfeuchten, Umluft, Kühlen, Heizen
    $iIdMode tryFindVariableIDAndValue("Modus");
    SetValue($iIdModeintval($aData["get_control_info"]['mode']));

    // Soll Temperatur
    $iIdSTemp tryFindVariableIDAndValue("Soll Temperatur");
    if(
    $aData["get_control_info"]['stemp'] != "--"SetValue($iIdSTempfloatval($aData["get_control_info"]['stemp']));

    // Ist Temperatur
    $iIdHTemp tryFindVariableIDAndValue("Ist Temperatur");
    SetValue($iIdHTempfloatval($aData["get_sensor_info"]['htemp']));

    // Soll Feuchte
    $iIdSHum tryFindVariableIDAndValue("Soll Feuchte");
    SetValue($iIdSHumintval($aData["get_control_info"]['shum']));

    // Ist Feuchte
    $iIdHHum tryFindVariableIDAndValue("Ist Feuchte");
    SetValue($iIdHHumfloatval($aData["get_sensor_info"]['hhum']));

    // Außen Temperatur
    $iIdOTemp tryFindVariableIDAndValue("Außen Temperatur");
    SetValue($iIdOTempfloatval($aData["get_sensor_info"]['otemp']));

    // Kompressor Auslastung
    $iIdCmpFreq tryFindVariableIDAndValue("Kompressor Auslastung");
    SetValue($iIdCmpFreqfloatval($aData["get_sensor_info"]['cmpfreq']));

    // Lüfterstufe
    $aTranslatefRate = array("A" => 1"B" => 2"3" => 3"4" => 4"5" => 5"6" => 6"7" => 7);
    $iIdfRate tryFindVariableIDAndValue("Lüfterstufe");
    SetValue($iIdfRate$aTranslatefRate[$aData["get_control_info"]['f_rate']]);

    // Lüfterrichtung
    $iIdfDir tryFindVariableIDAndValue("Lüfterrichtung");
    SetValue($iIdfDirintval($aData["get_control_info"]['f_dir']));

    // Streamer Status An oder Aus
    $iIdStreamer tryFindVariableIDAndValue("Streamer");
    if(
    $aData["get_control_info"]['adv'] == "13"SetValue($iIdStreamer1);
    else 
    SetValue($iIdStreamer0);
    Daikin Set Data

    PHP-Code:
    <?php

    if(empty($_IPS['VARIABLE'])) return false;

    // Sucht Variablen ID nach Namen und gibt den richtigen aktuellen Wert zurück
    function tryFindVariableIDAndValue($sName) {
        if(
    $_IPS['SENDER'] == 'Variable' || $_IPS['SENDER'] == 'WebFront') {
            
    $iId = @IPS_GetObjectIDByName($sNameIPS_GetParent($_IPS['VARIABLE']));

            if(
    $iId === false) {
                
    IPS_LogMessage(IPS_GetName($_IPS['SELF'])." (".$_IPS['SELF'].")""Keine Variable ".$sName." gefunden");
                return 
    false;
            } else {
                if(
    $_IPS['VARIABLE'] === $iId) return $_IPS['VALUE'];
                else return 
    GetValue($iId);
            }
        }
    }

    // Die richtigen aktuellen Werte zuweisen
    $sIP tryFindVariableIDAndValue("IP");
    $bPower tryFindVariableIDAndValue("Status");
    $iMode tryFindVariableIDAndValue("Modus");
    $iFanspeed tryFindVariableIDAndValue("Lüfterstufe");
    $sFandir tryFindVariableIDAndValue("Lüfterrichtung");
    $fTtemp tryFindVariableIDAndValue("Soll Temperatur");
    $fThum tryFindVariableIDAndValue("Soll Feuchte");

    if(
    $bPower$bPower '1';
    else 
    $bPower '0';

    $aTranslatefRate = array(=> "A"=> "B"=> "3"=> "4"=> "5"=> "6"=> "7");
    $iFanspeed $aTranslatefRate[$iFanspeed];

    $data = array('pow'     => strval($bPower),
                  
    'mode'    => strval($iMode), 
                  
    'stemp'   => strval(str_replace(",""."$fTtemp)),
                  
    'shum'    => strval($fThum),
                  
    'b_stemp' => strval(str_replace(",""."$fTtemp)),
                  
    'b_shum'  => strval($fThum),
                  
    'f_rate'  => strval($iFanspeed),
                  
    'f_dir'   => strval($sFandir)
                 ); 

    $options = array( 
        
    'http' => array( 
            
    'header'  => "Content-type: application/x-www-form-urlencoded\r\n"
            
    'method'  => 'GET',
            
    'timeout' => 2,
            
    'content' => http_build_query($data
        ) 
    ); 
    $content http_build_query($data);
    $context stream_context_create($options); 
    $result  file_get_contents("http://$sIP/aircon/set_control_info?$content"false$context); 
    $data explode(","$result);

    if(
    $data[0] !== "ret=OK") {
        
    IPS_LogMessage(IPS_GetName($_IPS['SELF'])." (".$_IPS['SELF'].")""Error with aircon $sIP$result\nData sent $content");
    } else {
        
    // IPS_LogMessage(IPS_GetName($_IPS['SELF'])." (".$_IPS['SELF'].")", "Successfully sent to aircon $sIP: $content");

        // Wert in Symcon updaten wenn Daten korrekt gesendet wurden
        
    SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
    }

  2. #2
    Registriert seit
    Nov 2016
    Beiträge
    271

    Hallo moedido,

    vielen Dank. Klappt prima!
    Viele Grüße...
    Geändert von CarnivoreD (22.11.20 um 17:05 Uhr)

Ähnliche Themen

  1. Steuerung einer Daikin Split / Multisplit Klimaanlage mit WLAN Controller
    Von KrasserMann im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 30
    Letzter Beitrag: 22.06.20, 20:15
  2. Antworten: 0
    Letzter Beitrag: 20.06.20, 13:02
  3. Kaufempfehlung: Multi-Split-Klimaanlage
    Von Proxima im Forum Haustechnik
    Antworten: 12
    Letzter Beitrag: 08.10.18, 19:41
  4. Klimaanlage mit Wifi?
    Von Proner im Forum Haustechnik
    Antworten: 1
    Letzter Beitrag: 16.06.17, 18:33
  5. PHP: Parsen bzw. Alternative zu split -> join -> split
    Von bengie im Forum Skripte, PHP, SQL
    Antworten: 2
    Letzter Beitrag: 05.02.12, 22:13

Stichworte