so nun konnte ich nicht die finger davon lassen. wo ich die heizung nicht in den griff bekommen habe.
ich hab auf basis meines verstärker scriptes dieses abgewandelt
<?
// statusvariablen des fernsehers
define ("ID_POWER", 52313);
define ("ID_MUTE", 52860);
define ("ID_VOL", 43704);
define ("ID_RATIO", 55557);
define ("ID_LOCK", 11814);
define ("ID_INPUT", 41675);
// hilfsvariable
define ("TIMERCHECK", 18515 );
// statusvariablen webfront und serial port
define ("ID_SOCKET", 29144);
define ("ID_WEBFRONT", 21641);
// ab hier braucht nichts geändert zu werden
// aufruf per register variable, script oder webfront?
if($IPS_SENDER == "RegisterVariable") {
// bereits im Puffer der Instanz vorhandene Daten in $data kopieren
$data = RegVar_GetBuffer($IPS_INSTANCE);
// neu empfangene Daten an $data anhängen
$data .= $IPS_VALUE;
// wenn das Trennzeichen x in $data gefunden worden ist
if (strpos($data, 'x'))
{
// $data in durch ; separierte Datensätze zerlegen
$datasets = explode('x', $data);
// alle nicht durch ; terminierten Datensätze ausgeben
for ($i = 0; $i < count($datasets) - 1; $i++)
{
// prüfen ob ein einschalten "ACEZ" vorhanden ist. dann wären dies die ersten zeichen
// manchmal kommt zuvor noch ein sonderzeichen daher zwei abfragen
if (substr($datasets[$i],0,4) == "ACEZ" )
{
// power on
checkACK("ACEZ");
$datasets[$i] = substr($datasets[$i],4);
}
else if (substr($datasets[$i],1,4) == "ACEZ" )
{
// power on
checkACK("ACEZ");
$datasets[$i] = substr($datasets[$i],5);
}
//echo "empfangener Datensatz: ".$datasets[$i]."
";
checkACK($datasets[$i]);
}
// $data auf den Inhalt des letzten (unvollständigen) Datensatzes setzen
$data = $datasets[count($datasets) - 1];
}
// Inhalt von $data im Puffer der RegisterVariable-Instanz speichern
RegVar_SetBuffer($IPS_INSTANCE, $data);
}
if($IPS_SENDER == "WebFront") {
// power schalter
if ($IPS_VARIABLE==ID_POWER)
{
// je nach zustand ausschalten. einschalten geht nicht über lan!
if ($IPS_VALUE == true)
{
// wenn der pioneer eingeschaltet ist und dann vom netz getrennt wird und danach wieder strom bekommt
// behält er den letzten zustand. fazit: schaltbare steckdose
// nachteil: dann ggf. einschalten über die fernbedienung nicht mehr möglich
//
// wenn auf true gewechelt, dann kein wechsel vornehmen da einschalten nicht möglich
//SetValue($ID_POWER, false);
//socket aktualisieren da unter umständen keine verbinung zustande kommt
IPS_ApplyChanges(ID_SOCKET);
$ret = sendCommand("KA 00 01"); // einschaltbefehl
SetValue(ID_POWER, $IPS_VALUE); // varaible für power on setzen
tvOn(); // variablen + schalter ausblenden
}
else
{
$ret = sendCommand("KA 00 00"); /// ausschaltbefehl
SetValue(ID_POWER, $IPS_VALUE); // varaible für power off setzen
tvOff(); // variablen + schalter ausblenden
}
}
// mute schalter
if ($IPS_VARIABLE==ID_MUTE)
{
// je nach zustand ausschalten. einschalten geht nicht über lan!
if ($IPS_VALUE == true)
{
$ret = sendCommand("KE 00 00"); // mute on
SetValue(ID_MUTE, $IPS_VALUE);
}
else
{
$ret = sendCommand("KE 00 01"); // mute off
SetValue(ID_MUTE, $IPS_VALUE);
}
}
// lautstärke schalter
if ($IPS_VARIABLE==ID_VOL)
{
//echo $IPS_VALUE."VL";
if (GetValue(ID_VOL) != $IPS_VALUE )
{
// Werte von 0 bis 64(voll aufgedreht)
// so muss auch das profil der volumen variablen angelegt sein.
$ret = sendCommand("KF 00 ".$IPS_VALUE); // vol direkt setzen
SetValue(ID_VOL, $IPS_VALUE);
}
}
// bildverhältnis schalter
if ($IPS_VARIABLE==ID_RATIO)
{
if (GetValue(ID_RATIO) != $IPS_VALUE )
{
// einstelige zahlen mit 0 voranstellen
$tmp_val = substr("0".$IPS_VALUE,-2);
$ret = sendCommand("KC 00 ".$tmp_val); // Funktion direkt setzen
SetValue(ID_RATIO, $tmp_val);
}
}
// key lock schalter
if ($IPS_VARIABLE==ID_LOCK)
{
// je nach zustand ausschalten. einschalten geht nicht über lan!
if ($IPS_VALUE == true)
{
$ret = sendCommand("KM 00 01"); // lock
SetValue(ID_LOCK, $IPS_VALUE);
}
else
{
$ret = sendCommand("KM 00 00"); // unlock
SetValue(ID_LOCK, $IPS_VALUE);
}
}
// eingangswahl schalter
if ($IPS_VARIABLE==ID_INPUT)
{
if (GetValue(ID_INPUT) != $IPS_VALUE )
{
// einstelige zahlen mit 0 voranstellen
$tmp_val = substr("0".$IPS_VALUE,-2);
$ret = sendCommand("XB 00 ".$tmp_val); // Eingangswahl direkt setzen
SetValue(ID_INPUT, $tmp_val);
}
}
}
// zeitliche events abfragen
if($IPS_SENDER == "TimerEvent") {
// aktion per webfront
if (GetValue(TIMERCHECK)==true)
{
// gibt zyklische rückmeldung, dann ist der fernseher an
// Status für erneute prüfung zurücksetzen
SetValue(TIMERCHECK,false);
}
else
{
if (GetValue(ID_POWER)==true)
{
SetValue(ID_POWER,false);
tvOff(); // variablen, schalter einblenden
}
}
// regelmäßige prüfkommandos blenden leider das onscreen display ein
//
// OSD vorher aus - ist aber zu langsam so dass ein zucken entsteht
//$ret = sendCommand("KL 00 00");
// prüfkommando nur beim einschalten absenden
// regelmäßige prüfung nicht notwendig da bei fernbedienungsaktionen die anworten empfangen werden
$ret = sendCommand("KA 00 FF"); // power on
//$ret = sendCommand("KC 00 FF"); // welche lautstärke
//$ret = sendCommand("KE 00 FF"); // mute
// OSD wieder an
//$ret = sendCommand("KL 00 01");
}
// funktion um die antwort zu prüfen
function checkACK($data)
{
// power aus
if ($data=="ACEZ" || $data=="a 01 OK01")
{
SetValue(TIMERCHECK,true); //hilfsvariable setzen um zu erkennen das nach einem timer zyklus keine antwort mehr kommt
if (GetValue(ID_POWER)==false)
{
SetValue(ID_POWER,true);
tvON(); // variablen, schalter einblenden
}
}
// mute aus
else if ($data=="e 01 OK01")
{
SetValue(ID_MUTE,false);
}
// mute aus
else if ($data=="e 01 OK00")
{
SetValue(ID_MUTE,true);
}
}
function sendCommand($com)
{
$feedback= ComPort_SendText(ID_SOCKET, $com.chr(13));
return $feedback;
}
// tv on - also bedienelemente sichtbar machen
function tvOn()
{
// power wurde nicht ausgeblendet
IPS_SetHidden(ID_MUTE, false);
IPS_SetHidden(ID_VOL, false);
IPS_SetHidden(ID_RATIO, false);
IPS_SetHidden(ID_LOCK, false);
IPS_SetHidden(ID_INPUT, false);
// webfront aktualisieren
WFC_Reload(ID_WEBFRONT);
//echo "refresh on";
}
// tv off - also bedienelemente ausblenden, dadurch kein exception handling im script
function tvOff()
{
// power bleibt immer sichtbar damit bleibt es beim zusammenklappen im webfront (oder falls mal einschalten geht)
// andere elemente ausblenden
IPS_SetHidden(ID_MUTE, true);
IPS_SetHidden(ID_VOL, true);
IPS_SetHidden(ID_RATIO, true);
IPS_SetHidden(ID_LOCK, true);
IPS_SetHidden(ID_INPUT, true);
// webfront aktualisieren
WFC_Reload(ID_WEBFRONT);
//echo "refresh off";
}
?>
die anlage in ips ist im screenshot. dazu muss noch nen serial port angelegt werden. bei dir sind es 9600 baud. bei mir sind es 115200 oder so. dieses ist aber über das service menü bei mir einstellbar.
die profileinstellungen sind im screenshot
leider hatte ich nicht so viel lust, nein zeit so ein installationsscript zu basteln.