[gelöst] prüfen ob ein Gerät online ist

Begonnen von TWART016, 01 November 2017, 13:58:51

Vorheriges Thema - Nächstes Thema

marvin78

::) in dem du im notity das entsprechende reading auswertest welches die ip aus dem Event enthält. Das sollte ja dann vorhanden sein.

TWART016

Wie kann ich ein Readingsval im modify setzen? Wie muss die Syntax aussehen?

marvin78

Bitte FHEM Grundlagen lernen und die hier in großer Zahl genannten Stichworte für die Suche in Doku und Forum verwenden. Das ist alles kein Hexenwerk, erfordert nur Grundlagenwissen und fertige Lösungen bekommst du von mir nicht. 

automatisierer

es gibt 1000 Möglichkeiten!

nmap selber hat schon ein present/absent Reading
2017-11-01 22:21:55.948 Nmap nmap F0-9F-C2-D6-42-B8_state: present

dann kannst du das Attribut <metaReading> auf <macAddress> stellen, dann hast du die MacAdresse schon im Event stehen und kannst die im Notify direkt nutzen:
2017-11-01 22:21:55.948 Nmap nmap 00-1A-22-05-2B-E5_ip: 192.168.170.186


TWART016

#19
Zitat von: marvin78 am 01 November 2017, 22:04:31
Bitte FHEM Grundlagen lernen und die hier in großer Zahl genannten Stichworte für die Suche in Doku und Forum verwenden. Das ist alles kein Hexenwerk, erfordert nur Grundlagenwissen und fertige Lösungen bekommst du von mir nicht.
Ist kenne Readingsval. Nur wird das ist dem modify nicht aufgelöst.
modify Media_Receiver_ping lan-ping {(ReadingsVal("Nmap","192.168.178.143_hostname",""))}


Zitat von: automatisierer am 01 November 2017, 22:34:14
nmap selber hat schon ein present/absent Reading
2017-11-01 22:21:55.948 Nmap nmap F0-9F-C2-D6-42-B8_state: present

dann kannst du das Attribut <metaReading> auf <macAddress> stellen, dann hast du die MacAdresse schon im Event stehen und kannst die im Notify direkt nutzen:
2017-11-01 22:21:55.948 Nmap nmap 00-1A-22-05-2B-E5_ip: 192.168.170.186
Das stimmt, jedoch hätte ich gerne grundsätzlich die IP's un nicht MAC Adressen.

automatisierer

#20
Zitat von: TWART016 am 01 November 2017, 22:45:04
Das stimmt, jedoch hätte ich gerne grundsätzlich die IP's un nicht MAC Adressen.
Dann kauf dir doch gescheite Hardware!

EDIT:
Du machst es dir arg einfach! Du hast nen haufen Tips bekommen. Aber offensichtlich bist du nicht in der Lage, die einfachsten Dinge umzusetzen.

Mir ist klar, dass du nicht die MAC haben willst, aber hinter der MAC steht die IP!! Die wolltest du doch zum anpingen haben.
Wobei sich mir der Sinn auch nicht erschließt, da du - wie schon geschrieben - von nmap direkt zu der MAC auch noch den status (present / absent) geliefert bekommst.

TWART016

Ich hatte mich Stunden schon um das Problem gekümmert. Leider wird mir aber nich geglaubt. Jetzt bin ich soweit, dass nur noch das modify fehlt.

Alle möglichen Varianten habe ich probiert. Jedoch wird das Readingsval im Define nie angenommen. Also nochmal die Frage. Wie muss die Syntax in dem define aussehen bzw. mit welchem Befehl kann ich das per modify ändern?

Nmap_MAC:new.IP:.* {if(ReadingsVal("Nmap_MAC","A0-D7-95-E9-22-22_ip","") ne ReadingsVal("Media_Receiver_ping","IP","")) {fhem ("modify Media_Receiver_ping lan-ping ???")}}

automatisierer

#22
EDIT: musste den Code nochmal nachbessern...

define TEST_MAC notify nmap:A0-D7-95-E9-22-22_ip.* defmod Media_Receiver_ping PRESENCE lan-ping $EVTPART1

so in etwa...

bei Nmap solltest du <event-on-change-reading .*> einstellen, damit das Notify nicht bei jedem Update läuft...


TWART016

#23
Danke automatisierer. Habe es nun hinbekommen. Habe aber noch ein paar Abfragen eingebaut.

sleep 1 ist wichtig, da wohl das Reading im Moment des Events noch nicht gesetzt ist.

define HD_Receiver_IP_aendern notify Nmap_MAC:new.IP:.* sleep 1;;{if ("$EVTPART2" eq ReadingsVal("Nmap_MAC","AC-6F-BB-2E-41-C6_ip","") && ReadingsVal("Nmap_MAC","AC-6F-BB-2E-41-C6_ip","") ne ReadingsVal("Media_Receiver_ping","IP","")) {fhem ("defmod Media_Receiver_ping PRESENCE lan-ping $EVTPART2")} }

Da ist das Device nur für diesen Zweck benötige, habe ich event-on-change-reading nur darauf gesetzt: AC-6F-BB-2E-41-C6.*

Edit: und defmod kannte ich auch noch nicht.

automatisierer

Zitat von: TWART016 am 02 November 2017, 18:27:10
Danke automatisierer. Habe es nun hinbekommen. Habe aber noch ein paar Abfragen eingebaut.

sleep 1 ist wichtig, da wohl das Reading im Moment des Events noch nicht gesetzt ist.

define HD_Receiver_IP_aendern notify Nmap_MAC:new.IP:.* sleep 1;;{if ("$EVTPART2" eq ReadingsVal("Nmap_MAC","AC-6F-BB-2E-41-C6_ip","") && ReadingsVal("Nmap_MAC","AC-6F-BB-2E-41-C6_ip","") ne ReadingsVal("Media_Receiver_ping","IP","")) {fhem ("defmod Media_Receiver_ping PRESENCE lan-ping $EVTPART2")} }

Da ist das Device nur für diesen Zweck benötige, habe ich event-on-change-reading nur darauf gesetzt: AC-6F-BB-2E-41-C6.*

Edit: und defmod kannte ich auch noch nicht.

Dein Gebilde ist so kompliziert... Hammer! Warum einfach, wenns auch kompliziert geht... Naja, Hauptsache es funktioniert... Hattest du meinen Vorschlag mal ausprobiert?

Das mit dem event-on-change-reading solltest du dir noch mal angucken...
Dein Notify soll auf "new.IP:.*" triggern und lässt nur Events mit "AC-6F-BB-2E-41-C6.*" zu. Da sollte das Notify nach meinem Empfinden eigentlich nie getriggert werden...

defmod musst du immer dann nehmen, wenn du ein Device verändern willst - neu erstellen geht damit auch, define geht nicht wenn ein Device schon existiert...

TWART016

Ich dachte es auch, es gibt nur Events von dem Gerät. Jedoch wurden zusätlich die New IP Einträge im Log angezeigt. Deshalb gibt es die erste Abfrage, die erstmal prüft, ob es das gewünschte Gerät betrifft. Die zweite Abfrage ist dafür da, dass nur defmod gesetzt wird, wenn sich die IP geändert hat.

Bei jedem StatusRequest des Nmap Modults werden zwei Einträge mit New IP angezeigt Jeweils ein Raspberry Pi. Keine Ahnung warum.

Deinen Code habe ich nicht probiert.

automatisierer

das notify von mir, triggert direkt nur auf die MAC Adresse von dem einen Gerät, somit ist die Prüfung, ob es sich um das richtige Gerät handelt schon mal überflüssig. Wenn du dann noch event-on-change-reading stetzt, kommt dieses Event nur dann, wenn sich die IP Adresse tatsächlich geändert hat und nicht bei jedem update, also ist deine zweite Prüfung auch überflüssig...

die "new IP" und "new Host" Events sind vom event-on-change-reading tatsächlich nicht betroffen, ist auch irgendwie logisch, da es sich dabei ja nicht um Readings handelt...

nochmal, so sieht das Event aus:
2017-11-02 23:24:26.869 Nmap nmap 00-22-61-D0-62-68_ip: 192.168.171.173
da kannst du mit regex direkt auf die MAC Adresse filtern die dein Gerät hat und die IP die du gerne haben willst steht auch schon mit drin. Das ganze erscheint dank event-on-change-reading auch nur dann, wenn es tatsächlich eine Änderung gegeben hat.


Ist ja prinzipiell auch schnuppe, hauptsache es läuft.