FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: fadi1 am 24 Februar 2021, 13:46:19

Titel: [Gelöst]I2C_LCD Text Var Maskeiren
Beitrag von: fadi1 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 
Titel: Antw:I2C_LCD Text Var Maskeiren
Beitrag von: Nobbynews 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 (https://forum.fhem.de/index.php/topic,24519.0.html)
Titel: Antw:I2C_LCD Text Var Maskeiren
Beitrag von: Beta-User am 24 Februar 2021, 14:36:59
Zitat von: Nobbynews 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 (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 (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 (https://www.perlmonks.org/?node_id=401006) (Suchbegriff: "Quotes in Perl")
Titel: Antw:I2C_LCD Text Var Maskeiren
Beitrag von: Nobbynews am 24 Februar 2021, 14:48:00
Zitat von: Beta-User am 24 Februar 2021, 14:36:59
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 (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 (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.
Titel: Antw:I2C_LCD Text Var Maskeiren
Beitrag von: fadi1 am 24 Februar 2021, 14:51:39
Hallo
ZitatFü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
Titel: Antw:I2C_LCD Text Var Maskeiren
Beitrag von: Beta-User am 24 Februar 2021, 15:16:25
Zitat von: fadi1 am 24 Februar 2021, 14:51:39
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...
Titel: Antw:I2C_LCD Text Var Maskeiren
Beitrag von: DeeSPe 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
Titel: Antw:I2C_LCD Text Var Maskeiren
Beitrag von: fadi1 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)
Titel: Antw:I2C_LCD Text Var Maskeiren
Beitrag von: Nobbynews am 24 Februar 2021, 15:39:00
Zitat von: Beta-User am 24 Februar 2021, 15:16:25
[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.

Zitat von: DeeSPe 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');
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.
Titel: Antw:I2C_LCD Text Var Maskeiren
Beitrag von: Beta-User am 24 Februar 2021, 15:57:07
Zitat von: fadi1 am 24 Februar 2021, 15:38:29
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...