Hallo Zusammen,
ich bin die Tage auch mein erstes Mal mit dem HM-Dis-WM55 “zusammengestoßen”. Daraufhin habe ich auch einiges hier im Forum und sonst im Netz recherchiert und habe ein PHP-Script für den HM-Dis-WM55 (eigentlich auch für den HM-Dis-EP-WM55, da fehlt aber noch was) gebaut mit dem man den Display-Inhalt dynamisch und relativ unkryptisch generieren kann. Das Script unterstützt mehrere Display mit einem Run, für den Fall das man das (vermutlich nur beim EP) mal brauchen sollte…
Da ich mir denken könnte, dass dies für den einen oder anderen hilfreich sein könnte, poste ich es mal hier
<?php
/**
* @author Andreas Fink
* @copyright 2017
* @abstract Funktionssammlung für HM-Dis-WM55 und HM-Dis-EP-WM55
*/
define ("DisplayStart", "02");
define ("DisplayEnd", "03");
define ("NextLine", "0a");
define ("TextPrefix", "12");
define ("ColorPrefix", "11");
define ("SymbolPrefix", "13");
/** Symbole
* 0x80 AUS
* 0x81 EIN
* 0x82 OFFEN
* 0x83 geschlossen
* 0x84 fehler
* 0x85 alles ok
* 0x86 information
* 0x87 neue nachricht
* 0x88 servicemeldung
*/
define ("icon_off", "80");
define ("icon_on", "81");
define ("icon_open", "82");
define ("icon_closed", "83");
define ("icon_error", "84");
define ("icon_ok", "85");
define ("icon_information", "86");
define ("icon_message", "87");
define ("icon_service", "88");
define ("icon_signal_green", "89");
define ("icon_signal_yellow", "8A");
define ("icon_signal_red", "8B");
define ("icon_no", "");
/** 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", "80");
define ("colour_red", "81");
define ("colour_orange", "82");
define ("colour_yellow", "83");
define ("colour_green", "84");
define ("colour_blue", "85");
/** Zugriff auf vordefinierte Texte
* 0x80 Textblock 1
* 0x81 Textblock 2
* 0x82 Textblock 3
* 0x83 Textblock 4
* 0x84 Textblock 5
* 0x85 Textblock 6
* 0x86 Textblock 7
* 0x87 Textblock 8
* 0x88 Textblock 9
* 0x89 Textblock 10
*/
/** Tonfolgen (nur HM-DIS-EP-WM55)
* 0xC0 AUS
* 0xC1 LANG LANG
* 0xC2 LANG KURZ
* 0xC3 LANG KURZ KURZ
* 0xC4 KURZ
* 0xC5 KURZ KURZ
* 0xC6 LANG
*/
/** Signale (nur HM-DIS-EP-WM55)
* 0xF0 AUS
* 0xF1 Rotes Blitzen
* 0xF2 Grünes Blitzen
* 0xF3 Orangenes Blitzen
*/
/** Test-Code
* $Displays = newDisplay("Boardroom");
* WriteHMDisplayLine(0, 1, "Dies ist", colour_red, icon_signal_yellow);
* WriteHMDisplayLine(0, 2, "mein Text", colour_green, icon_ok);
* echo returnDisplayContent(0);
*/
function newDisplay($Name = "")
{
if ($Name == "")
{
$Name = "Display";
$Name .= count($Displays);
}
$newDisplay = array( array("Name"=>$Name,"ContentLine1"=>"","ContentLine2"=>"","ContentLine3"=>"","ContentLine4"=>"","ContentLine5"=>"","ContentLine6"=>"","Signal"=>"","Tone"=>""));
return $newDisplay;
}
function addDisplay($Name = "")
{
global $Displays;
$Displays = array_merge($Displays, newDisplay($Name));
}
function renameDisplay($DisplayNr, $NewName)
{
global $Displays;
$Displays[$DisplayNr]['Name'] = $NewName;
}
function clearHMDisplay($DisplayNr)
{
global $Displays;
$Displays[$DisplayNr]['ContentLine1'] = "";
$Displays[$DisplayNr]['ContentLine2'] = "";
$Displays[$DisplayNr]['ContentLine3'] = "";
$Displays[$DisplayNr]['ContentLine4'] = "";
$Displays[$DisplayNr]['ContentLine5'] = "";
$Displays[$DisplayNr]['ContentLine6'] = "";
$Displays[$DisplayNr]['Signal'] = "";
$Displays[$DisplayNr]['Tone'] = "";
}
function returnDisplayContent($DisplayNr)
{
global $Displays;
$DisplayContent = DisplayStart; //Start
if($Displays[$DisplayNr]['ContentLine1'] != "" || $Displays[$DisplayNr]['ContentLine2'] != "" || $Displays[$DisplayNr]['ContentLine3'] != "" || $Displays[$DisplayNr]['ContentLine4'] != "" || $Displays[$DisplayNr]['ContentLine5'] != "" || $Displays[$DisplayNr]['ContentLine6'] != "")
{
$DisplayContent .= $Displays[$DisplayNr]['ContentLine1'];
if($Displays[$DisplayNr]['ContentLine2'] != "" || $Displays[$DisplayNr]['ContentLine3'] != "" || $Displays[$DisplayNr]['ContentLine4'] != "" || $Displays[$DisplayNr]['ContentLine5'] != "" || $Displays[$DisplayNr]['ContentLine6'] != "")
{
$DisplayContent .= NextLine;
$DisplayContent .= $Displays[$DisplayNr]['ContentLine2'];
if($Displays[$DisplayNr]['ContentLine3'] != "" || $Displays[$DisplayNr]['ContentLine4'] != "" || $Displays[$DisplayNr]['ContentLine5'] != "" || $Displays[$DisplayNr]['ContentLine6'] != "")
{
$DisplayContent .= NextLine;
$DisplayContent .= $Displays[$DisplayNr]['ContentLine3'];
if($Displays[$DisplayNr]['ContentLine4'] != "" || $Displays[$DisplayNr]['ContentLine5'] != "" || $Displays[$DisplayNr]['ContentLine6'] != "")
{
$DisplayContent .= NextLine;
$DisplayContent .= $Displays[$DisplayNr]['ContentLine4'];
if($Displays[$DisplayNr]['ContentLine5'] != "" || $Displays[$DisplayNr]['ContentLine6'] != "")
{
$DisplayContent .= NextLine;
$DisplayContent .= $Displays[$DisplayNr]['ContentLine5'];
if($Displays[$DisplayNr]['ContentLine6'] != "")
{
$DisplayContent .= NextLine;
$DisplayContent .= $Displays[$DisplayNr]['ContentLine6'];
}
}
}
}
}
}
$DisplayContent .= DisplayEnd;
return $DisplayContent;
}
function WriteHMDisplayLine($DisplayNr, $LineNr, $LineText, $LineColor, $LineSymbol)
{
global $Displays;
if ($LineNr <= 6 && $LineNr >= 1)
{
if ($LineText != "")
{
$Line = TextPrefix;
$Line .= hex_encode($LineText);
if ($LineColor != "")
{
$Line .= ColorPrefix;
$Line .= $LineColor;
}
if ($LineSymbol != "")
{
$Line .= SymbolPrefix;
$Line .= $LineSymbol;
}
}
}
if ($LineNr == 1)
{
$Displays[$DisplayNr]['ContentLine1'] = $Line;
}
elseif ($LineNr == 2)
{
$Displays[$DisplayNr]['ContentLine2'] = $Line;
}
elseif ($LineNr == 3)
{
$Displays[$DisplayNr]['ContentLine3'] = $Line;
}
elseif ($LineNr == 4)
{
$Displays[$DisplayNr]['ContentLine4'] = $Line;
}
elseif ($LineNr == 5)
{
$Displays[$DisplayNr]['ContentLine5'] = $Line;
}
elseif ($LineNr == 6)
{
$Displays[$DisplayNr]['ContentLine6'] = $Line;
}
}
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 = str_replace("0x", "", $return);
return $return;
}
?>
Dieses Script ist in das folgende included und dort werden dessen Funktionen dann angesprochen:
#!/usr/bin/env php
<?php
/**
* @author Andreas Fink
* @copyright 2017
* @abstract Setzen der Lichtmodi mit HM-Dis-WM55 samt Displayausgabe
*/
include_once("Connect.php");
include_once("/var/lib/homegear/scripts/HM-Dis-WM55.php");
if($argc>=2)
{
$LightModeBR = $Client->send("getSystemVariable",array("LightmodeBoardroom"));
if($argv[1] == "Boardroom1TopShort")
{
if($LightModeBR >= 2)
{
$LightModeBR--;
}
}
else if ($argv[1] == "Boardroom1ButtomShort")
{
if($LightModeBR <= 2)
{
$LightModeBR++;
}
}
}
$Displays = newDisplay("Boardroom");
WriteHMDisplayLine(0, 1, "Lichtmodus:", colour_white, icon_no);
if($LightModeBR == 1)
{
WriteHMDisplayLine(0, 3, "DAUER", colour_green, icon_on);
}
else if($LightModeBR == 2)
{
WriteHMDisplayLine(0, 3, "AUTO", colour_blue, icon_service);
}
else if($LightModeBR == 3)
{
WriteHMDisplayLine(0, 3, "DAUER", colour_orange, icon_off);
}
else
{
WriteHMDisplayLine(0, 3, "UNBEKANNT", colour_red, icon_error);
}
$Client->send("setValue", array(57, 1, "SUBMIT", returnDisplayContent(0)));
$Client->send("setSystemVariable",array("LightmodeBoardroom", $LightModeBR));
?>
Für Tipps, Anregungen, Optimierungen, Kritik, … bin ich immer offen! Natürlich auch für Nachfragen!
Gruß Andreas