Tach zusammen,
nachdem die Displays hier eine ganze Weile nutzlos herumlagen (typischer Haben-Will-/Neugierde-Kauf) haben sich jetzt doch noch 2 sinnvolle Anwendungsfälle gefunden.
Eines wird genutzt um den Status der Regenwasserzisterne auf einen Blick darzustellen, ein anderes um den Anwesenheitsstatus anzuzeigen und zu setzen.
Als Basis dient das HM-OLED-Skript weiter oben in leicht erweiterter/bereinigter Version. Allen Beteilgten (Christian, Marcel, Martin, Michael, …) sei an dieser Stelle für die super Vorarbeit gedankt.
Es ist kein Mumbo Jumbo auf der CCU nötig - es muss nur sichergestellt sein, dass ein Betätigen der Tasten in IPS entsprechend repräsentiert ist (-> Wiki).
Den folgenden Code als HM_OLED.inc.php im Ordner \scripts abwerfen (alles weitere in den folgenden zwei Posts):
<?
//---------------------------------------
// Definition der Werte für die Icons
//
// 0x80 EIN icon_on
// 0x81 AUS icon_off
// 0x82 OFFEN icon_open
// 0x83 geschlossen icon_closed
// 0x84 fehler icon_error
// 0x85 alles ok icon_ok
// 0x86 information icon_information
// 0x87 neue nachricht icon_message
// 0x88 servicemeldung icon_service
// 0x89 Signal grün icon_green
// 0x8A Signal gelb icon_yellow
// 0x8B Signal rot icon_red
// ohne Icon icon_no
define ("icon_on", "0x80");
define ("icon_off", "0x81");
define ("icon_open", "0x82");
define ("icon_closed", "0x83");
define ("icon_error", "0x84");
define ("icon_ok", "0x85");
define ("icon_information", "0x86");
define ("icon_message", "0x87");
define ("icon_service", "0x88");
define ("icon_signal_green", "0x89");
define ("icon_signal_yellow", "0x8A");
define ("icon_signal_red", "0x8B");
define ("icon_no", "");
//---------------------------------------
// Definition der Werte für die Farben
//
// 0x80 weiss colour_white
// 0x81 rot colour_red
// 0x82 orange colour_orange
// 0x83 gelb colour_yellow
// 0x84 grün color_green
// 0x85 blau color_blue
define ("colour_white", "0x80");
define ("colour_red", "0x81");
define ("colour_orange", "0x82");
define ("colour_yellow", "0x83");
define ("colour_green", "0x84");
define ("colour_blue", "0x85");
//---------------------------------------
// Umlaute - Sonderzeichen:
//
// "{" = "ä"
// "[" = "Ä"
// "|" = "ö"
// "#" = "Ö"
// "}" = "ü"
// "$" = "Ü"
// "'" = "="
// "_" = "ß"
// "]" = "&"
// ";" = Sanduhr
// "<" = Pfeil nach links oben
// "=" = Pfeil nach links unten
// "@" = Pfeil nach unten (großes "V")
// ">" = Pfeil nach oben ("V" im Kopfstand)
function OLED_String($display_line) {
$string = "0x02";
if ($display_line[1]['text'] != "") {
$string .= ",0x12,".hex_encode($display_line[1]['text']).",0x11,".$display_line[1]['colour'];
if ($display_line[1]['icon'] != ""){
$string .= ",0x13,".$display_line[1]['icon'].",0x0A";
} else {
$string .= ",0x0A";
}
} else {
$string.= ",0x0A";
}
if ($display_line[2]['text'] != "") {
$string .= ",0x12,".hex_encode($display_line[2]['text']).",0x11,".$display_line[2]['colour'];
if ($display_line[2]['icon'] != ""){
$string .= ",0x13,".$display_line[2]['icon'].",0x0A";
} else {
$string .= ",0x0A";
}
} else {
$string.= ",0x0A";
}
if ($display_line[3]['text'] != "") {
$string .= ",0x12,".hex_encode($display_line[3]['text']).",0x11,".$display_line[3]['colour'];
if ($display_line[3]['icon'] != ""){
$string .= ",0x13,".$display_line[3]['icon'].",0x0A";
} else {
$string .= ",0x0A";
}
} else {
$string.= ",0x0A";
}
if ($display_line[4]['text'] != "") {
$string .= ",0x12,".hex_encode($display_line[4]['text']).",0x11,".$display_line[4]['colour'];
if ($display_line[4]['icon'] != ""){
$string .= ",0x13,".$display_line[4]['icon'].",0x0A";
} else {
$string .= ",0x0A";
}
} else {
$string.= ",0x0A";
}
if ($display_line[5]['text'] != "") {
$string .= ",0x12,".hex_encode($display_line[5]['text']).",0x11,".$display_line[5]['colour'];
if ($display_line[5]['icon'] != ""){
$string .= ",0x13,".$display_line[5]['icon'].",0x0A";
} else {
$string .= ",0x0A";
}
} else {
$string.= ",0x0A";
}
if ($display_line[6]['text'] != "") {
$string .= ",0x12,".hex_encode($display_line[6]['text']).",0x11,".$display_line[6]['colour'];
if ($display_line[6]['icon'] != ""){
$string .= ",0x13,".$display_line[6]['icon'].",0x0A";
} else {
$string .= ",0x0A";
}
} else {
$string.= ",0x0A";
}
$string .= ",0x03";
return $string;
}
function hex_encode($string) {
$umlaut = array("Ä" ,"Ö" ,"Ü" ,"ä" ,"ö" ,"ü" ,"ß" ,":" );
$hex = array("0xc4","0xd6","0xdc","0xe4","0xf6","0xfc","0xdf","0x3a");
$hex_neu = array("0x5b","0x23","0x24","0x7b","0x7c","0x7d","0x5f","0x3a");
$encoded = bin2hex($string);
$string_array = str_split($encoded,2);
foreach ($string_array as $key => $wert) {
$string_array[$key] = "0x".$wert;
}
$return = implode(",",$string_array);
$return = str_replace($hex, $hex_neu, $return);
return $return;
}
function HMRS_HTTP_Post($CCU_IP, $HM_Script) {
$fp = fsockopen ($CCU_IP, 8181, $errno, $errstr, 2);
$res = "";
if (!$fp) {
$res = "$errstr ($errno)<br />
";
} else {
fputs($fp, "POST /Test.exe HTTP/1.1
");
fputs($fp, "Content-type: application/x-www-form-urlencoded
");
fputs($fp, "Content-length: ". strlen($HM_Script) ."
");
fputs($fp, "Connection: close
");
fputs($fp, $HM_Script);
while(!feof($fp)) {
$res .= fgets($fp, 500);
}
fclose($fp);
}
return $res;
}
?>
Beste Grüße
/Jens