Auf der Kommandozeile einen ioBroker Adapter debuggen

eingetragen in: ioBroker 0

Es kommt vor dass ein Adapter Probleme bereitet. Meistens findet man Hinweise auf die Ursache im Logfile der ioBroker Admin Oberfläche. Manchmal ist das aber nicht ausreichend bzw. man findet keinen Anhaltspunkt für einen Fehler. Dann hilft es den Adapter unter Instanzen in den Debug Modus zu versetzen und nochmals ins Logfile zu schauen. Hilft das auch nicht weiter, ist es ratsam den Adapter in einem Terminalfenster im Debug Modus zu starten. Hier erhält man noch weitreichendere Informationen die bei der Fehlerfindung helfen.

Hierfür ist die Instanz des fehlerhaften Adapters in ioBroker zu deaktivieren. Anschließend öffnet man ein Terminalfenster und wechselt in das Verzeichnis des Adapters. Suche in dem Adapterverzeichnis nach der Datei index.js . Falls es diese nicht gibt, wird es eine Datei mit Namen des Adapter mit der Endung .js geben. Zum Beispiel ist der Dateiname für den Shelly Adapter shelly.js

cd /opt/iobroker/node_modules/iobroker.<adataper_name>
node index.js|<adapter_name>.js <instanz> --debug

Ein Beispiel für den Shelly Adapter der unter der Instanz 0 läuft. Denke daran die Shelly Instanz 0 in ioBroker vorher zu deaktivieren.

cd /opt/iobroker/node_modules/iobroker.shelly
node shelly.js 0 --debug

Die Ausgabe sieht dann folgendermaßen aus:

macbook:iobroker.shelly thorsten.stueben$ node shelly.js 0 --debug
2020-06-29 07:56:07.521  - debug: shelly.0 (22068) Redis Objects: Use Redis connection: 127.0.0.1:9001
2020-06-29 07:56:07.535  - debug: shelly.0 (22068) Objects client ready ... initialize now
2020-06-29 07:56:07.538  - debug: shelly.0 (22068) Objects create System PubSub Client
2020-06-29 07:56:07.538  - debug: shelly.0 (22068) Objects create User PubSub Client
2020-06-29 07:56:07.539  - debug: shelly.0 (22068) Objects client initialize lua scripts
2020-06-29 07:56:07.544  - debug: shelly.0 (22068) Objects connected to redis: 127.0.0.1:9001
2020-06-29 07:56:07.547  - debug: shelly.0 (22068) objectDB connected
2020-06-29 07:56:07.548  - debug: shelly.0 (22068) Redis States: Use Redis connection: 127.0.0.1:9000
2020-06-29 07:56:07.556  - debug: shelly.0 (22068) States create User PubSub Client
2020-06-29 07:56:07.557  - debug: shelly.0 (22068) States create System PubSub Client
2020-06-29 07:56:07.564  - debug: shelly.0 (22068) States connected to redis: 127.0.0.1:9000
2020-06-29 07:56:07.567  - debug: shelly.0 (22068) statesDB connected
2020-06-29 07:56:07.692  - debug: shelly.0 (22068) Plugin sentry Initialize Plugin (enabled=true)
2020-06-29 07:56:07.779  - error: shelly.0 (22068) adapter disabled
2020-06-29 07:56:07.834  - info: shelly.0 (22068) starting. Version 3.3.4 in /usr/local/iobroker/node_modules/iobroker.shelly, node: v12.16.3, js-controller: 3.1.6
2020-06-29 07:56:07.849  - error: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
2020-06-29 07:56:07.850  - error: shelly.0 (22068) unhandled promise rejection: adapter.log.ianfo is not a function
2020-06-29 07:56:07.855  - error: shelly.0 (22068) TypeError: adapter.log.ianfo is not a function
    at Adapter.<anonymous> (/usr/local/iobroker/iobroker.shelly/shelly.js:89:17)
    at Adapter.emit (events.js:310:20)
    at Adapter.EventEmitter.emit (domain.js:482:12)
    at /usr/local/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:8148:34
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
2020-06-29 07:56:07.856  - info: shelly.0 (22068) Closing Adapter
This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason:
TypeError: adapter.log.ianfo is not a function
    at Adapter.<anonymous> (/usr/local/iobroker/iobroker.shelly/shelly.js:89:17)
    at Adapter.emit (events.js:310:20)
    at Adapter.EventEmitter.emit (domain.js:482:12)
    at /usr/local/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:8148:34
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
2020-06-29 07:56:07.940  - info: shelly.0 (22068) terminating
2020-06-29 07:56:07.941  - debug: shelly.0 (22068) Plugin sentry destroyed
2020-06-29 07:56:07.941  - info: shelly.0 (22068) Terminated (NO_ERROR): Without reason

