Einbindung HomeMatic Funk-Heizkörperthermostat HM-CC-RT-DN (neu) in IPS

IPS Instanz

Hallo Zusammen,
als Ergänzung die Enums, die Möglichen Parameter und deren Wertebereiche:

===========================================
CONTROL_MODE:
Type: enum
Wertebereich:
<string>AUTO-MODE</string>
<string>MANU-MODE</string>
<string>PARTY-MODE</string>
<string>BOOST-MODE</string>
Default: 0 -> Auto
Operations: 5 -> Read, Event
===========================================
FAULT_REPORTING:
Type: ENUM
Wertebereich:
<string>NO FAULT</string>
<string>VALVE TIGHT</string>
<string>ADJUSTING RANGE TOO LARGE</string>
<string>ADJUSTING RANGE TOO SMALL</string>
<string>COMMUNICATION ERROR</string>
<string /> // Das ist der Default-Wert
<string>LOWBAT</string>
<string>VALVE ERROR POSITION</string>
Default: 5 -> der leere String
Operations: 5: Read, Event
===========================================
BATTERY_STATE:
Type: Float
Wertebereich: (V)
Min: 1.5
Max: 4.6
Default: 0
Operations: 5 -> Read, Event
===========================================
VALVE_STATE:
Type: integer
Wertebereich: (%)
Min: 0
Max: 99
Default: 0
Operations: 5 -> Read, Event
===========================================
ACTUAL_TEMPERATURE:
Type: FLOAT
Wertebereich: (Grad C)
Min: -10
Max: 50
Default: 0
Operations: 1 -> Read
===========================================
SET_TEMPERATURE:
Type: FLOAT
Wertebereich: (Grad C)
Default: 20
Operations: 7 -> Read, Write, Event
===========================================
AUTO_MODE:
Type: Boolean -> Action -> Nur True
Wertebereich:
True:
False:
Default: false
Operations: 2 -> Write
===========================================
MANU_MODE:
Type: Float
Wertebereich: Grad C)
Min: 4.5
Max: 30.5
Default: 20
Operations: 2 -> Write
===========================================
BOOST_MODE:
Type: Boolean
Type: Boolean -> Action -> Nur True
TRUE
FALSE
Default: False
Operations: 2 -> Read
===========================================
COMFORT_MODE:
Type: Boolean -> Action -> Nur True
Wertebereich:
TRUE:
FALSE:
Default: false
Operations: 2 -> Read
===========================================
LOWERING_MODE:
Type: Boolean -> Action -> Nur True
Wertebereich:
TRUE
FALSE
Default: FALSE
Operations: 2 -> READ
===========================================
PARTY_MODE:
Type: Float
Wertebereich: Grad C)
Min: 5
Max: 30
Default: 20
Operations: 2 -> Write
===========================================
PARTY_START_DAY:
Type: integer
Wertebereich: (day)
Min:1
Max:31
Default: 1
Operations: 2 -> Write
===========================================
PARTY_START_MONTH:
Type integer
Wertebereich: (month)
Min:1
Max:12
Default:1
Operations: 2 -> Write
===========================================
PARTY_START_YEAR:
Type: integer
Wertebereich:
Min:0
Max:99
Default:12
Operations: 2 -> Write
===========================================
PARTY_START_TIME:
Type: integer
Wertebereich: (minutes)
Min:0
Max:1440
Default:0
Operations: 2 -> Write
===========================================
PARTY_STOP_DAY:
Type: integer
Wertebereich: (day)
Min:1
Max:31
Default: 1
Operations: 2 -> Write
===========================================
PARTY_STOP_MONTH:
Type integer
Wertebereich: (month)
Min:1
Max:12
Default:1
Operations: 2 -> Write
===========================================
PARTY_STOP_YEAR:
Type: integer
Wertebereich:
Min:0
Max:99
Default:12
Operations: 2 -> Write
===========================================
PARTY_STOP_TIME:
Type: integer
Wertebereich: (minutes)
Min:0
Max:1440
Default:0
Operations: 2 -> Write
===========================================

