Steuerung einer Daikin Split / Multisplit Klimaanlage mit WLAN Controller

@Lutz
Leider erst sehr späte Antwort. Ich habe die beiden Sachen mal verglichen. Es ändert sich Data3 (adv=13 wenn er eingeschaltet ist und bei aus ist adv=) . Nur wie muss das Script aussehen? Welche Variable muss ich auswählen?Gruss Syrko

Hi zusammen,

ich wollte mal eine Fingerübung ausprobieren, für ein richtiges Modul reicht es zwar nicht, aber es könnte ja als Grundlage herhalten :wink:

Erstellt eine Dummy Instanz pro Klima-Innengerät und darin ein Script. Im Anschluss fügt ihr folgendes ein:

<?php

// Hier die Ip der Anlage eintragen
$IP = '192.168.0.35';

// Ab hier Finger weg.

$SetFunctionFileContent = '<?php 
$ObjektInfo = IPS_GetObject(IPS_GetParent($_IPS[\'SELF\']));
$ObjectID=$ObjektInfo[\'ObjectID\'];

$IP = GetValue(IPS_GetObjectIDByIdent($ObjectID."_IP", $ObjectID));

function _DAIKIN_AC_READ_DATA_TO_ARRAY($IP) 
{
    $result = file_get_contents("http://$IP/aircon/get_control_info");
    parse_str(str_replace(",","&",$result), $OUTPUT);
	return $OUTPUT;
}

function _DAIKIN_AC_CREATE_VARIABLE_PROFILE($DATAPOINT_TYPE)
{
				switch($DATAPOINT_TYPE)
				{
					Case "pow": // Bool (0)
						IPS_CreateVariableProfile("_DAIKIN_AC_$DATAPOINT_TYPE", 0);
						IPS_SetVariableProfileAssociation("_DAIKIN_AC_$DATAPOINT_TYPE", 1, "An", "", 0x00FF00);
            			IPS_SetVariableProfileAssociation("_DAIKIN_AC_$DATAPOINT_TYPE", 0, "Aus", "", 0xFF0000);
					break;
					case "f_rate": // Integer (1)
						IPS_CreateVariableProfile("_DAIKIN_AC_$DATAPOINT_TYPE", 1);
            			IPS_SetVariableProfileAssociation("_DAIKIN_AC_$DATAPOINT_TYPE", 1, "Auto", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_DAIKIN_AC_$DATAPOINT_TYPE", 2, "Geräuscharm", "", 0xFFFFFF);
						IPS_SetVariableProfileAssociation("_DAIKIN_AC_$DATAPOINT_TYPE", 3, "Stufe 1", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_DAIKIN_AC_$DATAPOINT_TYPE", 4, "Stufe 2", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_DAIKIN_AC_$DATAPOINT_TYPE", 5, "Stufe 3", "", 0xFFFFFF);
                        IPS_SetVariableProfileAssociation("_DAIKIN_AC_$DATAPOINT_TYPE", 6, "Stufe 4", "", 0xFFFFFF);
                        IPS_SetVariableProfileAssociation("_DAIKIN_AC_$DATAPOINT_TYPE", 7, "Stufe 5", "", 0xFFFFFF);
					break;
                    case "f_dir": // Integer (1)
						IPS_CreateVariableProfile("_DAIKIN_AC_$DATAPOINT_TYPE", 1);
                        IPS_SetVariableProfileAssociation("_DAIKIN_AC_$DATAPOINT_TYPE", 0, "keine Schwingung", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_DAIKIN_AC_$DATAPOINT_TYPE", 1, "vertikales schwingen", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_DAIKIN_AC_$DATAPOINT_TYPE", 2, "horizontales schwingen", "", 0xFFFFFF);
						IPS_SetVariableProfileAssociation("_DAIKIN_AC_$DATAPOINT_TYPE", 3, "vertikales und horizontales schwingen", "", 0xFFFFFF);
					break;
                     case "mode": // Integer (1)
						IPS_CreateVariableProfile("_DAIKIN_AC_$DATAPOINT_TYPE", 1);
                        IPS_SetVariableProfileAssociation("_DAIKIN_AC_$DATAPOINT_TYPE", 0, "Auto", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_DAIKIN_AC_$DATAPOINT_TYPE", 1, "Auto", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_DAIKIN_AC_$DATAPOINT_TYPE", 2, "Entfeuchten", "", 0xFFFFFF);
						IPS_SetVariableProfileAssociation("_DAIKIN_AC_$DATAPOINT_TYPE", 3, "Kühlen", "", 0xFFFFFF);
                        IPS_SetVariableProfileAssociation("_DAIKIN_AC_$DATAPOINT_TYPE", 4, "Heizen", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_DAIKIN_AC_$DATAPOINT_TYPE", 5, "reserviert", "", 0xFFFFFF);
                        IPS_SetVariableProfileAssociation("_DAIKIN_AC_$DATAPOINT_TYPE", 6, "Ventilator", "", 0xFFFFFF);
                        IPS_SetVariableProfileAssociation("_DAIKIN_AC_$DATAPOINT_TYPE", 7, "Auto", "", 0xFFFFFF);
					break;
                    case "stemp": // Float (2)
						IPS_CreateVariableProfile("_DAIKIN_AC_$DATAPOINT_TYPE", 2);
            			IPS_SetVariableProfileText("_DAIKIN_AC_$DATAPOINT_TYPE", "", "°C");
                        IPS_SetVariableProfileValues("_DAIKIN_AC_$DATAPOINT_TYPE", 18, 31, 0.5);
                        IPS_SetVariableProfileDigits("_DAIKIN_AC_$DATAPOINT_TYPE",1); 
					break;
                    case "shum": // Float (2)
						IPS_CreateVariableProfile("_DAIKIN_AC_$DATAPOINT_TYPE", 2);
            			IPS_SetVariableProfileText("_DAIKIN_AC_$DATAPOINT_TYPE", "", "%");
					break;
				}
                
} 

// Profiltypen festlegen.
function _DAIKIN_AC_SET_PROFILETYPE($KEY)
{
    switch($KEY)
			{	case \'pow\'; $PROFILE_TYPE = 0; break;
				case \'mode\'; $PROFILE_TYPE = 1; break;
				case \'stemp\'; $PROFILE_TYPE = 2; break;
				case \'shum\'; $PROFILE_TYPE = 2; break;
                case \'f_rate\'; $PROFILE_TYPE = 1; break;
                case \'f_dir\'; $PROFILE_TYPE = 1; break;
			}
            return $PROFILE_TYPE;
}

// Variablennamen festlegen.
function _DAIKIN_AC_SET_VARNAME($KEY)
{
    switch($KEY)
			{	case \'pow\'; $VARIABLE_NAME = "Stromversorgung"; break;
				case \'mode\'; $VARIABLE_NAME = "Modus"; break;
				case \'stemp\'; $VARIABLE_NAME = "Temperatur"; break;
				case \'shum\'; $VARIABLE_NAME = "Luftfeuchtigkeit"; break;
                case \'f_rate\'; $VARIABLE_NAME = "Luftdurchsatz"; break;
                case \'f_dir\'; $VARIABLE_NAME = "Luftstromrichtung"; break;
			}
            return $VARIABLE_NAME;
}

function _DAIKIN_AC_CREATE_VARIABLE($ID, $IDENT, $KEY)
{
     $PARENTID = IPS_GetParent($ID);
     $VARID = @IPS_GetObjectIDByIdent($IDENT, $PARENTID);
	 $ScriptID = @IPS_GetObjectIDByIdent($PARENTID."_SetScript", $PARENTID);

     if($VARID === false)
     {
         $PROFILE_TYPE = _DAIKIN_AC_SET_PROFILETYPE($KEY);
         $DPNAME = _DAIKIN_AC_SET_VARNAME($KEY);
	     $VARID = IPS_CreateVariable($PROFILE_TYPE);
         IPS_SetParent($VARID, $PARENTID);
         IPS_SetName($VARID, $DPNAME);
         IPS_SetIdent($VARID, $IDENT);
		 IPS_SetVariableCustomProfile($VARID, "_DAIKIN_AC_$KEY");
         IPS_SetVariableCustomAction($VARID, $ScriptID);
     }
     return $VARID;
}  

function _DAIKIN_AC_SEND_DATA($DATA,$IP)
{
    $options = array( 
                            \'http\' => array( 
                                \'header\'  => "Content-type: application/x-www-form-urlencoded
", 
                                \'method\'  => \'GET\', 
                                \'content\' => http_build_query($DATA) 
                            ) 
                        ); 
                        $content = http_build_query($DATA);
                        $context = stream_context_create($options); 
                        $result  = file_get_contents("http://$IP/aircon/set_control_info?$content", false, $context); 
                       // var_dump($result);
}';



$SetVarScriptfile = '<?php

$ObjektInfo = IPS_GetObject(IPS_GetParent($_IPS[\'SELF\']));
$ObjectID=$ObjektInfo[\'ObjectID\'];

$IP = GetValue(IPS_GetObjectIDByIdent($ObjectID."_IP", $ObjectID));

$inc = IPS_GetScript(IPS_GetObjectIDByIdent($ObjectID."_Functions", $ObjectID));
include($inc[\'ScriptFile\']);

if ($_IPS[\'SENDER\'] == "WebFront")
{
    $VARID = IPS_GetObject($_IPS[\'VARIABLE\']);
    //print_r($VARID);
    switch($VARID[\'ObjectIdent\'])
                {	
                    case $VARID[\'ParentID\']."_pow";
                            SetValueBoolean($_IPS[\'VARIABLE\'], $_IPS[\'VALUE\']);
                    break;
                    case $VARID[\'ParentID\']."_mode";
                            SetValue($_IPS[\'VARIABLE\'], $_IPS[\'VALUE\']);
                    break;
                    case $VARID[\'ParentID\']."_stemp"; 
                            SetValue($_IPS[\'VARIABLE\'], $_IPS[\'VALUE\']);
                    break;
                    case $VARID[\'ParentID\']."_shum";
                            SetValue($_IPS[\'VARIABLE\'], $_IPS[\'VALUE\']);
                    break;
                    case $VARID[\'ParentID\']."_f_rate";
                            SetValue($_IPS[\'VARIABLE\'], $_IPS[\'VALUE\']);
                    break;
                    case $VARID[\'ParentID\']."_f_dir";
                            SetValue($_IPS[\'VARIABLE\'], $_IPS[\'VALUE\']);
                    break;
                    case $VARID[\'ParentID\']."_send";

                             switch($_IPS[\'VALUE\'])
                                {
                                    case true;
                                            SetValueBoolean($_IPS[\'VARIABLE\'], true);
                                        
                                            $POW_ID = GetValue(IPS_GetObjectIDByIdent($VARID[\'ParentID\']."_pow",$VARID[\'ParentID\']));
                                            if($POW_ID == false){$POW_ID=0;};
                                            $MODE_ID = GetValue(IPS_GetObjectIDByIdent($VARID[\'ParentID\']."_mode",$VARID[\'ParentID\']));
                                            $STEMP_ID = GetValue(IPS_GetObjectIDByIdent($VARID[\'ParentID\']."_stemp",$VARID[\'ParentID\']));
                                            $SHUM_ID = GetValue(IPS_GetObjectIDByIdent($VARID[\'ParentID\']."_shum",$VARID[\'ParentID\']));
                                            $F_RATE_ID = GetValue(IPS_GetObjectIDByIdent($VARID[\'ParentID\']."_f_rate",$VARID[\'ParentID\']));
                                            if($F_RATE_ID = 1){$F_RATE_ID="A";}; 
                                            if($F_RATE_ID = 2){$F_RATE_ID="B";};
                                            $F_DIR_ID = GetValue(IPS_GetObjectIDByIdent($VARID[\'ParentID\']."_f_dir",$VARID[\'ParentID\']));

                                            $DATA = array(\'pow\' => strval($POW_ID), \'mode\' => strval($MODE_ID), \'stemp\' => strval($STEMP_ID), \'shum\' => \'0\', \'f_rate\' => strval($F_RATE_ID), \'f_dir\' => strval($F_DIR_ID));
                                            
                                            _DAIKIN_AC_SEND_DATA($DATA,$IP);
                                    break;
                                    case false;
                                            SetValueBoolean($_IPS[\'VARIABLE\'], false);
                                            $output = _DAIKIN_AC_READ_DATA_TO_ARRAY($IP);
                                            foreach($output as $key => $value){

                                                switch($key)
                                                        {	case \'pow\'; 
                                                            case \'mode\';
                                                            case \'stemp\'; 
                                                            case \'shum\';
                                                            case \'f_rate\';
                                                            case \'f_dir\';
                                                                $IPS_IDENT = $ObjektInfo[\'ObjectID\']."_".$key;

                                                                if (! IPS_VariableProfileExists("_DAIKIN_AC_$key"))
                                                                    {
                                                                        echo "Erzeuge Variablenprofil _DAIKIN_AC_".$key."
";
                                                                        _DAIKIN_AC_CREATE_VARIABLE_PROFILE($key);
                                                                    }
                                                                if ($key == "f_rate"){
                                                                switch($value){
                                                                                    case \'A\': 
                                                                                        $value = 1;
                                                                                    break;
                                                                                    case \'B\':
                                                                                        $value = 2;
                                                                                    break;
                                                                            }
                                                                    }
                                                                SetValue(_DAIKIN_AC_CREATE_VARIABLE($_IPS[\'SELF\'], $IPS_IDENT, $key), $value);
                                                            break;
                                                        }
                                                }
                                    break;
                                }                 
                    break;
                }
}';

//First run

if ($_IPS['SENDER'] == "Execute")
{

echo "Hole Daten ab und erstelle Variablen und Profile 
";

$ObjektInfo = IPS_GetObject(IPS_GetParent($_IPS['SELF']));
$ObjectID=$ObjektInfo['ObjectID'];

echo "Setzte Ident für configscript 
";
IPS_SetIdent($_IPS['SELF'], $ObjectID."_Config");

 if (! @IPS_GetObjectIDByIdent($ObjectID."_IP",$ObjectID))
    {
        echo "erstelle Variable mit der IP Adresse
";
        $VARIP = IPS_CreateVariable(3);
         IPS_SetParent($VARIP, $ObjectID);
         IPS_SetName($VARIP, "IP Adresse");
         IPS_SetIdent($VARIP, $ObjectID."_IP");
         SetValue($VARIP,$IP);
     }


    if (! @IPS_GetObjectIDByIdent($ObjectID."_SetScript",$ObjectID))
    {
        echo "erstelle Scriptdateien
";
        $ScriptID = IPS_CreateScript(0);
        IPS_SetParent($ScriptID, $ObjectID);
        IPS_SetName($ScriptID, "Setze Variable");
        IPS_SetIdent($ScriptID, $ObjectID."_SetScript");
        IPS_SetScriptContent($ScriptID, $SetVarScriptfile);
     }

echo "erstelle functionsscript
";
if (! @IPS_GetObjectIDByIdent($ObjectID."_Functions",$ObjectID))
    {
        echo "erstelle Scriptdateien
";
        $FunctionID = IPS_CreateScript(0);
        IPS_SetParent($FunctionID, $ObjectID);
        IPS_SetName($FunctionID, "functionen");
        IPS_SetIdent($FunctionID, $ObjectID."_Functions");
        IPS_SetScriptContent($FunctionID, $SetFunctionFileContent);
     }

$inc = IPS_GetScript(IPS_GetObjectIDByIdent($ObjectID."_Functions", $ObjectID));
include($inc['ScriptFile']);

$output = _DAIKIN_AC_READ_DATA_TO_ARRAY($IP);
foreach($output as $key => $value){

    switch($key)
			{	case 'pow'; 
				case 'mode';
				case 'stemp'; 
				case 'shum';
                case 'f_rate';
                case 'f_dir';
                    $IPS_IDENT = $ObjektInfo['ObjectID']."_".$key;

                    if (! IPS_VariableProfileExists("_DAIKIN_AC_$key"))
		                {
                            echo "Erzeuge Variablenprofil _DAIKIN_AC_".$key."
";
                            _DAIKIN_AC_CREATE_VARIABLE_PROFILE($key);
		                }
                    if ($key == "f_rate"){
                    switch($value){
                                        case 'A': 
                                            $value = 1;
                                        break;
                                        case 'B':
                                            $value = 2;
                                        break;
                                }
                        }
                    echo "erstelle/setze Variable ".$key." mit Ident ".$IPS_IDENT." auf Wert ". $value."
";
                    SetValue(_DAIKIN_AC_CREATE_VARIABLE($_IPS['SELF'], $IPS_IDENT, $key), $value);

                break;
			}
    }


    if (! @IPS_GetObjectIDByIdent($ObjectID."_send",$ObjectID))
            {
                echo "erzeuge Variablenprofil zum senden von Werten";
                if (! IPS_VariableProfileExists("_DAIKIN_AC_send"))
		                { 
                            IPS_CreateVariableProfile("_DAIKIN_AC_send", 0);
                            IPS_SetVariableProfileAssociation("_DAIKIN_AC_send", 1, "senden", "", 0x00FF00);
                            IPS_SetVariableProfileAssociation("_DAIKIN_AC_send", 0, "holen", "", 0xFFFFFF);

                        }
         echo "erzeuge Variable zum senden von Werten";
         $VarSend = IPS_CreateVariable(0);
         IPS_SetParent($VarSend, $ObjectID);
         IPS_SetName($VarSend, "Kommunikation");
         IPS_SetIdent($VarSend, $ObjectID."_send");
		 IPS_SetVariableCustomProfile($VarSend, "_DAIKIN_AC_send");
         IPS_SetVariableCustomAction($VarSend, $ScriptID); 

     }  
}

Dann ausführen und es werden entsprechend die Variablen/profilen angelegt.

Viele Grüße

Danke!Ich habe mal getestet, leider werden nicht Alles richtig erstellt. Siehe Anhang. Ein Modul wäre Bombe:D

Hallo an alle!

Ich überlege, mir auch eine Daikin-Klimaanlage (Multisplit mit 2 Geräten) zu kaufen.
Voraussetzung ist aber, dass ich diese in IP-Symcon integrieren kann.
Verstehe ich das richtig, dass das WLAN-Zusatzmodul reicht, um die Einbindung zu ermöglichen?

Danke für eure Rückmeldung!

LG Peter

Hi,

Ja reicht… Hab drei innengeräte und funktioneren wunderbar.

Gesendet von meinem HD1903 mit Tapatalk

Super, perfekt! Danke für die Info!

Mit dem Klimagerät bist du zufrieden?

Hi,

Ja sehr. Ich kann das teil sogar im Schlafzimmer laufen lassen so leise ist der.

was wichtig ist zu wissen… Wenn man per app oder symcon die Temperatur regelt oder ein/ausschaltet wird das nicht an die Fernbedienung übertragen.

Für uns kein Problem, die Fernbedienungen haben wir ausgemustert.

Viele Grüße

Gesendet von meinem HD1903 mit Tapatalk

Hallo Kris,
kann man in dein Quasi Modul auch noch eine Abfrage der „IP/aircon/get_sensor_info“-Abfrage einbauen?
Mich interssiert dort vor Allem die Ausgabe des Fehlercodes.
Vielen Dank
Franz

Hi,

müsste ich mir mal anschauen… Hab noch ein paar Ergänzungen und muss die noch hier einfügen.mal sehen ob ich es heute noch hinbekomme

Gibt es eine tabelle was es für Errocodes gibt?

Gesendet von meinem HD1903 mit Tapatalk

Hallo Kris,
ja, Fehlercodeliste gibt es.
Ich weiß aber nicht ob die bei allen Geräten gleich ist (würde zwar Sinn machen).
Die Liste meiner Klima habe ich mal angehängt.
Es wäre zwar toll, wenn der Fehlercode gleich in klarschrift angezeigt wird aber um die Sache einfach zu halten währe es auch ok für mich, dass einfach der code angezeigt wird.

VG
Franz

Scannen0001.pdf (308 KB)

Hi,

bin leider gestern nicht mehr dazu gekommen. Probier mal unabhängig von meinem obigen Script, diesen Schnipsel

<?php

$IP="192.168.146.35";

function _DAIKIN_AC_READ_SENSORDARA_TO_ARRAY($IP) 
{
    $result = file_get_contents("http://$IP/aircon/get_sensor_info");
    parse_str(str_replace(",","&",$result), $OUTPUT);
	return $OUTPUT;
}

$OUT= _DAIKIN_AC_READ_SENSORDARA_TO_ARRAY($IP);
print_r($OUT);

echo "Der Fehlercode lautet: ". $OUT['err'];

Viele Grüße

Ich hab mir grade das WLAN Modul (BRP069B41) am S21 Bus angeschlossen und es scheint im Gegensatz zu den internen Modulen wirklich zu funktionieren. Ich hab noch die Firmware 1.0.31 auf dem Modul und es wir mir die Version 1.2.54 angeboten. Nach dem ganzen Hickhack mit den neuen Modulen, die ja die interne Abfrage nicht mehr machen traue ich mich im Moment nicht die neue Firmware aufzuspielen. Hat die ggf. schon jemand getestet und kann man darüber noch die Daten lokal holen?

Ich kann es selbst beantworten, die lokale API funktioniert auch weiterhin mit dem 1.2.54