ioBroker Adapter per GitHub laden

eingetragen in: Allgemein, ioBroker 2

Möchtest Du einen Adapter per GitHub laden, musst du wie folgt vorgehen. Du öffnest die ioBroker Admin Oberfläche z.B. über http://192.168.20.91:8081. Nun klickst du in der Menüleiste links auf Adapter und anschließend auf die kleine GitHub Katze oben (Installieren aus eigener URL).

Nun wählst aus der Liste den Adapter den du über GitHub laden möchtest und klickst auf installieren. In meinem Beispiel möchte ich den Shelly Adapter installieren.

Sobald die GitHub Adapter Installation abgeschlossen ist, musst Du die Adapter Instanz neu starten. Wähle dafür den Punkt Instanz im Menü aus und klicke auf „neu laden“.

Jetzt ist der Adapter per GitHub installiert

VLANs mit UniFi USG und Unifi AP, Fritzbox und Netgear Switches

eingetragen in: Allgemein, FritzBox, Synology, Unifi 18

Ziel ist es getrennte Netzwerke für die unterschiedliche Geräte zur Verfügung zu stellen. Es soll ein Netzwerk für die Familie mit Zugriff auf die Synology NAS, Drucker und untereinander geben. Dann solle es ein Gastnetz geben, welches kein Zugriff auf das Familiennetzwerk hat, aber im Internet surfen darf. Weiterhin soll es ein Smarthome Netz ohne Zugriff aufs Internet und auf die anderen Netzwerke geben. Zu aller letzt gibt es noch ein Netzwerk für Magenta TV (T-Home Eintertain). Das Netz hat Zugang zum Internet und zu keinem anderen Netz.

Jetzt kann man die 4 Netzte (Familie, Gast, Smarthome u. TV) physikalisch voneinander trennen. D.h. man benötigt für jedes Netzwerk eigene Netzwerkkomponenten wie Switches und jeweils eine eigene Verkabelung. Das ist teuer und aufwändig.
Es ist aber möglich ein physikalisches LAN durch VLANs logisch in verschiedene Netzwerke zu trennen. D.h. sehr vereinfacht dargestellt, es können verschiedene Netzwerke per VLAN über eine physikalisches Netzwerk geleitet werden. Um VLANs abzubilden sind Switches die VLAN fähig sind notwendig. Zusätzlich zu den VLAN fähigen Switches habe ich noch VLAN fähige WLAN Accesspoints und ein VLAN fähiges Security Gateway.

Mein Netzwerk soll folgendermaßen aussehen:

NetzwerkVLANWLANBeschreibung
192.168.1.0/24(VLAN 1)Managed Network für die
Netzwerkkomponenten
192.168.7.0/24VLAN 7Magenta TV
192.168.20.0/24VLAN 20AP Stueben und
AP Stueben Hotspot
Familiennetzwerk
192.168.25.0/24VLAN 25AP Stueben SmarthomeSmarthome Netzwerk
192.168.100.0/24VLAN 100AP Stueben Guest
Gästenetzwerk

