HomeMatic Funk-Statusanzeige - HM-Dis-WM55

Begonnen von Roaster, 14 November 2014, 20:33:48

Vorheriges Thema - Nächstes Thema

martinp876

Doch, sollte schon.
Kommt ein statischer Text korrekt?

edition

Ja, statische Texte funktionieren problemlos. Wenn ich z.b.
set Statusdisplay_Wohnzimmer_Dis_02 displayWM short line1 Testbild green ok
eingebe, wird beim Druck auf den Taster der Text Testbild in grün mit einem grünen Haken angezeigt. Zumindest, bis fhem einmal neu gestartet wird. Da ich eine Datei namens Displaytaster.cfg angelegt habe, die ich per Notify aufrufe, bleibt der Text erhalten, wenn ich fehm neu starte. In der Datei wollte ich jetzt einige Einträge hinterlegen, die mir die readings aus diversen Sensoren, oder auch dummys anzeigen. Mehr will ich erst mal nicht.

edition

martinp876

Ich nutze es wie in wiki beschrieben. Deinen konkreten Fall habe ich noch nicht nachgestellt.
Die Implementierung aus wiki ist m.e. etwas aufwändig aber universell. Und funktioniert

edition

Na gut. Dann werde ich die Herausforderung annehmen und es mit myutils versuchen.

Eine Frage: Wenn ich mich ans wiki halte, die Zeilen in der fhem_user.cfg an mein Display anpasse und die 99_myUtils.pm so übernehme, wie sie ist, sollte das Display doch etwas anzeigen. Natürlich keine korrekten Werte, aber doch die gesetzten Texte und evtl. das eine oder andere Symbol. Dann kann ich vielleicht den Zusammenhang zwischen dem was angezeigt wird und dem was in myutils hinterlegt ist erkennen und so verstehen, wie das ganze funktioniert.

Gruß
edition

martinp876

Ich denke es sollte nachvollziehbar sein, was in myutils steht. Abe ich habe es auch geschrieben, ..... na ja.

In myutils siehst du erst einmal eine Tabelle der Schalter und Seiten. Seiten... beim 2. Betätigen des Buttons kommt die 2. Seite und so fort.
Also eine Tabelle je Seite und button.
Der Inhalt einer Zeile oder eines Icons wird in den Funktionen erzeugt. Da kannst du schreiben was du willst.
Prüfe also die names welche ich nutze, du hast si her andere.

Kaputt machen kannst du nichts.
Kannst es einfach wieder abschalten.

zensbert

Hi, ich habe eine Frage und ich hoffe dass die nicht zu dumm ist..

mit den Befehlen

set EG_BTN_Status_Dis_02 displayWM long line5 aus red noIcon

setze ich ja z.B. den Wert der Zeile 5. Soweit so gut. Aber: wenn ich über die FHEM Webseite die fhem.cfg bearbeite oder meinen Raspi mal neustarte sind die Werte wieder genullt und ich muss dass wieder von Hand absetzen. Kann ich das nicht irgendwie anders in die fhem.cfg einbauen dass dies permanent erhalten bleibt?

Danke,
Thomas

martinp876

Du kannst mit einem notify auf init ein userinit.cfg aufrufen. Da es nach init komplett ausgeführt wird und von save unberührt bleibt kannst du hier Kommandos absetzen. Hier kannst du also die Line setzen. Schon einmal im wiki nachgesehen?

zensbert

 ::) Was soll ich sagen; ja ich hatte im Wiki nachgeschaut, es aber überlesen weil ich keine dynamische Anzeige brauche sondern mir reicht eine statische. Egal, stand dort ja sauber erklärt.. Sry wegen unnötiger Nachfrage  ;)

Pfriemler

Mal wieder ein bisschen Bewegung hereinbringen  ;)

Vorweg: Die Anzeige dynamischer Texte nach dem Wiki funktioniert bei mir, ich habe ein paar Statusseiten erfolgreich mit eigenen Sachen befüllt, eine eigene FK-Funktion definiert und noch ein bisschen was dazu. Nach ein paar Tagen passiert auch bei mir nichts mehr auf dem Display, das habe ich aber bisher immer auf die derzeit häufigeren Neustarts geschoben, nach denen ich die "set ..." für das Display erneut anwerfen muss, weil mein notify auf INITIALIZED nicht funzt (hab aber ne Idee warum) - ich werde beobachten... Umlaute, "ic12" statt "noIcon" ... Lesen bildet.

