[gelöst]Einstellungen um mit net::telnet Modul die Ausgabe des fhem commands ...

Begonnen von supernova1963, 05 Februar 2019, 07:05:37

Vorheriges Thema - Nächstes Thema

supernova1963

Vielen Dank cooltux,

probiere ich sobald wie möglich aus.

Gernot

P.S.:
Zitat von: betateilchen am 05 Februar 2019, 21:36:41
ich meine, Du solltest mal ein paar perl-Dokumentationen zum Thema lesen. Mit FHEM selbst hat Dein Vorhaben grundsätzlich nicht so sehr viel zu tun.
Sorry für mein Unvermögen, betateilchen. Du hast natürlich recht, erst lesen, dann Fragen.
Zum Thema net::telnet habe ich viel gelesen und ausprobiert.
Soviel habe ich herausgefunden: $telent->cmd( Funktion funktioniert ja auch ohne die Portweiterleitung von fhem und $telnet->print( funktioniert problemlos auch mit fhem.
Was hat das mit fhem zu tun:
Ich versuche gerade laienhaft ein fhem Modul zu erstellen, das Parameter für einen System Dienst zur Verfügung stellt. Der Dienst soll entsprechend der Parameterisierung Daten an fhem liefern.
Warum einen Dienst:
Da nicht vorhersehbar, wann Daten geliefert werden, muss es dauerhaft laufen. Eine blocking Funktion mit 24 Std. Timeout (oder häufiger) und umittelbarem Neusstart ggf. auf fernem Rechner gefiel mir nicht ganz so gut.
Warum ich bis dato keine cfg oder yaml verwende, die ja auch sehr leicht aus fhem heraus eingestellt werden könnte:
Hat mich einfach nur interessiert, ob es möglich ist die Redundanz zu vermeiden.

Dein Lösungsvorschlag ist für mich genial und zeigt mir die Unterschied zu anderen Programmiersprachen.

Vielen Dank nocheinmal dafür!

CoolTux

Zitat von: supernova1963 am 06 Februar 2019, 07:03:18
Vielen Dank cooltux,

probiere ich sobald wie möglich aus.

Gernot

P.S.:Sorry für mein Unvermögen, betateilchen. Du hast natürlich recht, erst lesen, dann Fragen.
Zum Thema net::telnet habe ich viel gelesen und ausprobiert.
Soviel habe ich herausgefunden: $telent->cmd( Funktion funktioniert ja auch ohne die Portweiterleitung von fhem und $telnet->print( funktioniert problemlos auch mit fhem.
Was hat das mit fhem zu tun:
Ich versuche gerade laienhaft ein fhem Modul zu erstellen, das Parameter für einen System Dienst zur Verfügung stellt. Der Dienst soll entsprechend der Parameterisierung Daten an fhem liefern.
Warum einen Dienst:
Da nicht vorhersehbar, wann Daten geliefert werden, muss es dauerhaft laufen. Eine blocking Funktion mit 24 Std. Timeout (oder häufiger) und umittelbarem Neusstart ggf. auf fernem Rechner gefiel mir nicht ganz so gut.
Warum ich bis dato keine cfg oder yaml verwende, die ja auch sehr leicht aus fhem heraus eingestellt werden könnte:
Hat mich einfach nur interessiert, ob es möglich ist die Redundanz zu vermeiden.

Dein Lösungsvorschlag ist für mich genial und zeigt mir die Unterschied zu anderen Programmiersprachen.

Vielen Dank nocheinmal dafür!

Ich muss da noch mal Fragen, sorry. Willst Du ein FHEM Modul entwickeln oder willst Du ein kleines Perl Skript schreiben was Daten sammelt und dann an FHEM sendet? Ist wichtig zu wissen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

supernova1963

Hallo CoolTux,

an-für-sich, beides. Meine Frage zum Thema telnet bezieht sich aber auf ein "kleines perl script", dass als System Dienst gestartet wird und geeignet aufbereitete Daten (Vorgaben im fhem Modul einstellbar) nach fhem schubsen soll.

Gernot


CoolTux

Also hier hast Du erstmal ein funktionierenden Prototype


#!/usr/bin/perl
use warnings;
use strict;
use POSIX;
use Net::Telnet;



my $host = 'localhost';
my $port = 7072;
my $timeout = 1;

my $socket = new Net::Telnet ( Host=>$host,
        Port => $port,
        Timeout=>$timeout,
        Errmode=>'return')
        or die 'Geht nicht';



my $string = 'list TYPE=dummy';
$string .= "\r\n";


syswrite($socket,$string);

my $buf;
my $leng;
$leng = sysread($socket,$buf,1024);

$socket->close;


print 'Länge ist: ' . $leng . ' und Daten sind: ' . $buf . "\n";


Er macht genau das was er soll. Er schreibt einen list Befehl in die telnet session und liest die Antwort dann aus.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

betateilchen

Zitat von: supernova1963 am 06 Februar 2019, 07:03:18
Warum einen Dienst:
Da nicht vorhersehbar, wann Daten geliefert werden, muss es dauerhaft laufen.

nur mal so zur Info: Die allermeisten Module in FHEM wissen auch nicht im voraus, WANN Daten zur Verarbeitung geliefert werden.
Genau dafür gibt es bewährte Mechanismen und Vorgehensweisen innerhalb von FHEM. Dazu brauchst Du das Rad nicht neu erfinden.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

CoolTux

Zitat von: supernova1963 am 06 Februar 2019, 08:30:39
Hallo CoolTux,

an-für-sich, beides. Meine Frage zum Thema telnet bezieht sich aber auf ein "kleines perl script", dass als System Dienst gestartet wird und geeignet aufbereitete Daten (Vorgaben im fhem Modul einstellbar) nach fhem schubsen soll.

Gernot

In diesem Fall solltest du Dir mal lepresenced anschauen. Das ist genau so ein Perl Skript für die Konsole und läuft als Dämon.
Da haste Dir aber was vorgenommen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

supernova1963

Hallo CoolTux,

danke für den Code, das wären sonst unzählige debug Durchläufe geworden um herauszufinden, dass ein "\r\n" angehangen werden soll. Ich hatte die net::telnet Beschreibung so verstanden, dass diese Option als Standard voreingestellt ist.
Es läuft, und, wenn ich es richtig interpretiere müsste das Auslesen der Rückgabe des fhem commands bei mit IO::Socket::INET ja ähnlich funktionieren

Zitat von: CoolTux am 06 Februar 2019, 09:29:38
In diesem Fall solltest du Dir mal lepresenced anschauen. Das ist genau so ein Perl Skript für die Konsole und läuft als Dämon.
Da haste Dir aber was vorgenommen.
Wenn ich mir lepresenced so anschaue, werde ich diese Qualität nie erreichen. Vielleicht wird es ja doch etwas schmaler, da ich ein bestehendes Programm die meisten Aufgaben der Überwachung liefert.
Konkret:
Ich hatte mir damals mal eine fingBox über Indiegogo zur Netzwerküberwachung zugelegt. Die rennt auch an-für-sich sehr gut. Aber sie "telefoniert halt permanent mit zuhause". Da die Jungs von fing eine neue offline Version von fingCLI zur Verfügung gestellt haben, will ich 'mal versuchen die mir wichtigen Funktionen ohne die Box hinzubekommen. Dafür muss ich die Discovery Funktion in ein perl script packen, da es nur text oder csv im log Modus auf die Console oder in eine Datei abwirft. Das schöne daran ist, dass es bei mir keine 5 Sekunden dauert, bis das fing discovery einen neuen Teilnehmer oder eine Statusveränderung eines bekannten Teilnehmers im Netz entdeckt. Zusätzlich erfolgt alle 60 Sekunden ein vollständiger Netzwerk Scan der als json ausgegeben wird. Nicht zuletzt sind die .config Dateien einstell-/erweiterbar.
Nach meiner Vorstellung soll ein fhem Modul die Parameter für den Discovery Dienst vorgeben und den Dienst stoppen und aktivieren.

Na, mal sehen wie weit ich komme. 


@betateilchen:
Zitat von: betateilchen am 06 Februar 2019, 09:15:35
Dazu brauchst Du das Rad nicht neu erfinden.
Will ich auch gar nicht, ich will nur lernen wie es geht ...
Vorweggenommen: Ja, ich weiss, dass es ein nmap Modul gibt  ;)

Noch einmal danke an alle,

Gernot

CoolTux

Dein fingCli scheint als Daemon laufen zu können. Eventuell arbeitet er mit Unixsocket dann kannst Du direkt über FHEM mittels DevIo arbeiten.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

supernova1963

Hallo CoolTux,

ich bin deiner Alternative einmal nach gegangen. Wenn ich es richtig verstanden habe, würden dann im Verzeichnis /proc/<PID>/fd *.sockets zu finden sein. Das ist bei fingCLI nicht der Fall. Oder gibt es andere Wege das ,,Vorhandensein" von entsprechenden Sockets zu prüfen?
Ich vermute, dass dies eher bei fingKIT verwendet wird. Der für mich wesentliche Unterschied ist, dass fingCLI ausschließlich lokal läuft und nicht Lizensierungspflichtig ist, fingKIT u.A. eine API zur fingBox wäre.
Mit letzterem habe ich mich noch nicht näher beschäftigt.

Danke,

Gernot

CoolTux

Selbst kenne ich keinen anderen Weg. Dann also doch Perlskript auf der Konsole.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net