I2C_LCD: Inhalt in Dummy auf Frontend anzeigen

Begonnen von epsrw1, 26 Mai 2014, 15:53:00

Vorheriges Thema - Nächstes Thema

epsrw1

hallo zusammen,
aus meiner faulheit heraus, vom büro zum unten im haus verbauten LCD zu laufen, ist folgender code entstanden. anstatt direkt auf das LCD zu schreiben, schreibe ich die werte in einen dummy pro display-zeile und aktualisiere das display dann über ein notify. vielleicht ist es jemandem nützlich:

99_myUtils.pm

sub lcdDummy($$$){
my ($in,$xyl,$data) = @_;
my ($posX,$posY,$laenge,$rechtsbuendig)=split(/,/,$xyl);
my $frontpart=substr($in,0,$posX);
my $backpart = "";
if(($posX+$laenge)<length($in)){
$backpart=substr($in,($posX+$laenge));
}
return($frontpart.fixlen($laenge,$data).$backpart);
}
sub fixlen($@){
  my ($min, $daten, @vars) = @_;
  if(length($daten) >= $min){
   $daten=substr($daten,0,$min);
  }else{
   while(length($daten)<$min){
    $daten=" ".$daten;
    }
   }           
  return $daten;
}



configfile:

#file: lcd_fhem.cfg
#Kessel(../..): .....
#W.Wass.(../..):.....
#VL: ..... / RL:.....
#M:../... Ext.:......

define lcd42 I2C_LCD 20 4 0x3F
attr lcd42 IODev FRM_0
attr lcd42 backLight on
attr lcd42 pinMapping P0=RS,P1=RW,P2=E,P3=LED,P4=D4,P5=D5,P6=D6,P7=D7
attr lcd42 restoreOnReconnect on
attr lcd42 restoreOnStartup on
attr lcd42 room lcd
attr lcd42 stateFormat text

define lcdZeile0 dummy
define lcdZeile1 dummy
define lcdZeile2 dummy
define lcdZeile3 dummy
attr lcdZeile.* room lcd

define lcdZeile_Kessel notify 4_14_Kessel_E3CD97050000.* {fhem("set lcdZeile0 ".lcdDummy(ReadingsVal("lcdZeile0","state",0),"15,0,5",ReadingsVal("4_14_Kessel_E3CD97050000","temperature","Err")) )}
#define lcd_Kessel notify 4_14_Kessel_E3CD97050000.* {fhem("set lcd42 writeXY 15,0,5,1 ".fixlen(5,ReadingsVal("4_14_Kessel_E3CD97050000","temperature","??????")));;}
define lcdZeile_Kessel_tl notify 4_14_Kessel_E3CD97050000.* {fhem("set lcdZeile0 ".lcdDummy(ReadingsVal("lcdZeile0","state",0),"7,0,2",ReadingsVal("Kessel_TL","state","??????")) )}
#define lcd_Kessel_tl notify 4_14_Kessel_E3CD97050000.* {fhem("set lcd42 writeXY 7,0,2,1 ".fixlen(2,ReadingsVal("Kessel_TL","state","??????")));;}
define lcdZeile_Kessel_th notify 4_14_Kessel_E3CD97050000.* {fhem("set lcdZeile0 ".lcdDummy(ReadingsVal("lcdZeile0","state",0),"10,0,2",ReadingsVal("Kessel_TH","state","??????")) )}
#define lcd_Kessel_th notify 4_14_Kessel_E3CD97050000.* {fhem("set lcd42 writeXY 10,0,2,1 ".fixlen(2,ReadingsVal("Kessel_TH","state","??????")));;}
define lcd_Write0 notify lcdZeile0 {fhem("set lcd42 writeXY 0,0,20,1 ".Value("lcdZeile0"))}

define lcdZeile_WW notify 5_15_WarmWasser_EB6F98050000.* {fhem("set lcdZeile1 ".lcdDummy(ReadingsVal("lcdZeile1","state",0),"15,1,5",ReadingsVal("5_15_WarmWasser_EB6F98050000","temperature","Err")) )}
#define lcd_WW notify 5_15_WarmWasser_EB6F98050000.* {fhem("set lcd42 writeXY 15,1,5,1 ".fixlen(5,ReadingsVal("5_15_WarmWasser_EB6F98050000","temperature","??????")));;}
define lcdZeile_WW_tl notify 5_15_WarmWasser_EB6F98050000.* {fhem("set lcdZeile1 ".lcdDummy(ReadingsVal("lcdZeile1","state",0),"8,1,2",ReadingsVal("Wasser_TL","state","??????")) )}
#define lcd_WW_tl notify 5_15_WarmWasser_EB6F98050000.* {fhem("set lcd42 writeXY 8,1,2,1 ".fixlen(2,ReadingsVal("Wasser_TL","state","??????")));;}
define lcdZeile_WW_th notify 5_15_WarmWasser_EB6F98050000.* {fhem("set lcdZeile1 ".lcdDummy(ReadingsVal("lcdZeile1","state",0),"11,1,2",ReadingsVal("Wasser_TH","state","??????")) )}
#define lcd_WW_th notify 5_15_WarmWasser_EB6F98050000.* {fhem("set lcd42 writeXY 11,1,2,1 ".fixlen(2,ReadingsVal("Wasser_TH","state","??????")));;}
define lcd_Write1 notify lcdZeile1 {fhem("set lcd42 writeXY 0,1,20,1 ".Value("lcdZeile1"))}

