HomeMatic Funk-Statusanzeige - HM-Dis-WM55

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

Vorheriges Thema - Nächstes Thema

Koppl

Zitat von: MadMax-FHEM am 03 November 2017, 22:37:19
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

Sorry habe ich vergessen. Danke für die Hilfe.

Ich hab es geändert. Bekomme aber beim laden folgende Fehler:

2017.11.03 23:34:08 1: PERL WARNING: Subroutine myUtils_Initialize redefined at ./FHEM/99_myUtils.pm line 71.
2017.11.03 23:34:08 1: reload: Error:Modul 99_myUtils deactivated:
Global symbol "$t" requires explicit package name (did you forget to declare "my $t"?) at ./FHEM/99_myUtils.pm line 120.
Global symbol "$c" requires explicit package name (did you forget to declare "my $c"?) at ./FHEM/99_myUtils.pm line 120.
Global symbol "$c" requires explicit package name (did you forget to declare "my $c"?) at ./FHEM/99_myUtils.pm line 120.
Global symbol "$t" requires explicit package name (did you forget to declare "my $t"?) at ./FHEM/99_myUtils.pm line 121.
Global symbol "$p" requires explicit package name (did you forget to declare "my $p"?) at ./FHEM/99_myUtils.pm line 122.
Unmatched right curly bracket at ./FHEM/99_myUtils.pm line 123, at end of line
syntax error at ./FHEM/99_myUtils.pm line 123, near "}"

2017.11.03 23:34:08 1: PERL WARNING: Useless use of a variable in void context at ./FHEM/99_myUtilsTelefon.pm line 184.
2017.11.03 23:34:09 1: Including fhem.cfg
2017.11.03 23:34:09 1: PERL WARNING: Subroutine myUtils_Initialize redefined at ./FHEM/99_myUtils.pm line 10, <$fh> line 5.
2017.11.03 23:34:09 1: PERL WARNING: Subroutine CurrentTime redefined at ./FHEM/99_myUtils.pm line 17, <$fh> line 5.
2017.11.03 23:34:09 1: PERL WARNING: Subroutine WakeOnLan redefined at ./FHEM/99_myUtils.pm line 24, <$fh> line 5.
2017.11.03 23:34:09 1: PERL WARNING: Subroutine myUtils_Initialize redefined at ./FHEM/99_myUtils.pm line 71, <$fh> line 5.
2017.11.03 23:34:09 1: PERL WARNING: Subroutine myUtil_Define redefined at ./FHEM/99_myUtils.pm line 85, <$fh> line 5.
2017.11.03 23:34:09 1: PERL WARNING: Subroutine myUtil_Undef redefined at ./FHEM/99_myUtils.pm line 89, <$fh> line 5.
2017.11.03 23:34:09 1: PERL WARNING: Subroutine myLineA redefined at ./FHEM/99_myUtils.pm line 94, <$fh> line 5.
2017.11.03 23:34:09 1: PERL WARNING: Subroutine myTh redefined at ./FHEM/99_myUtils.pm line 103, <$fh> line 5.
2017.11.03 23:34:09 1: PERL WARNING: Subroutine myTx redefined at ./FHEM/99_myUtils.pm line 113, <$fh> line 5.



99_myUtils.pm

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

use strict;
use warnings;
use POSIX;

sub myUtils_Initialize($$)
{
   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 ############

sub myLineA ($$);


# 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

Steht eigentlich alles in den Fehlermeldungen.

Die jetzt im Einzelnen durchzugehen sprengt den Rahmen, dazu sind es zu viele...

Bitte den verlinkten Wiki durchgehen und folgende Dinge (zusätzlich zu den Meldungen) mal beachten:

Die Initialize ist doppelt drin

Du hast Deklaratonen etc. ohne sub...
Eine sub wie folgt:

sub Name($$$) # Parameter optional
{
my $Variablen; # optional

Funktionsaufrufe; # optional

return; # optional
}

Und dann evtl. einen neuen Thread zur Problematik myUtils aufmachen, da das hier nichts mit dem Display zu tun hat...

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)

connormcl

#452
Hallo Zusammen,

Ich habe das Problem, dass ich bei einer Zeile den Text nicht wegbekomme....

Ich kann einen Text setzen:
Zitat
set HM-Dis-WM55_Dis_01 displayWM short line1 test red error

Ich kann dann das Icon löschen:
Zitat
set HM-Dis-WM55_Dis_01 displayWM short line1 test red noIcon

Aber ich kann den Text nicht löschen:
Zitat
set HM-Dis-WM55_Dis_01 displayWM short line1 nc nc noIcon

