UBus

Aus FHEMWiki


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.

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