UBus: Unterschied zwischen den Versionen
(Example: network.device status) |
(→network: network.interface.<name> status) |
||
Zeile 81: | Zeile 81: | ||
Hier werden zuerst mit <code>FHEM::UBUS_CALL::DefaultReadings($RAW)</code> die Standard-Readings erzeugt. Jedes Reading, das _statistics_ enthält, wird dann durch zwei andere Readings ersetzt, eines für den Gesamtwert, eines für die Änderung seit dem letzten Aufruf. | Hier werden zuerst mit <code>FHEM::UBUS_CALL::DefaultReadings($RAW)</code> die Standard-Readings erzeugt. Jedes Reading, das _statistics_ enthält, wird dann durch zwei andere Readings ersetzt, eines für den Gesamtwert, eines für die Änderung seit dem letzten Aufruf. | ||
==== network.interface.<name> status ==== | |||
Um z.B. den Status des Interface <code>lan</code> abzufragen, dient der Aufruf | |||
define <name> UBUS_CALL network.interface.lan status | |||
Es können auch mehrere Interfaces abgefragt werden: | |||
define <name> UBUS_CALL network.interface.lan,network.interface.wan status | |||
Damit bei dieser Form der Abfrage die Readings von den verschiedenen Interfaces nicht gegenseitig überschrieben werden, bietet es sich an, den Namen des Interface als Präfix zu übergeben. Das Attribut <code>readings</code> sähe dann wie folgt aus: | |||
attr <name> readings {\ | |||
my $p = $MODULE =~ s/network.interface.//r;;\ | |||
return FHEM::UBUS_CALL::DefaultReadings($RAW, $p . '_');;\ | |||
} |
Version vom 19. Februar 2022, 15:37 Uhr
An dieser Seite wird momentan noch gearbeitet. |
Die Module UBUS_CLIENT und UBUS_CALL dienen der Kommunikation mit Geräten, die über eine uBus-Schnittstelle verfügen. Mittels UBUS_CLIENT wird die Verbindung zu einem solchen Gerät hergestellt. Über UBUS_CALL wird ein Funktionsaufruf (bzw. eine Reihe von Funktionsaufrufen) an das Gerät gesendet und die Antwort in Readings ausgewertet.
UBUS_CLIENT - Modul zur Kommunikation mit uBus
UBUS_CLIENT | |
---|---|
Zweck / Funktion | |
Einbinden von Geräten, die über die uBus Schnittstelle kommunizieren | |
Allgemein | |
Typ | Gerätemodul |
Details | |
Dokumentation | EN / DE |
Support (Forum) | Sonstige Systeme |
Modulname | 72_UBUS_CLIENT.pm |
Ersteller | xenos1984 (Forum / Wiki) |
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref! |
Je nach Gerät kann die uBus-Schnittstelle über Websocket oder über HTTP freigegeben sein.
Kommunikation über Websocket
Beispiel:
define <name> UBUS_CLIENT ws://192.168.1.1
Kommunikation über HTTP
Beispiel:
define <name> UBUS_CLIENT http://192.168.1.1/ubus
UBUS_CALL - Modul zur Ausführung von uBus-Anfragen
UBUS_CALL | |
---|---|
Zweck / Funktion | |
Senden von "call" Anfragen an Geräte, die über die uBus Schnittstelle kommunizieren | |
Allgemein | |
Typ | Gerätemodul |
Details | |
Dokumentation | EN / DE |
Support (Forum) | Sonstige Systeme |
Modulname | 72_UBUS_CALL.pm |
Ersteller | xenos1984 (Forum / Wiki) |
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref! |
Die folgenden Beispiele basieren auf der OpenWRT Dokumentation. Je nach Gerät können andere Funktionsaufrufe implementiert sein. Welche dies sind, zeigen die Readings des UBUS_CLIENT.
network
Siehe network Referenz.
network.device status
Mittels
define <name> UBUS_CALL network.device status
wird der Status aller vorhandenen Netzwerk-Schnittstellen zurückgegeben. Soll nur eine Schnittstelle abgefragt werden, kann der Parameter name
übergeben werden:
define <name> UBUS_CALL network.device status name=eth0
Es können auch mehrere Namen angegeben werden:
define <name> UBUS_CALL network.device status name=eth0,eth1
In diesem Fall wird für jede Schnittstelle eine Abfrage durchgeführt. Alternativ kann eine Perl-Funktion benutzt werden:
define <name> UBUS_CALL network.device status name={GetNetworkNames()}
Hierfür sollte die Funktion (im Beispiel GetNetworkNames()
) z.B. in der 99_myUtils.pm definiert sein.
Wenn das angesprochene Gerät eine Reihe von *_statistics_* Readings zurückgibt, die angeben, wie viele Bytes über eine Schnittstelle übertragen wurde etc., kann es hilfreich sein, dies in eine Anzahl Bytes seit dem letzten Aufruf umzurechnen. Das kann mit einer eigenen Funktion im Attribut readings
erreicht werden:
attr <name> readings {\ my $r = FHEM::UBUS_CALL::DefaultReadings($RAW);;\ foreach my $k (grep(/_statistics_/, keys %{$r}))\ {\ my $kt = $k . '_total';;\ my $kr = $k . '_rate';;\ my $d = $r->{$k} - ReadingsNum($NAME, $kt, 0);;\ my $t = ReadingsAge($NAME, $kt, 1);;\ $r->{$kt} = $r->{$k};;\ $r->{$kr} = $d / $t;;\ delete $r->{$k};;\ }\ $r\ }
Hier werden zuerst mit FHEM::UBUS_CALL::DefaultReadings($RAW)
die Standard-Readings erzeugt. Jedes Reading, das _statistics_ enthält, wird dann durch zwei andere Readings ersetzt, eines für den Gesamtwert, eines für die Änderung seit dem letzten Aufruf.
network.interface.<name> status
Um z.B. den Status des Interface lan
abzufragen, dient der Aufruf
define <name> UBUS_CALL network.interface.lan status
Es können auch mehrere Interfaces abgefragt werden:
define <name> UBUS_CALL network.interface.lan,network.interface.wan status
Damit bei dieser Form der Abfrage die Readings von den verschiedenen Interfaces nicht gegenseitig überschrieben werden, bietet es sich an, den Namen des Interface als Präfix zu übergeben. Das Attribut readings
sähe dann wie folgt aus:
attr <name> readings {\ my $p = $MODULE =~ s/network.interface.//r;;\ return FHEM::UBUS_CALL::DefaultReadings($RAW, $p . '_');;\ }