Man beachte den Wertebereich von PARTY_MODE und MANU_MODE. Eigentlich typisch Homematic.
Ich frage mich langsam, ob die vorher immer eine Party feiern, bevor neue Produkte entworfen werden… :eek:

@Jürgen

Danke fürs teilen - ist echt brauchbar!

Habe jetzt 4 Stück von diesen Teilen verbaut und bin sehr zufrieden. Meine liebe Frau ‚meckert‘ auch nicht mehr, da man händisch nachregulieren kann und im ‚Notfall‘ (sollte er denn eintreten) auf Auto Mode gehen kann.

Euch allen noch einen geruhsamen Weihnachtsfeiertag.

Gruß aus Wiesbaden
Dieter

Bei mir wirft er immer die folgende Fehlermeldung raus:

Warning: HM_WriteValueFloat: Instance #21467 not found! in C:\IP-Symcon\scripts\49770.ips.php on line 27

Die Instanz 21467 ist in meinem Fall die ID von SET_TEMPERATURE.

Darf ich Fragen wie Ihr das hinbekommen habt?

Und das ist noch immer falsch.
Warum schreibst du auf die Variable?
Das geht nicht, nimm die Instanz!
Michael

Hier sind mal die Grundlagen für die Unterscheidung und um das zu verstehen

http://www.ip-symcon.de/service/dokumentation/konzepte/

Danke für den Hinweis. Ich habe die ID der Instanz genommen. Jetzt läuft das Skript zwar nicht mehr auf einen Fehler, jedoch wird der Wert SET-Temperatur nicht auf den entsprechenden Wert aus dem Script gesetzt. Er bleibt bei 18Grad stehen. Der Thermostat ist auf „Manual“ gesetzt. Hier mein Script:


<?
/*Dieses Skript setzt die Solltemperatur eines Raumes in Abhängigkeit der Fensteröffnung*/

$fenster = GetValue(58075 /*[Erdgeschoss\Gäste-WC\Fensterkontakt-Gäste-WC\STATE]*/);
echo "Fensterstatus WC: ";
echo $fenster;
echo "
";
$temp = GetValueFloat(38246 /*[Erdgeschoss\Gäste-WC\Thermostat-Gäste-WC-CLIMATECONTROL_RT_TRANSCEIVER\ACTUAL_TEMPERATURE]*/);
echo "Aktuelle Temperatur WC: ";
echo $temp;
echo "
";
$id=21467 /*[Erdgeschoss\Gäste-WC\Thermostat-Gäste-WC-CLIMATECONTROL_RT_TRANSCEIVER\SET_TEMPERATURE]*/;
$var_set_temp =GetValueFloat($id);
echo $id;
echo "
";
echo "Soll Temperatur WC: ";
echo $var_set_temp;
echo "
";

if($fenster == true)
{
		echo "Fesnter auf";
		echo "
";
		//Heizungsthermostat soll setzen
      /*HM_writeValueFloat($ID, 'SET_TEMPERATURE", 20.00);*/

		$err = HM_WriteValueFloat(48309, "SET_TEMPERATURE" ,15.00);
		if ($err === False)
		{
		echo "Fehler: Schaltaktor > Befehl wurde nicht ausgeführt
";
		}
		else
		{
		echo "OK: Schaltaktor > Befehl wurde ausgeführt
";
		}
}
	else
{
		echo "Fesnter zu";
		echo "
";
		//Heizungsthermostat soll setzen
		$err = HM_WriteValueFloat(48309, "SET_TEMPERATURE" ,23.00);
		if ($err === False)
		{
		echo "Fehler: Schaltaktor > Befehl wurde nicht ausgeführt
";
		}
		else
		{
		echo "OK: Schaltaktor > Befehl wurde ausgeführt
";
		}
}
?>