BIS HIERHER ALLEN BETEILIGTEN AUCH VON MIR EIN DICKES DANKE!!!

Was fehlt, ist meine persönliche Killerapp. Dieser (unbeantwortete Beitrag) bringt es auf den Punkt - Dialogsteuerung sozusagen, wie auch in dem dort verlinkten Video gezeigt.

Ich denke, ein bisschen Perl-Übung wird mir nicht schaden, also werde ich die dynamischen Texte mal etwas erweitern um eine Menüstruktur zu basteln, vermutlich kann man direkt dort auch ein paar fhem-sets einbauen um dann Aktionen auszulösen oder wenigstens Dummys zu setzen, auf die dann separate notifys reagieren.

Also ich stelle mir das haptisch so vor, dass man in einem (Unter-)Menü mit Short hoch und herunterblättert (mit Ausnahmen) und unten-lang in ein Untermenü wechselt, eine Funktion toggelt oder eine Eingabe bestätigt, mit oben-lang in ein übergeordnetes Menü. Nach dem Erlöschen des Displays (habe ich übrigens auf 20 Sekunden geändert, 10 sind mir viel zu kurz) soll es stets "bei Null" losgehen.

Zwar lebt FHEM auch in gewisser Weise davon, dass man das Rad mehrfach erfindet und sich die beste Lösung durchsetzt, aber für den (vermutlich unwahrscheinlichen, denn dann hätte das hier sicher jemand gepostet oder auf den zitierten Beitrag geantwortet) Fall dass es hier fertige und ausentwickelte Anwendungen für das Display gibt, würde ich mich sehr freuen davon zu lesen - Codeschnipsel habe ich über die Bordsuche eher weniger gefunden, das EP-Display scheint populärer zu sein, aber für den geplanten Einsatz als Nachttischzentrale mit Uhrzeit, Wecker, Alarmanlagen- und Fensterstatus (nebst Bedien- und Einstellmöglichkeit) ist ein selbstleuchtendes farbiges Display deutlich besser geeignet, für mich zumindest.

Insgesamt scheint es mir nur eine Handvoll Benutzer dieses Teils zu geben ...

Zuletzt stelle ich mir die Frage, ob man eine solche Anwendung in einem neuen Fred diskutieren sollte oder ob sie hier gut aufgehoben ist.


"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

chipmunk

Unter dem Video ist auch ein Link, der die Beschreibung und den verwendeten Code enthält.
Hat der nicht weiter geholfen?

Chipmunk
RasPi3, HM, HUE, div 433MHz Baumarktdosen über Sende- und Empfangsmodule von C*, Ediplug

Pfriemler

Zitat von: chipmunk am 20 Dezember 2016, 16:45:20
Unter dem Video ist auch ein Link ... den verwendeten Code ... nicht weiter geholfen?
Würde ich ne CCU2 und HMCCU einsetzen, wäre das meine Lösung. Die Skriptsprache kann ich aber (noch) nicht so gut. Aber sicher ließe sich das auf perl umschreiben. Bin noch am Analysieren.
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Bennemannc

Hallo,

mal 'ne Frage an Martin - mit \_ kann man in den Texten ein Leerzeichen erzeugen, aber
set Dis_01 displayWM short line1 ein\_Text white info --- zeigt im Text irgendwelche Sonderzeichen, aber kein Leerzeichen. Was muss man in der Befehlszeile eingeben, um ein Leerzeichen zu bekommen?

Gruß Christoph
Cubietruck, Fhem 5.8
CC-RT-DN|LC-SW2-FM|RC-12|RC-19|LC-SW4-BA-PCB|LCp-SW1-BA-PCB|ES-PMSw1-Pl|LC-Bl1PBU-FM|PBI-4-FM|CC-VD|CC-TC|SEC-SC(2)|RC-KEY3-B|LC-Sw1PBU-FM|PB-2-FM|WDS100-C6-O|WDC7000|LC-Bl1-FM
Module: Dewpoint,FB_Callmonitor,HCS,Panstamp,at,notify,THRESHOLD,average,DOIF

Grinsekatze

Auch auf die Gefahr hin, dass es hier schon behandelt wurde und ich es übersehen habe (kann ja bei 30 Seiten mal vorkommen):

