[gelöst] Prüfung ob URL erreichbar ist

Begonnen von franky08, 30 September 2015, 09:36:37

Vorheriges Thema - Nächstes Thema

franky08

#30
Melde mich doch noch mal, da es mir keine Ruhe lässt.
Mit:
{my $ret = system("wget -q -O /dev/null http://192.168.2.111/adc.ht"); return ($ret >> 8) ? 0 : 1;}

in einer sub, wird die Subroutine doch durch das return beendet, wohin wird dann $ret zurück gegeben. Wenn ich die Auswertung ob $ret 0 oder 1 ist müsste ich das doch gleich noch in der sub mit unterbringen aber durch return wird ja die sub verlassen. Und >> ist doch eigendlich eine bitweise Verschiebung?
Den Anfang vom Code verstehe ich aber das return ($ret >> 8) ? 0 : 1; ist mir ein Rätsel.


VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

franky08

#31
hab es gerade mal angepasst, um es auf dem Rechner, außerhalb von fhem testen zu können

frankdonathsmbp:Desktop frdonath$ perl -w AVR_test.pl
Argument "wget -q -O /dev/null http://192.168.2.111/adc.ht" isn't numeric in right bitshift (>>) at AVR_test.pl line 4.
set adc_dummy present
Can't return outside a subroutine at AVR_test.pl line 12.


#!/usr/local/bin/perl -w
{
my $ret = ("wget -q -O /dev/null http://192.168.2.111/adc.ht");
($ret >> 8) ? 0 : 1;

if($ret != 0){
print "set adc_dummy absent\n";
}
if($ret == 0){
print "set adc_dummy present\n";
}
return ($ret >> 8) ? 0 : 1;
#Log 3, "$ret";
print "$ret\n";
}


Hierbei wird richtigerweise set adc_dummy present zurück gegeben, führe ich den Code in der sub in fhem aus, wird absent zurück gegeben.

Die sub in fhem:
sub
AVR_Stat2
{
my $ret = system("wget -q -O /dev/null http://192.168.2.111/adc.ht");
($ret >> 8) ? 0 : 1;

if($ret != 0){
fhem "set adc_dummytest absent";
}
if($ret == 0){
fhem "set adc_dummytest present";
}
return ($ret >> 8) ? 0 : 1;
Log 3, "$ret";

}
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

franky08

#32
Scheint jetzt zu funktionieren.

Es bleibt nur die Warnung:
2015.10.04 10:20:40 1: PERL WARNING: Argument "wget -q -O /dev/null http://192.168.2.111/adc.ht" isn't numeric in right bitshift (>>) at ./FHEM/99_myUtils.pm line 693.

sub
AVR_Stat2
{
my $ret = system("wget -q -O /dev/null http://192.168.2.111/adc.ht");
($ret >> 8) ? 0 : 1;

if($ret != 0){
fhem "set adc_dummy ja";
}
if($ret == 0){
fhem "set adc_dummy nein";
fhem "set Leistungsmesser_AVR_Board_Sw off; sleep 20; set Leistungsmesser_AVR_Board on";
}
return ($ret >> 8) ? 0 : 1;


}


P.S. Seltsam, dass hat genau einmal funktioniert, jetzt geht das dummy immer auf "nein"(absent) obwohl die Website definitiv erreichbar ist.
VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

frank

ich nutze HttpUtils_NonblockingGet um mit einem webserver auf meinem arduino zu kommunizieren. hier der code aus der fhem.cfg. in $_[1] steht ein fehler, wenn zb der arduino nicht erreichbar war, sonst ist die variable leer. die variable schreibe ich regelmässig ins fhem.log und in ein reading. in $_[2] stehen die die daten. die brauchst du wahrscheinlich nicht. das ganze funktioniert halt nonblocking. vielleicht ein versuch wert.

HttpUtils_NonblockingGet( {\
url=>"http:\/\/192.168.1.5\/?HZG1_KOMF=$TraumD",\
callback=>sub($$$){\
if($_[1]) {\
$err = $_[1];;\
}\
else {\
$err = "no problem";;\
}\
Log 3,"ERR:$err DATA:$_[2]";;\
fhem("setreading Broetje httpErr [?HZG1_KOMF=$TraumD] => $err");;\
}\
} );;\
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

franky08

Hallo Frank, wie rufst du HttpUtils_NonblockingGet auf? Mittlerweile bin ich ziemlich betriebsblind und blicke gerade gar nicht mehr durch, habe seit 3h etliches an Code Zeilen geschrieben.
Zu HttpUtils_NonblockingGet riet mir Andre auch schon.

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

frank

genauso wie es gepostet ist.
bei dir eventuell

HttpUtils_NonblockingGet( {\
url=>"http:\/\/192.168.2.111\/adc.ht",\
callback=>sub($$$){\
if($_[1]) {\
$err = $_[1];;\
}\
else {\
$err = "no problem";;\
}\
Log 1,"ERR:$err DATA:$_[2]";;\
}\
} );;\


dann sollte bei jedem verbindungsversuch eine logzeile geschrieben werden.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

franky08

OK, danke dir, ziehe ich mir heute Nachmittag mal raus und passe es an. Das seltsame ist, das nur die Weboberfläche vom Server nicht mehr erreichbar ist, der Server AVR-NET-IO aber noch brav die Heizung steuert, dass kommt vlt. einmal im Monat vor, je nachdem was für  eine Netztlast vorlag.

