HM-Dis-WM55

Auch wenn jetzt bestimmt wieder irgendein Schlauberger anmerkt „nein, das steht doch da“, finde ich die Frage nicht ganz unangebracht.

Ich habe ja auch die Displayfernbedienungen von HomeMatic, die funktionieren angeblich auch nur per CCU, aber in Verbindung mit IPS+LAN-Adapter+Programmierung zeigen sie fleißig Text an. Insofern… frage ich mich ob sich die Aussage, das ginge nicht, auf „geht nicht ohne CCU2 bzw. andere Intelligenz“ oder „geht gar nicht ohne die CCU2“ bezieht.

Entscheidend ist ob der Hersteller den Gerätetyp in den BidCos eingepflegt hat.
Wie man das jetzt ohne testen raus bekommt weiß ich allerdings nicht.
Sollte er vorhanden sein, kannst du bei Tastendruck mit einem Script den Datenpunkt SUBMIT beschreiben.
Aber da ist zumindest bei der CCU2 ein Bug im BidCos welcher die Länge beeinflusst und somit ist dieser Weg gerade nicht funktional.
Michael

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

Auf Tastendruck (oben/unten) werden folgende Werte auf dem Display dargestellt:

  • Entnahme ja/nein (Symbol)
  • Füllstand in Litern
  • Füllstand in %
  • Delta der letzten 24 Stunden in Litern

Die Farbgebung passt sich den Werten entsprechend an - Doku im Skript:

<?

// Status der Zisterne auf dem HM-Dis-WM55 von Homematic
//


include "HM_OLED.inc.php";


$CCU_IP = '1.2.3.4';  // IP der CCU2
$ArchiveHandler = 11111; // ID des Archive Handlers
$amountVar = 22222; // Füllmenge in Litern (int)
$amount = GetValueInteger($amountVar);
$amountColour = colour_green;
$amountbuffer = 730; // Wert in Litern ab dem die Füllmenge 'orange' angezeigt werden soll
$amountempty = 400; // Wert in Litern ab dem die Füllmenge 'rot' angezeigt werden soll
$level = round(GetValueFloat(33333), 1); // Füllstand in %
$Rainwater = GetValueBoolean(44444); // Regenwasserentnahme ja/nein (z.B. durch Schwimmerschalter)
$dateminus24hrs = strtotime(date("d.m.Y H:i:s")) - 24*3600;


if ($Rainwater) {
     $RainwaterIcon = icon_signal_green;
} else {
     $RainwaterIcon = icon_signal_red;
}


$arr = AC_GetLoggedValuesCompatibility($ArchiveHandler, $amountVar, $dateminus24hrs, $dateminus24hrs, 1);
foreach($arr as $val24) {
    $amount24 = $val24['Value'];
}
$amountDelta = $amount - $amount24;
if ($amountDelta < 0) {
     $DeltaColour = colour_red;
     $DeltaSign = "=";
     $amountDelta = -$amountDelta;
} elseif ($amountDelta == 0) {
     $DeltaColour = colour_white;
     $DeltaSign = "'";
} else {
     $DeltaColour = colour_green;
     $DeltaSign = "<";
}


if ($amount <= $amountbuffer) {
    $amountColour = colour_orange;
    if ($amount <= $amountempty) {
         $amountColour = colour_red;
    }
}


$display_line[1] =
    array(    'text'    =>     "ZISTERNE",
              'icon'    =>     $RainwaterIcon,
              'colour'  =>     colour_blue);


$display_line[2] =
    array(    'text'    =>     "",
              'icon'    =>     icon_no,
              'colour'  =>     colour_blue);


$display_line[3] =
    array(    'text'    =>     "$amount Liter",
              'icon'    =>     icon_no,
              'colour'  =>     $amountColour);


$display_line[4] =
    array(    'text'    =>     "$level %",
              'icon'    =>     icon_no,
              'colour'  =>     colour_yellow);


$display_line[5] =
    array(    'text'    =>     "Letzte 24h:",
              'icon'    =>     icon_no,
              'colour'  =>     colour_white);


$display_line[6] =
    array(    'text'    =>     "$DeltaSign $amountDelta Liter",
              'icon'    =>     icon_no,
              'colour'  =>     $DeltaColour);