Hier die Ausgabe:
Fensterstatus WC:
Aktuelle Temperatur WC: 19.1
21467
Soll Temperatur WC: 18
Fesnter zu

Hab ich wieder was falsch gemacht?
Danke im Voraus.

Klar, sonst würde es ja gehen :wink:

	        $err = HM_WriteValueFloat(48309, "SET_TEMPERATURE" ,15.00);

Damit definierst Du nur $err, ein Schaltbefehl wird nicht ausgelöst. Das folgende muss jeweils auch noch rein:

HM_WriteValueFloat(48309, "SET_TEMPERATURE" ,15.00);

Wobei ich mir insgesamt die Frage stelle warum Du das per Script machst und nicht über die Homematic-Zentrale per Direktverknüpfung.

Aber natürlich wird auch bei zuweisungen die funktion ausgeführt.
Nur wenn ich erst das die Variable ausgebe, und dann die Funktion aufrufe, wird immer der alte und nicht der neue Wert ausgegeben.
Ausserdem dauert es bis die Thermostaten die Werte übernehmen.
Die Dinger sind ja nicht permanent auf Empfang.
Also einfach mal 5 min Warten.
(Oder Status emulieren in der Instanz anhaken).
Michael

Weil ich mir noch nicht so ganz im klaren bin, was besser ist. Wann Befehle in der CCU und wann von IPS ausführen zu lassen.
Können sich Aktionen der CCU mit Aktionen aus IPS beißen bzw. behindern? Was hat Trumpf? Der jüngste Befehl? :confused:

Ok, danke, falsch geraten :o

Ausserdem dauert es bis die Thermostaten die Werte übernehmen.

Der Haken fliegt bei mir immer als erstes raus. Seit dem Update auf 1.2 reagieren die Teile sofort, mal bei mir.

Also ich hatte den Haken „… emulieren“ bereits drin. Natürlich habe ich auch ein paar Minuten gewartet bevor ich hier poste und auch gerade nochmal nachgesehen. Leider ohne Erfolg.

Jetz habe ich das Skript mal abgespeckt auf Folgendes:

<?
/*Dieses Skript setzt die Solltemperatur eines Raumes in Abhängigkeit der Fensteröffnung*/

$fenster = GetValue(58075 /*[Erdgeschoss\Gäste-WC\Fensterkontakt-Gäste-WC\STATE]*/); //ID von State nicht von der Instanz!



if($fenster == true)
{

		HM_WriteValueFloat(48309, "SET_TEMPERATURE" ,15.00); // ID der Instanz!

}
	else
{
		HM_WriteValueFloat(48309, "SET_TEMPERATURE" ,23.00); // ID der Instanz!
		
}
?>

Ausgabe:
Warning: Failure in C:\IP-Symcon\scripts\13393.ips.php on line 18

Und trotzdem ein Fehler, nur sehe ich mit meinem Halbwissen keinen.

Bei mir funktioniert die Geschichte … :o

Und worin unterscheidet sich mein Script zu deinem? Oder liegt es an der IPS-Version?

Ja dass ist nicht einfach. Und mit dem ‚Neuen‘ habe ich auch noch keine Erfahrungen gesammelt.
Erschwert ist es vor allem durch die zig Betriebsmodi. Party heißt z.B. die im Regler eingestelle Party SollTemp nutzen. Ob Du die jetzt über SET_TEMPERATURE überscheiben kannst ? Ich glaube weniger.
Es gibt eigentlich zwei/drei wie ich meine weit verbreitete Mehtoden hier im Forum.
(möge mich einer eines besseren belehren :wink: )

  • Alles in IPS machen, Regler ist ‚doof‘ steht also auf Manuell und CCU/LAN ist nur Transportmittel => z.B. Ernies Heizungsskript
  • Regeler steht auf Auto und gut ist. Heizplan ist im Regler hinterlegt. TFK sind am Regler angelernt/direktverknüpft. Und IPS macht vielleicht noch die Modi-Umshaltung auf Party/Urlaub wenn man abwesend/länger nicht da ist.
    (Den Heizplan kann IPS auch über Umwege ändern. Hier lesen)
  • Regler steht auf Zentrale und Heizprogramm in der CCU. TFK sind am Regler direktverknüpft. Und IPS macht vielleicht noch die Modi-Umshaltung auf Party/Urlaub wenn man abwesend/länger nicht da ist.
    (Modi-Umschaltung per IPS)

