Probleme bei Statusanzeige mit HM-Dis-EP-WM55

Begonnen von teufelchen, 07 Februar 2025, 11:56:41

Vorheriges Thema - Nächstes Thema

teufelchen

Hallo,
 
ich möchte gerne verschiedene Statusmeldungen auf einem Display darstellen.

Hierzu habe ich das E-Paper Display HM-Dis-EP-WM55 an einer CCU3 angelernt und mittels HMCCUDEV in FHEM angelernt.

Erste Funktionstests waren auch erfolgreich.

Bei der Darstellung der gewünschten Daten habe ich jedoch zwei Probleme.

Wie in der Hilfe zu HMCCUDEV und ePaper steht kann ich sowohl Texte mit
set Display config 2 TEXTLINE_1=Testtext
aus auch mit
set Display datapoint 3.SUBMIT text1:Testtext übertragen
 
Problem 1:
Während bei der Übertragung mit config der Text auch nach einem Tastendruck weiterhin auf dem Display angezeigt wird, ist der mit datapoint übertragene Text nach einem Tastendruck gelöscht und die Zeilen sind leer.
Ich würde gerne über den config-Befehl ein Icon übertragen. Es ist leider nur für datapoint beschrieben und einen Befehl kann ich nicht ableiten. 
Wie kann ich eines der möglichen Icons über config senden?
 
Problem 2:
Auch schaffe ich es nicht einen Test mit Leerzeichen und Variable zu übertragen.
Auf dem Display soll die aktuelle Außentemperatur angezeigt werden. Z. B: Temp 2.1 °C
Wenn ich einen ,,festen" Text mit Leerzeichen übertragen möchte kann ich mit
set Display config 2 TEXTLINE_1="Test Test" senden. Auf dem Display wird dann Test Test angezeigt also korrekt ohne Anführungszeichen und mit Leerzeichen.
Wenn ich das nun um eine Variable ergänze führt ein Leerzeichen zu einem Fehler und wird nicht übertragen. Auch mit Anführungszeichen funktioniert es nicht.
Ich kann momentan nur so übertragen
set Display config 2 TEXTLINE_1=Temp[AussenTemp:tepmperature]C
dies ergibt dann auf den Display Temp2.1C

Hat jemand einen Lösungsvorschlag?
Raspberry Pi 3
CUL433: V 1.26.05 a-culfw Build: 311 (2018-12-09_19-12-53) CUL433 (F-Band: 433MHz)
freq:433.920MHz bWidth:325KHz rAmpl:42dB sens:4dB
Debmatic mit RPI-RF-MOD

VolkerGBenner

#1
Die Freitext-Anzeige ist etwas komplizierter.

Ich habe seit Jahren das alte HM-Dis-WM55 in Betrieb. Für Freitext habe ich diesen Script aus dem Homematic-Forum in verschiedenen Abwandlungen benutzt.

Ich füttere von FHEM Variablen in der CCU mit meinen Texten, die dann, jenachdem welche der vier möglichen Betätigungen erfolgt, angezeigt werden.

Ich gehe stark davon aus, dass die Programmierung beim EP gleich sein dürfte.
Edit: Habe gerade gesehen, dass der Beitrag sich schon auf die ePaper-Version bezieht, also auch schon vom ursprünglichen Post abgeschrieben hat. Es geht also.


1x  RasPiB3+  mit RPI-RF-MOD und pivccu3
1x HM-TC-IT-WM-W-EU, 1x HM-CC-RT-DN, 1xHM-SEC-SCo,
HM-LC-Sw4-DR, HM-WDS30-OT2-SM, HM-Dis-WM55, 7x HmIP-eTRV-B,...

JoWiemann

Hallo,

ich benutze eine Sub, die ich in meine 99_myUtils.pm gepackt habe.
# 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
# ggf das Semicolon für Zeilentrennung durch Wiederholung maskieren.
# EncodeEPDisplay("RPi_CCU",",;;,;;Alarm-Anl:,ico_on","snd_off",2,1,"sig_off")