Ich habe nun auch das HM-Dis-WM55 gekauft. Ich möchte damit ein HM-ES-PMSw1-Pl-DN-R1 (Steckdosen Schaltaktor) ein und ausschalten.
Generell möchte ich auf dem Display in der obersten Zeile (1) stehen haben "an". In der 2. Zeile da drunter dann nur Striche (---). In Zeile 3 und 4 steht dann "Stehlampe" und in Zeile 5 wieder Striche. In Zeile 6 soll "aus" stehen. Alles in weiß.
Wenn die Lampe an ist, sollen Zeile 1 und 2 grün sein. Wenn ich die Lampe aus mache (die Wippe nach unten betätige) soll kurz (evtl. 3 Sekunden?) der Inhalt von Zeile 5 und 6 rot oder orange sein.

Ich tue mich nun aber etwas schwer mit der Umsetzung.


Im Wiki steht, dass ich das Display (Kanal 1 und 2) auch mit FHEM peeren soll:
ZitatDie Kanäle 1 und 2 sollten mit FHEM gepeered (zusätzlich zum pairing) werden
set HM-Dis-WM55_Dis_01 peerBulk <hmID>01
set HM-Dis-WM55_Dis_02 peerBulk <hmID>01
Heißt das, ich soll Display/Schalter und Aktor nicht peeren?

Ich habe bis jetzt Display/Taster mit der Zentrale gepaired und folgenden Code ausgeführt (mit FHEM gepeert wie im Wiki beschrieben, Notify der den Taster gangbar macht und das Display füllt):
#set LampentasterWohnzimmerStehlampe_Dis_01 peerBulk <meine HMID>01
#set LampentasterWohnzimmerStehlampe_Dis_02 peerBulk <meine HMID>01

#set LampentasterWohnzimmerStehlampe_Dis_01 text an aus # Original: Textblock\_1 Textblock\_2
#set LampentasterWohnzimmerStehlampe_Dis_02 text --- Textblock\_4 # Original: Textblock\_3 Textblock\_4
#set LampentasterWohnzimmerStehlampe_Dis_03 text Wohnzimmer Stehlampe # Original: Textblock\_5 Textblock\_6

define nty_test_disp notify LampentasterWohnzimmerStehlampe_Dis_0(1|2):(Short|Long).* {\
fhem "set LampeWohnzimmerStehend_Sw on" if ($NAME eq "LampentasterWohnzimmerStehlampe_Dis_02");;\
fhem "set LampeWohnzimmerStehend_Sw off" if ($NAME eq "LampentasterWohnzimmerStehlampe_Dis_01");;\
fhem "set $NAME displayWM short txt01_1 white noIcon txt02_1 white noIcon txt03_1 white noIcon txt03_2 white noIcon txt02_1 white noIcon txt01_2 white noIcon";;\
fhem "set $NAME displayWM short line1 nc green noIcon" if ($NAME eq "LampentasterWohnzimmerStehlampe_Dis_02");;\
fhem "set $NAME displayWM short line2 nc green noIcon" if ($NAME eq "LampentasterWohnzimmerStehlampe_Dis_02");;\
fhem "set $NAME displayWM short line5 nc red noIcon" if ($NAME eq "LampentasterWohnzimmerStehlampe_Dis_01");;\
fhem "set $NAME displayWM short line6 nc red noIcon" if ($NAME eq "LampentasterWohnzimmerStehlampe_Dis_01")\
}


Der Notify ist noch absolut im Rohzustand - das verbessere ich noch. Vielleicht kann ja mal Jemand gucken, ob sonst alles ok ist.

