Autor Thema: [Gelöst]I2C_LCD Text Var Maskeiren  (Gelesen 283 mal)

Offline fadi1

  • New Member
  • *
  • Beiträge: 12
[Gelöst]I2C_LCD Text Var Maskeiren
« am: 24 Februar 2021, 13:46:19 »
Hallo
ich habe erfolgreich ein 2004er Display mit I2C_LCD eingebunden

ich kann über set <Name> Text einen beliebigen Text anzeigen lassen.

die Frage ist wie ich da eine Variable rein bekomme  :-\

ich habe das probiert
my $temp=ReadingsVal("Temp_1","temperature","24.00");
set Oled2 writeXY 1,0,16, Temp = $temp;

in der Var $temp steht der richtige Wert.
am Display kommt nur.
Temp = $temp

wie muss ich Die Variable maskieren das der Wert übernommen wird

danke für eure Hilfe 
« Letzte Änderung: 24 Februar 2021, 15:45:09 von fadi1 »

Offline Nobbynews

  • Full Member
  • ***
  • Beiträge: 201
Antw:I2C_LCD Text Var Maskeiren
« Antwort #1 am: 24 Februar 2021, 14:15:29 »
Ich würde das Modul DLCD dafür benutzen.

https://forum.fhem.de/index.php/topic,24519.0.html
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 14096
  • "Developer"?!? Meistens doch eher "User"
Antw:I2C_LCD Text Var Maskeiren
« Antwort #2 am: 24 Februar 2021, 14:36:59 »
Ich würde das Modul DLCD dafür benutzen.

https://forum.fhem.de/index.php/topic,24519.0.html
Das mag ja uU. hilfreich sein, aber das "Problem" liegt hier m.E. auf einer ganz anderen Ebene, hier wird ein Perl-Schnipsel mit einem "Pseudo-fhem"-Kommando vermischt: https://fhem.de/commandref_modular.html#command

Für die Kommandozeile zum Testen (und Weiterdenken, wenn es funktioniert):
{ my $temp=ReadingsNum('Temp_1','temperature','24.00');; fhem("set Oled2 writeXY 1,0,16, Temp = $temp") }
Was "Interpolation" etc. angeht gleich noch ein Link: https://www.perlmonks.org/?node_id=401006 (Suchbegriff: "Quotes in Perl")
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, Twilight,  AttrTemplate => {mqtt2, mysensors, zwave}
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline Nobbynews

  • Full Member
  • ***
  • Beiträge: 201
Antw:I2C_LCD Text Var Maskeiren
« Antwort #3 am: 24 Februar 2021, 14:48:00 »
Das mag ja uU. hilfreich sein, aber das "Problem" liegt hier m.E. auf einer ganz anderen Ebene, hier wird ein Perl-Schnipsel mit einem "Pseudo-fhem"-Kommando vermischt: https://fhem.de/commandref_modular.html#command

Für die Kommandozeile zum Testen (und Weiterdenken, wenn es funktioniert):
{ my $temp=ReadingsNum('Temp_1','temperature','24.00');; fhem("set Oled2 writeXY 1,0,16, Temp = $temp") }
Was "Interpolation" etc. angeht gleich noch ein Link: https://www.perlmonks.org/?node_id=401006 (Suchbegriff: "Quotes in Perl")
Sicherlich ein guter Hinweis, nur wenn ich mich richtig an die Installation bei mir erinnere, dann wertet das Modul I2C_LCD den <text> nicht aus, sondern nimmt es nur so als reinen Text an.
Da hilft dann alles Maskieren, Interpolieren usw. nicht weiter.
Kann mich aber irren und lasse mich gerne belehren.
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline fadi1

  • New Member
  • *
  • Beiträge: 12
Antw:I2C_LCD Text Var Maskeiren
« Antwort #4 am: 24 Februar 2021, 14:51:39 »
Hallo
Zitat
Für die Kommandozeile zum Testen (und Weiterdenken, wenn es funktioniert)
{ my $temp=ReadingsNum('Temp_1','temperature','24.00');; fhem("set Oled2 writeXY 1,0,16, Temp = $temp") }:

das ist genau das was ich gesucht habe

Danke

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 14096
  • "Developer"?!? Meistens doch eher "User"
Antw:I2C_LCD Text Var Maskeiren
« Antwort #5 am: 24 Februar 2021, 15:16:25 »
Hallo
das ist genau das was ich gesucht habe