Noch jemand eine Variante ?

Kann ich auch nicht nachvollziehen, schaut korrekt aus.
Michael

Habe das obige kopiert und die ID’s angepasst, State vom Fensterkontakt und 2x die K4-Instanz vom Regler (Variable SET_TEMPERATURE darunter). Was meinst Du mit IPS-Version?

Umschalten geht im Auto und im Manu-Modus, den Rest habe ich nicht probiert.

Halte immer noch an der Direktverknüpfung beider Geräte fest. Mit CCU2 eine Gruppe anlegen, beide Geräte rein, die Gruppe inkl. Zeitplan konfigurieren und fertig. Weiteres Zeitplan ändern danach (kann) über die „Umwege“ erfolgen (oder wieder die Gruppe in der CCU), da der Gruppenzeitplan nicht über den Umweg im IPS geändert werden kann. (Mein aktueller Stand)

Gruppenzeitplan wird auf den Steller übertragen, umgekehrt nicht.

So noch einfacher gebastelt und immer noch ein Fehler:

<?
HM_WriteValueFloat(48309 /*[Erdgeschoss\Gäste-WC\Thermostat-Gäste-WC-CLIMATECONTROL_RT_TRANSCEIVER]*/, "SET_TEMPERATURE" ,15.00); // ID der Instanz!
?>

Ausgabe:
Warning: Failure in C:\IP-Symcon\scripts\13393.ips.php on line 2

Siehe auch Screenshot vom Objektbaum:

Ich bin ratlos oder sehe den Wald vor lauter Bäumen nicht!!!

Ich habe nur eine CCU 1, aber ich werde dem mal nachgehen und das mal ausprobieren. Vielleicht ist auch der Thermostat defekt. Merkwürdig ist nur, dass ich SET_TEMPERATURE als Wert an sich auslesen kann, nur nicht setzen kann.

Mit der IPS-Version meinte ich, dass ich hier gelsen habe, dass wohl mit einer Beta-Version funktionieren sollte… Das habe ich aber noch nicht weiter verfolgt.

Hallo michel,

also bei mir klappt es mit diesem Befehl:

 <?
HM_WriteValueFloat(48309 /*[Erdgeschoss\Gäste-WC\Thermostat-Gäste-WC-CLIMATECONTROL_RT_TRANSCEIVER]*/, 'SET_TEMPERATURE', 15.00); // ID der Instanz!
?> 

ohne Fehlermeldung - bitte beachten, ich habe das Wort ‚SET_TEMPERATURE‘ nur mit einfachem Hochkomma geschrieben - keine Ahnung, ob das einen Einfluss hat.
Nimm doch vielleicht mal den beschreibenden Text nach der Instanz-ID raus, ich kann mich erinnern, dass bei mir mal ein Problem war.
Ich meine:
==> /[Erdgeschoss\Gäste-WC\Thermostat-Gäste-WC-CLIMATECONTROL_RT_TRANSCEIVER]/

Gruss Dieter

Ob die Gruppenfunktion auch auf der CCU1 geht weiss ich nicht, habe die 2er, Direktverknüpfung sollte aber gehen. Hab die Beta installiert, vielleicht liegt es auch da dran.

Probier im Skript mal ein @ davor

 <?
@HM_WriteValueFloat(48309 /*[Erdgeschoss\Gäste-WC\Thermostat-Gäste-WC-CLIMATECONTROL_RT_TRANSCEIVER]*/, 'SET_TEMPERATURE', 15.00); // ID der Instanz!
?>

Verhindert aber nur die Fehlermeldung