$string = OLED_String($display_line);


// ABC1234567 durch die Geräte-ID des Displays ersetzen
$HM_Script = '
! Hex-String an das Display senden
dom.GetObject("BidCos-RF.ABC1234567:1.SUBMIT").State("'.$string.'");
';


HMRS_HTTP_Post($CCU_IP, $HM_Script);


function AC_GetLoggedValuesCompatibility($instanceID, $variableID, $startTime, $endTime, $limit) {
    $values = AC_GetLoggedValues($instanceID, $variableID, $startTime, $endTime, $limit );
    if((sizeof($values) == 0) || (end($values)['TimeStamp'] > $startTime)) {
        $previousRow = AC_GetLoggedValues($instanceID, $variableID, 0, $startTime - 1, 1 );
        $values = array_merge($values, $previousRow);
    }
    return $values;
}


?>

Als Ereignis(se) ist/sind dann nur noch „PRESS_SHORT“ beider oder einer der Tasten an das Skript anzuhängen (bei Variablenaktualisierung!)

Beste Grüße
/Jens

Als „Unterbau“ nutze ich das Anwesenheitssteuerungs-Skript von @browson (LINK). Die einzelnen Stati werden durch einen Integer-Wert abgebildet - das passte ganz gut zusammen und außerdem war es sowieso schon im Einsatz. Die Reihenfolge bzw. die Werte sollte man nach seinen eigenen Wünschen anpassen. Ich habe diese Variante gewählt:

0 - anwesend (grün)
1 - unterwegs (rot)
2 - Nachtruhe (blau)
3 - Urlaub (gelb)

Mit den Tastern des Displays „scrollt“ man dann durch die Stati (da jedesmal der komplette Display-Inhalt übertragen werden muss, sieht man nach jedem Tastendruck kurz die Sanduhr). Der gewählte Status wird durch farbliche Kennzeichnung & Großschrift hervorgehoben. Oben und unten wird ein Indikator angezeigt, ob ein Scrollen in diese Richtung möglich ist (bei mehr als 4 Auswahlmöglichkeiten sinnvoll …).
Die „Presence“-Variable wird nur geändert wenn sich auch wirklich der Status geändert hat und das auch erst beim Ausschalten des Displays.

<?

// Anwesenheitsstatus anzeigen bzw. setzen mit dem HM-Dis-WM55 von Homematic
//


include "HM_OLED.inc.php";


$CCU_IP = '1.2.3.4'; // IP der CCU2


$PresenceRawID = 11111; // Anwesenheitstatus (1-4, int)
$PresenceRaw = GetValueInteger($PresenceRawID);
$PresenceCacheID = 22222; // Anwesenheitstatus-Cache - muss vor Ausführung manuell angelegt werden
$DisplayTransmit = 1; // Zeit für die Datenübertragung zum Display in Sek.
$DisplayOnTime = 10+$DisplayTransmit; // Anzeigezeit Display (sollte dem im Display eingestellten Wert entsprechen)
$KeyUpEvent = 33333; // ID des Ereignisses der Taste oben - muss vor Ausführung manuell angelegt werden
$KeyDownEvent = 44444; // ID des Ereignisses der Taste unten - muss vor Ausführung manuell angelegt werden


$TimerState = IPS_GetScriptTimer($_IPS['SELF']);


if ($TimerState == 0) {
    IPS_SetScriptTimer($_IPS['SELF'], $DisplayOnTime);       // Timer setzen
    $PresenceCache = $PresenceRaw;
    SetValueInteger($PresenceCacheID, $PresenceCache);
    $display_line = GetPresenceDisplay($PresenceCache);
} else {
    if ($_IPS['EVENT'] == $KeyUpEvent) {
        IPS_SetScriptTimer($_IPS['SELF'], $DisplayOnTime);   // Timer setzen
          $PresenceCache = GetValueInteger($PresenceCacheID);
          if ($PresenceCache == 0) {
            $PresenceCache = $PresenceCache;
          } else {
              $PresenceCache = $PresenceCache-1;
          }
        SetValueInteger($PresenceCacheID, $PresenceCache);
        $display_line = GetPresenceDisplay($PresenceCache);
    }
    if ($_IPS['EVENT'] == $KeyDownEvent) {
        IPS_SetScriptTimer($_IPS['SELF'], $DisplayOnTime);   // Timer setzen
           $PresenceCache = GetValueInteger($PresenceCacheID);
          if ($PresenceCache == 3) {
            $PresenceCache = $PresenceCache;
          } else {
              $PresenceCache = $PresenceCache+1;
          }
        SetValueInteger($PresenceCacheID, $PresenceCache);
        $display_line = GetPresenceDisplay($PresenceCache);
    }


}


