Steuerung einer Daikin Split / Multisplit Klimaanlage mit WLAN Controller

Hallo allerseits, da ich nun stolzer Besitzer einer Multisplit Klimaanlage mit drei Innengeräten der Firma Daikin bin
war für mich natürlich auch die Integration in IPS eine interessante frage.

Für die Daikin Innengeräte gibt es als Zubehör den sogenannten Online Controller, dies ist eine WLAN Schnittstelle über die man die Geräte mit der Daikin APP auf dem Smartphone steuern kann.

Dieser Controller ist erforderlich und muss funktionsfähig mit dem eigenen WLAN verbunden sein.

Im Wesentlichen besteht mein Ansatz aus ein paar Variablen und zwei Skripten.

Variablen je Innengerät:

Diesen habe ich neue Profile verpasst:




Allen Variablen habe ich ein einfaches Aktionsskript mitgegeben:

<?

SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);

?>

Die Skripte:

Skript „GetStats“ Dient nur dazu in regelmäßigen Abständen die Daten der Daikin auszulesen und die Variablen zur Anzeige zu aktuaslisieren. Dieses Skript wird per Ereignis bei mir alle 5 Minuten aufgerufen.

Die IP der Anlage und die Variablen ID´s müsst ihr natürlich anpassen.

<?

 $ip = 'HIER DIE IP DER ANLAGE REIN';    // Schlafzimmer

$result = file_get_contents("http://$ip/aircon/get_control_info");

//echo $result;

$data = explode(",", $result);

//echo $data[0]; //ret=       Daten Gültig
//echo $data[1]; //pow=       Anlage AN
//echo $data[2]; //mode=      Modus
//echo $data[3]; //adv=       ?
//echo $data[4]; //stemp=     Ziel Temperatur
//echo $data[5]; //shum=      Ziel Feuchte
//echo $data[6]; //dt1=       Ziel Temp / Mode
//echo $data[7]; //dt2=       Ziel Temp / Mode
//echo $data[8]; //dt3=       Ziel Temp / Mode
//echo $data[9]; //dt4=       Ziel Temp / Mode
//echo $data[10]; //dt5=      Ziel Temp / Mode
//echo $data[11]; //dt7=      Ziel Temp / Mode
//echo $data[12]; //dh1=      Ziel Feuchte / Mode
//echo $data[13]; //dh2=      Ziel Feuchte / Mode
//echo $data[14]; //dh3=      Ziel Feuchte / Mode
//echo $data[15]; //dh4=      Ziel Feuchte / Mode
//echo $data[16]; //dh5=      Ziel Feuchte / Mode
//echo $data[17]; //dh7=      Ziel Feuchte / Mode
//echo $data[18]; //dhh=      Ziel Feuchte / Mode
//echo $data[19]; //b_mode=
//echo $data[20]; //b_stemp=
//echo $data[21]; //b_shum=
//echo $data[22]; //alert=    Fehlercode
//echo $data[23]; //f_rate=   Lüfterstufe
//echo $data[24]; //f_dir=    Lüfter Schwenkmode
//echo $data[25]; //b_f_rate=
//echo $data[26]; //b_f_dir=
//echo $data[27]; //dfr1=
//echo $data[28]; //dfr2=
//echo $data[29]; //dfr3=
//echo $data[30]; //dfr4=
//echo $data[31]; //dfr5=
//echo $data[32]; //dfr6=
//echo $data[33]; //dfr7=
//echo $data[34]; //dfrh=
//echo $data[35]; //dfd1=
//echo $data[36]; //dfd2=
//echo $data[37]; //dfd3=
//echo $data[38]; //dfd4=
//echo $data[39]; //dfd5=
//echo $data[40]; //dfd6=
//echo $data[41]; //dfd7=
//echo $data[42]; //dfdh=


