Autor Thema: Erweiterung des PRESENCE Moduls um OpenWRT Abfrage  (Gelesen 4123 mal)

JanLo

  • Gast
Erweiterung des PRESENCE Moduls um OpenWRT Abfrage
« am: 09 Februar 2015, 00:07:18 »
OpenWRT nutzt den hostapd als Authenticator. Dieser hat im OpenWRT ein ubus Interface. Ubus ist der OpenWRT-System-RPC. Darüber kann man mit einer Methode get_clients() die authentifizierten Wlan-Clients abfragen.

Dies scheint auch zuverlässig bei mobilen Geräten im Standby zu funktionieren, da sich diese vor dem Standby nicht deauthentifizieren.

Wenn FHEM firekt auf einem OpenWRT-Router läuft kann somit via
# ubus call hostapd.wlan0 get_clientseine Json-formatierte Ausgabe erzeugt werden, welche die verbundenen Clients listet.

Interessanter ist aber, dass mit http://wiki.openwrt.org/doc/techref/ubus#access_to_ubus_over_http das ubus-Interface auch per HTTP bedienbar ist. Hierfür habe ich in Python einen Proof-of-Concept zusammengebaut: https://github.com/janLo/OpenWRT-Wifi-Clients-POC

Leider ist Perl nicht meine Stärke. Daher "wünsche" ich mir, das jemand, der diese Lösung auch für nützlich empfindet, das PRESENCE-Modul um die OpenWRT-Abfrage erweitert.

Offline Mr. P

  • Tester
  • Sr. Member
  • ****
  • Beiträge: 981
Antw:Erweiterung des PRESENCE Moduls um OpenWRT Abfrage
« Antwort #1 am: 24 Mai 2015, 13:08:11 »
Hej JanLo,

ich bin gerade über deinen schon etwas älteren Beitrag gestolpert und da ich seit Ewigkeiten schon diese Möglichkeit verwende, wollte ich dich fragen, ob du für dich schon eine Lösung gefunden hast oder noch immer daran interessiert bist.
Ich bin damals allerdings genau den anderen Weg gegangen... Ich wollte FHEM möglichst nicht damit belasten und schaue daher immer alle paar Sekunden am OpenWRT-Router selbst nach, ob eine der gewünschten MAC-Adressen dazu gekommen oder verschwunden ist und triggere dann über eine telnet-Session an meinen Raspberry mit FHEM drauf, dass sich der Zustand von x geändert hat.
Hatte das alles schon vor den ganzen "neuen" Modulen implementiert gehabt, da aber eigentlich auch nur ein dummy-Device angesprochen wird, könnte man das genauso 1:1 nutzen. ;-)
Greetz,
   Mr. P

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 17761
Antw:Erweiterung des PRESENCE Moduls um OpenWRT Abfrage
« Antwort #2 am: 24 Mai 2015, 14:16:23 »
oder man nimmt die function variante von PRESENCE. da kann man beliebigen eigenen code verwenden.
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline Mr. P

  • Tester
  • Sr. Member
  • ****
  • Beiträge: 981
Antw:Erweiterung des PRESENCE Moduls um OpenWRT Abfrage
« Antwort #3 am: 24 Mai 2015, 14:22:48 »
Hast du grundsätzlich recht. Bedeutet aber auch, dass es wieder von FHEM ausgehen muss. Ich kenne den Code dahinter nicht, aber die Erfahrung hat gezeigt, dass div. Module gerne die Eigenheit haben, schnell einmal in FHEM einen unschönen Delay zu "erzeugen" - vorallem wenn Netzwerk/Internet ins Spiel kommt.
Deswegen habe ich mich für ein Push anstelle von einem Pull an der Stelle entschieden. ;-)
Greetz,
   Mr. P

Offline Markus Bloch

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 3481
Antw:Erweiterung des PRESENCE Moduls um OpenWRT Abfrage
« Antwort #4 am: 27 Mai 2015, 18:56:33 »
PRESENCE führt alle Prüfungen non-blocking aus. Du kannst in deiner eigenen Funktion oder Shellskript das Timing also vernachlässigen. Nach 90 Sekunden wird allerdings hart abgebrochen.
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Offline Gizmoh

  • Jr. Member
  • **
  • Beiträge: 60
Antw:Erweiterung des PRESENCE Moduls um OpenWRT Abfrage
« Antwort #5 am: 31 August 2015, 10:51:08 »
Hat das evtl jemand schon eingebunden oder mal als Function in presence umgesetzt?

Danke :-)

Offline timtom

  • Full Member
  • ***
  • Beiträge: 173
Antw:Erweiterung des PRESENCE Moduls um OpenWRT Abfrage
« Antwort #6 am: 26 Oktober 2015, 14:22:54 »
Hallo zusammen,

vor Kurzem habe ich mich doch dazu entschieden FHEM zu nutzen und habe die letzten Wochen mehr Zeit im Forum und Wiki verbracht, also sonst wo ;) Damit möchte ich auch noch einmal allen aktiven Helfern hier im Forum danken.