if($_IPS['SENDER'] == "TimerEvent"){
    IPS_SetScriptTimer($_IPS['SELF'], 0);                   // Timer deaktivieren
    $PresenceCache = GetValueInteger($PresenceCacheID);
    SetValueInteger($PresenceRawID, $PresenceCache);
}


$string = OLED_String($display_line);


// ABC1234567 durch die Geräte-ID des Displays ersetzen
$HM_Script = '
! Hex-String an das Display senden
dom.GetObject("BidCos-RF.ABC1234567:1.SUBMIT").State("'.$string.'");
';


HMRS_HTTP_Post($CCU_IP, $HM_Script);


function GetPresenceDisplay($PresenceCache) {
    switch($PresenceCache) {
         case 0:
              $UpArrow = "";
              $UpArrowIcon = icon_no;
              $UpArrowColour = colour_orange;
              $Present = "ANWESEND";
              $PresentIcon = icon_no;
              $PresentColour = colour_green;
              $Sleeping = "Nachtruhe";
              $SleepingIcon = icon_no;
              $SleepingColour = colour_white;
              $OutOfHome = "Unterwegs";
              $OutOfHomeIcon = icon_no;
              $OutOfHomeColour = colour_white;
              $Holiday = "Urlaub";
              $HolidayIcon = icon_no;
              $HolidayColour = colour_white;
              $DownArrow = ":::O:::";
              $DownArrowIcon = icon_no;
              $DownArrowColour = colour_orange;
         break;
         case 1:
              $UpArrow = ":::O:::";
              $UpArrowIcon = icon_no;
              $UpArrowColour = colour_orange;
              $Present = "Anwesend";
              $PresentIcon = icon_no;
              $PresentColour = colour_white;
              $Sleeping = "Nachtruhe";
              $SleepingIcon = icon_no;
              $SleepingColour = colour_white;
              $OutOfHome = "UNTERWEGS";
              $OutOfHomeIcon = icon_no;
              $OutOfHomeColour = colour_red;
              $Holiday = "Urlaub";
              $HolidayIcon = icon_no;
              $HolidayColour = colour_white;
              $DownArrow = ":::O:::";
              $DownArrowIcon = icon_no;
              $DownArrowColour = colour_orange;
         break;
         case 2:
              $UpArrow = ":::O:::";
              $UpArrowIcon = icon_no;
              $UpArrowColour = colour_orange;
              $Present = "Anwesend";
              $PresentIcon = icon_no;
              $PresentColour = colour_white;
              $Sleeping = "NACHTRUHE";
              $SleepingIcon = icon_no;
              $SleepingColour = colour_blue;
              $OutOfHome = "Unterwegs";
              $OutOfHomeIcon = icon_no;
              $OutOfHomeColour = colour_white;
              $Holiday = "Urlaub";
              $HolidayIcon = icon_no;
              $HolidayColour = colour_white;
              $DownArrow = ":::O:::";
              $DownArrowIcon = icon_no;
              $DownArrowColour = colour_orange;
         break;
         case 3:
              $UpArrow = ":::O:::";
              $UpArrowIcon = icon_no;
              $UpArrowColour = colour_orange;
              $Present = "Anwesend";
              $PresentIcon = icon_no;
              $PresentColour = colour_white;
              $Sleeping = "Nachtruhe";
              $SleepingIcon = icon_no;
              $SleepingColour = colour_white;
              $OutOfHome = "Unterwegs";
              $OutOfHomeIcon = icon_no;
              $OutOfHomeColour = colour_white;
              $Holiday = "URLAUB";
              $HolidayIcon = icon_no;
              $HolidayColour = colour_yellow;
              $DownArrow = "";
              $DownArrowIcon = icon_no;
              $DownArrowColour = colour_orange;
         break;
    }
    $display_line[1] =
        array(    'text'    =>     "$UpArrow",
                  'icon'    =>     $UpArrowIcon,
                  'colour'  =>     $UpArrowColour);


    $display_line[2] =
        array(    'text'    =>     "$Present",
                  'icon'    =>     $PresentIcon,
                  'colour' =>      $PresentColour);


    $display_line[3] =
        array(    'text'    =>     "$OutOfHome",
                  'icon'    =>     $OutOfHomeIcon,
                  'colour'  =>     $OutOfHomeColour);


    $display_line[4] =
        array(    'text'    =>     "$Sleeping",
                  'icon'    =>     $SleepingIcon,
                  'colour'  =>     $SleepingColour);


    $display_line[5] =
        array(    'text'    =>     "$Holiday",
                  'icon'    =>     $HolidayIcon,
                  'colour' =>      $HolidayColour);


    $display_line[6] =
        array(    'text'    =>     "$DownArrow",
                  'icon'    =>     $DownArrowIcon,
                  'colour'  =>     $DownArrowColour);


    return $display_line;
}