if ( $data[0] == "ret=OK" ) {
	//echo "Daten Gültig!" ;
	$power=substr($data[1],4,1);
	SetValue(16710 /*[MakiHome\Allgemein\Funktionen\Klimaanlage\Schlafzimmer\Power]*/ ,intval($power));
	
	$mode=substr($data[2],5,1);
	SetValue(57519 /*[MakiHome\Allgemein\Funktionen\Klimaanlage\Schlafzimmer\Modus]*/ ,intval($mode));

	$stemp=substr($data[4],6,4);

	if ( $stemp != "--" ) {
		SetValue(19536 /*[MakiHome\Allgemein\Funktionen\Klimaanlage\Schlafzimmer\Soll Temperatur]*/ ,floatval($stemp));
	}
	
	$shum=substr($data[5],6,4);
	SetValue(20535 /*[MakiHome\Allgemein\Funktionen\Klimaanlage\Schlafzimmer\Ziel Feuchtigkeit]*/ ,floatval($shum));

	$frate=substr($data[23],7,1);
	switch ($frate) {
	   case 'A':
			$stufe=0;
	   break;
      case 'B':
			$stufe=1;
	   break;
      case '3':
			$stufe=2;
	   break;
      case '4':
			$stufe=3;
	   break;
      case '5':
			$stufe=4;
	   break;
      case '6':
			$stufe=5;
	   break;
      case '7':
			$stufe=6;
	   break;
	}
	SetValue(10307 /*[MakiHome\Allgemein\Funktionen\Klimaanlage\Schlafzimmer\Lüfterstufe]*/ ,$stufe);

 	$fdir=substr($data[24],6,1);
	SetValue(53889 /*[MakiHome\Allgemein\Funktionen\Klimaanlage\Schlafzimmer\FanDirection]*/ ,intval($fdir));
	

} else {

	echo "Daten ungültig!";
}
?>

getstats.jpg

Skript „SendCommand“ Dient dazu bei Änderung der Variablen (z.B. durch Webfront) die neuen Werte zu nehmen und als Steuerbefehl an die Anlage zu senden. Dieses Skript wird per Ausgelöstem Ereigniss immer dann gestartet wenn eine Variable sich geändert hat

Die IP der Anlage und die Variablen ID´s müsst ihr natürlich anpassen.

<?


 


 
$url = 'http://HIER DIE IP DER ANLAGE/aircon/set_control_info';  //Schlafzimmer


$power = GetValue(16710 /*[MakiHome\Allgemein\Funktionen\Klimaanlage\Schlafzimmer\Power]*/ );
$mode = GetValue(57519 /*[MakiHome\Allgemein\Funktionen\Klimaanlage\Schlafzimmer\Modus]*/ );
$fanspeed = GetValue(10307 /*[MakiHome\Allgemein\Funktionen\Klimaanlage\Schlafzimmer\Lüfterstufe]*/ );
$fandir = GetValue(53889 /*[MakiHome\Allgemein\Funktionen\Klimaanlage\Schlafzimmer\FanDirection]*/ );
$ttemp = GetValue(19536 /*[MakiHome\Allgemein\Funktionen\Klimaanlage\Schlafzimmer\Soll Temperatur]*/ );
$thum = GetValue(20535 /*[MakiHome\Allgemein\Funktionen\Klimaanlage\Schlafzimmer\Ziel Feuchtigkeit]*/ );


if ( $power ) {
	$power = '1';
} else {
	$power = '0';
}

switch ( $fanspeed ) {
	case 0:
	         $fanspeed = 'A';
	         break;
	case 1:
				$fanspeed = 'B';
				break;
	case 2:
				$fanspeed = '3';
				break;
	case 3:
				$fanspeed = '4';
				break;
	case 4:
				$fanspeed = '5';
				break;
	case 5:
				$fanspeed = '6';
				break;
	case 6:
				$fanspeed = '7';
				break;


}
				

$data = array('pow' => strval($power), 'mode' => strval($mode), 'stemp' => strval($ttemp), 'shum' => '0', 'f_rate' => strval($fanspeed), 'f_dir' => strval($fandir));


// use key 'http' even if you send the request to https://...
$options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded
",
        'method'  => 'POST',
        'content' => http_build_query($data),
    ),
);
$context  = stream_context_create($options);
$result = file_get_contents($url, false, $context);
var_dump($data);
echo "
";
var_dump($result);


?>

In etwa so schaut dann der Objektbaum aus:

Und so schaut es dann im Webfront aus (Dummy Instanz mit Links auf die Variablen):

