HM-CC-RT-DN Automatisches Temp.Profil via XmlRpc setzen

Hallo,
wie kann ich beim HM-CC-RT-DN das TemperaturProfil für den AutoMode via XmlRpc Api setzen.
Die die Attribute wie z.B STARTTIME_MONDAY_1 oder ENDTIME_MONDAY_1 sind ja scheinbar nicht beschreibbar oder liegen im falschen Channel.
Laut FHEM zum HM-CC-RT-DN Doku soll das ja über Channel 4 gehen.

Hat das schonmal jemand versucht?

Gruß
Guido

Hi Guido,

muss es unbedingt mittels XML RPC sein? Ich nehme für diese “Hardware-nahen” Einstellungen den Homematic Konfigurator. Ich trage die Daten aber auch nur einmal ein und änder sie nicht. Für eine Automatisierung wäre das via XML RPC sicher hilfreich.

Gruß,
Chris

Naja, ich bin gerade dabei mir einen eigenen WebClient (SpringMVC + ExtJS) für meine Hausautomation zu schreiben und nutze halt dafür die XmlRpc Api von Homegear. Dafür benötige ich das.
Der HomematicKonfigurator läuft auch nicht auf nem Mac oder Linux, oder?

Gruß
Guido

Direkt sicher nicht. Ggf als VM oder mittels Wine.

Hey Guido,

die Temperaturprofile sind mittels “putParamset” setzbar und liegen auf Kanal “0” :wink:. Im Prinzip genauso wie bei MAX! [1]. Was es noch an möglichen Parametern gibt, findest du in der XML-Datei zum HM-CC-RT-DN.

Liebe Grüße

Sathya

[1] homegear.eu/index.php/MAX!_ … Parameters

Hi,
die XML Datei hatte ich mir auch schon angesehen.
Ich wusste nur nicht das das Zauberwort putParamSet heisst.

Vielen Dank. Werde es gleich mal ausprobieren.

Hi,

ich hatte damit auch mal rumgespielt - aber wegen Urlaub noch nicht dazu gekommen, es auch auszuprobieren. Aber vielleicht hilft dir das hier (ist zwar PHP, aber das sollte sich ja wohl übertragen lassen :wink: ):

Mit der folgenden Klasse kannst du den Parameter-Berg für so ein Temperature-Set anlegen:

class tempsetInstance {
	public $presetWorkday = array("MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY");
	public $presetWeekend = array("SATURDAY", "SUNDAY");

	private $tempset = array();
	private $currentTimesetId = 1;

	function addTemp($startTime,$temperature,$days = array("MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY")) {
		if(preg_match("/^(\d+):(\d+)$/",$startTime,$timeParts)) {
			$startTimeSeconds = (floatval($timeParts[0] . "." . $timeParts[1]) * 60);
			foreach($days AS $day) {
				$this->tempset["ENDTIME_" . $day . "_" . $this->currentTimesetId] = $startTimeSeconds;
				$this->tempset["TEMPERATURE_" . $day . "_" . $this->currentTimesetId] = $temperature;
			}
			$this->currentTimesetId++;
			return true;
		}
		else {
			return false;
		}
	}

	function tempsetInstance() {
	}

	function prepareTempset() {
		$countStart = 1;
		$countEnd = 13;
		$days = array("MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY");
		$sets = array("ENDTIME","TEMPERATURE");
		$defaults = array("ENDTIME" => 1440, "TEMPERATURE" => 17);
		foreach($sets AS $set) {
			foreach($days AS $day) {
				for($i = $countStart; $i <= $countEnd; $i++) {
					$key = $set . "_" . $day . "_". $i;
					if(!isset($this->tempset[$key])) {
						$this->tempset[$key] = $defaults[$set];
						echo "Added " . $key . " => " . $defaults[$set] . "\n";
					}
				}
			}
		}
	}
	
	function getTempset() {
		$this->prepareTempset();
		return $this->tempset;
	}
}

Beispiel:

$tempset = new tempsetInstance;
$tempset->addTemp("07:00",19,$tempset->presetWorkday);
$tempset->addTemp("09:00",17,$tempset->presetWorkday);
$tempset->addTemp("18:00",19,$tempset->presetWorkday);
$tempset->addTemp("23:00",17,$tempset->presetWorkday);

$tempset->addTemp("08:00",20,$tempset->presetWeekend);
$tempset->addTemp("11:00",17,$tempset->presetWorkday);

Wenn man das jetzt mittels $tempset->getTempset() abruft, sollte da ein vollständiges Array herauskommen, dass man an putParamSet() übergeben kann. Ist nicht schön, sollte in der Theorie aber funktionieren. Falls es jemand hilft, über Rückmeldungen freu’ ich mich. Wie gesagt, ich kam am Ende nicht mehr dazu, das Ergebnis auch mal wirklich per putParamSet() abzusetzen :wink:

So, ich hatte jetzt mal ein wenig Zeit das Ganze umzusetzen.

Meine kleine Java-API wird jetzt folgendermassen aufgerufen.

List phases = new ArrayList<>();
phases.add(new HeatingPhase(“00:00”, “06:00”, 16.0));
phases.add(new HeatingPhase(“06:00”, “22:00”, 22.0));
phases.add(new HeatingPhase(“22:00”, “23:59”, 16.0));

HomegearDeviceFactory.getRemoteRadiatorThermostat(“2”).setTemperatureProfile(
new TemperatureProfile(new String[] { TemperatureProfile.SATURDAY },phases)
);

klappt perfekt :wink:

Ich hab nochmal ne Frage bezüglich der Temp.Profile

Via XmlRpc konnte ich ja jetzt bei einem HeizkörperThermostat erfolgreich ein Temp.Profil setzen.

Nun habe ich den Heizkörperthermostat mit einem WandThermostat(HM-TC-IT-WM-W-EU) verbunden.

Bei einem HM-TC-IT-WM-W-EU sehen die Properties aber etwas anders aus.
Auszug:
[P3_TEMPERATURE_FRIDAY_13]: 22
[P3_STARTTIME_FRIDAY_12]: 22
[P3_ENDTIME_FRIDAY_12]: 01 20
[P3_TEMPERATURE_FRIDAY_11]: 22
[P1_TEMPERATURE_FRIDAY_11]: 22
[P2_TEMPERATURE_FRIDAY_11]: 22

Was hat das mit dem P[1-3] Prefix auf sich?

Egal welche P[1-3]… Properties ich mit putParam setze, es ändert sich nichts am Wandthermostat und den damit verbundenen Heizköperthermostaten.

Gruß
Guido

Hi Du,

ich kann Dir bei Deinem Problem zwar nicht helfen, soweit ich aber weiss ist das P1 bis P3 nur dafür da, dass man insgesamt drei Wochenpläne definieren kann.
Also mit drei verschiedene Wochenpläne. Somit solltest Du wahrscheinlich alles in P1 definieren als Beispiel

Gruß
Thorsten

Hi,
mitterweile klappts bei mir. Die beiden standen irgendwie auf ‘config pending’.

Nochmal zu den Wochenplänen.
Kann man eventuell mit dem ‘WEEK_PROGRAM_POINTER’ Property
auf das Pxx einfluss nehmen?.
Als ich den auf 1 setzte sprang der Thermostat auf das Nachtbetrieb um also 17 Grad.
Schien mir also nicht ganz das zu sein was ich dachte.

EDIT: auch erledigt. Der Parameter muß WEEK PROGRAM x heissen :wink:

Gruß
Guido