?>

Wie gehabt: 2 Ereignisse (jeweils „PRESS_SHORT“ der beiden Tasten, Aktualisierung!) an das Skript ankleben, zusätzlich noch eine Integer-Variable z.B. „PresenceCache“ unterhalb des Skriptes anlegen (dient als „Speicher“ des Anwesenheitsstatus während der Bedienung) und die IDs im Skript entsprechend anpassen. Die Geräte-ID des Displays in „$HM_Script“ nicht vergessen!

Beste Grüße
/Jens

Ich habe schon länger das hier umgesetzt.

//youtu.be/QZsiR1dVaRg

Beliebig viele Seiten zum Blättern und Aktionen ausführen.
Nur an der endgültigen Doku für diese Instanz hapert es, sprich die fehlt noch :wink:

Für IPS 3 und 4:
Nall-chan/IPSHomematicExtended · GitHub

Instanz heißt WM55-Dis.
Und das Vorlage-Script, welches die anzuzeigenden Daten bereitstellt, ist auch schon online und kommentiert.

Michael

Prinzipiell simuliert die Anwesenheitsanzeige auch ein „Blättern/Scrollen“. Meine Variante ist zugegebenermaßen bestimmt nicht die eleganteste, aber sie funktioniert prima für den Zweck :wink:
Für mehrseitige (sagen wir 5+) Anzeige-Orgien fand ich es aber auch einfach sehr nervig -> Tiki-WARTEN-Taka-WARTEN-Tiki … :smiley:
Ich poste es einfach erstmal …

Ja immer!
Eleganz ist glaube ich egal, Hauptsache es funktioniert und erfüllt seinen Zweck.
Und Dieser kann ja auch bei jedem unterschiedlich sein.

Ich habe damit jetzt den alten Displaytaster ersetzt. Und das war auch mein Ziel. ( Also den Taster ohne Status zu ersetzen. )
Michael

…und wie steuerst Du das Ding aus IP-Symcon an? Kannst Du mal ein Beispiel veröffentlichen?

Muchas Gracias,

PocoLoco

Ist bereits im Thread beschrieben - inklusive mehrerer Beispiele :wink:

Ich vermute Du stellst Dir vor mal eben schnell einen Inhalt aus IPS an das Display zu senden - das geht so NICHT (wurde auch bereits weiter oben durchgekaut).
Kurz zusammengefasst in der Variante ohne manuelles Anlegen von Variablen/Skripten in der CCU:

Das Display geht nur kurz auf Empfang wenn einer der Taster betätigt wird, d.h.:
-> „Betätigung Taster“ startet Skript in IPS
-> IPS sendet per HTTP Post ein CCU-Skript an eben diese
-> das Skript wiederum enthält eine Variable mit dem anzuzeigenden Displayinhalt, dieser wird von der CCU zum Display übertragen und dort angezeigt.

Beste Grüße
/Jens

