[Wired / hm485] Text an ein Display schicken (HBW-DIS-Key-4, Homebrew)

Begonnen von loetmeister, 30 Juni 2020, 22:36:00

Vorheriges Thema - Nächstes Thema

loetmeister

Hallo,

ich bin grade dabei mir ein kleines LCD Status Display für Homematic Wired (RS-485) zu bauen... Aktuell habe ich statischen Text, in den ich Variablen einbinden kann, welche dann zur Laufzeit ersetzt werden. Z.b. aus"Temp1: %t1°C" wird "Temp1: 12.65°C"

Jetzt würde ich gerne aus FHEM auch Text an das Display senden.
Mit dem Raw Befehl "set HBW_DIS_Key_4_HBW7296304 raw 7300666F6F", welcher für Kanal "00" den String "foo" als hexadezimale Zeichenfolge (666F6F) schickt, klappt das in meinem Testdevice:

R: FD:42:00:00:30:1E:00:00:00:01:07:73:00:66:6F:6F:C8:6C
S: 00 666F6F
set, len: 3 102-111-111, text: foo


ASCII Zeichen einzeln in ihren Hex Wert umzuwandeln kann Perl.. auf der Kommandozeile klappt das mit
perl -e 'foreach (split(//,"foo")) { printf("%x",ord($_)) }'
# oder
perl -e '$hstring = unpack ("H*","foo");print($hstring)'


In FHEM klappt es mit dem Befehl:
{my $hstring = unpack ("H*","foo");; fhem "set HBW_DIS_Key_4_HBW7296304 raw 7300$hstring"}

Welche Möglichkeit gäbe es das etwas zu vereinfachen? Schön wäre z.B. ein Eingabefeld "set value" für den Kanal zu erstellen, das "Text / string" Eingaben annimmt. Habe schon verschiedene XML durchgeschaut, aber etwas anderes als "integer" oder "float" Datentypen habe ich nicht finden können.

HM-Dis-WM55 hat im der XML stehen:
<physical type="string" interface="multiframe_command" value_id="SUBMIT_VALUE">
...
<conversion type="hexstring_bytearray"/>

was es bei dem Homematic Wired / hm485 nicht gibt... Muss ich da am hm485 Modul basten oder geht das mit ein paar Zeilen in FHEM (+ Perl?) ::)


Gruß,
Thomas

loetmeister

#1
Hallo,

hatte noch ein wenig in den bestehenden Threads bzgl. Displays geschaut... scheint auch bei den Geräten, welche auf dem Markt sind, keine so einfache Sache zu sein... Daher habe ich erst mal akzeptiert die RAW Befehle zu nutzen und das Display entwickelt.  ::)

Herausgekommen ist HBW-DIS-Key-4. Es gibt noch einige Details die fehlen oder verbessert werden können, aber es funktioniert schon gut.
Aktuell habe ich ein LCD mit 2 Zeilen und 12 Zeichen angeschlossen. Andere Formate sind auch möglich. Eine Variante mit 4 Zeilen und 20 Zeichen werde ich noch erstellen - bzw. dies im Device Konfigurierbar machen.

In FEHM habe ich diese Kanäle:
1x Display
1x Dimmer (Display Hintergrundbeleuchtung)
2x (4x) display_line
4x Key (Taster, Schalter)
4x display_v_temp   (Speichert Temperaturmesswerte oder beliebige Werte von -32768 bis 32767)
4x display_v_switch   (Speichert einen binären Wert, 0 oder 1)


Für die "display_line" Kanäle, welche je eine Zeile des Displays repräsentieren, kann mit FHEM ein Wert übertragen werden (RAW Befehle) oder es wird einer der vordefinierten Zeilen angezeigt.

Zeile 1 setzen:
{my $hstring = unpack ("H*","Innen: %1%\xDFC");; fhem "set HBW_DIS_Key_4_HBW7296375 raw 7302$hstring"}

Wenn für eine Zeile "Innen: %1%°C" gesetzt ist, dann wird %1% mit dem Wert des ersten display_v_* Kanals ersetzt. Bei einem Temperaturmesswert würde dann z.B. im Display "Innen: 22.4°C" angezeigt.
Die 8 display_v_* Kanäle können über die Platzhalter %1% bis %8% angezeigt werden. Erhalten diese Kanäle neue Werte (über FHEM oder Peering), so wird dies im Display automatisch aktualisiert.

Für "display_v_temp" Kanäle können ein Faktor (1; 10; 100; 1000) und Anzeigeformat (999; 999.9; 999.99; 99.999) Konfiguriert werden.
Für "display_v_switch" Kanäle ein Anzeigetext, z.B. Ein/Aus, Auf/Zu, Auto/Manu.


Werde noch ein paar Dinge testen und dann das Device in GitHub einstellen...

EDIT: https://github.com/loetmeister/HBWired/tree/master/HBW-DIS-Key-4

EDIT2: Bzgl. den Display Zeilen, mit FHEM oder einem Key (Taster) Peering kann zwischen der vordefinierten Zeile und der per FHEM gesetzten umgeschaltet werden. Wird die Zeile von FHEM gesetzt, so wird sie immer angezeigt, man kann dann aber wieder auf die vordefinierten Zeile umschalten.

Gruß,
Thomas

loetmeister

Hallo,

auch wenn es ein Monolog ist... ein paar lesen ja doch mit?  ???

Habe noch einige Funktionen hinzugefügt...
// - add option to configure 1*4 to 4*24 LCD
Per FHEM kann man einstellen: Anzahl Zeilen 1, 2, 3, 4
Anzahl Zeichen 4, 8, 12, 16, 20, 24, (28)

// - allow to save custom text line to EERPOM (one per display line channel) and load on start
d.h. der Text, den man per RAW Befehl geschickt hat kann man Speichern und nach einem Neustart wieder anzeigen lassen.

// - added auto-off option for display backlight (dim channel)
Auto-off & Automatische Helligkeit... muss sich im Betrieb zeigen ob das so passt...  ;)

dis_outBuff#Innen: 24.61°C#
dis_outBuff#Test2: Manu#
dis_outBuff#undefined#
dis_outBuff#undefined#

...so könnte es auf einem 4*16 Display aussehen. Der #text# zwischen den Rauten wird zum Display geschickt.

Damit werde ich mich erst mal weiter um die Hardware kümmern...

Gruß,
Thomas

loetmeister

Hallo,

um das Thema abzuschließen...
Hab mir zwei Geräte gebaut. Kommen in einen Gira 55 Ramen.... Plexiglas Abdeckung muss ich noch Fräsen.
Mit den Aussparungen, Steckern, ISP, etc. ist es etwas eng auf der Platinenrückseite geworden, wollte aber nicht noch eine weitere Platine Huckepack nehmen.
Der 5te Taster ist der Konfigtaster und soll nur ohne Abdeckung erreichbar sein.

Gruß,
Thomas