HM-Dis-WM55

Hallo,
anders als der Nick-Name vermuten lässt bin ich inzwischen fast komplett auf HM gewechselt und habe bisher alles mit IP-SYMCON gelöst, um die CCU habe ich mich eigentlich nicht gekümmert ( habe jetzt eine CCU2 ).

Nun habe ich eben auch diesen Display-Schalter WM55 und versuch den in die Gänge zu bekommen und bin bisher gescheitert. Ich habe erstmal versucht nur auf der CCU ein Skript zu triggern welches den Display Text ändert. Das Skript stammt aus diesem Thread.


! Systemvariable „OLED_DISPLAY_01“ lesen und ans Display senden
var OLED = dom.GetObject(„OLED_DISPLAY_01“);

dom.GetObject(„BidCos-RF.“ # dom.GetObject("$src$").Name().StrValueByIndex(".",1) # „.SUBMIT“).State(OLED.Value());

Eine Systemvariable mit dem Namen „OLED_DISPLAY_01“ ist in CCU angelegt und an Kanal 1 des WM55 zugeordnet.

Wenn ich nun dieses obige Skript in der CCU aufrufe ( Skript Testen ) passiert einfach nix.

Mein WM55 zeigt bei Tastendruck nur „keine Daten empfangen“.

Angelernt ist das Teil, in IPSYMCON kann ich es auch „sehen“ und die Tast-Drücke sehe ich dort auch.

Hat jemand eine Idee, gibt es noch irgendwo eine Anleitung ?

Vielen Dank schon mal

Uwe

Der Taster geht nur beim Tastendruck für ein paar Sekunden auf Empfang.
Also mußt du ‚drücken‘ -> Sanduhr wird angezeigt.
Und dann das Script auslösen -> Daten werden übertragen -> Anzeige.
Zum Testen per Hand, muss man also schnell sein :slight_smile:

Michael

Hallo Michael,

da tut sich leider gar nichts : Sanduhr wird angezeigt, Skript ausführen gedrückt, „Keine Daten empfangen“ im Display. Gefühlt alle Timing Varianten ausprobiert

Sieht das Skript ok aus ?

! Systemvariable „OLED_DISPLAY_01“ lesen und ans Display senden
var OLED = dom.GetObject(„OLED_DISPLAY_01“);
dom.GetObject(„BidCos-RF.“ # dom.GetObject("$src$").Name().StrValueByIndex(".",1) # „.SUBMIT“).State(OLED.Value());

Ich weiss nicht was das dom.GetObject … genau macht

cu

Uwe

Steht über haupt was in der Systemvariable ? Wenn da nix drinn steht, kann auch nix über tragen werden. Script sieht so ok aus.
Michael

Wenn ich die Variable auf Zeichenkette setze, kann ich keinen Werte setzen über WebUI, also habe ich Werteliste verwendet und dir Variable enthält nun „wert1;wert2;…“

Es funktioniert nicht :frowning:

wenn ich am Ende ein "WriteLine(„fertig“); hinzufüge und das Skript teste wird „fertig“ nie angezeigt. Ich denke er findet das Gerät und/ oder die Variable nicht

Das wird so nix.
Sehe gerade dass das Script $src$ nutzt, kannst du es nicht per Hand starten. Sondern nur über den Tastendruck des Displays.
Und die Systemvariable muss eine Zeichenkette sein. Kannst du per IPS beschreiben. Geht auch per PHP. Wie steht im Wiki.
Michael

Moin,

jetzt muss ich doch einmal nachfragen, geht das HM-Dis-WM55 Funk Statusdisplay auch über IPS ohne CCU/CCU2?

Ich habe nämlich keine und will mir auch keine anschaffen, würde aber das Display gerne nutzen.

Danke und Grüße
Björn

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!