Fehler im Abwesenheit Code (Ping)

Begonnen von ChrisW, 14 Januar 2013, 19:45:01

Vorheriges Thema - Nächstes Thema

ChrisW

Hallo,

bisher hat das Script recht gut funktioniert.
Jedoch hab ich nun mal gemerkt als ich alleine zuhause war, das sobald wohl 1 Ping nicht Erfolgreich ist diese 5 Minuten Verlängerung nicht klappt.
Er hat also 5 Minuten lang einen Fehler und erkennt nicht das ich Online bin.

Hier mein Code vielleicht erkennt ja jemand etwas??


# Anwesenheit von Christian, Handy

define Anwesenheit_Chris dummy
attr Anwesenheit_Chris loglevel 6
attr Anwesenheit_Chris room Anwesenheit
attr Anwesenheit_Chris setList on off

define Anwesenheit_Chris_FileLog FileLog ./log/Anwesenheit_Chris.log Anwesenheit_Chris
attr Anwesenheit_Chris_FileLog logtype text
attr Anwesenheit_Chris_FileLog room Logfiles

define Job_AnwesendChris at +*00:01:00 { \
use Net::Ping;; \
my $ip = "192.168.2.50";; \
my $p = Net::Ping->new("icmp", 9, 64);; \
if ($p->ping($ip)) { \
fhem("delete abwesend_Chris ;; set Anwesenheit_Chris on") if (Value("Anwesenheit_Chris") eq "off");; \
} \
else { \
fhem("define abwesend_Chris at +00:05:00 set Anwesenheit_Chris off") if (Value("Anwesenheit_Chris") eq "on");; \
} \
}

# Anwesenheit von Tanja, Handy

define Anwesenheit_Tanja dummy
attr Anwesenheit_Tanja loglevel 6
attr Anwesenheit_Tanja room Anwesenheit
attr Anwesenheit_Tanja setList on off

define Anwesenheit_Tanja_FileLog FileLog ./log/Anwesenheit_Tanja.log Anwesenheit_Tanja
attr Anwesenheit_Tanja_FileLog logtype text
attr Anwesenheit_Tanja_FileLog room Logfiles

define Job_AnwesendTanja at +*00:01:00 { \
use Net::Ping;; \
my $ip = "192.168.2.23";; \
my $p = Net::Ping->new("icmp", 9, 64);; \
if ($p->ping($ip)) { \
fhem("delete abwesend_Tanja ;; set Anwesenheit_Tanja on") if (Value("Anwesenheit_Tanja") eq "off");; \
} \
else { \
fhem("define abwesend_Tanja at +00:05:00 set Anwesenheit_Tanja off") if (Value("Anwesenheit_Tanja") eq "on");; \
} \
}


Raspberry PI3 mit allem möglichen.

justme1968

hallo,

die erkennung mit einem ping so einfach ohne eine wartezeit oder hysterese wird niemals richtig funktionieren weil die telefone normalerweise sofort oder nach einer weile das netz stilllegen wenn das display aus ist. d.h. auch wenn das handy im haus ist ist es so lange es in der tasche ist per ping meistens bis garnicht erreichbar.

der ansatz der funktioniert ist im wlan router nachzuschauen ob das geraet angemeldet ist weil es dort erst nach sehr viel längerer inaktivität rausfliegt und durch die periodischen verbindungsversuche für mail abholen oder ähnliches immer wieder aktualisiert wird.

ich hab das bei mir spaßeshalber mal plotten lassen. oben ist der angemeldet status auf dem router und unten der status per ping. ich hab nur alle 5 minuten geschaut sonst wären die anwesend bereiche beim ping zum teil noch schmaler. zumal ich bei den breiten meistens auch noch wirklich noch was mit dem handy gemacht habe. wie schnell das wlan abgeschaltet wird kommt natürlich auf das telefon an.


(siehe Anhang / see attachement)


gruss
andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

ChrisW