Poste mal das Script oder die Scripte, mit denen die Anzeigen mit den Texten belegt werden kann. Vielen Dank!

PocoLoco

Ähm … ookaayyy … :confused:

Dann probiere ich es mal so: vorbereitend nimmst Du das Skript aus Beitrag #63 und legst es, wie beschrieben, als HM_OLED.inc.php in den Ordner \scripts.

Der nachfolgende Code zeigt als Beispiel die Anzeige eines vordefinierten Textes (Zeile1, Zeile2, …) in verschiedenen Farben bei Betätigung einer Taste am Display. Zwei Sachen müssen im Skript angepasst werden: die IP-Adresse der CCU2 und die Geräte-ID des Displays (-> im unteren Teil). Als auslösendes Ereignis für das Skript beide Tasten des Displays einrichten (auf Aktualisierung):

<?

// Beispiel: Textanzeige auf dem HM-Dis-WM55
//


include "HM_OLED.inc.php";


$CCU_IP = '1.2.3.4'; // hier die IP der CCU2 eintragen


$display_line[1] =
    array(    'text'    =>     "Zeile1",
              'icon'    =>     icon_no,
              'colour'  =>     colour_white);


$display_line[2] =
    array(    'text'    =>     "Zeile2",
              'icon'    =>     icon_no,
              'colour'  =>     colour_red);


$display_line[3] =
    array(    'text'    =>     "Zeile3",
              'icon'    =>     icon_no,
              'colour'  =>     colour_orange);


$display_line[4] =
    array(    'text'    =>     "Zeile4",
              'icon'    =>     icon_no,
              'colour'  =>     colour_yellow);


$display_line[5] =
    array(    'text'    =>     "Zeile5",
              'icon'    =>     icon_no,
              'colour'  =>     colour_green);


$display_line[6] =
    array(    'text'    =>     "Zeile6",
              'icon'    =>     icon_no,
              'colour'  =>     colour_blue);


$string = OLED_String($display_line);


// ABC1234567 durch die Geräte-ID des Displays ersetzen
$HM_Script = '
! Hex-String an das Display senden
dom.GetObject("BidCos-RF.ABC1234567:1.SUBMIT").State("'.$string.'");
';


HMRS_HTTP_Post($CCU_IP, $HM_Script);


?>

Vielen Dank für die schnelle Antwort!

Alles schon eine Weile her und läuft bei mir immer noch. Aber seit längerem habe ich auch hier das Umlaut Problem. Ein

$display_line[6] =
    array(    'text'    =>     "durchgeführt", //durchgeführt
                'icon'    =>     icon_no,
                'colour' =>    colour_orange);

läst die Umlaute aus.

In der HM_OLED.inc.php versuche ich nun den Bereich

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;
}

zu ändern. Bisher hatte ich noch keinen Erfolg. Hat jemand einen Tipp für mich?

Keiner eine Idee was man machen muss damit die Umlaute auf dem HM-Dis-WM55 wieder dargestellt werden?

Hast du deine Scripte Mal mit dem Utils Control geprüft?
Eventuell sind die in unterschiedlichen Zeichensätzen abgespeichert.
Ich nutzte das nicht.
Habe das ja in meinem HMExtended Modul eingebaut :wink:
Michael

Hast du deine Scripte Mal mit dem Utils Control geprüft?

Ja natürlich. Alles Andere läuft auch.
Und das HMExtended Modul habe ich auch schon betrachtet. Aber mit dem Skript aus diesem Bereich läuft das HM-Dis-WM55 wie ich es haben will, bis auf die jetzt fehlenden Umlaute. Daher wollte ich mir bisher nicht die Mühe machen umzusatteln.
Und irgendwo glaube ich was zum Thema HM-Dis-WM55 und Umlaute gelesen zu haben. Nur finde ich es nicht.

Ich vermute Mal das include Script ist nicht UTF8 und das Utils Control kann das auch nicht prüfen, oder liegt es im Objektbaum?
Michael

Ich vermute Mal das include Script ist nicht UTF8

Wie macht man es „UTF8“ ? :rolleyes: Im Objektbaum liegt es aber.

WM55.jpg

Dann sollte es aber von Utils Control konvertiert worden sein.
Michael