Die Zeile mit den "nc" wird von fhem akzeptiert, aber die Readingsbelegung ändert sich nicht und der Text am Display bleibt auch wie zuvor.

Woran kann das liegen? Gibt es eine andere Methode, um den Text einer Zeile oder alle Zeilen zu löschen?

connormcl

Konnte es mittlerweile nach Code-Analyse von 10_HM_CUL.pm selbst in Erfahrung bringen...

Im Wiki ist das falsch/veraltet dargestellt und müsste angepasst werden:

- kein darzustellender Text wird mittels "off" realisiert und nicht mittels "nc" -> "nc" bedeutet "no change"
- Leerzeichen werden nicht mittels "\_" dargestellt; das "\_" wird in ein scharfes S "ß" konvertiert. In der Konvertierungstabelle fehlt das Leerzeichen; -> somit derzeit keine Leerzeichendarstellung, so weit ich das in Erfahrung bringen konnte. (ob das Display Leerzeichen darstellen kann, weiss ich nicht...)

HeikoE



Zitat von: connormcl am 25 Januar 2018, 22:06:39
...
; -> somit derzeit keine Leerzeichendarstellung, so weit ich das in Erfahrung bringen konnte.
...

Hallo,
Ich füttere das Display mit dynamischen Daten, in Anlehnung ans Wiki umgesetzt. Da sind Leerzeichen in den übergebenen Strings kein Problem. Die statischen Texte habe ich nie ausprobiert, da sie mir zu unflexibel sind.
Gruß Heiko

connormcl

Soweit ich das Wiki verstanden habe, sind das was ich benutze dynamische Texte (halt direkt ohne das 99_myUtils Framework). Evtl. wird dort eine zusätzliche Leerzeichen-Codierung verwendet, ich sehe sie aber mangels Perl Erfahrung noch nicht.

Ein statischer Text wäre etwas mit txtXX_X:
Zitatset HM-Dis-WM55_Dis_01 displayWM short line2 txt01_1 red error

VolkerGBenner

Hallo zusammen,
gibt es eine Zeichenersetzung, um im Display einen Unterstrich "_" darzustellen?
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,...

connormcl

"_" wird vom Display auf "ß" gemappt; ist also selbst nicht darstellbar.

Was geht, ist ein Spiegelstrich "-"

VolkerGBenner

Dann muss ich wohl alle Unterstriche in meinen DeviceNamen per Script vor der Ausgabe in "-" umwandeln lassen. Wird das einfachste sein.😔
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,...

HeikoE

Zitat von: VolkerGBenner am 08 November 2018, 09:38:37
Dann muss ich wohl alle Unterstriche in meinen DeviceNamen per Script vor der Ausgabe in "-" umwandeln lassen. Wird das einfachste sein.😔
Hallo Volker,
die beschriebene Zeichenersetzungen habe ich einfach durch Probieren ermittelt.
Wenn Du sowas wie
   $text =~ s/_/-/g;
in Dein Script einbaust, wird der Unterstrich ersetzt.
Gruß Heiko

meier81

Hallo und guten Abend,

habe mal eine Frage bezüglich des Displays. Habe mir eins zugelegt und wollte dieses nun mittels FHEM benutzen. Bei mir läuft auf dem Raspberry auch piVCCU für die Homematic-Umgebung, habe nämlich auch ein paar HM-IP Devices. Dementsprechend hätte ich nun probiert das Display über den Weg anzusprechen, so wie ich das hier aber verstehe ist hier die Grundlage das ganze über einen CUL direkt anzusprechen.

Deswegen wollte ich von euch mal wissen ob es eine Möglichkeit gibt das ganze auch über piVCCU abzuwickeln oder ob ich mir noch einen CUL zulegen sollte.

Gruß

Markus
QNAP NAS mit Debian VM, darauf FHEM, debmatic, influxdb2 und Grafana || HB-RF-ETH || WS980 Wetterstation || Xiaomi Mi Robot mit valetudo-FW || Buderus web KM100 || div. Tasmota-Devices || mehrere Homematic-IP und Homematic-Devices

otto

Hallo hätte auch noch ein Frage zum Display,
kann man mehr wie 2 Farben nach Temperatur anzeigenlassen ?

if($t eq "c"){return    ReadingsVal($e,"state",0)>25 ? "red" : "green" }
so mit "blau grün rot" z.B.   ?

Gruß Otto

Pfriemler

nicht mit einem Readingsval. Aber ich hatte eine eigene Temperatur-Subroutine geschrieben und so erweitert, dass etliche if/elseif in eine Variable den Farbwert ablegten und erst dann ein return kam.
"Ä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 ..."