UBus: Unterschied zwischen den Versionen
(Created page (to be filled with examples)) |
(→UBUS_CALL - Modul zur Ausführung von uBus-Anfragen: system added) |
||
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{Baustelle}} | {{Baustelle}} | ||
Die Module UBUS_CLIENT und UBUS_CALL dienen der Kommunikation mit Geräten, die über eine [http://openwrt.org/docs/techref/ubus 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 == | |||
{{Infobox Modul | {{Infobox Modul | ||
Zeile 8: | Zeile 12: | ||
|ModTechName=72_UBUS_CLIENT.pm | |ModTechName=72_UBUS_CLIENT.pm | ||
|ModOwner=xenos1984 ({{Link2FU|43783|Forum}} / [[Benutzer Diskussion:Xenos1984|Wiki]])}} | |ModOwner=xenos1984 ({{Link2FU|43783|Forum}} / [[Benutzer Diskussion:Xenos1984|Wiki]])}} | ||
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 == | |||
{{Infobox Modul | {{Infobox Modul | ||
Zeile 16: | Zeile 36: | ||
|ModTechName=72_UBUS_CALL.pm | |ModTechName=72_UBUS_CALL.pm | ||
|ModOwner=xenos1984 ({{Link2FU|43783|Forum}} / [[Benutzer Diskussion:Xenos1984|Wiki]])}} | |ModOwner=xenos1984 ({{Link2FU|43783|Forum}} / [[Benutzer Diskussion:Xenos1984|Wiki]])}} | ||
Die folgenden Beispiele basieren auf der [http://openwrt.org/docs/guide-developer/ubus OpenWRT Dokumentation]. '''Je nach Gerät können andere Funktionsaufrufe implementiert sein.''' Welche dies sind, zeigen die Readings des UBUS_CLIENT. | |||
=== network === | |||
Siehe [http://openwrt.org/docs/guide-developer/ubus/network 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 <code>name</code> ü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 <code>GetNetworkNames()</code>) 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 <code>readings</code> 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 <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 . '_');;\ | |||
} | |||
=== system === | |||
Siehe [http://openwrt.org/docs/guide-developer/ubus/system system] Referenz. | |||
==== system board ==== | |||
Informationen zur verwendeten Hardware können über | |||
define <name> UBUS_CALL system board | |||
abgefragt werden. Da sich die Hardware im laufenden Betrieb üblicherweise nicht ändert, kann man außerdem | |||
attr <name> interval 0 | |||
setzen, damit die Informationen nur beim Neustart oder <code>update</code> aufgerufen werden. | |||
==== system info ==== | |||
Liefert allgemeine Systeminformationen, z.B. aktuelle Speichernutzung: | |||
define <name> UBUS_CALL system info |
Aktuelle Version vom 19. Februar 2022, 15:51 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 . '_');;\ }
system
Siehe system Referenz.
system board
Informationen zur verwendeten Hardware können über
define <name> UBUS_CALL system board
abgefragt werden. Da sich die Hardware im laufenden Betrieb üblicherweise nicht ändert, kann man außerdem
attr <name> interval 0
setzen, damit die Informationen nur beim Neustart oder update
aufgerufen werden.
system info
Liefert allgemeine Systeminformationen, z.B. aktuelle Speichernutzung:
define <name> UBUS_CALL system info