define lcdZeile_VL notify 1_17_Vorlauf_D1F798050000.* {fhem("set lcdZeile2 ".lcdDummy(ReadingsVal("lcdZeile2","state",0),"3,2,5",ReadingsVal("1_17_Vorlauf_D1F798050000","temperature","Err")) )}
#define lcd_VL notify 1_17_Vorlauf_D1F798050000.* {fhem("set lcd42 writeXY 3,2,5,1 ".fixlen(5,ReadingsVal("1_17_Vorlauf_D1F798050000","temperature","??????")));;}
define lcdZeile_RL notify 2_12_Ruecklauf_56B897050000.* {fhem("set lcdZeile2 ".lcdDummy(ReadingsVal("lcdZeile2","state",0),"15,2,5",ReadingsVal("2_12_Ruecklauf_56B897050000","temperature","Err")) )}
#define lcd_RL notify 2_12_Ruecklauf_56B897050000.* {fhem("set lcd42 writeXY 15,2,5,1 ".fixlen(5,ReadingsVal("2_12_Ruecklauf_56B897050000","temperature","??????")));;}
define lcd_Write2 notify lcdZeile2 {fhem("set lcd42 writeXY 0,2,20,1 ".Value("lcdZeile2"))}

define lcdZeile_Rotenc notify MischerPosition.* {fhem("set lcdZeile3 ".lcdDummy(ReadingsVal("lcdZeile3","state",0),"2,3,2",ReadingsVal("MischerPosition","position","Err")) )}
#define lcd_Rotenc notify MischerPosition.* {fhem("set lcd42 writeXY 2,3,2,0 ".fixlen(2,ReadingsVal("MischerPosition","position","??????")));;}
define lcdZeile_Stellmotor notify VorlaufMischer.* {fhem("set lcdZeile3 ".lcdDummy(ReadingsVal("lcdZeile3","state",0),"5,3,3",ReadingsVal("VorlaufMischer","position","Err")) )}
#define lcd_Stellmotor notify VorlaufMischer.* {fhem("set lcd42 writeXY 5,3,3,0 ".fixlen(3,ReadingsVal("VorlaufMischer","position","??????")));;}
define lcdZeile_Aussen notify 81_Aussen_D745CE040000.* {fhem("set lcdZeile3 ".lcdDummy(ReadingsVal("lcdZeile3","state",0),"14,3,6",ReadingsVal("81_Aussen_D745CE040000","temperature","Err")) )}
#define lcd_Aussen notify 81_Aussen_D745CE040000.* {fhem("set lcd42 writeXY 14,3,6,1 ".fixlen(6,ReadingsVal("81_Aussen_D745CE040000","temperature","??????")));;}
define lcd_Write3 notify lcdZeile3 {fhem("set lcd42 writeXY 0,3,20,1 ".Value("lcdZeile3"))}

define tmpnot_lcd_grundeinstellung notify 82_Tankraum_DFFACA040000.* trigger lcd_grundeinstellung
define at_lcd_grundeinstellung at *03:03:44 trigger lcd_grundeinstellung
#define lcd_grundeinstellung notify lcd_grundeinstellung trigger lcd_z1;;trigger lcd_z2;;trigger lcd_z3;;trigger lcd_z4;;set lcd42 backlight on
define lcd_grundeinstellung notify lcd_grundeinstellung set lcdZeile0 Kessel(../..): .....;;set lcdZeile1 W.Wass.(../..):.....;;set lcdZeile2 VL: ..... / RL:.....;;set lcdZeile3 M:../... Ext.:......
attr .*cd_grundeinstellung room lcd
attr lcdZeile.* room lcd

attr lcd_z1 room lcd
attr lcd_z2 room lcd
attr lcd_z3 room lcd
attr lcd_z4 room lcd

Ich habe keine Ahnung, aber davon wenigstens ganz viel