sub EncodeEPDisplay ($$$$$$)
{
my ($hmccu, $msg, $snd, $rep, $pause, $sig) = @_;

# set defaults
$hmccu = 'RPi_CCU' if (!defined ($hmccu));
$msg   = '' if (!defined ($msg));
$snd   = 'snd_off' if (!defined ($snd));
$rep   = 1 if (!defined ($rep));
$pause = 10 if (!defined ($pause));
$sig   = 'sig_off' if (!defined ($sig));

my %disp_icons = (
ico_off    => '0x80', ico_on => '0x81', ico_open => '0x82', ico_closed => '0x83',
ico_error  => '0x84', ico_ok => '0x85', ico_info => '0x86', ico_newmsg => '0x87',
ico_svcmsg => '0x88'
);

my %disp_text = (
        txt_1    => '0x80', txt_2    => '0x81', txt_3    => '0x82', txt_4    => '0x83',
        txt_5    => '0x84', txt_6    => '0x85', txt_7    => '0x86', txt_8    => '0x87',
txt_9    => '0x88', txt_10   => '0x89'
    );

my %disp_sounds = (
snd_off        => '0xC0', snd_longlong => '0xC1', snd_longshort  => '0xC2',
snd_long2short => '0xC3', snd_short    => '0xC4', snd_shortshort => '0xC5',
snd_long       => '0xC6'
);

my %disp_signals = (
sig_off => '0xF0', sig_red => '0xF1', sig_green => '0xF2', sig_orange => '0xF3'
);

my $cmd = '0x02,0x0A';

# Lines are separated by semicolon, empty lines are supported
my @disp_lines = split (';', $msg, -1);
my $c = 0;

# "\t ,0x20\t!,0x21\t\",0x22\t%,0x25\t&,0x26\t=,0x27\t(,0x28\t),0x29\t*,0x2A\t+,0x2B\t,,0x2C\t-,0x2D\t.,0x2E\t/,0x2F";
# "\tÄ,0x5B\tÖ,0x23\tÜ,0x24\tä,0x7B\tö,0x7C\tü,0x7D\tß,0x5F\t:,0x3A\t;,0x3B\t@,0x40\t>,0x3E";
my $muster = "°äöüÄÖÜß";

foreach my $line (@disp_lines) {
# Split line into text and icon part separated by comma
my ($t, $i) = split (',', $line, -1);
return undef if (!defined ($i));

if ($t ne '' || $i ne '') {
$cmd .= ',0x12';

# Convert string to hex codes
if ($t =~ /^0x[0-9A-F]{2}$/) {
$cmd .= ','.$t;
}
# Predefined text code text0-9
elsif ($t =~ /^text([0-9])$/) {
$cmd .= sprintf (",0x8%1X", $1);
}
else {
# $t = substr ($t, 0, 12);
$t = encode("iso-8859-1", $t);
# Log3 "EncodeEPDisplay", 3, "Org: $t";
foreach my $ch (split ('', $t)) {
if ($muster =~ m/$ch/) {
$ch =~ s/°/0x5E/;
$ch =~ s/Ä/0x5B/;
$ch =~ s/Ö/0x23/;
$ch =~ s/Ü/0x24/;
$ch =~ s/ä/0x7B/;
$ch =~ s/ö/0x7C/;
$ch =~ s/ü/0x7D/;
$ch =~ s/ß/0x5F/;
# Log3 "EncodeEPDisplay", 3, "Enc: $ch";
$cmd .= "," . $ch;
}
else {
$cmd .= sprintf (",0x%02X", ord ($ch));
}
}
}

# Icon
if ($i ne '' && exists ($disp_icons{$i})) {
$cmd .= ',0x13,'.$disp_icons{$i};
}
}

$cmd .= ',0x0A';
$c++;
last if ($c == 3);
}

# Fill up empty lines
for (my $n=$c; $n<3; $n++) {
$cmd .= ',0x0A';
}

# Sound
$snd = 'snd_off' if (!exists ($disp_sounds{$snd}));
$cmd .= ',0x14,'.$disp_sounds{$snd}.',0x1C';

# Repeat
$rep = 15 if ($rep > 15);
if ($rep == 0) {
$cmd .= ',0xDF';
}
else {
$cmd .= sprintf (",0x%02X", 0xD0+$rep-1);
}
$cmd .= ',0x1D';

# Pause
$pause = 1 if ($pause < 1);
$pause = 160 if ($pause > 160);
$cmd .= sprintf (",0xE%1X,0x16", int(($pause-1)/10));

# Signal
$sig = 'sig_off' if (!exists ($disp_signals{$sig}));
$cmd .= ','.$disp_signals{$sig}.',0x03';
$cmd = '[dom.GetObject("BidCos-RF.NEQ1464209:3.SUBMIT").State("' . $cmd . '")]';

Log3 "EncodeEPDisplay", 3, "Enc: $cmd";

# fhem('set $hmccu hmscript $cmd');

return fhem('set ' . $hmccu . ' hmscript ' . $cmd);
}

