Fhem2Fhem setreading Problem

Begonnen von Amenophis86, 26 Juli 2017, 20:15:54

Vorheriges Thema - Nächstes Thema

Amenophis86

Das hatte ich auch schon überlegt so zu machen und ist wahrscheinlich die einfachste Variante. Aber jetzt hat mich so ein bisschen der Ehrgeiz gepackt cloneDummy entsprechend anzupassen, dass er die Readings vom Slave holt und reinschreibt.

Bin inzwischen auch soweit, dass ich verstanden habe, wie ich mittels jsonlist2 die Abfrage mache. Bekomme es nur noch nicht in eine Variable. So mein entsprechender Code aktuell:

if(AttrVal($hn,'GetAllReadings',0) == 1)
  {
   my $host = AttrVal($hn,'Host','error');
   my $hostport = AttrVal($hn,'Port','error');
   my $password = AttrVal($hn,'Password','error') if(AttrVal($hn,'Password',0));
   my $abfrage = "jsonlist2 $dn";
   
   my $socket = IO::Socket::INET->new('PeerAddr' => $host,'PeerPort' => $hostport,'Proto' => 'tcp') ;
   my @values =  cloneDummy_GetNet($hash,$host);
if ( $values[1] eq "present")
{
# Log3 $hash->{NAME}, 3, "Host present, executing command...";
syswrite($socket, $password . "\n")if($password);
    my $ergebnis = print $socket $abfrage;
# Log3 $hash->{NAME}, 3, "Command executed.";
Log3 $hash->{NAME}, 3, $ergebnis;
}
else { Log3 $hash->{NAME}, 3, "Error: host not present!"; }


Allerdings ist $ergebnis nur 1 und nicht der Json string.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

CoolTux

Na Du kannst Dir ja Sachen vornehmen  ;D

Versuch als fhem Befehl erstmal ein dummy zu setzen um zu schauen das überhaupt was passiert.
Und bei beim telnet Aufruf auf alle Fälle ein Timeout ein sonst kann es passieren das FHEM ewig hängt.

Ich schau mal ob das ganze telnet gedöns soweit passt
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

CoolTux


my $socket = new Net::Telnet ( Host=>$host,
        Port => 7072,
        Timeout=>5,
        Errmode=>'return')
        or return Log3 $hash->{NAME}, 3, "Can't connect";


Versuch mal bitte. Habe leider nicht die Möglichkeit gerade mal eben zu testen


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

CoolTux

Einmal zum rumspielen


use Net::Telnet;
sub telnetLeon($) {

     my $cmd = shift;
     my $socket = new Net::Telnet ( Host=>'localhost',
        Port => 7073,
        Prompt => '/\$ $/i',
        Errmode=>'return')
        or return Log3 'ich', 3, "Can't connect";

     $socket->open;
     my $ergebnis = print $socket->cmd($cmd);

     return $ergebnis;
}


Auf telnet Port 7073 läuft eine zweite FHEM Instanz. den darin enthaltenen Dummy konnte ich mit
{ telnetLeon('set testdummy on')}
schalten. Aber es dauert recht lange. Das kann aber am return liegen. ich arbeite nun an den Feinheiten
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

Amenophis86

Ich habe als Grundlage das RFHEM Modul genommen und mir das die Sachen rausgesucht. Das klappt auch soweit. ist Net::Telnet besser, als IO::Socket::INET??
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

CoolTux

Kann ich Dir nicht beantworten.
Ich kann Dir nur sagen das ich es geschafft habe damit einen Dummy zu schalten. Was ich mit Deiner Variante nicht geschafft habe. Hänge aber nun auch bei der Rückgabe der jsonlist2 Ausgabe.
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

Amenophis86

Das setzen habe ich mit meiner Methode geschafft gehabt. Bei dir hat vermutlich die GetNet_cloneDummy gefehlt welche vorher geprüft wird:

sub cloneDummy_GetNet($$)
{
my ($hash, $hostname) = @_;
my $name  = $hash->{NAME};
my $netstate ;
my @return ;
my @a ;
my $ip ;
my $erg = `ping -c 1 -w 2 $hostname` ;
if( $erg =~ m/100%/)
{
$ip = "0.0.0.0";
$netstate = "absent";
@return =($ip,$netstate);
return @return;
}
elsif( $erg =~ m/ping: unknown host/)
{
$ip = "0.0.0.0";
$netstate = "unknown";
@return =($ip,$netstate);
return @return;
}
elsif( $erg =~ m/0%/ )
{
@a = split(" ", $erg);
$ip = $a[2];
$ip =~ tr/(//ds;
$ip =~ tr/)//ds;
$netstate = "present";
@return =($ip,$netstate);
return @return;
}
}


hänge aber auch an der Rückgabe. Kann leider auch nicht weiter machen heute, sonder erst wieder die Tage. Werde mit den Notify erstmal arbeiten müssen und die Tage schauen, ob ich es mit cloneDummy weiter bearbeiten kann. Reizt mich ja eigentlich schon :) Ich danke dir schon mal für die Hilfe bisher.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

CoolTux

Gern geschehen. Macht ja auch Spaß
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