Hallo, da gebe ich dir recht aber meine Telefone gehen per Ping relativ gut hab Dauerping aus Windows herraus.
Klar würde ich gerne per Fritz.Box das ganze abfragen aber ich habe Fhem auf einem Windows Notebook. Eine Fritz.box hab ich natürlich auch im netzwerk ..
Raspberry PI3 mit allem möglichen.

ChrisW

Kannst du mir sagen wie ich aus meinem auch so einen Plot erstelle um das mal Grafisch zu erkennen ?
Bisher hab ich das Thema Plots bewusst noch nicht behandelt :P
Raspberry PI3 mit allem möglichen.

justme1968

ich habe auch keine fritzbox. mein wlan router lässt sich per snmp abfragen.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

justme1968

ich zeig es dir heute abend oder morgen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

ChrisW

Danke.
Hm scheinbar passiert der Fehler nur wenn Fhem neu Gestartet wird.
Aber komisch das sollte ja nichts ausmachen da er ja die Zeit nur verlängert wenn Ping nicht erfolgreich ist ..
Raspberry PI3 mit allem möglichen.

ChrisW

hm selbst beim Hochdrehen auf 10 Minuten kommt es zu Fehlern. Wieso auch immer der PING über windows CMD ist immer erfolgreich. Der Ping über Fhem irgendwie nicht..
AM Code kann normal auch nichts falsch sein.

Werde wohl doch das ganze umbauen zu mit einer Fritz.box abfrage. Welche Codes funktionieren den wenn FHEM wie bei mir unter WIndows läuft?
Raspberry PI3 mit allem möglichen.

ChrisW

Ich hoffe die EDIT Funktion kommt bald wieder :)

Alsoo nun Zuhause und ich erlebe es mit wie Ping mit Windows PC immer Erfolgreich ist...
Trotzdem geht nahc fhem Neustart nach 10 Minuten das Licht aus o_O

Aber sofort ( 1 Minute bis nächster Ping ) ist das Licht wieder Online da es erfolgreich ist.

Im Log sind komischerweise KEINE Meldungen mit Abwesenheit Chris exestiert schon oder erst Löschen NICHTS ...

Irgendwas stimmt am Code oben nicht vielleicht hat ja mal jemand Zeit drüber zu schauen.
Raspberry PI3 mit allem möglichen.

ChrisW


EVENT LOG:
19:34 HANDY AUS
2013-01-15 19:35:15 Global global DEFINED abwesend_Chris
2013-01-15 19:35:15 Global global DELETED Job_AnwesendChris
2013-01-15 19:35:15 Global global DEFINED Job_AnwesendChris
2013-01-15 19:35:24 Global global DELETED Job_AnwesendTanja
2013-01-15 19:35:24 Global global DEFINED Job_AnwesendTanja

2013-01-15 19:35:53 Global global DELETED Job_AnwesendChris
2013-01-15 19:35:53 Global global DEFINED Job_AnwesendChris
2013-01-15 19:36:02 Global global DELETED Job_AnwesendTanja
2013-01-15 19:36:02 Global global DEFINED Job_AnwesendTanja


19:37 HANDY WIEDER AN
2013-01-15 19:37:44 Global global DELETED Job_AnwesendChris
2013-01-15 19:37:44 Global global DEFINED Job_AnwesendChris
2013-01-15 19:37:55 Global global DELETED Job_AnwesendTanja

2013-01-15 19:38:44 Global global DELETED Job_AnwesendChris
2013-01-15 19:38:44 Global global DEFINED Job_AnwesendChris
2013-01-15 19:38:55 Global global DELETED Job_AnwesendTanja
2013-01-15 19:38:55 Global global DEFINED Job_AnwesendTanja


Logfile steht nur folgendesseit ausmachen Handy bis Lampe wieder an :

2013.01.15 19:34:37 3: Opening ml device 192.168.2.22:62910
2013.01.15 19:34:37 3: ml device opened
2013.01.15 19:34:38 2: MAXLAN_Parse: Got configdata for unimplemented devicetype 5
2013.01.15 19:34:39 2: MAXLAN_Parse: Got status for unimplemented device type PushButton
2013.01.15 19:35:53 3: define abwesend_Chris at +00:05:00 set Anwesenheit_Chris off : abwesend_Chris already defined, delete it first
2013.01.15 19:35:53 3: abwesend_Chris already defined, delete it first
2013.01.15 19:37:59 3: Opening ml device 192.168.2.22:62910
2013.01.15 19:37:59 3: ml device opened
2013.01.15 19:38:00 2: MAXLAN_Parse: Got configdata for unimplemented devicetype 5
2013.01.15 19:38:00 2: MAXLAN_Parse: Got status for unimplemented device type PushButton
2013.01.15 19:40:16 1: CustomGetFileFromURL http://192.168.2.1:82/API/shutdown toggle: Can't connect to http://192.168.2.1:82

2013.01.15 19:40:17 3: HTPC Ausgeschaltet weil keiner da
2013.01.15 19:40:17 3: Opening ml device 192.168.2.22:62910
2013.01.15 19:40:17 3: ml device opened
2013.01.15 19:40:18 2: MAXLAN_Parse: Got configdata for unimplemented devicetype 5
2013.01.15 19:40:18 2: MAXLAN_Parse: Got status for unimplemented device type PushButton
2013.01.15 19:40:19 3: MAXLAN_Parse: 1% rule: we sent too much, cmd is now in queue
2013.01.15 19:40:19 3: Opening ml device 192.168.2.22:62910
2013.01.15 19:40:19 3: ml device opened
2013.01.15 19:40:21 2: MAXLAN_Parse: Got configdata for unimplemented devicetype 5
2013.01.15 19:40:21 2: MAXLAN_Parse: Got status for unimplemented device type PushButton
2013.01.15 19:40:22 3: MAXLAN_Parse: 1% rule: we sent too much, cmd is now in queue
2013.01.15 19:40:22 2: MAXLAN_Parse: Command was discarded
2013.01.15 19:40:22 3: Opening ml device 192.168.2.22:62910
2013.01.15 19:40:22 3: ml device opened
2013.01.15 19:40:23 2: MAXLAN_Parse: Got configdata for unimplemented devicetype 5
2013.01.15 19:40:24 2: MAXLAN_Parse: Got status for unimplemented device type PushButton
2013.01.15 19:40:24 3: MAXLAN_Parse: 1% rule: we sent too much, cmd is now in queue
2013.01.15 19:40:24 3: Setze Heizung Eco
2013.01.15 19:40:24 2: IT IODev device didn't answer is command correctly:   raw => tA0076686601CtAE075805881B
2013.01.15 19:40:28 1: CustomGetFileFromURL http://192.168.2.1:82/API/shutdown toggle: Can't connect to http://192.168.2.1:82

2013.01.15 19:40:28 3: HTPC Ausgeschaltet weil keiner da
2013.01.15 19:40:28 3: Opening ml device 192.168.2.22:62910
2013.01.15 19:40:28 3: ml device opened
2013.01.15 19:40:29 2: MAXLAN_Parse: Got configdata for unimplemented devicetype 5
2013.01.15 19:40:29 2: MAXLAN_Parse: Got status for unimplemented device type PushButton
2013.01.15 19:40:29 3: MAXLAN_Parse: 1% rule: we sent too much, cmd is now in queue
2013.01.15 19:40:29 3: Opening ml device 192.168.2.22:62910
2013.01.15 19:40:30 3: ml device opened
2013.01.15 19:40:31 2: MAXLAN_Parse: Got configdata for unimplemented devicetype 5
2013.01.15 19:40:31 2: MAXLAN_Parse: Got status for unimplemented device type PushButton
2013.01.15 19:40:32 3: MAXLAN_Parse: 1% rule: we sent too much, cmd is now in queue
2013.01.15 19:40:32 2: MAXLAN_Parse: Command was discarded
2013.01.15 19:40:32 3: Opening ml device 192.168.2.22:62910
2013.01.15 19:40:32 3: ml device opened
2013.01.15 19:40:33 2: MAXLAN_Parse: Got configdata for unimplemented devicetype 5
2013.01.15 19:40:34 2: MAXLAN_Parse: Got status for unimplemented device type PushButton
2013.01.15 19:40:34 3: MAXLAN_Parse: 1% rule: we sent too much, cmd is now in queue
2013.01.15 19:40:34 3: Setze Heizung Eco
2013.01.15 19:40:44 2: CUL: unknown message is000000000FF0
2013.01.15 19:40:44 3: Opening ml device 192.168.2.22:62910
2013.01.15 19:40:44 3: ml device opened
2013.01.15 19:40:45 2: MAXLAN_Parse: Got configdata for unimplemented devicetype 5
2013.01.15 19:40:45 2: MAXLAN_Parse: Got status for unimplemented device type PushButton
2013.01.15 19:40:45 3: Opening ml device 192.168.2.22:62910
2013.01.15 19:40:45 3: ml device opened
2013.01.15 19:40:47 2: MAXLAN_Parse: Got configdata for unimplemented devicetype 5
2013.01.15 19:40:47 2: MAXLAN_Parse: Got status for unimplemented device type PushButton
2013.01.15 19:40:47 3: MAXLAN_Parse: 1% rule: we sent too much, cmd is now in queue
2013.01.15 19:40:47 3: Opening ml device 192.168.2.22:62910
2013.01.15 19:40:48 3: ml device opened
2013.01.15 19:40:49 2: MAXLAN_Parse: Got configdata for unimplemented devicetype 5
2013.01.15 19:40:49 2: MAXLAN_Parse: Got status for unimplemented device type PushButton
2013.01.15 19:40:49 3: MAXLAN_Parse: 1% rule: we sent too much, cmd is now in queue
2013.01.15 19:40:49 2: MAXLAN_Parse: Command was discarded
2013.01.15 19:40:49 3: Opening ml device 192.168.2.22:62910
2013.01.15 19:40:50 3: ml device opened
2013.01.15 19:40:51 2: MAXLAN_Parse: Got configdata for unimplemented devicetype 5
2013.01.15 19:40:51 2: MAXLAN_Parse: Got status for unimplemented device type PushButton
2013.01.15 19:40:52 3: MAXLAN_Parse: 1% rule: we sent too much, cmd is now in queue
2013.01.15 19:40:52 3: Setze Heizung Auto
2013.01.15 19:40:52 2: IT IODev device didn't answer is command correctly:   raw => tA0296926941CtAE2850050C1D
2013.01.15 19:40:54 3: Opening ml device 192.168.2.22:62910
2013.01.15 19:40:54 3: ml device opened
2013.01.15 19:40:55 2: MAXLAN_Parse: Got configdata for unimplemented devicetype 5
2013.01.15 19:40:55 2: MAXLAN_Parse: Got status for unimplemented device type PushButton
2013.01.15 19:40:55 3: MAXLAN_Parse: 1% rule: we sent too much, cmd is now in queue
2013.01.15 19:40:55 3: Opening ml device 192.168.2.22:62910
2013.01.15 19:40:56 3: ml device opened
2013.01.15 19:40:57 2: MAXLAN_Parse: Got configdata for unimplemented devicetype 5
2013.01.15 19:40:57 2: MAXLAN_Parse: Got status for unimplemented device type PushButton
2013.01.15 19:40:58 3: MAXLAN_Parse: 1% rule: we sent too much, cmd is now in queue
2013.01.15 19:40:58 2: MAXLAN_Parse: Command was discarded
2013.01.15 19:40:58 3: Opening ml device 192.168.2.22:62910
2013.01.15 19:40:58 3: ml device opened
2013.01.15 19:40:59 2: MAXLAN_Parse: Got configdata for unimplemented devicetype 5
2013.01.15 19:41:00 2: MAXLAN_Parse: Got status for unimplemented device type PushButton
2013.01.15 19:41:00 3: MAXLAN_Parse: 1% rule: we sent too much, cmd is now in queue
2013.01.15 19:41:00 3: Setze Heizung Auto
2013.01.15 19:41:06 3: delete abwesend_Chris ; set Anwesenheit_Chris on : Please define abwesend_Chris first
2013.01.15 19:41:06 3: Please define abwesend_Chris first
2013.01.15 19:41:17 2: CUL: unknown message is000000000FFF
2013.01.15 19:41:17 3: Opening ml device 192.168.2.22:62910
2013.01.15 19:41:18 3: ml device opened
2013.01.15 19:41:19 2: MAXLAN_Parse: Got configdata for unimplemented devicetype 5
2013.01.15 19:41:19 2: MAXLAN_Parse: Got status for unimplemented device type PushButton
Raspberry PI3 mit allem möglichen.

Zrrronggg!

So richtig kann ich dir nicht helfen, weil ich das Konstrukt

define Job_AnwesendChris at +*00:01:00 { \
use Net::Ping;; \
my $ip = "192.168.2.50";; \
my $p = Net::Ping->new("icmp", 9, 64);; \
if ($p->ping($ip))

nicht verstehe.  Oder genauer: ich weiss nicht welche Werte das annehmen kann und verstehe auch
if ($p->ping($ip))  nicht und wann das wahr und wann nicht wahr ist.


Letzlich hast du ja eine Konstruktion der Art:

define at  {ping ;;  if irgendwas  {fhem("machwas") if irgendwas } else  {fhem("machwas") if irgendwas }}


Sicher liegt's daran, dass ich langsam müde werde, aber mir fällt es echt recht schwer, die möglichen Zustände diese if if else if Geschichte zu durchdringen.

Das die diversen defines sehr ähnliche Namen haben:
Job_AnwesendChris
Anwesenheit_Chris
abwesend_Chris

macht's nicht leichter lesbar (jaja, ich habe den letzten Namen selbst vorgeschlagen, ich weiss)

Mit anderen Worten, ich kapiers auch nicht.

Ich würde erstmal sicher sein wollen, dass wenn
if ($p->ping($ip))
unwahr
auch tatsächlich das
else
ausgeführt wird.

Vom Logfile her sieht es für mich nicht so aus.
Ich rate: der ganze Code nach if ($p->ping($ip)) wird nie ausgeführt.


Da müsstest du dir einen vereinfachten Testcode bauen um das zu testen.


Und bitte: kommentier doch bei der Fehlersuche Tanja oder Chris aus, damit's ein bischen übersichtlicher für uns wird.














FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Zrrronggg!

Ich darf mich mal selbst zitieren:

ZitatIch rate: der ganze Code nach if ($p->ping($ip)) wird nie ausgeführt.

Ich habe da nochmal ein bischen drüber nachgedacht und ich glaube jetzt, so ist es auch.


Zitatdefine Job_AnwesendChris at +*00:01:00 { \
use Net::Ping;; \
my $ip = "192.168.2.50";; \
my $p = Net::Ping->new("icmp", 9, 64);; \
if ($p->ping($ip)) { \
fhem("delete abwesend_Chris ;; set Anwesenheit_Chris on") if (Value("Anwesenheit_Chris") eq "off");; \
} \
else { \
fhem("define abwesend_Chris at +00:05:00 set Anwesenheit_Chris off") if (Value("Anwesenheit_Chris") eq "on");; \
} \
}

Ich habe den Eindruck, dass nach einem FHEM-Neustart diese Sache nicht mehr funktioniert.

Folgendes:

Sowohl das IF als auch ELSE kommando haben ja in sich nochmal eine IF Bedingung.

Die testen , ob  Anwesenheit_Chris vorher OFF oder ON war und machen erst dann was.
Nur ist "Anwesenheit_Chris" ein Dummy, das nach einem FHEM-Neustart womöglich nicht befüllt ist.
D.H. Anwesenheit_Chris ist **weder** ON **noch** OFF!

Und daher wird - egal was dein Pingen ergibt - nichts vom Nachfolgenden ausgeführt.

Um diese Vermutung von mir zu testen setze doch mal Anwesenheit_Chris auf einen Wert mit

set Anwesenheit_Chris on  (ohne FHEM neuzustarten)

Wenn der Klapperatismus dann geht, hast unter enderem folgende zwei Möglichkeiten das Problem zu umgehen:



1. du setzt Anwesenheit_Chris mit jedem FHEM-Neustart auf einen definierten Wert, z.b mit

define StartsequenzAnwesenheit notify global:INITIALIZED.* set Anwesenheit_Chris on ; set Anwesenheit Tanja on



2. du testest bei einem der beiden nicht auf "eq"  Wert, sondern nur auf "ne"  = not equal  konträrer Wert, z.b. so:


define Job_AnwesendChris at +*00:01:00 { \
use Net::Ping;; \
my $ip = "192.168.2.50";; \
my $p = Net::Ping->new("icmp", 9, 64);; \
if ($p->ping($ip)) { \
fhem("delete abwesend_Chris ;; set Anwesenheit_Chris on") if (Value("Anwesenheit_Chris") eq "off");; \
} \
else { \
fhem("define abwesend_Chris at +00:05:00 set Anwesenheit_Chris off") if (Value("Anwesenheit_Chris") ne "off");; \
} \
}



 if (Value("Anwesenheit_Chris") ne "off") triggert nämlich auch, wenn in  Anwesenheit_Chris irgendwas anderes steht ausser OFF. Also z.b. ON, aber auch nichts oder "Vlunztäterö99"


Ich selber setze not equal Tests gerne ein, weil sie viel robuster sind, aber oft den selben Zweck erfüllen.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL

Markus

Ich weiß jetzt nicht ob dir das was hilft da ich deinen Code nicht durchschaue, aber ich hab es bei mir so gelöst und es funktioniert eigentlich ganz gut.

Markus ist ein Dummy den ich später immer Abfrage
Markus_Handy ist für abfragen nicht geeignet weil es immer wieder für 1 bis 2 Minuten Abwesend ist.

define SucheLan at +*00:01:00 trigger WerDa

define handyweg notify Markus_Handy.* {if (Value("Markus_Handy") eq "Anwesend") \
{fhem ("set Markus on ;; delete wieder_aus ;; define wieder_aus at +00:05:00 set Markus off") }\
}
Raspberry Pi2 als FHEM-Plattform
HM, FS20, 1-Wire, PanStamp,LW12,Intertechno,ESPEasy,Alexa

ChrisW

Zitat von: Markus schrieb am So, 20 Januar 2013 03:46Ich weiß jetzt nicht ob dir das was hilft da ich deinen Code nicht durchschaue, aber ich hab es bei mir so gelöst und es funktioniert eigentlich ganz gut.

Markus ist ein Dummy den ich später immer Abfrage
Markus_Handy ist für abfragen nicht geeignet weil es immer wieder für 1 bis 2 Minuten Abwesend ist.

define SucheLan at +*00:01:00 trigger WerDa

define handyweg notify Markus_Handy.* {if (Value("Markus_Handy") eq "Anwesend") \
{fhem ("set Markus on ;; delete wieder_aus ;; define wieder_aus at +00:05:00 set Markus off") }\
}

Hi,
kannst dein WerDa Code auch mal veröffentlichen wie du das gelöst hast?
Raspberry PI3 mit allem möglichen.

ChrisW

@ Zrrronggg!

Vielen Dank das du dir das nochmal genauer angeschaut hast. Ich glaube das war die Lösung :)
Jetzt nach 2-3 Stunden noch keine unnötiges On / Off schalten.
Wenn es morgen noch so läuft werde ich alles mal hier in der Code Sammlung Posten.
Raspberry PI3 mit allem möglichen.