Zwei Fragen habe ich jetzt noch:

  • Kann ich die Sanduhr abstellen?
  • Kann ich realisieren, dass der Inhalt des Displays auch sofort beim drücken auf den Taster angezeigt wird? Momentan muss ich ihn immer 2x drücken, damit auch was auf dem Display dargestellt wird.
  • Kann ich eine geschlossene Linie auf dem Display darstellen (oder muss ich sie durch viele "-" selbst machen?

Koppl

#448
Irgendwie komm ich nicht weiter beim einrichten vom Display.

Mir wird die 99_myUtils.pm nicht geladen. Wo hab ich den einen Fehler gemacht?

##############################################
# $Id: 99_myUtils.pm
package main;

use strict;
use warnings;
use POSIX;
sub myUtils_Initialize($$)
sub myLineA ($$);

{
   my ($hash) = @_;
}

######## Liefert aktueller Zeitstempel ############
sub
CurrentTime()
{
  return strftime("%H:%M:%S", localtime());
}

######## WakeOnLan von OpenWRT ############
sub
WakeOnLan
{
my $mac = shift;
my $ret = "";
$ret .= qx(etherwake -i br-lan $mac);
$ret =~ s,[\r\n]*,,g;    # remove CR from return-string
Log 1, "sendEmail to $mac: $ret";
}

######## HM-DIS-55WM ############

# define counter and counterlimit per press-type
# presstype are 0: btn1 short
# presstype are 1: btn1 long
# presstype are 2: btn2 short
# presstype are 3: btn2 long


my @cnt   ; #init one counter per press
my @cntMax; #number of entries per press
# structure per button/itteration/press
# insert the function to be executes to fill the line with test, color and icon
# Number of itterations can be extended as desired. At least one should be present.
# obey the end of the line (is open) and the number of parameters you send to the funktion
my %lineArr = (0 =>{#============Btn Type 0: Btn1 short
                     0 =>{#-------itteration 0
                           1=>'{myTx("Wohnen:","",'    #  line 1
                          ,2=>'{myTh("","wz_Thermometer",'   
                          ,3=>'{myTx("Obergeschoss:","",'
                          ,4=>'{myTh("" ,"og_Thermometer ",'
                          ,5=>'{myTx("Terrasse:","","",'             
                          ,6=>'{myTx("","","",'     
                         }
                    ,1 =>{#-------itteration 1
                           1=>'{myTx("Wohnen:","",'    #  line 1
                          ,2=>'{myTh("","wz_Thermometer",'   
                          ,3=>'{myTx("Obergeschoss:","",'
                          ,4=>'{myTh("" ,"og_Thermometer ",'
                          ,5=>'{myTx("Terrasse:","","",'             
                          ,6=>'{myTx("","","",'     
                         }                                                       
                    }
    );


sub myUtils_Initialize($$) {
   my ($hash) = @_;

# Normal devices
   $hash->{DefFn}   = "myUtil_Define";
   $hash->{UndefFn} = "myUtil_Undef";
   $hash->{AttrList}= $readingFnAttributes;
   
   @cntMax = (scalar keys %{$lineArr{0}}
             ,scalar keys %{$lineArr{1}}
             ,scalar keys %{$lineArr{2}}
             ,scalar keys %{$lineArr{3}});
   push @cnt,"0" foreach (keys %lineArr);
}
sub myUtil_Define($$) {########################################################
   my ($hash, $def) = @_;
   return ;
}
sub myUtil_Undef($$) {#########################################################
   my ($hash, $arg) = @_;
   return undef;
}

sub myLineA($$){# main entry - do not change!!!
   my ($line,$type) = @_;
   $cnt[$type] = ($cnt[$type] +1)%$cntMax[$type] if ($line == 1); # rotate counter per type

   return (eval $lineArr{$type}{$cnt[$type]}{$line}.'"t")}'
          ,eval $lineArr{$type}{$cnt[$type]}{$line}.'"c")}'
          ,eval $lineArr{$type}{$cnt[$type]}{$line}.'"i")}'
          );
}
sub myTh($$$){#temp sensor
   # line 't' calculates the text
   # line 'c' calculates the color
   # line 'i' calculates the icon
   my ($p,$e,$t) = @_;
   if($t eq "t"){return $p.ReadingsVal($e,"temperature","no")."-".ReadingsVal($e,"humidity","");  }
   if($t eq "c"){return    ReadingsVal($e,"temperature",0)>20 ? "red" : "blue" }
   if($t eq "i"){return    ReadingsVal($e,"battery",0)    ? "ok"  : "no"  }
   return "nix";
}
sub myTx($$$$){#text only
   my ($p,$c,$icon,$t) = @_;
   if($t eq "t"){return $p;  }
   if($t eq "c"){return ($c?$c:"white");}
   if($t eq "i"){return ($icon?$icon:"noIcon");}
   return $p;
}
   if($t eq "c"){return ($c?$c:"white");}
   if($t eq "i"){return "noIcon";}
   return $p;
}

1;

MadMax-FHEM

 sub myLineA ($$); entfernen...

Bzw.


package main;

use strict;
use warnings;
use POSIX;

sub myUtils_Initialize($$)
{
   my ($hash) = @_;
}


und dann weitere Subs...

siehe: https://wiki.fhem.de/wiki/99_myUtils_anlegen

Welche Fehler es gibt wäre auch hilfreich (gewesen)...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)