UBus: Unterschied zwischen den Versionen

Aus FHEMWiki
(Extended documentation)
(Example: network.device status)
Zeile 37: Zeile 37:
|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.
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.

Version vom 19. Februar 2022, 15:10 Uhr


Clock - Under Construction.svg 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.