Im Einsatz habe ich eine Fritzbox als Intertnetrouter (WLAN ist deaktiviert), ein Unifi Security Gateway als Firewall und um die Netze in VLANs voneinander zu trennen. Dann habe ich noch zwei Unifi WLAN Accespoints die auch VLAN unterstützen, sowie zwei VLAN fähige Netgear Switches.

Statt dem Unifi Security Gateway kann man alternativ auch die 4 LAN Anschlüsse der Fritzbox jeweils direkt mit jeweils einem Port des Netgear Switches verbinden und jedem Switch Port ein VLAN zuweisen. Die zweite Alternative wäre einen Raspberry PI für die Aufgabe eines Security GW zu verwenden.

Bei der Fritzbox Lösung oben sind gleich 4 Ports auf dem Switch belegt. Ich habe diesen Weg aber trotzdem für das Magenta TV VLAN 7 gewählt, da Magenta TV über das Unifi Security Gateway immer nach 10 Sekunden hängt.

NetzwerkkomponenteIP AdresseAufgabe
Fritzbox 7490192.168.2.1Internetrouter und VoIP Telefonie (WLAN ist deaktiviert)
Netgear GS108Ev3 – Keller192.168.1.50Manages Switches mit VLAN und IGMPv3 für IP TV (Magenta TV) im Keller
Netgear GS108Ev3 – Wohnzimmer192.168.1.51Manages Switches mit VLAN und IGMPv3 für IP TV (Magenta TV) im Wohnzimmer
Unifi AP AC LR – Wohnzimmer192.168.1.40WLAN Accesspoints mit VLAN Support im Wohnzimmer
Unifi AP AC LR – Dachboden192.168.1.41WLAN Accesspoints mit VLAN Support auf dem Dachboden
Unifi Security GW192.168.2.2 (WAN Port)
192.168.1.1
192.168.20.1
192.168.25.1
192.168.100.1
Security Gateway als Firewall und um die physikalische Netze in VLANs aufzugliedern
Unifi Controller 192.168.1.2Raspberry PI mit der Unifi Contoller Software zum managen der Unifi Geräte

Die Zielnetzwerkarchitektur wie ganz oben beschrieben grafisch dargestellt.

Nun geht es an das konfigurieren. Auf der Fritzbox 7490 ist das Netzwerk auf 192.168.2.0 mit Netmask 255.255.255.0 einzurichten. Dafür gehe auf der Fritzbox auf Heimnetzwerk -> Netzwerk -> Netzwerkeinstelleung und wähle IPv4 Adressen aus.
Wichtig, wenn Du Unifi Geräte nutzt, wähle ein Netzwerkbereich ungleich 192.168.1.0 aus. Das macht die Konfiguration sehr viel einfacher!

Als nächstes ist das Unifi Security Gateway mit der Fritzbox über den WAN Port und der LAN Port mit dem ersten Switch zu verbinden. Da auf der Fritzbox und das Unifi Security jeweils NAT aktiviert ist, findet ein doppeltes NAT statt. Wie das zu verhindern ist, kannst Du hier lesen.
Jetzt ist das Security Gateway zu konfigurieren. Dafür muss der Unifi Controller installiert sein.
Auf dem Unifi Security Gateway sind die VLANS und WLANs einzurichten. Das Unifi Security GW hat jeweils für jedes VLAN eine eigene IP Adresse (siehe Tabelle oben).
Die Konfiguration kann den Screenshots entnommen werden und ist dank des Unifi Controllers nicht weiter kompliziert.