Ich hoffe das kann jemand von euch brauchen. Weiter Infos zur Kontrolle der Daikin Anlagen gibts auch hier:

ael-code/daikin-control · GitHub

ACHTUNG: Es gibt natürlich den Fall das eine Parameter Änderung z.B. per Fernbedienung direkt an der Daikin gemacht wird. Dies führt natürlich dazu das die Variablen in IPS durch das GETSTATS Script geändert werden, diese Änderung löst dann wiederum das Senden eines Konfigurationsbefehls seitens IPS an die Daikin aus, (Skript SENDCOMMAND) Bisher konnte ich das noch nicht als Problematisch feststellen aber wenn jemand eine Idee hat wie
ich das sauber abfangen kann bitte immer her damit

LG Martin

Hallo Martin, ganz einfach,im sendcommand Script musst du prüfen ob die Änderung durch das Webfront (sende Befehl ausführen) oder die Variable kommt (sende Befehl nicht ausführen, da getstats Auslösung) das kannst du in dem Sendescript machen. Moment kopiere es kurz rein

if($IPS_SENDER == „Webfront“) {

… Ausführen sendcmd

}

Hoffe das hilft, hab heute nur das Mobile hier und da lässt sich schlecht etwas einfügen. Gruss

Das geht aber nicht wenn das Script per Ereignis gestartet wird.
Das vorgehen ist so:
Aktions-Skript sendet Befehl an Gerät. Wenn dies ohne Fehler war, wird die Variable nachgezogen.
Das Ereignis entfällt komplett.
Im Fehlerfall, einfach per echo den Fehler ausgeben. Dieser wird dann automatisch im Webfront angezeigt.
So werden auch diese quasi Endloschleifen vermieden.
Michael

Martin, hab das erst jetzt gesehen da ich gestern nur mit so nem kleinen Handy drauf schauen könnte. Du musst das von Michael natürlich zusätzlich auch noch machen um überhaupt die Auswertung unten mit Webfront vornehmen zu können. Du solltest also bei den Variablen in den Einstellungen ein Aktionsskript hinterlegen und dann klappt die Auswertung mit Webfront.

Hallo,

ich habe heute das Skript zur Bedienung meiner Daikin übernommen, klasse gemacht. Leider bekomme ich bei jeglicher Bedienung im IPS eine Meldung „xFehler“. Wie ich festgestellt habe, muss es mit der Automatik zusammenhängen, da diese mir nicht angezeigt wird wenn ich das Gerät über die Daikin App bediene. In der IPS App erscheint dann folgender Fehler:„Format error:Invalid profile association“. Auch bekomme ich im Objektbaum unter Wert nichts angezeigt. Sonst funktioniert alles einwandfrei. Die Variable „Modus“ samt Profil habe ich bereits gelöscht und wieder neu eingerichtet, leider ohne Erfolg.

Ich weiß nun nicht mehr weiter. Für Eure Hilfe wäre ich dankbar.

Gruß,

Bernd

Hallo zusammen,

ich habe mal versucht das Skript so zu ändern wie es Nall chan beschrieben hat.
Wenn ich jetzt eine Änderung über das WebFront mache wird die geänderte Variable erst dann mit dem neuen Wert angezeigt, wenn die Übertragung von der Klimaanlage mit „OK“ bestätigt wurde.

Leider bekomme ich die Änderungen über die Fernbedienung jetzt nicht mehr mit.
Hat hierzu jemand eine Idee?

<? 


//Variablen:  
$ip = "192.168.x.x";

$powerID = 22347 /*[Hardware\Daikin\Power]*/;
$modeID = 40186 /*[Hardware\Daikin\Modus]*/ ;
$fanspeedID = 31693 /*[Hardware\Daikin\Lüfter]*/;
$fandirID = 34606 /*[Hardware\Daikin\Luftstrom]*/;
$ttempID = 18352 /*[Hardware\Daikin\Temperatur]*/ ;

################################################################################

$url = "http://".$ip."/aircon/set_control_info";  //Schlafzimmer 