VG
Frank 
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

frank

zb einfach in ein at einpacken:

define Check at *00:10:00 {\
HttpUtils_NonblockingGet( {\
url=>"http:\/\/192.168.2.111\/adc.ht",\
callback=>sub($$$){\
if($_[1]) {\
$err = $_[1];;\
}\
else {\
$err = "no problem";;\
}\
Log 1,"ERR:$err DATA:$_[2]";;\
}\
} );;\
}
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

franky08

#38
Hallo Frank, wenn ich das erweitere (ich muss ein dummy setzen ja/nein) funktioniert das Ganze scheinbar nicht, leider sehe ich iMo nicht warum.
nein==> Server nicht erreichbar
ja==> Server erreichbar, alles OK

Bekomme leider im Log:
2015.10.04 17:20:00 3: Check: Global symbol "$err" requires explicit package name at (eval 318315) line 6.
Global symbol "$err" requires explicit package name at (eval 318315) line 9.
Global symbol "$err" requires explicit package name at (eval 318315) line 11.


VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

frank

geht es ohne dummy?
im ersten post von mir habe ich ja auch eine fhem anweisung.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

frank

schalte mal verbose vom at ein und schau im log.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

franky08

Das dummy ist erst einmal nur zum testen, wenn das richtig läuft wird ein HM-ES-PMSw1-Pl Switch für 10sec. auf off gesetzt und nach sleep 10 wieder auf on. Der Switch trennt das AVR-Board für 10sec. vom Netz und setzt es damit zurück und die GUI vom Board ist wieder erreichbar.
Da die Erreichbarkeit keinerlei Regeln folgt, wollte ich über das dummy erst einmal sehen, wann das Board wieder weg ist.

P.S. Da ich seit etlicher Zeit alles was mehr als 3 Codezeilen umfasst, in die Utils auslagere, habe ich iMo. nicht den richtigen Durchblick wenn das in der DEF steht  ;)

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

franky08

Mit verbose 5:
2015.10.04 18:00:00 5: exec at command Check
2015.10.04 18:00:00 3: Check: Global symbol "$err" requires explicit package name at (eval 325156) line 6.
Global symbol "$err" requires explicit package name at (eval 325156) line 9.
Global symbol "$err" requires explicit package name at (eval 325156) line 11.

2015.10.04 18:00:00 5: redefine at command Check as +*00:10:00 {
HttpUtils_NonblockingGet( {
url=>"http:\/\/192.168.2.111\/adc.ht",
callback=>sub($$$){
if($_[1]) {
$err = $_[1];
}
else {
$err = "no problem";
}
Log 1,"ERR:$err DATA:$_[2]";
}
} );
}
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

frank

die definition von $err fehlt. my $err; zb in die erste zeile vom at.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

franky08

#44
Sag ich doch  ;)
in der Utils wäre es mir sofort aufgefallen das $err nicht definiert ist und jetzt bekomme ich auch ein return  :) :)
ImLog:

2015.10.04 18:30:00 5: redefine at command Check as +*00:10:00 {my $err = "undef";
HttpUtils_NonblockingGet( {
url=>"http:\/\/192.168.2.111\/adc.ht",
callback=>sub($$$){
if($_[1]) {
$err = $_[1];
}
else {
$err = "no problem";
}
Log 1,"ERR:$err DATA:$_[2]";
}
} );
}
2015.10.04 18:30:00 1: ERR:no problem DATA:HTTP/1.1 200 OK
Connection: close
Content-Length: 624
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8

���=UuT�n�0}�W ���$-!6��� ��7�Vn2�qq�`{oB�w��f/�}I<�s��3��Zw''Q�"o�焓8��Z4���/>���na��wF��7�cf�F�m���l̮�&��M�c�p���ZV��Ft���W����n���6��~�g=�f U;�`}�LySO
�IR���1��|�{O� ����#��媑h�Qt�p���z�֝@��$��� M#�丅Q��܀��p0�- 7h;�,^�m��L0�3m �A�rD��g��ܵ��e��x�� �q*�咀�)~���/H��_&��Z9�8�ƙ޵�iH�4�1d B�`����J4�#�p�N�
����˔(��s�Rh>_��g<�{���suc��w�ؠ�gv/�[{�z(ࡄ4w��Xc���Z��m�Dv�O��J��j�*�Jj�P������R��o$=lg>Z���١I�E�~�U"�#�q���W���pG�b�k&���֎ٮ��X�h��Ld���Lb���'$s�8���khϢ����r���^j��eY�V9h�"L��F7?FN���pt�>
���AR��A�н�#�-�KK=�'k�w�&�����_�}֎C�


So hab ich jetzt fertig:

+*00:10:00 {my $err = "undef";
HttpUtils_NonblockingGet( {
url=>"http:\/\/192.168.2.111\/adc.ht",
callback=>sub($$$){
if($_[1]) {
$err = $_[1];
                fhem "set adc_dummy nein";
}
else {
$err = "no problem";
                fhem "set adc_dummy ja";
}
#Log 1,"ERR:$err DATA:$_[2]";
}
} );
}


VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1