Danke
Gerne.

Markierst du den Thread dann bitte noch als "[gelöst]"? (Anleitung im untersten angepinnten Thread hier).

Bitte aber auch die Links nochmal nachbereiten, das kommt nämlich in vielfacher Weise immer wieder ;) .

[OT @Nobbynews]
Es mag sein, dass einem DLCD da die Arbeit erleichtert, allerdings ist der "Preis" für Automatismen erfahrungsgemäß teilweise relativ hoch (ich kenne beide Module nicht und habe nicht in den Quelltext geschaut!). Nicht selten ist es lohnend, mal den Fußweg zu nehmen...
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, Twilight,  AttrTemplate => {mqtt2, mysensors, zwave}
Gefällt mir Gefällt mir x 1 Liste anzeigen

Online DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4338
  • Wer anderen eine Bratwurst brät...
Antw:I2C_LCD Text Var Maskeiren
« Antwort #6 am: 24 Februar 2021, 15:23:20 »
Nur als Ergänzung, es funktioniert auch ohne es vorher in eine Variable zu schreiben:
fhem "set Oled2 writeXY 1,0,16, Temp = ".ReadingsNum('Temp_1','temperature','24.00');
Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline fadi1

  • New Member
  • *
  • Beiträge: 12
Antw:I2C_LCD Text Var Maskeiren
« Antwort #7 am: 24 Februar 2021, 15:38:29 »
Hallo

{
my $temp=ReadingsNum('Temp_1','temperature','24.00');
my $hum=ReadingsNum('Luftdruck','humidity','100.00');
my $pres=ReadingsNum('Luftdruck','pressure','1000.00');
my $lux=ReadingsNum('Licht','luminosity','24.00');

 fhem("set Oled2 clear");

 fhem("set Oled2 writeXY 3,0,17, Temp = $temp C");
 fhem("set Oled2 writeXY 0,1,16, Feuchte = $hum %");
 fhem("set Oled2 writeXY 2,2,17, Druck = $pres mP");
 fhem("set Oled2 writeXY 2,3,16, Licht = $lux Lux");
}

Das lauft perfekt. danke nochmal  :) 8)

Offline Nobbynews

  • Full Member
  • ***
  • Beiträge: 201
Antw:I2C_LCD Text Var Maskeiren
« Antwort #8 am: 24 Februar 2021, 15:39:00 »
[OT @Nobbynews]
Es mag sein, dass einem DLCD da die Arbeit erleichtert, allerdings ist der "Preis" für Automatismen erfahrungsgemäß teilweise relativ hoch (ich kenne beide Module nicht und habe nicht in den Quelltext geschaut!). Nicht selten ist es lohnend, mal den Fußweg zu nehmen...
Da kann ich nur zustimmen. Besser man versteht, warum etwas geht, als nur stupide abzukupfern.

Nur als Ergänzung, es funktioniert auch ohne es vorher in eine Variable zu schreiben:
fhem "set Oled2 writeXY 1,0,16, Temp = ".ReadingsNum('Temp_1','temperature','24.00');
Wieder etwas dazugelernt.
DLCD hat aber imho noch den Vorteil, dass man logische Zeilen definiert und dann durch Scrollen mehr als die physikalischen Zeilen darstellen kann.
Geht anders natürlich auch, aber dann muss man sich halt um das Scrollen selber kümmern.
Wie immer, viele Wege führen zum Ziel.

Edit: Beim Refresh werden die Readings von DLCD automatisch übernommen und man muss nicht jedesmal set xyz ... ausführen.
« Letzte Änderung: 24 Februar 2021, 16:26:30 von Nobbynews »

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 14096
  • "Developer"?!? Meistens doch eher "User"
Antw:I2C_LCD Text Var Maskeiren
« Antwort #9 am: 24 Februar 2021, 15:57:07 »
Das lauft perfekt. danke nochmal  :) 8)
:)

Vielleicht noch eine Anmerkung: Jeder Aufruf des Wrappers "fhem" kostet etwas Performance. Imo wäre es perfekter, alles in einen Aufruf zu packen ;) .

Künftig wäre es ggf. hilfreich, ein list oÄ. zu liefern, da kann man einfacher sehen, wo das Perl-Schnippselchen hin soll bzw. her ist...
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, Twilight,  AttrTemplate => {mqtt2, mysensors, zwave}

 

decade-submarginal