//Auslöser Power::
if ($_IPS['VARIABLE'] == $powerID) 
	{
	if( $_IPS['VALUE'] ) 
	{ 
    $power = '1';
	} 
	else 
	{ 
    $power = '0'; 
   	}
		
	}
	else
	{
	$power = GetValue($powerID);
	if( $power ) 
	{ 
    $power = '1';
	} 
	else 
	{ 
    $power = '0'; 
   	}
	}


//Auslöser = Lüftergeschwindigkeit:

if ($_IPS['VARIABLE'] == $fanspeedID) 
{
	$fanspeed = $_IPS['VALUE']; 
	switch ( $fanspeed ) 
	{ 
    case 0: 
             	$fanspeed = 'A'; 
             	break; 
    case 1: 
                $fanspeed = 'B'; 
                break; 
    case 2: 
                $fanspeed = '3'; 
                break; 
    case 3: 
                $fanspeed = '4'; 
                break; 
    case 4: 
                $fanspeed = '5'; 
                break; 
    case 5: 
                $fanspeed = '6'; 
                break; 
    case 6: 
                $fanspeed = '7'; 
                break; 
	} 
}
else
{
	$fanspeed = GetValue($fanspeedID ); 
	switch ( $fanspeed ) 
	{ 
    case 0: 
             	$fanspeed = 'A'; 
             	break; 
    case 1: 
                $fanspeed = 'B'; 
                break; 
    case 2: 
                $fanspeed = '3'; 
                break; 
    case 3: 
                $fanspeed = '4'; 
                break; 
    case 4: 
                $fanspeed = '5'; 
                break; 
    case 5: 
                $fanspeed = '6'; 
                break; 
    case 6: 
                $fanspeed = '7'; 
                break; 
	} 
}
//Auslöser = Temp:
if ($_IPS['VARIABLE'] == $ttempID)
	{
	$ttemp = $_IPS['VALUE'];
	}
	else
	{
	$ttemp = GetValue($ttempID); 
	}

//Auslöser = Lüfterbewegung:
if ($_IPS['VARIABLE'] == $fandirID)
	{
	$fandir = $_IPS['VALUE'];
	}
	else
	{
	$fandir = GetValue($fandirID); 
	}

	//Auslöser = Modus:
if ($_IPS['VARIABLE'] == $modeID)
	{
	$mode = $_IPS['VALUE'];
	}
	else
	{
	$mode = GetValue($modeID); 
	}



                  
//Daten zusammensetzen:
$data = array('pow' => strval($power), 'mode' => strval($mode), 'stemp' => strval($ttemp), 'shum' => '0', 'f_rate' => strval($fanspeed), 'f_dir' => strval($fandir)); 

//senden:
// use key 'http' even if you send the request to https://... 
$options = array( 
    'http' => array( 
        'header'  => "Content-type: application/x-www-form-urlencoded
", 
        'method'  => 'POST', 
        'content' => http_build_query($data), 
    ), 
); 
$context  = stream_context_create($options); 
$result = file_get_contents($url, false, $context); 

$data = explode(",", $result);
if ( $data[0] == "ret=OK" ) { 
    SetValue($_IPS['VARIABLE'], $_IPS['VALUE']); 
} else { 

    echo "Daten ungültig!"; 
} 
?>

Hallo,

zunächst danke für das Skript und die Weiterentwicklung. Hat sich hier noch eine ergänzende Entwicklung ergeben, die eine parallele Bedienung über IPS-App, Daikin-App und Fernbedienung zulässt?

Viele Grüße, Götz

Hallo
Bin jetzt ebenfalls Besitzer einer Daikin Klimaanlage, allerdings haben Sie mir einen „neuen“ Wlan controller BRP069B41 (Firmware 1.2.51) eingebaut, welcher eigentlich auch funktionieren soll.

Also „http://$ip/aircon/get_control_info“ funkioniert,
Ergebniss: ret=OK,pow=0,mode=4,adv=,stemp=21.0,shum=0,dt1=25.0,dt2=M,dt3=20.0,dt4=21.0,dt5=21.0,dt7=25.0,dh1=AUTO,dh2=50,dh3=0,dh4=0,dh5=0,dh7=AUTO,dhh=50,b_mode=4,b_stemp=21.0,b_shum=0,alert=255,f_rate=5,f_dir=0,b_f_rate=5,b_f_dir=0,dfr1=5,dfr2=5,dfr3=5,dfr4=5,dfr5=5,dfr6=3,dfr7=5,dfrh=5,dfd1=0,dfd2=0,dfd3=0,dfd4=0,dfd5=0,dfd6=0,dfd7=0,dfdh=0,dmnd_run=0,en_demand=0