Jetzt müssen die Netgear Switches konfiguriert werden. Dieses ist leider nicht so komfortable wie bei den Unifi Geräten. Dafür sind Switches sehr viel günstiger. Die Switches haben wie auch die anderen Netzwerkkomponenten mit Ausnahme der Fritzbox eine IP Adresse aus dem Managed Netz 192.168.1.0. Das VLAN ist unter dem Menüpunkt VLAN -> 802.1Q und Advanced zu konfigurieren. Es sind die Punkte VLAN-Konfiguration, VLAN-Mitgliedschaft und VLAN-PVID zu mit den Werten der Tabelle unten zu pflegen. In der Tabelle steht U für unttaged und T für Tagged. Für das Unifi Managed Network könnte man theoretisch auch immer Tagged für VLAN1 setzen. Mir wurde aber von einem Netzwerkadministrator geraten hier Untagged einzutragen, auch wenn es anderes ginge.

Kurze Erklärung der Unterschied zwischen Tagged und Untagged. Ein VLAN-Tag ist eine Erweiterung des Ethernet-Headers um eine VLAN-ID zur Erkennung des VLANs.
Ein Switch-Port, an dem ein nicht VLAN-fähiges Endgerät angeschlossen ist, muss ungetagged konfiguriert werden, damit keine Frames mit VLAN-Tag an das Endgerät gesendet werden. Der Switch entfernt dann vor dem Senden das Tag und versieht im Gegenzug Frames, die vom Endgerät eingehen, beim Empfang mit dem entsprechenden Tag. Der Grund für diese Konfiguration ist, dass die allermeisten Endgeräte kein VLAN unterstützen.
Ein Switch-Port, an dem ein VLAN-fähiges Endgerät angeschlossen ist, muss tagged konfiguriert werden. In meinem Fall ist das z.B. die NAS, die Switches und das Unifi Security Gateway.
Die PVID ist die VLAN-ID, die ein Port eingehenden Datenpaketen ohne VLAN-Tag (unttaged) zuweist.


Netgear Switch Keller:

PortVLAN1VLAN7VLAN20VLAN25VLAN100PVIDBeschreibung
1UTTT1Unifi Security GW
2UTTTT1Switch Wohnzimmer
3U1Unifi Conroller
4TT20NAS
5UTTT1Unifi WLAN AP Dachboden
6U7Fritzbox LAN Port 2 für Magenta TV
7U7Magenta TV 1. OG

Die nachfolgenden Screenshots zeigen die Konfiguration, der obigen Tabelle.


Netgear Switch Wohnzimmer:

PortVLAN1VLAN7VLAN20VLAN25VLAN100PVIDBeschreibung
1UTTTT1Switch Keller
2UTTT1Unifi WLAN AP Wohnzimmer
3U7Magenta TV Wohnzimmer
4U20Notebook
5U100Notebook Guest

Analog zu der Konfiguration des Keller Netgear Switches ist die Konfiguration des Wohnzimmer Switches vorzunehmen.
Jetzt ist noch für Magenta TV auf den Switches IGMP Snooping zu aktivieren und das VLAN 7 einzutragen

Mehrere VLANs mit einem Netzwerkadapter auf der Synology

eingetragen in: Allgemein, Docker, ioBroker, Synology 4

Manchmal benötigt man mehrere Netzwerke auf der Synology NAS. Bei einer Netzwerkkarte kann man dieses, wenn es die Netzwerkkomponenten wie z.B. Router und Switches zulassen mit VLANs abbilden.

Bei mir läuft auf der Synolgy NAS 216+II im Docker Container die IOT Anwendung ioBroker um meine Smarthomegeräte zu steuern. Alle Smarthomegeräte im LAN und WLAN sollen in einem extra Netzwerk ohne Zugriff auf das Heimnetzwerk und Internet sein.

Aus diesem Grund benötige ich 2 von einander getrennte Netzwerke. Eines für mein Heimnetzwerk mit Zugriff auf das Internet, Drucker, heimische PCs usw. Und ein Netzwerk für die Geräte ohne Zugriff auf die heimischen PCs und Internet. Da ich keine 2 Netzwerkanschlüsse habe, wird dieses über VLANs wie folgt abgebildet:

NetwerkVLANAufgabe
192.168.20.0/24VLAN 20Heimnetzwerk mit Zugriff auf das Internet und die heimischen PCs und mit Verbindung zum Smarthomenetzwerk (VLAN 25)
192.168.25.0/24VLAN 25Netzwerk mit den Smarthomegeräten ohne Internetzugriff und ohne Verbindung zum Homenetzwerk (VLAN 20)

Leider kann man auf der Synology NAS mit einer Netzwerkkarte genau ein VLAN über die Oberfläche einrichten. Dieses ist als erstes zu tun. Dafür in der Systemsteuerung der Punkt Netzwerk aufzurufen. Dort auf den Reiter „Netzwerk-Schnittstelle“ auswählen. Hier LAN anklicken und auf bearbeiten gehen. Jetzt das VLAN aktivieren und das VLAN eingeben.

Damit ist das VLAN 20 eingerichtet. Vergesse vorher nicht den Port der NAS an dem Switch auf VLAN 20 tagged zu stellen. Sonst kannst Du die Synology NAS nicht mehr erreichen.

Nun musst Du Dich per ssh oder telnet auf der Synology NAS anmelden. Wechsele in das Verzeichnis /etc/sysconfig/network-scripts und kopiere die Konfiguration des VLAN 20 welches Du über die Synology Oberfläche angelegt hast für das VLAN 25.

cd /etc/sysconfig/network-scripts
sudo cp ifcfg-eth0.20 ifcfg-eth0.25

Im nächsten Schritt musst Du die Netzwerkadressen und Devices des eben kopierten Interfaces ifcfg-eth0.25 ändern.

# Geänderte ifcfg-eth0.25 
DEVICE=eth0.25
VLAN_ROW_DEVICE=eth0
VLAN_ID=25
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.25.30
NETMASK=255.255.255.0

Entweder Du startest die NAS neu oder die Netzwerk Services mit sudo /etc/rc.network restart

Wer wie ich noch für die eingerichteten VLANs die MACVLANs für die Docker Container erstellen möchte, muss folgendes tun:

# MACVLAN für VLAN 20 - IP Adresse 192.168.20.80/32 
ip link del mac20
ip link add mac20 link eth0.20 type macvlan mode bridge
ip addr add 192.168.20.80/32 dev mac20
ip link set mac20 up
ip route add 192.168.20.80/28 dev mac20

# MACVLAN für VLAN 25 - IP Adresse 192.168.25.80/32 
ip link del mac25
ip link add mac25 link eth0.25 type macvlan mode bridge
ip addr add 192.168.25.80/32 dev mac25
ip link set mac25 up
ip route add 192.168.25.80/28 dev mac25

# Anlage MACVLAN 20 für Docker Container für Netz 192.168.20.80/28
docker network create -d macvlan --subnet=192.168.20.0/24 --gateway=192.168.20.1 --ip-range=192.168.20.80/28  --aux-address 'host=192.168.20.80' -o parent=eth0.20 macvlan20

# Anlage MACVLAN 25 für Docker Container für Netz 192.168.25.80/28
docker network create -d macvlan --subnet=192.168.25.0/24 --gateway=192.168.25.1 --ip-range=192.168.25.80/28  --aux-address 'host=192.168.25.80' -o parent=eth0.25 macvlan25

Mehr zu MACVLANs den findet Du hier. Das Thema ist nicht ganz einfach!

Damit sind die MACVLANs für beide VLANs eingerichtet und können im Docker verwendet werden. Der ioBroker Docker Container hat bei mir 2 MACVLANs. Die Sonoff, Shelly, Yelight, Xiaomi, … Adapter horchen im 192.168.25.0 Netz. Die ioBroker Web und Admin Oberfläche sind nur im 192.168.20.0 erreichbar aber nicht im 192.168.25.0 Netz.

1 2 3 4 5