Die Pflicht (überwiegend HM Thermostate) läuft schon mal bei mir. Jetzt geht es an die "Kür". Zunächst möchte ich den Ablauf gerne über einen Zentralen "Home Status" verbessern. Da ich zunächst auf einen Hardwarebutton verzichten möchte, möchte ich mich hier an den Thread anhängen.

Wie bereits erwähnt, wurde der Zugriff über PRESENCE an den openWRT Router angesprochen (1). Alternativ habe ich überlegt, bestimmten Geräten in OpenWRT eine feste IP zuzuweisen und dann PRESENCE-Abfrage über lan-ping durchzuführen (2).
Auch wenn mir zu (1) leider die Kenntnisse fehlen, was wären den die Vor- bzw. Nachteile der beiden Möglichkeiten? Gibt es für (1) irgendwo ein Beispiel?

Danke schon mal
der Tim

Offline Mr. P

  • Tester
  • Sr. Member
  • ****
  • Beiträge: 981
Antw:Erweiterung des PRESENCE Moduls um OpenWRT Abfrage
« Antwort #7 am: 26 Oktober 2015, 14:58:20 »
Hej Tim,

also im grossen und ganzen würde ich sagen: es ist Geschmackssache.
Ich persönlich hab damals auf OpenWRT gesetzt, weil es flexibler war und ich nicht alles direkt in FHEM machen wollte. Außerdem kann man die Werte aus OpenWRT auch im PRESENCE-Modul eintragen.
Solltest du dich für die OpenWRT-Variante entscheiden, kann ich dir die notwendigen Scripte und entsprechende Hilfestellung gerne zukommen lassen bzw. bin auch für entsprechende Wünsche und Erweiterungen zu haben. ;-)
Greetz,
   Mr. P

Offline timtom

  • Full Member
  • ***
  • Beiträge: 173
Antw:Erweiterung des PRESENCE Moduls um OpenWRT Abfrage
« Antwort #8 am: 26 Oktober 2015, 17:52:30 »
Hey P.

da doch die Feste-IP-Ping-Variante von vielen Leuten genutzt wird und ich möchglichst wenige Baustellen aufmachen möchte, probier ich das erst einmal aus. Ich hoffe nur, dass die Handys nicht durch jeden Ping aus dem Deep Sleep aufgeweckt werden. Daher wäre es cool, wenn du mir auch deine Infos zur OpenWRT Variante schicken könntest.

der Tim

Offline sf.fhem

  • New Member
  • *
  • Beiträge: 3
Antw:Erweiterung des PRESENCE Moduls um OpenWRT Abfrage
« Antwort #9 am: 28 Juni 2018, 23:30:31 »
Hallo,

zur Vollständigkeit eine kompakter Guide für die Einrichtung vom OpenWRT und dem Script "wifi_clients.py".

OpenWRT

1.) Pakete installieren

# opkg update
(..)
# opkg install luci-mod-rpc rpcd-mod-file
(..)
#

2.) den User "fhem" für den 'rpcd' einrichten

/etc/config/rpcd:
[..]
config login
option username 'fhem'
        #
        # '$p$<username> => reference to user passowrd on /etc/shadow
        # '$1$<hash>' => crypt() hash, using SHA1. generate via 'uhttpd -m fhem'
        #
        # password: fhem
        #
option password '$1$$xEODf2fNSQ0ArfkJu4L2i1'
list read 'fhem_acl'
list write ''


3.) ACL für den User "fhem" definieren

/usr/share/rpcd/acl.d/fhem.json:
{
        "fhem_acl": {
                "description": "Super user access role",
                "read": {
                        "ubus": {
                                "hostapd.wlan0": [ "get_clients" ],
                                "hostapd.wlan1": [ "get_clients" ]
                        }
                }
        }
}

4.) 'rpcd' config übernehmen

# uci commit rpcd


5.) 'wifi_clients.py' => https://github.com/janLo/OpenWRT-Wifi-Clients-POC

Das Script benötigt "python2" und muss noch angepasst werden.

--- wifi_clients.py.orig 2018-06-28 23:23:40.216987147 +0200
+++ wifi_clients.py 2018-06-28 23:25:12.857047734 +0200
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python2
 
 import urllib2
 import json
@@ -36,7 +36,7 @@
             response = json.load(stream)
 
         if not response or "error" in response:
-            raise str(response)
+            raise Exception(str(response))
 
         return response["result"][1]

Das Script ausführen..

$ python2 wifi_clients.py 192.168.1.71 fhem fhem wlan0 wlan1
c8:f6:50:e1:a9:10, 2c:f0:a2:e2:c0:15, 8c:a9:82:f1:9c:2a, 7c:c3:a1:b8:d2:1e, 64:9a:be:6a:6c:13, 00:1d:63:a3:8f:4a
$
« Letzte Änderung: 28 Juni 2018, 23:32:52 von sf.fhem »

 

decade-submarginal