sub EncTest {
   EncodeEPDisplay("RPi_CCU","ÄÖÜäöü°:,ico_on","snd_off",2,1,"sig_off");
}

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

teufelchen

Vielen Dank für die Hinweise.

Der Lösungsansatz von Volker übersteigt mein Wissen mit der CCU.

Bei Jörg habe ich noch nicht verstanden ob der Aufruf mit config oder datapoint an das Display erfolgt.
Ich möchte ja config, da bei datapoint nach Tastendruck die Anzeige leer ist.
Raspberry Pi 3
CUL433: V 1.26.05 a-culfw Build: 311 (2018-12-09_19-12-53) CUL433 (F-Band: 433MHz)
freq:433.920MHz bWidth:325KHz rAmpl:42dB sens:4dB
Debmatic mit RPI-RF-MOD

JoWiemann

Hallo,

die Anzeige bleibt bei Tastendruck erhalten.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

teufelchen

Danke.
Jörg könntest Du noch den Aufruf für die Sub posten?
Raspberry Pi 3
CUL433: V 1.26.05 a-culfw Build: 311 (2018-12-09_19-12-53) CUL433 (F-Band: 433MHz)
freq:433.920MHz bWidth:325KHz rAmpl:42dB sens:4dB
Debmatic mit RPI-RF-MOD

JoWiemann

Zitat von: teufelchen am 10 Februar 2025, 07:43:07Danke.
Jörg könntest Du noch den Aufruf für die Sub posten?

Hm, vielleicht übersehen:

# ggf das Semicolon für Zeilentrennung durch Wiederholung maskieren.
# EncodeEPDisplay("RPi_CCU",",;;,;;Alarm-Anl:,ico_on","snd_off",2,1,"sig_off")

ist aber, gebe ich zu, etwas kryptisch und muss aus dem Code gelesen werden.

EncodeEPDisplay("Name CCU Device", "Nachricht", Pipser, Pipser Wiederholung, Pipser Pause, "Display LED")
Nachricht:  "Zeile1,Icon;Zeile2,Icon;Zeile3,Icon"
Icon:      ico_off, ico_on, ico_open, ico_closed, ico_error, ico_ok, ico_info, ico_newmsg, ico_svcmsg
Pipser:    snd_off, snd_longlong, snd_longshort, snd_long2short, snd_short, snd_shortshort, snd_long
Wiederhlng: [1..15]
Pause:      [1..160]
LED-Farbe:  sig_off, sig_red, sig_green, sig_orange

Soll eine Zeile nicht gesetzt werden, so wird sie einfach ohne Inhalt angegeben:

Beispiel: "Teste 1,icon_on;,;Teste 3,icon_off"
Die Zeile 2 wird durch nur durch , repräsentiert. Durch die "Leere" Zeile wird die bestehende Zeile nicht gelöscht.

Grüße Jörg



Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM