Autor Thema: Text auf LCDd server ausgeben  (Gelesen 1252 mal)

Offline Klaus Heynen

  • New Member
  • *
  • Beiträge: 42
Text auf LCDd server ausgeben
« am: 05 August 2021, 14:21:47 »
Ich habe einen funktionierenden LCDd server auf meinem Raspi3 laufen und möchte von fhem gesteuert Meldungen aus geben.
Wenn ich mit telnet auf den server localhost port 13666 gehe dann funktioniert das auch.
Um eine Anbindung an fhem zu bekommen habe ich die Perl extension IO::LCDproc (https://metacpan.org/pod/IO::LCDproc#SYNOPSIS) installiert.

Wenn ich Demo skript mit oder ohne sudo mit perl "sudo perl LCDd_Test.pl" aufrufe passiert rein gar nichts, es werden auch keine Fehlermeldungen ausgegeben.
use IO::LCDproc;
 
my $client      = IO::LCDproc::Client->new(name => "MYNAME");
my $screen      = IO::LCDproc::Screen->new(name => "screen");
my $title       = IO::LCDproc::Widget->new(
                name => "date", type => "title"
                );
my $first       = IO::LCDproc::Widget->new(
                name => "first", align => "center", xPos => 1, yPos => 2
                );
my $second      = IO::LCDproc::Widget->new(
                name => "second", align => "center", xPos => 1, yPos => 3
                );
my $third       = IO::LCDproc::Widget->new(
                name => "third", xPos => 1, yPos => 4
                );
$client->add( $screen );
$screen->add( $title, $first, $second, $third );
$client->connect() or die "cannot connect: $!";
$client->initialize();
 
$title->set( data => "This is the title" );
$first->set( data => "First Line" );
$second->set( data => "Second line" );
$third->set( data => "Third Line" );
 
$client->flushAnswers();

Ich verstehe nicht wie ich die Argumente host, port etc. an das demo skript übergeben muss.
Tut mir leid auch nach stundenlangem goggeln bin ich nicht weiter gekommen. Ich brauche hier euer Nachhilfe!

Danke Klaus

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 19508
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Text auf LCDd server ausgeben
« Antwort #1 am: 05 August 2021, 15:34:04 »
Hallo Klaus,

so versuchen? Aus der Zeile:
my $client      = IO::LCDproc::Client->new(name => "MYNAME");die machen:
my $client      = IO::LCDproc::Client->new(name => "MYNAME", host => $MYHOSTNAME, port => $MYPORTNUMBER);
Ich versteh die Doku und Beschreibung zumindestens so  :-\

Wenn man sucht findet man noch das https://www.splunk.com/en_us/blog/tips-and-tricks/splunk2lcd-display-your-alerts-on-an-lcd.html  ;) was meine Annahme bestätigt?

Gruß Otto
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline Klaus Heynen

  • New Member
  • *
  • Beiträge: 42
Antw:Text auf LCDd server ausgeben
« Antwort #2 am: 05 August 2021, 15:57:31 »
Hallo Otto123,

und wie dann das Skript aufrufen?
Oder meinst Du zB.

my $client      = IO::LCDproc::Client->new(name => "fhem", host => 127.0.0.1, port => 13666);

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 19508
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Text auf LCDd server ausgeben
« Antwort #3 am: 05 August 2021, 17:05:25 »
Hallo Klaus,

ich habe ehrlich gesagt von Deiner Lösung keine Ahnung, ich habe nur aus Interesse reingelesen.
Ich habe verstanden, dass LCDd und LCDproc eine Client Server Applikation ist. Es gibt für LCDproc übrigens auch eine Kommandozeilen Version.
Mir ist nicht klar ob FHEM und dein LCDd auf der gleichen Maschine laufen.
Mir ist nicht klar wie name wirklich gewählt werden muss.

Aber klar: zum Test kannst Du doch alle Daten erstmal ins Script eintragen.
Später kannst Du alles per Parameter übergeben. Oder war Deine Frage nur darauf ausgerichtet?

Gruß Otto
« Letzte Änderung: 05 August 2021, 17:23:01 von Otto123 »
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline Klaus Heynen

  • New Member
  • *
  • Beiträge: 42
Antw:Text auf LCDd server ausgeben
« Antwort #4 am: 05 August 2021, 17:20:27 »
Alles klar, mir reicht es erstmal "hard coded" was von FHEM auf das Display zubekommen.
Wenn es mit der LCDproc command line geht einen freiwählbaren Text auszugeben würde mir das sehr helfen, wo hast du das denn gefunden?
Der Weg ist mir egal, ich interessiert das Ergebnis.
Danke und viele Grüße

Offline Klaus Heynen

  • New Member
  • *
  • Beiträge: 42
Antw:Text auf LCDd server ausgeben
« Antwort #5 am: 05 August 2021, 17:26:30 »
hab's gefunden aber es scheint als könne man keinen freien Text ausgeben.
fhem und LCDd laufen auf dem selben Raspi3.
Das mit dem Name ist mir auch ein Rätzel

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 19508
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Text auf LCDd server ausgeben
« Antwort #6 am: 05 August 2021, 17:28:55 »
Gefunden z.B. hier
http://manpages.ubuntu.com/manpages/trusty/man8/LCDd.8.html
http://manpages.ubuntu.com/manpages/trusty/man1/lcdproc.1.html

Aber per Perl aus FHEM heraus ist auf alle Fälle eleganter. In FHEM machst Du aus deinem Code eine sub { Code } in deine 99_myUtils.pm
Daten aus FHEM an diese sub zu übergeben ist relativ simpel.

Kannst ja probieren und fragen :)

Gruß Otto
P.S. funktioniert das Perl Script?
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline Klaus Heynen

  • New Member
  • *
  • Beiträge: 42
Antw:Text auf LCDd server ausgeben
« Antwort #7 am: 05 August 2021, 19:39:12 »
habs nun zum laufen gebracht use IO::LCDproc;
use IO::Socket;
use strict;

&usage if (! $ARGV[0]);

my $client = IO::LCDproc::Client->new(host => "localhost", name => "MYNAME", port => "13666");

my $screen = IO::LCDproc::Screen->new(name => "screen");

my $title = IO::LCDproc::Widget->new( name => "date", type => "string");

my $first = IO::LCDproc::Widget->new(
name => "first", align => "center", type => "string", xPos => 1, yPos => 1
);
my $second = IO::LCDproc::Widget->new(
name => "second", align => "center", type => "string", xPos => 1, yPos => 2
);
my $third = IO::LCDproc::Widget->new(
name => "third", align => "center", type => "string", xPos => 1, yPos => 4
);

$client->add ( $screen );
$screen->add ( $title, $first, $second, $third);
$client->connect() or die "Cannot Connect: $!";
$client->initialize();

#$title->set( data => "$ARGV[1]" );
$first->set( data => "$ARGV[0]");
$second->set( data => "$ARGV[1]" );
#$third->set( data => "$ARGV[5]" );

sleep 5;
exit 1;

sub usage {
print <<USAGE;
LCDproc Client for Splunk
Mark Cohen
Usage: ./splunk2lcd2.pl ARGV0 ARGV1 ARGV2
USAGE
exit 1;
}

Wenn ich es nun von der command line mit "perl  fhem2lcdd.pl "eins und" zwei" starte zeigt es zentriert:

      eins und
         zwei

Aber leider zus. in der ersten Zeile den Heartbeat habe schon einiges Versucht ich verstehe nicht wo und wie ich die "Option" heartbeat => 0 in das Skript einbauen muss.

Den Einbau in die 99_MyUtils.pm schaue ich mir erstmal im Wiki an.
Noch mal vielen Dank Klaus

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 19508
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Text auf LCDd server ausgeben
« Antwort #8 am: 05 August 2021, 22:21:00 »
Hi,

ich weiß jetzt nicht was Du mit Heartbeat meinst, aber Du bestückst die Variable $title, belässt sie und steckst am Ende keine Daten hinein.

Wenn Du $title konsequent auskommentierst?

Gruß Otto
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline Klaus Heynen

  • New Member
  • *
  • Beiträge: 42
Antw:Text auf LCDd server ausgeben
« Antwort #9 am: 06 August 2021, 10:49:23 »
hearbeat ist ein pulsierendes Herz Symbol am Ende der 1. Zeile

laut IO::LCDproc kann man das ausschalten:
Zitat
_LCDproc__ScreenMETHODSnew( name =_ 'MYNAME')Constructor. Allowed options_heartbeat =_ 1 or 0_

habe versucht:
my $screen = IO::LCDproc::Screen->new(name => "screen", heartbeat => 0);geht aber nicht, auch nicht mit
my $screen = IO::LCDproc::Screen->new(name => "screen", heartbeat => "0"); habe es auch mit =>1 und =>"1" versucht geht auch nicht.

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 19508
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Text auf LCDd server ausgeben
« Antwort #10 am: 06 August 2021, 11:09:04 »
Laut Beschreibung auch direkt auf dem Server deaktivierbar?
http://lcdproc.sourceforge.net/docs/current-user.html
Zitat
Heartbeat = { off | open | on }
Set the master heartbeat, the oscillating icon in the top right corner of the display, setting. If set to the default value open, then the heartbeat setting of the display can be influenced by the clients. When set to off or on, the heartbeat is turned on or off without the clients being able to change the value.
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline Klaus Heynen

  • New Member
  • *
  • Beiträge: 42
Antw:Text auf LCDd server ausgeben
« Antwort #11 am: 06 August 2021, 12:04:39 »
super hat geklappt, nun mach ich mich an die 99_MyUtls.pm

Offline Klaus Heynen

  • New Member
  • *
  • Beiträge: 42
Antw:Text auf LCDd server ausgeben
« Antwort #12 am: 06 August 2021, 18:14:19 »
Bin etwas weiter gekommen. Wenn ich nun aus FHEM "{ myLCDd("fuenf", "Sieben") }" aufrufe wird das richtig angezeigt aber FHEM stürzt ab.

##############################################
# $Id: myUtilsTemplate.pm 7570 2015-01-14 18:31:44Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.

package main;

use strict;
use warnings;
use POSIX;

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

# Enter you functions below _this_ line.

sub
myLCDd($$) {
use IO::LCDproc;
use strict;

my ($ARGV0, $ARGV1) = @_;

my $client = IO::LCDproc::Client->new(host => "localhost", name => "MYNAME", port => "13666");

my $screen = IO::LCDproc::Screen->new(name => "screen");


my $first = IO::LCDproc::Widget->new(
name => "first", align => "center", type => "string", xPos => 1, yPos => 1
);
my $second = IO::LCDproc::Widget->new(
name => "second", align => "center", type => "string", xPos => 1, yPos => 2
);


$client->add ( $screen );
$screen->add ($first, $second);
$client->connect() or die "Cannot Connect: $!";
$client->initialize();

$first->set( data => "$ARGV0");
$second->set( data => "$ARGV1");

sleep 5;
exit 1;
}

1;

Hast Du eine Idee? Im log steht leider garnix.

Offline Klaus Heynen

  • New Member
  • *
  • Beiträge: 42
Antw:Text auf LCDd server ausgeben
« Antwort #13 am: 06 August 2021, 22:08:20 »
gefunden,es lag an exit 1;
Nochmals vielen Dank für Deine Hilfe.
Klaus

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 19508
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Text auf LCDd server ausgeben
« Antwort #14 am: 06 August 2021, 22:09:22 »
 :)
ich meine, das hier blockiert und beendet den Perl Prozess und damit FHEM
sleep 5;
exit 1;

Ersetz das mal durch
return 1;
Gruß Otto
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

 

decade-submarginal