Ping aus FHEM heraus?

Begonnen von Guest, 21 August 2011, 00:13:24

Vorheriges Thema - Nächstes Thema

Guest

Originally posted by: <email address deleted>

Hallo zusammen!

Ich habe Probleme, aus FHEM heraus zu prüfen, ob ein Rechner
erreichbar ist oder nicht. Konkret geht es darum, einen Rechner vom
Netz zu trennen, wenn dieser ausgeschaltet ist. Mein bisheriges
Ergebnis dazu sieht z.B. so aus:

define Test at *22:00 { use Net::Ping;; my $p = Net::Ping->new("icmp",
5);; if ($p->ping()) { fhem ("set xyz off");; } $p->close();; }

Leider funktioniert das nicht so, wie ich es mir vorstelle. Er scheint
es zwar irgendwie auszuführen (ich bekomme, wenn ich das "$p-
>ping(" ins Log ausgeben lasse, etwas wie z.B.
"Net::Ping=HASH(0xbe1234)->ping("), aber die If-Bedingung ist
offensichtlich immer "false".

Ich vermute, dass ihm die root-Rechte fehlen, kann das sein? Wenn ja,
welche Alternativen gibt es? Ich will es allerdings - zumindest
vorerst - nicht mit dem "FS20 FMS" lösen, sondern möglichst per
Skripting. Schon alleine aus Spieltrieb-Gründen. ;)

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

On 08/21/2011 12:13 AM, Marci wrote:
> define Test at *22:00 { use Net::Ping;; my $p = Net::Ping->new("icmp",
> 5);; if ($p->ping()) { fhem ("set xyz off");; } $p->close();; }

Ich schreibe bei Zeiten immer die Sekunden dazu, aber vielleicht ist
auch "22:00" statt "22:00:00" erlaubt. An der Stelle wo steht ist
die IP als String mit Quotes drin?

> Ich vermute, dass ihm die root-Rechte fehlen, kann das sein? Wenn ja,
> welche Alternativen gibt es? Ich will es allerdings - zumindest
> vorerst - nicht mit dem "FS20 FMS" lösen, sondern möglichst per
> Skripting. Schon alleine aus Spieltrieb-Gründen. ;)

Ich glaube nicht, dass man root-Rechte für einen Ping braucht, der
Fehler liegt wahrscheinlich woanders. Reagiert der Rechner auf Pings von
der Kommandozeile richtig?

Viele liebe Grüße,
Thomas

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Erst mal vielen Dank für die Antwort!

> Ich schreibe bei Zeiten immer die Sekunden dazu, aber vielleicht ist
> auch "22:00" statt "22:00:00" erlaubt. An der Stelle wo steht ist
> die IP als String mit Quotes drin?

Es geht auch ohne die Sekunden. Während der Tests schreibe ich diese
allerdings auch dazu, um mehr als einen Versuch pro Minute zu haben.
Bei kommt die IP des Hosts ohne Quotes rein, so wie es unter
http://search.cpan.org/~smpeters/Net-Ping-2.36/lib/Net/Ping.pm
beschrieben ist. Ich habe es jetzt zwar auch mal mit Quotes probiert,
allerdings funktioniert das ebenfalls nicht.


> Ich glaube nicht, dass man root-Rechte f r einen Ping braucht, der
> Fehler liegt wahrscheinlich woanders. Reagiert der Rechner auf Pings von
> der Kommandozeile richtig?

Ja, auf der Konsole funktioniert der einfache Ping ohne Probleme. Root-
Rechte sind allerdings für icmp-Pings nötig:

"The icmp protocol requires that the program be run as root or that it
be setuid to root." (Siehe obigen Link)

Ich hatte gestern noch vergessen, meine Umgebung anzugeben:
FritzBox 7390, aktuellste Non-Labor-Firmware + fhem-5.1-fb7390.image
von fhem.de

Viele Grüße
Marcel

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Hallo,

ich habe das auf einer Fritzbox 7150 so hinbekommen:

{ use Net::Ping;; my $p = Net::Ping->new("icmp",5);; my $i=0;; my
$n=0;; for $i(0..9) { if(!($p->ping("192.168.1.112", 2))) { $n++ }
last if($p->ping("192.168.1.112", 2)) };; if($n == 10) { fhem "set
SW_3Com off" };; $p->close();; }

Entscheidend war "$p->ping("192.168.1.112", 2)" die 2 bedeutet
anscheinend das der Ping zurück kommt. Mit der Negierung "!" frage ich
also ab, ob der Ping nicht zurück gekommen ist. Das ganze in einer For-
Schleife 10 mal und wenn innerhalb dieser 10 Pings einmal eine
Rückmeldung kommt wird nicht geschaltet.

Ich bin leider kein Perl-Freak, war die erste Berührung mit Perl und
ich habe halt solange probiert mit der Ausgabe ins Log "Log 1, "JA""
ob es Funktioniert hat.
Zum testen habe ich folgendes verwendet:
{ use Net::Ping;; my $p = Net::Ping->new("icmp",5);; if(!($p-
>ping("192.168.1.112", 2))) { Log 1, "PC hat auf Ping NICHT
geantwortet" };; $p->close();; }
{ use Net::Ping;; my $p = Net::Ping->new("icmp",5);; if($p-
>ping("192.168.1.112", 2)) { Log 1, "PC hat auf Ping geantwortet" };;
$p->close();; }

Der AT Befehl sieht dann so aus:
define a1 at +*00:05:00 { use Net::Ping;; my $p = Net::Ping-
>new("icmp",5);; my $i=0;; my $n=0;; for $i(0..9) { if(!($p-
>ping("192.168.1.112", 2))) { $n++ } last if($p->ping("192.168.1.112",
2)) };; if($n == 10) { fhem "set SW_3Com off" };; $p->close();; }

Alle 5 Minuten prüfen ob der PC an ist.

Die IP entsprechend natürlich anpassen!

Ich hoffe es hilft jemanden :)

Viele Grüße
mike

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Hi,

bitte ins fhemwiki posten!

Ciao, Arno

Am 12. September 2011 10:19 schrieb mike :
> Hallo,
>
> ich habe das auf einer Fritzbox 7150 so hinbekommen:
>
> { use Net::Ping;; my $p = Net::Ping->new("icmp",5);; my $i=0;; my
> $n=0;; for $i(0..9) { if(!($p->ping("192.168.1.112", 2))) { $n++ }
> last if($p->ping("192.168.1.112", 2)) };; if($n == 10) { fhem "set
> SW_3Com off" };; $p->close();; }
>
> Entscheidend war "$p->ping("192.168.1.112", 2)" die 2 bedeutet
> anscheinend das der Ping zurück kommt. Mit der Negierung "!" frage ich
> also ab, ob der Ping nicht zurück gekommen ist. Das ganze in einer For-
> Schleife 10 mal und wenn innerhalb dieser 10 Pings einmal eine
> Rückmeldung kommt wird nicht geschaltet.
>
> Ich bin leider kein Perl-Freak, war die erste Berührung mit Perl und
> ich habe halt solange probiert mit der Ausgabe ins Log "Log 1, "JA""
> ob es Funktioniert hat.
> Zum testen habe ich folgendes verwendet:
> { use Net::Ping;; my $p = Net::Ping->new("icmp",5);; if(!($p-
>>ping("192.168.1.112", 2))) { Log 1, "PC hat auf Ping NICHT
> geantwortet" };; $p->close();; }
> { use Net::Ping;; my $p = Net::Ping->new("icmp",5);; if($p-
>>ping("192.168.1.112", 2)) { Log 1, "PC hat auf Ping geantwortet" };;
> $p->close();; }
>
> Der AT Befehl sieht dann so aus:
> define a1 at +*00:05:00 { use Net::Ping;; my $p = Net::Ping-
>>new("icmp",5);; my $i=0;; my $n=0;; for $i(0..9) { if(!($p-
>>ping("192.168.1.112", 2))) { $n++ } last if($p->ping("192.168.1.112",
> 2)) };; if($n == 10) { fhem "set SW_3Com off" };; $p->close();; }
>
> Alle 5 Minuten prüfen ob der PC an ist.
>
> Die IP entsprechend natürlich anpassen!
>
> Ich hoffe es hilft jemanden :)
>
> Viele Grüße
> mike
>
> --
> To unsubscribe from this group, send email to
> fhem-users+unsubscribe@googlegroups.com
>



--
Arno Willig

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Hallo,

die "2" bedeutet lediglich, dass ein Timeout von 2 Sekunden festgelegt
wird, mehr nicht (zumindest lt.
http://search.cpan.org/~smpeters/Net-Ping-2.36/lib/Net/Ping.pm). Das ist
bei mir also nicht das Problem. Ich hatte es zwischenzeitlich am laufen mit
dem folgenden Code:

define Server_aus_notreachable at *03:00 "if [[ "$(ping -4 -c 1 -W 5 -q
| grep '1 packets received')" == '' ]];; then i=0;; while [[ "$i" -lt
"3" ]];; do if [[ "$(ping -4 -c 1 -W 5 -q | grep '1 packets
received')" != '' ]];; then echo exit;; fi;; i=$(($i+1));; sleep 30;;
done;; wget -s -q "http://:8083/fhem?cmd.Server=set%20Server%20off";;
fi"

Auf der Grundlage habe ich dann auch andere Sachen lösen können, wie z.B.
"Licht Abends ein, wenn Laptop angemeldet". Das hat auch wunderbar
funktioniert - bis ich letztens das neueste FHEM-Update eingespielt hab. %)
Seitdem kommt immer die Meldung:
"ping: permission denied (are you root?)"

Ich habe auch noch mal den Perl-Code ausprobiert, natürlich wieder ohne
Erfolg. Diesmal bekomme ich auch so etwas schönes:
"icmp ping requires root privilege at (eval 94) line 1"

Hat sich mit der letzten FHEM-Version irgendetwas in Richtung Rechte oder
Ausführung von (Shell-)Kommandos getan?

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

borsti67

                                                 

Hi,
> Hat sich mit der letzten FHEM-Version irgendetwas in Richtung Rechte
> oder Ausführung von (Shell-)Kommandos getan?

Ich glaube, seit 5.2 läuft FHEM als eigener Benutzer (war wohl früher root)?

Gruss
Torsten

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
cu/2
Borsti
---
FHEM 5.8 auf Synology DS211j (bis 11/17) | FHEM 6.0 auf Raspi Zero W (bis 11/20) | FHEM 6.2 als VM in Synology DS1815+ (ab 11/20)

rudolfkoenig

                                                   

> Hat sich mit der letzten FHEM-Version irgendetwas in Richtung Rechte oder
> Ausführung von (Shell-)Kommandos getan?

Ja, fhem ist jetzt "sicherer", da es unter dem fhem user laeuft, und nicht mehr
unter root. Bin inzwischen nicht mehr sicher, ob das eine gute Idee war. Btw.
auf einem normalen Unix Rechner hat ping ein root s-bit. Auf dem FB ist ping
ein Link auf busybox (*heul*). Auch sonst betrachtet AVM das FB nicht als
Multi-User Rechner, jedenfalls ist die Rechtevergabe auf dem FB in einem
desolaten Zustand.

Als temporaeren fix kannst Du entweder
- als root "chmod 4755 /bin/busybox" ausfuehren (ja, ich weiss. Fingernaegel
  wachsen und so)
- aus dem startfhem Skript den Abschnitt mit "boxusr80" entfernen, und das FB
  neu starten.


Ich bin hiermit wieder fuer fhem unter root user auf dem FB.

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com

Guest

Originally posted by: <email address deleted>

Danke für die Hilfe! Nach dem Umstellen (ich habs einfach auskommentiert)
funktioniert es jetzt wieder. :)

Die Änderung steht aber nicht im Changelog, oder hab ich das jetzt trotz
mehrfachen Suchens übersehen? Ich hab die Diskussion darüber auch schon mal
gefunden und kurz überflogen und schon befürchtet, dass das jetzt
realisiert wurde. ;)

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com