das „http://HIER DIE IP DER ANLAGE/aircon/set_control_info“ nicht.
Ergebniss: ret=PARAM NG

Lt. „GitHub - Apollon77/daikin-controller: Control Daikin Air Conditioner devices using nodejs“ muss ich „…use the special option „useGetToPost“ in the options“ und das übersteigt meine bescheidenen Programmierkenntnisse.
Hat hier jemand schon eine Lösung oder kann mir einer Helfen bitte

Andi

Probier’ mal folgenden beispielhaften Code, bei mir funktioniert dies mit FW 1.2.51:

$ip="<ip des controllers>";
$power=TRUE;
$mode=3;
$ttemp=21;
$fanspeed="A";
$fandir=0;
$data = array('pow' => strval($power), 'mode' => strval($mode), 'stemp' => strval($ttemp), 'shum' => '0', 'f_rate' => strval($fanspeed), 'f_dir' => strval($fandir)); 

$options = array( 
    'http' => array( 
        'header'  => "Content-type: application/x-www-form-urlencoded
", 
        'method'  => 'GET', 
        'content' => http_build_query($data) 
    ) 
); 
//echo http_build_query($data);
//echo "
";
//var_dump($options);
$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($data); 
//echo "
"; 
var_dump($result); 

Als Ergebnis müsste

string(11) "ret=OK,adv="

zurückkommen.

Grüße,
Martin

Danke für die rasche Hilfe, hätte ich doch gleich gefragt. So hab ich 2 Tage verloren.

Andi

Hallo,

seit gestern habe ich auch 2 Daikin Geräte mit WLAN Modul und der Firmware 1.2.51 hier.

Das Get-Skript habe ich schon versucht, ich denke das letzte Set-Skript von @friendly sollte auch klappen.

Die Frage die ich aber hätte, ob man über die API denn auch die Leistungsaufnahme auslesen kann? In der App wird eine wunderschöne Statistik dargestellt, die ich in der Art auch gerne im Symcon hätte.

LG

Meine Frage hat sich erübrigt…
https://github.com/ael-code/daikin-control

Mit:

IP/aircon/get_sensor_info

erhalte ich die Sensorwerte und u.a. die Stromaufnahme.

Hi,

da mich das Thema auch gerade beschäftigt…

Welche Diakin Geräte habt ihr denn im Einsatz und könnt ggf. empfehlen?

Gruss
Volkmar

Ich werde meinen kompletten Setup inkl. Montage und Symcon Integration in meinem MyTEC Home - Startseite Blog posten.

Wenn der Beitrag fertig ist kann ich ihn gerne hier posten, kann aber noch etwas dauern da ich im Juni einige Termine habe…

1 „Gefällt mir“

Super!..

Hier der versprochene Beitrag zu unserer neuen Daikin Anlage…
https://mytec-home.de/wohnen/daikin-klimaanlage-in-der-dachwohnung-ip-symcon-anbindung

1 „Gefällt mir“

Danke!..

Hallo, ich muss das Thema noch mal ansprechen. Ich bin auch im Besitzt einer Daikin Anlage ein Außengerät und im Moment noch 2 Innengeräte (FTXM25N). Die Innengeräte sind mit einem sogenannten Flash Streamer audgestattet, wie kann ich den wie in der APP an bzw. ausschalten?

Hi Blitzer,

spricht was dagegen den Status über /aircon/get_control_info zu lesen, den Flash Streamer einzuschalten und dann den neuen Status mit dem alten zu vergleichen?
Da sollte dann doch ersichtlich sein was sich geändert hat, oder?

Gruß, Lutz

Danke von mir für die Scripte und Infos. Mit meiner Klimaanlage Daikin FVXS und dem WLAN Adapter BRP06A42 funktioniert die Einbindung in IPS perfekt. :slight_smile: