Hallo,
ich habe einen HD Receiver 400 der Telekom und ein einen Speedport W724 V. Beide Geräte bieten leider keine Möglichkeit eine Feste IP zu vergeben.
Trotzdem möchte ich die Verfügbarkeit des HD Receivers in FHEM haben.
Presence bietet die Möglichkeit eine IP abzufragen. Da die IP des Receivers sich ändern kann, ist das keine wirklich schöne Lösung. Kann Presence MAC Adressen ohne Bluetooth abfragen? FHEM läuft auf einem Intel NUC mit ESXi.
nmap habe ich bereits eingerichtet. Kann ich mir von dort die IP holen und in Presence schreiben?
192.168.178.107_macAddress AC:6F:2F:2E:62:C6
Gruß
TWART016
Das hier aus dem Modul Nmap hilft dir nicht?
ZitatIf a device with a known MAC address has been given a new IP, an event "<name> new IP: <hostname> (<IPv4>)" is generated.
Ich benötige eine Anfrage: Ist das Gerät online/offline (present/absent, ...) Wie soll das mit dem nmap Modul funtkionieren?
Nur die MAC Adresse und der Name bleibt gleich.
Kannst du nicht mit FHQN / FDQN anstelle der IP arbeiten? Oder gibt es das auch nicht?
Das Gerät hat keinen Hostnamen. Was ist ein FHQN?
Zitat von: TWART016 am 01 November 2017, 14:28:08
Ich benötige eine Anfrage: Ist das Gerät online/offline (present/absent, ...) Wie soll das mit dem nmap Modul funtkionieren?
Nur die MAC Adresse und der Name bleibt gleich.
Das Nmap Event sagt dir die IP. Diese verwendest du um per modify dein present Device zu verändern. Das wäre eine Antwort auf deine Frage. Es gibt natürlich andere Möglichkeiten.
Zitat von: TWART016 am 01 November 2017, 14:35:48
Das Gerät hat keinen Hostnamen. Was ist ein FHQN?
War mir nicht mehr sicher, ob es FHQN oder FDQN heißt :) K, wenn das doofe Speedport das auch nicht kann, dann halt die Lösung von Marvin.
Oder PRESENCE im Modus function/shellscript/event. Es gibt viele Wege.
Bei mir im nmap steht kein new IP oder new host. Ist das ein eigenes Reading?
PS FQDN = Fully Qualified Domain Name
Was an
Zitat
If a device with a known MAC address has been given a new IP, an event "<name> new IP: <hostname> (<IPv4>)" is generated.
verstehst du nicht?
Ich habe testweise die IP's eines Gerätes geändert. Im Event Monitor stehen u.a. ich die Zeilen:
2017-11-01 16:26:49 Nmap Nmap new IP: 192.168.178.143 (192.168.178.143)
2017-11-01 16:26:49 Nmap Nmap 192.168.178.143_alias: 192.168.178.143
2017-11-01 16:26:49 Nmap Nmap 192.168.178.143_hostname: 192.168.178.143
2017-11-01 16:26:49 Nmap Nmap 192.168.178.143_ip: 192.168.178.143
2017-11-01 16:26:49 Nmap Nmap 192.168.178.143_lastSeen: 2017-11-01 16:26:49
2017-11-01 16:26:49 Nmap Nmap 192.168.178.143_macAddress: A0:D7:95:D8:43:98
2017-11-01 16:26:49 Nmap Nmap 192.168.178.143_state: present
2017-11-01 16:26:49 Nmap Nmap 192.168.178.143_uptime: 0
2017-11-01 16:26:49 Nmap Nmap 192.168.178.143_uptimeText: 0 days, 00 hours, 00 minutes, 00 seconds
Wie kann ich jedoch daraus ein eine Abfrage bauen, damit ich das weiß, ob das Gerät present oder absent ist? Das einzige feste ist die MAC Adresse?
Hab ich schon geschrieben. Die IP in das PRESENCE device per modify. Bitte ein wenig denken. Die Idee hattest du im ersten Post selbst. Die Mac steht im nmap-device
Wie bekomme ich nur die IP aus der Zeile?
Und wie muss ich das notify bauen, damit die Änderung in Presence geschrieben werden kann?
Ich kann zwar mit der Zeile ein notify machen, dort steht aber nichts von der MAC drinnen.
2017-11-01 16:26:49 Nmap Nmap new IP: 192.168.178.143 (192.168.178.143)
Per notify auf regex mit New IP reagieren und dann das reading mit der Mac auswerten (ReadingsVal). Ggf. Grundlagen anschauen.
Das Event New IP kann alle möglichen Geräte beinhalten. Wie bekomme ich mein gewünschtes Gerät mit der MAC heraus? Dieser Eintrag steht einige Zeilen darunter oder drüber.
 ::) in dem du im notity das entsprechende reading auswertest welches die ip aus dem Event enthält. Das sollte ja dann vorhanden sein.
Wie kann ich ein Readingsval im modify setzen? Wie muss die Syntax aussehen?
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.
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
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.
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.
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 ???")}}
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...
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.
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...
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.
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.