Hallo zusammen,
ich habe inzwischen mit den Informationen aus verschiedenen Foren mal ein wenig rum programmiert. Das folgende Skript zeigt keinen Fehler an und funktioniert auch in dem Fenster "Skript testen" von der Homematic. In dem Testfenster ausgeführt wird auch das ausgeführt was gewünscht ist.
Aber leider funktioniert es nicht in dem Anweisungsteil des Programms.
Habt ihr eine Idee wo dran das liegt?
Code: Alles auswählen
! Gewünschte Einstellungen:
string ip="192.168.2.29";
string modus="4";
string temp="18";
string geschwindigkeit="A";
string schwingen="0";
! Parameter der Klimaanlage auslesen
var abfrage_url = "http://" + ip + "/aircon/get_control_info";
dom.GetObject("CUxD.CUX2801001:2.CMD_SETS").State("wget -q -O - '"#abfrage_url#"'");
dom.GetObject("CUxD.CUX2801001:2.CMD_QUERY_RET").State(1);
string srueck = dom.GetObject("CUxD.CUX2801001:2.CMD_RETS").State();
! Abfrage ob Power 1 oder 0 - gibt das vierte Zeichen nach "pow=" zurück
string power = srueck.Substr(srueck.Find("pow=")+4,1);
! Wenn an, dann ausmachen
if (power == "0") { string pow = "1";}
! Wenn aus, dann anmachen
if (power == "1") { string pow = "0";}
! Befehl Klima
string befehl = "/aircon/set_control_info?pow=" + pow +"&mode=" + modus + "&stemp=" + temp + "&shum=0&f_rate=" + geschwindigkeit + "&f_dir=" + schwingen;
! HHTP Zeile zusammensetzen
var toggle_url = "http://" + ip + befehl;
! Ausgabe die die Klimaanlage letztendlich schaltet
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("wget -q -O - '"#toggle_url#"'", &stdout, &stderr);
! Kontrolle der Ausgabe
string stdout; string stderr;
WriteLine("stdout: " + stdout);
WriteLine("stderr: " + stderr);
Vielen Dank im Voraus.
Gibt es eigentlich auch die Möglichkeit Methoden woanders zu schreiben und abzuspeichern, auf die man dann in den Programmen mit den passenden Parametern zugreifen kann?
VG
UFI
PS: Vollständig kommentierter Code mit Abfrage der Klimaanlage und des Wandthermostats und diversen Ausgaben zur Kontrolle - vielleicht hilft es jemanden, der vor dem gleichen Problem steht. (Es geht mir bei dem Skript vor allen darum die Skripte zu verstehen - wie es nachher umgesetzt wird, ist eine ganz andere Sache).
Code: Alles auswählen
! Skript: Daikin Wifi Controller auslesen - und toggle ein/aus (by UFI)
! Mögliche Einstellungen:
! AN/AUS: AN => pow=1 // AUS => pow=0
! Modus: AUTO => mode=0; mode=1 oder mode=7 // entfeuchten => mode=2 // kühlen => mode=3 // heizen => mode=4 // lüften => mode=6
! Temperatur: stemp=21.5
! Zielfeuchte in Prozent: shum=0
! Ventilator Geschwindigkeit: auto => A // silence => B // Stufe 1 => f_rate=3 bis Stufe 5 => f_rate=7
! Schwingen: aus => f_dir=0 // vertikal => f_dir=1 // horizontal => f_dir=2 // beide Richtungen => f_dir=3
! Mögliche Rückmeldungen - nach Abfrage:
! AN/AUS: pow=1/0
! Letzter Modus: mode=0/1/2/3/4/6/7
! Letzte Temperatur: stemp=21.5
! diverses Anderes
! Letzter Modus b_mode=
! Letzte Temperatur b_stemp=
! Letzte Luftfeuchtigkeit b_shum=
! Letzte Ventilatorgeschwindigkeit f_rate=A/B/3 ... 7
! Letzter Schwingungsmodus f_dir=0 ... 3
! Letzter Ventilatormodus b_f_rate=A/B/3 ... 7
! Letzter Schwingungsmodus b_f_dir=0 ...3
! diverses Anderes
! Gewünschte Einstellungen:
string ip="192.168.2.29";
string modus="4";
string temp="18";
string geschwindigkeit="A";
string schwingen="0";
! Parameter der Klimaanlage auslesen
var abfrage_url = "http://" + ip + "/aircon/get_control_info";
dom.GetObject("CUxD.CUX2801001:2.CMD_SETS").State("wget -q -O - '"#abfrage_url#"'");
dom.GetObject("CUxD.CUX2801001:2.CMD_QUERY_RET").State(1);
string srueck = dom.GetObject("CUxD.CUX2801001:2.CMD_RETS").State();
WriteLine("srueck: " + srueck);
! Abfrage ob Power 1 oder 0 - gibt das vierte Zeichen nach "pow=" zurück
string power = srueck.Substr(srueck.Find("pow=")+4,1);
WriteLine("power: " + power);
! Abfrage welcher mode
string mode = srueck.Substr(srueck.Find("mode=")+5,1);
WriteLine("mode: " + mode);
! Abfrage welche Temperatur
string stemp = srueck.Substr(srueck.Find("stemp=")+6,1);
WriteLine("stemp: " + stemp);
! Abfrage welche Temperatur
string f_rate = srueck.Substr(srueck.Find("f_rate=")+7,1);
WriteLine("f_rate: " + f_rate);
! Abfrage welche Temperatur
string f_dir = srueck.Substr(srueck.Find("f_dir=")+6,1);
WriteLine("f_dir: " + f_dir);
! Parameter (Temperatur) des Wandthermostats auslesen
string wth_akt_temp = dom.GetObject("HmIP-RF.003920C999D263:1.ACTUAL_TEMPERATURE").Value().ToString(1);;
string wth_letzte_temp = dom.GetObject("HmIP-RF.003920C999D263:1.ACTUAL_TEMPERATURE").LastValue().ToString(1);;
string wth_soll_temp = dom.GetObject("HmIP-RF.003920C999D263:1.SET_POINT_TEMPERATURE").Value().ToString(1);
WriteLine("Aktuelle Temp: " + wth_akt_temp);
WriteLine("Letzte Temp: " + wth_letzte_temp);
WriteLine("Soll Temp: " + wth_soll_temp);
! Wenn an, dann ausmachen
if (power == "0") { string pow = "1";}
! Wenn aus, dann anmachen
if (power == "1") { string pow = "0";}
! Befehl Klima
string befehl = "/aircon/set_control_info?pow=" + pow +"&mode=" + modus + "&stemp=" + temp + "&shum=0&f_rate=" + geschwindigkeit + "&f_dir=" + schwingen;
WriteLine("befehl: " + befehl);
! HHTP Zeile zusammensetzen
var toggle_url = "http://" + ip + befehl;
WriteLine("toggle_url: " + toggle_url);
! Ausgabe die die Klimaanlage letztendlich schaltet
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("wget -q -O - '"#toggle_url#"'", &stdout, &stderr);
! Kontrolle der Ausgabe
string stdout; string stderr;
WriteLine("stdout: " + stdout);
WriteLine("stderr: " + stderr);
Ausgabe bei mir:
srueck: ret=OK,pow=0,mode=4,adv=,stemp=18.0,shum=0,dt1=26.0,dt2=M,dt3=23.0,dt4=18.0,dt5=18.0,dt7=26.0,dh1=0,dh2=50,dh3=0,dh4=0,dh5=0,dh7=0,dhh=50,b_mode=4,b_stemp=18.0,b_shum=0,alert=255,f_rate=A,f_dir=0,b_f_rate=A,b_f_dir=0,dfr1=A,dfr2=5,dfr3=A,dfr4=A,dfr5=A,dfr6=5,dfr7=A,dfrh=5,dfd1=1,dfd2=0,dfd3=3,dfd4=0,dfd5=0,dfd6=0,dfd7=1,dfdh=0
power: 0
mode: 4
stemp: 1
f_rate: A
f_dir: 0
Aktuelle Temp: 17.9
Letzte Temp: 18.0
Soll Temp: 17.0
befehl: /aircon/set_control_info?pow=1&mode=4&stemp=18&shum=0&f_rate=A&f_dir=0
toggle_url:
http://192.168.2.29/aircon/set_control_ ... =A&f_dir=0