Hilfe! Mein FHEM funktioniert nicht!: Unterschied zwischen den Versionen

Aus FHEMWiki
(Link zu anderem Artikel eingebaut. Hinweis auf Windows 10 erweitert.)
 
(22 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Diese Seite gibt beschreibt die Vorgehensweise bei der Fehlersuche mit fhem auf der Basis von Linux.
Es gibt einen weiteren Artikel zur Fehlersuche [[FHEM startet nicht - Tipps zur Fehlersuche]]


== Anmelden am fhem-Server ==
Diese Seite gibt beschreibt die Vorgehensweise bei der Fehlersuche mit FHEM auf der Basis von Linux.
In dieser Hilfeseite läuft fhem auf einem Linux-System, z.B. ein Raspberry Pi, ein ODROID oder ein Beaglebone. Auf diesem Computer läuft eine Variante von Linux für Einplatinencomputer.
 
== Anmelden am FHEM-Server ==
In dieser Hilfeseite läuft FHEM auf einem Linux-System, z.B. ein Raspberry Pi, ein ODROID oder ein Beaglebone. Auf diesem Computer läuft eine Variante von Linux für Einplatinencomputer.


Das Linux als Betriebssystem stellt meist einen ssh-Server (ein verschlüsselter Zugang zum System auf der Kommandozeilenebene von einem zweiten Rechner aus) und/oder eine Console (die Anmeldung erfolgt lokal am angeschlossenen Bildschirm und Tastatur) zur Verfügung.
Das Linux als Betriebssystem stellt meist einen ssh-Server (ein verschlüsselter Zugang zum System auf der Kommandozeilenebene von einem zweiten Rechner aus) und/oder eine Console (die Anmeldung erfolgt lokal am angeschlossenen Bildschirm und Tastatur) zur Verfügung.


=== Anmeldung via ssh (OS X/Linux) ===
Siehe [[Kommandozeilentools]]
Auf einem Mac- oder Linux-Computer wird ein Terminal gestartet (xterm, Terminal) und dort mittels ssh eine Verbindung zum fhem-Server aufgenommen:
 
=== Anmeldung via ssh (OS X/Linux/Windows 10) ===
Auf einem Mac- oder Linux-Computer wird ein Terminal gestartet (xterm, Terminal), auf eine Windows 10 PC wird ein CMD gestartet und dort mittels ssh eine Verbindung zum FHEM-Server aufgenommen:


   ssh <IP-Adresse fhem-Server> -l <useraccount>
   ssh <IP-Adresse FHEM-Server> -l <useraccount>


hat der fhem-Server z.B. die IP-Adresse 192.168.1.22 und der Useraccount lautet '''pi''' lautet der Befehl
hat der FHEM-Server z.B. die IP-Adresse 192.168.1.22 und der Useraccount lautet '''pi''' lautet der Befehl


   ssh 192.168.1.22 -l pi
   ssh 192.168.1.22 -l pi
Zeile 19: Zeile 23:
   ssh pi@192.168.1.22
   ssh pi@192.168.1.22


Sollte die Verbindung erfolgreich hergestellt werden, wird ein Paßwort erbeten. Danach steht die Kommandozeile auf dem fhem-Server zur Verfügung. Nur beim ersten Mal fragt ssh nach, ob der '''öffentliche Schlüssel''' des fhem-Servers gespeichert werden soll.
Sollte die Verbindung erfolgreich hergestellt werden, wird ein Paßwort erbeten. Danach steht die Kommandozeile auf dem FHEM-Server zur Verfügung. Nur beim ersten Mal fragt ssh nach, ob der '''öffentliche Schlüssel''' des FHEM-Servers gespeichert werden soll.
 
=== Anmeldung via ssh (altes Windows) ===
In '''Windows 10 ab der Version 1803''' ist ein ssh Client '''integriert'''.
 
In älteren Versionen muss dieser zunächst installiert werden. Ein kostenloses, gutes Programm ist [http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html putty]. Nach Download, Installation und Aufruf bietet putty eine graphische Oberfläche zur Verwaltung verschiedener ssh-Verbindungen.
 
Die IP-Adresse des FHEM-Servers wird in das Feld '''Host Name (or IP address)''' eingegeben. Danach fragt ssh nach einem Benutzernamen (login as: ) und Paßwort.Für Raspberry PI Linux-Distributionen ist der Benutzername im Normallfall '''pi'''.
 
Nach erfolgreicher Eingabe der Informationen steht dann die Kommandozeile des FHEM-Servers zur Verfügung und kann zur weiteren Fehlersuche genutzt werden:
 
[[Datei:Putty-ssh-login.png]]
 
=== Anmeldung an der Console ===
Sollte das Netzwerk des FHEM-Servers nicht funktionieren oder dieser nicht erreichbar sein, bleibt nur die Anmeldung an der Console. Dazu wird ein Monitor und eine Tastatur am FHEM-Server direkt angeschlossen (z.B. am HDMI-Port und am USB-Port).
 
Im Normalfall ist das Bild zunächst schwarz, da der Bildschirmschoner von Linux die Ausgabe deaktiviert. Mehrfaches drücken der Leertaste sollte eine Ausgabe im klassischen 80x25-Zeichenmodus oder in einer graphischen Oberfläche anzeigen.
 
Linux bietet mehrere virtuelle Consolen. Diese lassen sich mit
 
  CTRL-ALT-F1
  CTRL-ALT-F2
 
usw. bis zu
 
  CTRL-ALT-F6
 
wechseln. Auf der ersten Console (CTRL-ALT-F1) stehen meist interessante Ausgaben wie Logfiles oder Fehlermeldungen. Auf der 7. Console (CTRL-ALT-F7) läuft meist die graphische Oberfläche.
 
Für eine Fehlersuche wird eine Textconsole (CTRL-ALT-F2 bis CTRL-ALT-F6) empfohlen. An dieser kann sich mit Username und Paßwort angemeldet werden und danach steht eine Kommandozeile zur Verfügung.
 
=== Die wichtigsten Linux-Kommandos ===
 
Die wichtigsten Linux-Kommandos auf der Kommandozeile und deren Bedeutung wird sehr gut [https://wiki.ubuntuusers.de/Shell/Befehls%C3%BCbersicht/#Grundkommandos hier] erklärt. Speziell die Befehle
 
# cd
# ls
# ls -lah
# cp
# mv
# rm
# mkdir
# rmdir
 
sollte jeder Anwender der Linux-Kommandozeile im Schlaf hersagen können.
 
=== root-Berechtigung erlangen ===
Nicht alle Befehle unter Linux sind für '''normale''' Benutzer (wie Anwender oder der pi-Benutzer) zugänglich oder können aufgerufen werden. Systemnahe Befehle, d.h. Befehle, die in die Grundfunktionen des Betriebssystemes konfigurieren oder umstellen, sind nur für den Nutzer '''root''' zugänglich.
 
root-Rechte erlangt man mit den Befehlen
 
  sudo -i
 
oder
 
  su -
 
je nach verwendeter Linux-Distribution.
 
'''Doch Vorsicht''': Linux geht davon aus, daß der Anwender root sehr genau weiß, was er tut. Befehle werden ohne weitere Sicherheitsabfragen ausgeführt - auch die Formatierung der Speicherkarte, externer Laufwerke oder die Löschung aller Dateien. Es ist sehr einfach, durch ein Leerzeichen zuviel oder eines zu wenig einen großen Datenverlust zu erzeugen.
 
Aus diesem Grund wird dringend empfohlen, die ersten Analyseschritte nur als normaler Anwender (z.B. pi) zu erledigen und wenn der Fehler gefunden wurde, die Behebung mit '''sudo''' vorzunehmen. sudo verleiht nur temporär root-Rechte und erfordert für jedes Kommando die explizite Angabe von sudo.
 
Ein Beispiel: ein normaler User kann


=== Anmeldung via ssh (Windows) ===
  rm -rf /usr/*
Windows kommt derzeit ohne ssh-Clienten, dieser muß daher zunächst installiert werden. Ein kostenloses, gutes Programm ist [http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html putty]. Nach Download, Installation und Aufruf bietet putty eine graphische Oberfläche zur Verwaltung verschiedener ssh-Verbindungen.


Die IP-Adresse des fhem-Servers wird in das Feld '''Host Name (or IP address)''' eingegeben. Danach fragt ssh nach einem Benutzernamen (login as: ) und Paßwort.Für Raspberry PI Linux-Distributionen ist der Benutzername im Normallfall '''pi'''.
nicht aufrufen. Dieser Befehl löscht alle Dateien im /usr-Verzeichnis, dort liegen die existenziell notwendigen Befehle für Linux. Nach Aufruf dieses Befehls ist die Linuxinstallation unwiderruflich defekt.


Nach erfolgreicher Eingabe der Informationen steht dann die Kommandozeile des fhem-Servers zur Verfügung und kann zur weiteren Fehlersuche genutzt werden:
Der Nutzer root kann denselben Befehl ohne Sicherheitsabfrage aufrufen.
 
Der Nutzer pi kann den Befehl mit temporären root-Rechten
 
  sudo rm -rf /usr/*
 
aufrufen und benötigt für den Aufruf sein Paßwort.
 
Hinweis: normalerweise kann sich der Benutzer root nicht über eine ssh-Verbindung direkt am FHEM-Server anmelden - es muß immer ein "normaler" Benutzername verwendet werden.
 
== Der erste Überblick ==
 
=== Wer bin ich? ===
Linux verwaltet Anwender (User) und weist User in Gruppen zu. Gruppe haben unterschiedliche Rechte beim Zugriff auf Dateien, Verzeichnisse und Geräten - daher ist es wichtig zu wissen, "wer" man auf diesem FHEM-Server ist und welche Gruppen man angehört.
 
Dazu gibt es die Kommandos '''whoami''', '''groups''' und '''id''':
 
  os@fhem:~$ whoami
  os
  os@fhem:~$ groups
  os
  os@fhem:~$ id
  uid=1000(os) gid=1000(os) groups=1000(os)
 
Dieser User ist als "os" benannt, hat die ID 1000, gehört der Gruppe "os" mit der Gruppen-ID 1000.
 
In diesem Beispiel:
 
  pi@1wire ~ $ whoami
  pi
  pi@1wire ~ $ groups
  pi adm dialout cdrom sudo audio video plugdev games users netdev input
  pi@1wire ~ $ id
  uid=1000(pi) gid=1000(pi) groups=1000(pi),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),105(netdev),999(input)
 
ist der Benutzer "pi" hat die ID 1000, gehört den Gruppen pi, adm, dialout, cdrom, sudo, audio, video, plugdev, games, users, netdev und input (mit den verschiedenen Gruppen-IDs).
 
=== Läuft FHEM bereits/noch ===
Nach erfolgreichem Anmelden an den FHEM-Server wird sich zunächst ein Überblick verschafft. Dazu werden die Befehle pstree, ps und pgrep verwendet.
 
Dies läßt sich mit der Befehlskombination
 
  ps auxwww | grep fhem
 
ermitteln. Dies gibt alle laufenden Prozesse mitsamt ihren Aufrufparametern aus, die '''fhem''' im Namen haben. Das Ergebnis sollte in etwa so aussehen:
 
  os@fhem:~$ ps auxwww | grep fhem
  root      950  0.0  0.0  11364  804 ?        Sl  Apr13  8:36 /opt/fhem/hmland -d -l 127.0.0.1 -p 54321
  root    10972  1.9  2.5  57188 53476 ?        S    Apr20 237:10 perl fhem.pl fhem.cfg
  os      18793  0.0  0.0  1700  564 pts/0    S+  11:52  0:00 grep fhem
 
Hier sind drei Prozesse zu finden:
 
# '''FHEM''' selbst (der Befehl '''perl fhem.pl fhem.cfg''') mit seinen Parametern
# '''hmland''' - ein Prozeß, der den Homematic USB-Konfigurationsstick ansteuert
# '''grep fhem''' dies ist der Prozeß, der gerade auf der Kommandozeile zur Suche eingegeben wurde
 
Weiterhin ist ersichtlich: FHEM läuft seit dem 20. April (9. Spalte) mit der Prozeß-ID 10972 (2. Spalte) mit root-Rechten (1. Spalte) und hat 237 Minuten und 10 Sekunden CPU-Zeit (10. Spalte) verbraucht, hmland läuft seit dem 13. April und hat 8 Minuten 36 Sekunden CPU-Zeit verbraucht.
 
Liefert das Kommando nur den grep Befehl zurück, wurden keine weiteren Treffer gefunden - d.h. FHEM oder hmland laufen derzeit nicht.
 
Ist der Prozeßname bekannt, kann mittels pgrep auch gezielt nach der Prozeß-ID (des laufenden Prozesses) gesucht werden:
 
  pgrep apache2
 
zeigt die laufenden Prozeß-IDs, z.B.:
 
  os@fhem:~$ pgrep apache2
  1118
  12459
  12460
  13551
  13552
  13553
  13554
  13555
 
Die Prozeß-IDs können genutzt werden, um diese gezielt zu beenden. Dazu wird das blutrünstige Kommando '''kill''' mit der Prozeß-ID als Argument verwendet. So würde
 
  kill 12459
 
einen (!) der laufenden Apache2-Prozesse friedlich beenden. Friedlich bedeutet, daß dem Prozess die Möglichkeit gegeben wird, seine offenen Dateien zu schreiben und File-Descriptoren zu schliessen. Nicht immer reagiert jedoch ein Prozeß auf einen kill-Befehl - dann hilft das zusätzliche Argument '''-9''', welches den Prozeß ohne weiteren Möglichkeiten sofort beendet. Dabei kann es zu Datei- und Datenverlust kommen:
 
  kill -9 12459
 
Sollen alle Prozesse beendet werden, ist es hilfreich, mit der kleinesten Prozeß-ID anzufangen  - mit etwas Glück beendet der Hauptprozeß alle von ihm gestarteten Kind-Prozesse gleich mit.
 
=== FHEM neu starten ===
Der FHEM-Server kann neu gestartet werden, ohne den Server selbst (d.h. ohne das Betriebssystem Linux) neu zu starten. Je nach verwendeter Linux-Distribution und FHEM-Paket können hierbei die Befehle
 
  /etc/init.d/fhem restart
 
oder
 
  service fhem restart
 
verwendet werden. Die zweite Variante ist bei moderneren Linux-Varianten üblich.
 
=== Das FHEM-Logfile ===
Bei jedem Neustart schreibt FHEM wichtige Informationen in das fhem-Logfile. Dieses liegt im Unterverzeichnis "log" der FHEM-Installation.
 
Ist FHEM z.B. in /opt/fhem installiert, sollte das Logfile in /opt/fhem/log liegen und fhem.log, fhem-YYYY.log oder fhem-YYYY-MM.log heißen, wobei YYYY für das Jahr und MM für den Monat stehen. Mit dem Befehl
 
  tail -200 /opt/fhem/log/fhem-2016-04.log | less
 
werden die letzten 200 Zeilen des Logfiles seitenweise angezeigt (Leertaste springt weiter).
 
Ein typischer Start des FHEM-Servers könnte z.B. so aussehen:
 
  2016.04.30 21:37:53 1: Including fhem.cfg
  2016.04.30 21:37:53 1: HMLAN_Parse: HMLAN1 new condition disconnected
  2016.04.30 21:37:53 1: HMLAN_Parse: HMLAN1 new condition init
  2016.04.30 21:37:53 1: HMLAN_Parse: HMLAN2 new condition disconnected
  2016.04.30 21:37:53 1: HMLAN_Parse: HMLAN2 new condition init
  2016.04.30 21:37:53 1: HMLAN_Parse: HMUSB1 new condition disconnected
  2016.04.30 21:37:53 1: HMLAN_Parse: HMUSB1 new condition init
  2016.04.30 21:37:54 1: Including ./FHEM/hm-lights-aussen.cfg
  2016.04.30 21:37:54 1: Including ./FHEM/hm-lights-eg-atelier.cfg
  2016.04.30 21:37:54 1: Including ./FHEM/hm-lights-eg-outside.cfg
  2016.04.30 21:37:54 1: Including ./FHEM/hm-lights-og-lennart.cfg
  2016.04.30 21:37:54 1: Including ./FHEM/hm-lights-og-schlafzimm
  [...]
  2016.04.30 21:37:55 1: Including ./FHEM/fhem-dewpoint-alarms.cfg
  2016.04.30 21:37:56 0: HourCounter HC_EG.HWR.Fussbodenpumpe Define.228 parameters: HC_EG.HWR.Fussbodenpumpe HourCounter EG.Heizung.8Relais:PIO.3:.on EG.Heizung.8Relais:PIO.3:.off
  given is experimental at ./FHEM/77_UWZ.pm line 201, <$fh> line 804.
  when is experimental at ./FHEM/77_UWZ.pm line 203, <$fh> line 804.
  when is experimental at ./FHEM/77_UWZ.pm line 208, <$fh> line 804.
  2016.04.30 21:37:56 1: Including ./log/fhem.save
  2016.04.30 21:37:59 1: in INITIALIZED
  2016.04.30 21:38:04 0: Featurelevel: 5.7
  2016.04.30 21:38:04 0: Server started with 431 defined entities (fhem.pl:11267/2016-04-17 perl:5.018002 os:linux user:root pid:14238)
  2016.04.30 21:38:05 1: HMLAN_Parse: HMLAN1 new condition ok
  2016.04.30 21:38:05 1: HMLAN_Parse: HMLAN2 new condition ok
  2016.04.30 21:38:05 1: HMLAN_Parse: HMUSB1 new condition ok
  2016.04.30 21:38:11 0: HourCounter HC_EG.HWR.Fussbodenpumpe Run.598 first run done countsOverall:304
Die Menge der angezeigten Informationen wird über die fhem.cfg und dem globalen Attribut verbose gesteuert. Das obige Beispiel zeigt ein verbose im Level 1, um Fehler zu finden, empfiehlt sich jedoch ein verbose-Level von 5:
 
  attr global verbose 5
 
entweder als Kommando oder in der fhem.cfg definiert. Danach zeigt das Logfile erheblich mehr und detaillierte Informationen und Fehler an:
 
  2016.04.30 21:46:20 1: Including fhem.cfg
  2016.04.30 21:46:21 1: HMLAN_Parse: HMLAN1 new condition disconnected
  2016.04.30 21:46:21 1: HMLAN_Parse: HMLAN1 new condition init
  2016.04.30 21:46:21 1: HMLAN_Parse: HMLAN2 new condition disconnected
  2016.04.30 21:46:21 1: HMLAN_Parse: HMLAN2 new condition init
  2016.04.30 21:46:21 1: HMLAN_Parse: HMUSB1 new condition disconnected
  2016.04.30 21:46:21 1: HMLAN_Parse: HMUSB1 new condition init
  2016.04.30 21:46:22 1: Including ./FHEM/hm-lights-aussen.cfg
  2016.04.30 21:46:22 1: Including ./FHEM/hm-lights-eg-atelier.cfg
  2016.04.30 21:46:22 1: Including ./FHEM/hm-lights-eg-outside.cfg
  [...]
  2016.04.30 21:46:22 1: Including ./FHEM/hm-heating-og-schlafzimmer.cfg
  2016.04.30 21:46:22 1: Including ./FHEM/hm-heating-og-wohnzimmer.cfg
  2016.04.30 21:46:22 1: Including ./FHEM/hm-sensors-innen.cfg
  2016.04.30 21:46:22 1: Including ./FHEM/hm-sensors-aussen.cfg
  2016.04.30 21:46:22 1: Including ./FHEM/hm-remotes.cfg
  2016.04.30 21:46:22 1: Including ./FHEM/fhem-notifies.cfg
  2016.04.30 21:46:22 1: Including ./FHEM/fhem-timers.cfg
  2016.04.30 21:46:22 1: Including ./FHEM/1wire-heizung.cfg
  2016.04.30 21:46:22 1: Including ./FHEM/fhem-structures.cfg
  2016.04.30 21:46:22 1: Including ./FHEM/fhem-dewpoint-alarms.cfg
  2016.04.30 21:46:24 0: HourCounter HC_EG.HWR.Fussbodenpumpe Define.228 parameters: HC_EG.HWR.Fussbodenpumpe HourCounter EG.Heizung.8Relais:PIO.3:.on EG.Heizung.8Relais:PIO.3:.off
  given is experimental at ./FHEM/77_UWZ.pm line 201, <$fh> line 804.
  when is experimental at ./FHEM/77_UWZ.pm line 203, <$fh> line 804.
  when is experimental at ./FHEM/77_UWZ.pm line 208, <$fh> line 804.
  2016.04.30 21:46:24 1: Including ./log/fhem.save
  2016.04.30 21:46:27 1: in INITIALIZED
  2016.04.30 21:46:32 0: Featurelevel: 5.7
  2016.04.30 21:46:32 0: Server started with 431 defined entities (fhem.pl:11267/2016-04-17 perl:5.018002 os:linux user:root pid:14409)
  2016.04.30 21:46:34 1: HMLAN_Parse: HMLAN2 new condition ok
  2016.04.30 21:46:34 1: HMLAN_Parse: HMLAN1 new condition ok
  2016.04.30 21:46:34 1: HMLAN_Parse: HMUSB1 new condition ok
  2016.04.30 21:46:39 0: HourCounter HC_EG.HWR.Fussbodenpumpe Run.598 first run done countsOverall:304
  2016.04.30 21:47:29 1: Including fhem.cfg
  2016.04.30 21:47:29 5: Cmd: >attr global userattr DbLogExclude DbLogInclude cmdIcon devStateIcon devStateStyle fp_StelleEG icon sortby webCmd widgetOverride<
  2016.04.30 21:47:29 5: Cmd: >attr global autoload_undefined_devices 1<
  2016.04.30 21:47:29 5: Cmd: >attr global holiday2we SH<
  2016.04.30 21:47:29 5: Cmd: >attr global latitude 34.253477<
  2016.04.30 21:47:29 5: Cmd: >attr global logfile ./log/fhem-%Y-%m.log<
  2016.04.30 21:47:29 5: Cmd: >attr global longitude 39.0656238<
  2016.04.30 21:47:29 5: Cmd: >attr global modpath .<
  2016.04.30 21:47:29 5: Cmd: >attr global motd SecurityCheck:
 
  WEB,WEBP has no associated allowed device with basicAuth.
  telnetPort has no associated allowed device with password/globalpassword.
  Running with root privileges.
  Restart FHEM for a new check if the problem is fixed,
  or set the global attribute motd to none to supress this message.
  <
  2016.04.30 21:47:29 5: Cmd: >attr global statefile ./log/fhem.save<
  2016.04.30 21:47:29 5: Cmd: >attr global updateInBackground 1<
  2016.04.30 21:47:29 5: Cmd: >attr global verbose 5<
 
usw. Im Verbose-Level 5 kommen bei einem Neustart schnell 30.000-50.000 Logeinträge zusammen, der tail-Befehl sollte dann mit
 
  tail -50000 /opt/fhem/log/fhem-YYYY-MM.log | less
 
gestartet werden und es empfiehlt sich bei der Fehlersuche, den verbose-Level schrittweise von 1 zu erhöhen.
 
In diesem Wust von Informationen muß nach '''Auffälligkeiten''' gesucht werden. Meldungen wie z.B.
 
  2016.04.27 14:31:05 3: Probing CUL device /dev/ttyAMA0
  2016.04.27 14:31:05 3: Can't open /dev/ttyAMA0: Keine Berechtigung
 
beschreiben '''exakt''' das Problem: der FHEM-User kann bei einem Neustart mangels Berechtigung nicht auf /dev/ttyAMA0 zugreifen.
 
Oder eine Fehlermeldung wie
 
  2016.04.27 14:31:05 3: Opening gz device /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A50285BI-if00-port0
  2016.04.27 14:31:05 3: Can't open /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A50285BI-if00-port0: Keine Berechtigung
 
weist auf dasselbe Problem hin.
 
Bei dem Lesen von Logfiles gilt die Grundregel: '''lies die Fehlermeldung - interpretiere sie nicht'''. Behebe exakt das Problem der Fehlermeldung, nichts anderes.
 
=== Wie ist die Auslastung des FHEM-Servers ===
Zur Ermittlung der Auslastung können die Befehle top und uptime verwendet werden. top wird dabei alle zwei Sekunden die Ausgabe aktualisieren und die Prozesse anzeigen, die gerade viel CPU-Zeit verbrennen, während uptime einmalig die Werte ausgibt:
 
  os@fhem:~$ uptime
    11:58:10 up 15 days, 16:33,  2 users,  load average: 0.09, 0.08, 0.12
 
Die '''Load Average''' wird in drei Werten angezeigt: 1-Minuten-Mittel, 5-Minuten-Mittel und 15-Minuten-Mittel. Eine Load von 1.0 indiziert das ein CPU-Kern zu 100% ausgelastet ist - kein sehr erstrebenswerter Zustand. In Abhängigkeit von der Hardware-Ausstattung des FHEM-Servers sollte die 15-Minuten-Load immer unter 1.0 (z.B. Raspberry Pi A), immer unter 2.0 (Raspberry Pi B), immer unter 4.0 (ODROID U3 oder besser) liegen. Im Normalfall ist eine hohe Load etwas schlechtes, da das System langsam wird und schlecht reagiert.
 
Der Befehl '''top''' zeigt regelmäßig aktualisiert die Prozesse, die viel CPU-Zeit verbrauchen:
 
  top - 16:31:01 up 15 days, 21:06,  2 users,  load average: 0.19, 0.16, 0.14
  Tasks: 100 total,  1 running,  99 sleeping,  0 stopped,  0 zombie
  %Cpu(s):  0.2 us,  0.2 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
  KiB Mem:  2071648 total,  491784 used,  1579864 free,    16432 buffers
  KiB Swap:        0 total,        0 used,        0 free.  353932 cached Mem
 
    PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM    TIME+ COMMAND
  10972 root      20  0  57188  53476  3256 S  1.3  2.6 242:13.52 perl
  22025 root      20  0      0      0      0 S  0.7  0.0  0:08.90 kworker/u:0
    950 root      20  0  11364    804    564 S  0.3  0.0  8:42.15 hmland
  22709 os        20  0    2552  1092    764 R  0.3  0.1  0:00.04 top
      1 root      20  0    3420  2028  1100 S  0.0  0.1  0:04.13 init
      2 root      20  0      0      0      0 S  0.0  0.0  0:00.15 kthreadd
      3 root      20  0      0      0      0 S  0.0  0.0  0:00.08 ksoftirqd/0
      5 root      0 -20      0      0      0 S  0.0  0.0  0:00.00 kworker/0:+
      7 root      0 -20      0      0      0 S  0.0  0.0  0:00.00 kworker/u:+
      8 root      rt  0      0      0      0 S  0.0  0.0  0:00.50 migration/0
      9 root      20  0      0      0      0 S  0.0  0.0  0:07.98 rcu_preempt
      10 root      20  0      0      0      0 S  0.0  0.0  0:00.00 rcu_bh
      11 root      20  0      0      0      0 S  0.0  0.0  0:00.00 rcu_sched
      12 root      20  0      0      0      0 S  0.0  0.0  0:00.05 ksoftirqd/1
      13 root      rt  0      0      0      0 S  0.0  0.0  0:00.42 migration/1
      14 root      20  0      0      0      0 S  0.0  0.0  0:14.34 kworker/1:0
      15 root      0 -20      0      0      0 S  0.0  0.0  0:00.00 kworker/1:+
 
In diesem Beispiel ist gut zu sehen, daß FHEM (perl) die meiste Rechenzeit, aber nur 1.3% CPU und 2.6% Speicher benötigt.
 
=== Partitionen ===
Ein Linux-System verwendet in seinem Dateibaum (dieser startet mit /, der Wurzel) viele Unterverzeichnisse mit speziellen Aufgaben. Manche Unterverzeichnisse werden in Festplattenbereiche ausgelagert (eine Partition) oder im RAM abgebildet. Ein Überblick ist mit dem Befehl mount zu erhalten:
 
  os@fhem:~$ mount
  /dev/mmcblk0p2 on / type ext4 (rw)
  proc on /proc type proc (rw,noexec,nosuid,nodev)
  none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev)
  sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
  none on /sys/fs/cgroup type tmpfs (rw)
  none on /sys/kernel/debug type debugfs (rw)
  udev on /dev type devtmpfs (rw,mode=0755)
  devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
  tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
  none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
  none on /run/shm type tmpfs (rw,nosuid,nodev)
  none on /run/user type tmpfs (rw,noexec,nosuid,nodev,size=104857600,mode=0755)
  /dev/mmcblk0p1 on /media/boot type vfat (rw)
  systemd on /sys/fs/cgroup/systemd type cgroup (rw,noexec,nosuid,nodev,none,name=systemd)
 
Hier sind die Unterverzeichnisse wie /, /proc, /run, /dev usw. zu sehen, die verwendeten Dateisysteme (ext4, sysfs, tmpfs, devpts, vfat) und spezielle Berechtigungen (der Teil in den Klammern).
 
Nur Daten, die in Partitionen mit Dateisystemen ext2, ext3, ext4, vfat, fat oder exfat gespeichert werden, stehen nach einem Neustart wieder zur Verfügung. Partitionen mit den Dateisystemen tmpfs, devpts, sysfs werden beim Neustart neu angelegt und verlieren ihren Inhalt.


== Kontrolle der laufenden Prozesse ==
== Kontrolle des Netzwerkes ==
== Kontrolle des Netzwerkes ==
Alle Linux-Server haben mindestens eine IP-Adresse (die der Loopback-Schnittstelle), jedoch meist ein oder zwei weitere. Diese können mit dem Befehl '''ifconfig''' abgefragt werden:
  os@fhem:~$ ifconfig
  eth0      Link encap:Ethernet  HWaddr 36:e6:6a:0e:97:b1
            inet addr:10.10.10.11  Bcast:10.10.10.255  Mask:255.255.255.0
            inet6 addr: fe80::34e6:6aff:fe0e:97b1/64 Scope:Link
            UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
            RX packets:2091413 errors:0 dropped:0 overruns:0 frame:0
            TX packets:1787885 errors:0 dropped:0 overruns:0 carrier:0
            collisions:0 txqueuelen:1000
            RX bytes:214887739 (214.8 MB)  TX bytes:164453778 (164.4 MB)
 
  lo        Link encap:Local Loopback
            inet addr:127.0.0.1  Mask:255.0.0.0
            inet6 addr: ::1/128 Scope:Host
            UP LOOPBACK RUNNING  MTU:65536  Metric:1
            RX packets:1720103 errors:0 dropped:0 overruns:0 frame:0
            TX packets:1720103 errors:0 dropped:0 overruns:0 carrier:0
            collisions:0 txqueuelen:0
            RX bytes:137713989 (137.7 MB)  TX bytes:137713989 (137.7 MB)
 
  wlan0    Link encap:Ethernet  HWaddr 24:05:0f:17:f8:41
            inet addr:192.168.1.22  Bcast:192.168.1.255  Mask:255.255.255.0
            inet6 addr: fe80::2605:fff:fe17:f841/64 Scope:Link
            UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
            RX packets:1815618 errors:0 dropped:27825 overruns:0 frame:0
            TX packets:1390638 errors:0 dropped:196 overruns:0 carrier:0
            collisions:0 txqueuelen:1000
            RX bytes:877279199 (877.2 MB)  TX bytes:180359845 (180.3 MB)
Dieser FHEM-Server hat drei Schnittstellen: eth0 (Ethernet-Kabel), lo (Loopback) und wlan0 (WiFi). Jede Schnittstelle hat eine IP-Adresse (inet addr), die sich bei IPv4 aus vier Zahlen zwischen 0...255 von .-getrennt darstellt. Dazu gehört die Broadcast (Bcast) und Netzwerkmaske (Mask) Angaben, die die Größe des Netzwerkes beschreiben.
Jede IP-Adresse (außer die der Loopback-Schnittstelle) sollte im Normallfall auf einen '''ping'''-Befehl von einem anderen Computer reagieren:
  C:\Users\fhemuser>ping 192.168.1.22
 
  Pinging 192.168.1.22 with 32 bytes of data:
  Reply from 192.168.1.22: bytes=32 time=75ms TTL=64
  Reply from 192.168.1.22: bytes=32 time=1ms TTL=64
  Reply from 192.168.1.22: bytes=32 time=1ms TTL=64
  Reply from 192.168.1.22: bytes=32 time=1ms TTL=64
 
  Ping statistics for 192.168.1.22:
      Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
  Approximate round trip times in milli-seconds:
      Minimum = 1ms, Maximum = 75ms, Average = 19ms
Reagiert der FHEM-Server nicht auf einen ping-Befehl auf einer seiner IP-Adressen, ist vermutlich der Weg zwischen beiden Computern gestört. Der Router (Switch, Fritz!Box, Speedbox) und eventuell vorhandene Firewalls sollten kontrolliert und verifiziert werden. Manchmal hilft auch ein Reboot derselben.
== Kontrolle der CUL-Definitionen ==
== Kontrolle der CUL-Definitionen ==
== Kontrolle der Zugriffsberechtigungen ==
== Kontrolle der Zugriffsberechtigungen ==
Zeile 35: Zeile 424:
== Kontrolle der Festplatte ==
== Kontrolle der Festplatte ==
== Backup einspielen ==
== Backup einspielen ==
[[Kategorie:HOWTOS]]

Aktuelle Version vom 10. Dezember 2020, 15:02 Uhr

Es gibt einen weiteren Artikel zur Fehlersuche FHEM startet nicht - Tipps zur Fehlersuche

Diese Seite gibt beschreibt die Vorgehensweise bei der Fehlersuche mit FHEM auf der Basis von Linux.

Anmelden am FHEM-Server

In dieser Hilfeseite läuft FHEM auf einem Linux-System, z.B. ein Raspberry Pi, ein ODROID oder ein Beaglebone. Auf diesem Computer läuft eine Variante von Linux für Einplatinencomputer.

Das Linux als Betriebssystem stellt meist einen ssh-Server (ein verschlüsselter Zugang zum System auf der Kommandozeilenebene von einem zweiten Rechner aus) und/oder eine Console (die Anmeldung erfolgt lokal am angeschlossenen Bildschirm und Tastatur) zur Verfügung.

Siehe Kommandozeilentools

Anmeldung via ssh (OS X/Linux/Windows 10)

Auf einem Mac- oder Linux-Computer wird ein Terminal gestartet (xterm, Terminal), auf eine Windows 10 PC wird ein CMD gestartet und dort mittels ssh eine Verbindung zum FHEM-Server aufgenommen:

 ssh <IP-Adresse FHEM-Server> -l <useraccount>

hat der FHEM-Server z.B. die IP-Adresse 192.168.1.22 und der Useraccount lautet pi lautet der Befehl

 ssh 192.168.1.22 -l pi

oder einfacher

 ssh pi@192.168.1.22

Sollte die Verbindung erfolgreich hergestellt werden, wird ein Paßwort erbeten. Danach steht die Kommandozeile auf dem FHEM-Server zur Verfügung. Nur beim ersten Mal fragt ssh nach, ob der öffentliche Schlüssel des FHEM-Servers gespeichert werden soll.

Anmeldung via ssh (altes Windows)

In Windows 10 ab der Version 1803 ist ein ssh Client integriert.

In älteren Versionen muss dieser zunächst installiert werden. Ein kostenloses, gutes Programm ist putty. Nach Download, Installation und Aufruf bietet putty eine graphische Oberfläche zur Verwaltung verschiedener ssh-Verbindungen.

Die IP-Adresse des FHEM-Servers wird in das Feld Host Name (or IP address) eingegeben. Danach fragt ssh nach einem Benutzernamen (login as: ) und Paßwort.Für Raspberry PI Linux-Distributionen ist der Benutzername im Normallfall pi.

Nach erfolgreicher Eingabe der Informationen steht dann die Kommandozeile des FHEM-Servers zur Verfügung und kann zur weiteren Fehlersuche genutzt werden:

Putty-ssh-login.png

Anmeldung an der Console

Sollte das Netzwerk des FHEM-Servers nicht funktionieren oder dieser nicht erreichbar sein, bleibt nur die Anmeldung an der Console. Dazu wird ein Monitor und eine Tastatur am FHEM-Server direkt angeschlossen (z.B. am HDMI-Port und am USB-Port).

Im Normalfall ist das Bild zunächst schwarz, da der Bildschirmschoner von Linux die Ausgabe deaktiviert. Mehrfaches drücken der Leertaste sollte eine Ausgabe im klassischen 80x25-Zeichenmodus oder in einer graphischen Oberfläche anzeigen.

Linux bietet mehrere virtuelle Consolen. Diese lassen sich mit

 CTRL-ALT-F1
 CTRL-ALT-F2

usw. bis zu

 CTRL-ALT-F6

wechseln. Auf der ersten Console (CTRL-ALT-F1) stehen meist interessante Ausgaben wie Logfiles oder Fehlermeldungen. Auf der 7. Console (CTRL-ALT-F7) läuft meist die graphische Oberfläche.

Für eine Fehlersuche wird eine Textconsole (CTRL-ALT-F2 bis CTRL-ALT-F6) empfohlen. An dieser kann sich mit Username und Paßwort angemeldet werden und danach steht eine Kommandozeile zur Verfügung.

Die wichtigsten Linux-Kommandos

Die wichtigsten Linux-Kommandos auf der Kommandozeile und deren Bedeutung wird sehr gut hier erklärt. Speziell die Befehle

  1. cd
  2. ls
  3. ls -lah
  4. cp
  5. mv
  6. rm
  7. mkdir
  8. rmdir

sollte jeder Anwender der Linux-Kommandozeile im Schlaf hersagen können.

root-Berechtigung erlangen

Nicht alle Befehle unter Linux sind für normale Benutzer (wie Anwender oder der pi-Benutzer) zugänglich oder können aufgerufen werden. Systemnahe Befehle, d.h. Befehle, die in die Grundfunktionen des Betriebssystemes konfigurieren oder umstellen, sind nur für den Nutzer root zugänglich.

root-Rechte erlangt man mit den Befehlen

 sudo -i

oder

 su -

je nach verwendeter Linux-Distribution.

Doch Vorsicht: Linux geht davon aus, daß der Anwender root sehr genau weiß, was er tut. Befehle werden ohne weitere Sicherheitsabfragen ausgeführt - auch die Formatierung der Speicherkarte, externer Laufwerke oder die Löschung aller Dateien. Es ist sehr einfach, durch ein Leerzeichen zuviel oder eines zu wenig einen großen Datenverlust zu erzeugen.

Aus diesem Grund wird dringend empfohlen, die ersten Analyseschritte nur als normaler Anwender (z.B. pi) zu erledigen und wenn der Fehler gefunden wurde, die Behebung mit sudo vorzunehmen. sudo verleiht nur temporär root-Rechte und erfordert für jedes Kommando die explizite Angabe von sudo.

Ein Beispiel: ein normaler User kann

 rm -rf /usr/*

nicht aufrufen. Dieser Befehl löscht alle Dateien im /usr-Verzeichnis, dort liegen die existenziell notwendigen Befehle für Linux. Nach Aufruf dieses Befehls ist die Linuxinstallation unwiderruflich defekt.

Der Nutzer root kann denselben Befehl ohne Sicherheitsabfrage aufrufen.

Der Nutzer pi kann den Befehl mit temporären root-Rechten

 sudo rm -rf /usr/*

aufrufen und benötigt für den Aufruf sein Paßwort.

Hinweis: normalerweise kann sich der Benutzer root nicht über eine ssh-Verbindung direkt am FHEM-Server anmelden - es muß immer ein "normaler" Benutzername verwendet werden.

Der erste Überblick

Wer bin ich?

Linux verwaltet Anwender (User) und weist User in Gruppen zu. Gruppe haben unterschiedliche Rechte beim Zugriff auf Dateien, Verzeichnisse und Geräten - daher ist es wichtig zu wissen, "wer" man auf diesem FHEM-Server ist und welche Gruppen man angehört.

Dazu gibt es die Kommandos whoami, groups und id:

  os@fhem:~$ whoami
  os
  os@fhem:~$ groups
  os
  os@fhem:~$ id
  uid=1000(os) gid=1000(os) groups=1000(os)

Dieser User ist als "os" benannt, hat die ID 1000, gehört der Gruppe "os" mit der Gruppen-ID 1000.

In diesem Beispiel:

  pi@1wire ~ $ whoami
  pi
  pi@1wire ~ $ groups
  pi adm dialout cdrom sudo audio video plugdev games users netdev input
  pi@1wire ~ $ id
  uid=1000(pi) gid=1000(pi) groups=1000(pi),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),105(netdev),999(input)

ist der Benutzer "pi" hat die ID 1000, gehört den Gruppen pi, adm, dialout, cdrom, sudo, audio, video, plugdev, games, users, netdev und input (mit den verschiedenen Gruppen-IDs).

Läuft FHEM bereits/noch

Nach erfolgreichem Anmelden an den FHEM-Server wird sich zunächst ein Überblick verschafft. Dazu werden die Befehle pstree, ps und pgrep verwendet.

Dies läßt sich mit der Befehlskombination

  ps auxwww | grep fhem

ermitteln. Dies gibt alle laufenden Prozesse mitsamt ihren Aufrufparametern aus, die fhem im Namen haben. Das Ergebnis sollte in etwa so aussehen:

  os@fhem:~$ ps auxwww | grep fhem
  root       950  0.0  0.0  11364   804 ?        Sl   Apr13   8:36 /opt/fhem/hmland -d -l 127.0.0.1 -p 54321
  root     10972  1.9  2.5  57188 53476 ?        S    Apr20 237:10 perl fhem.pl fhem.cfg
  os       18793  0.0  0.0   1700   564 pts/0    S+   11:52   0:00 grep fhem

Hier sind drei Prozesse zu finden:

  1. FHEM selbst (der Befehl perl fhem.pl fhem.cfg) mit seinen Parametern
  2. hmland - ein Prozeß, der den Homematic USB-Konfigurationsstick ansteuert
  3. grep fhem dies ist der Prozeß, der gerade auf der Kommandozeile zur Suche eingegeben wurde

Weiterhin ist ersichtlich: FHEM läuft seit dem 20. April (9. Spalte) mit der Prozeß-ID 10972 (2. Spalte) mit root-Rechten (1. Spalte) und hat 237 Minuten und 10 Sekunden CPU-Zeit (10. Spalte) verbraucht, hmland läuft seit dem 13. April und hat 8 Minuten 36 Sekunden CPU-Zeit verbraucht.

Liefert das Kommando nur den grep Befehl zurück, wurden keine weiteren Treffer gefunden - d.h. FHEM oder hmland laufen derzeit nicht.

Ist der Prozeßname bekannt, kann mittels pgrep auch gezielt nach der Prozeß-ID (des laufenden Prozesses) gesucht werden:

  pgrep apache2

zeigt die laufenden Prozeß-IDs, z.B.:

  os@fhem:~$ pgrep apache2
  1118
  12459
  12460
  13551
  13552
  13553
  13554
  13555

Die Prozeß-IDs können genutzt werden, um diese gezielt zu beenden. Dazu wird das blutrünstige Kommando kill mit der Prozeß-ID als Argument verwendet. So würde

  kill 12459

einen (!) der laufenden Apache2-Prozesse friedlich beenden. Friedlich bedeutet, daß dem Prozess die Möglichkeit gegeben wird, seine offenen Dateien zu schreiben und File-Descriptoren zu schliessen. Nicht immer reagiert jedoch ein Prozeß auf einen kill-Befehl - dann hilft das zusätzliche Argument -9, welches den Prozeß ohne weiteren Möglichkeiten sofort beendet. Dabei kann es zu Datei- und Datenverlust kommen:

 kill -9 12459

Sollen alle Prozesse beendet werden, ist es hilfreich, mit der kleinesten Prozeß-ID anzufangen - mit etwas Glück beendet der Hauptprozeß alle von ihm gestarteten Kind-Prozesse gleich mit.

FHEM neu starten

Der FHEM-Server kann neu gestartet werden, ohne den Server selbst (d.h. ohne das Betriebssystem Linux) neu zu starten. Je nach verwendeter Linux-Distribution und FHEM-Paket können hierbei die Befehle

  /etc/init.d/fhem restart

oder

  service fhem restart

verwendet werden. Die zweite Variante ist bei moderneren Linux-Varianten üblich.

Das FHEM-Logfile

Bei jedem Neustart schreibt FHEM wichtige Informationen in das fhem-Logfile. Dieses liegt im Unterverzeichnis "log" der FHEM-Installation.

Ist FHEM z.B. in /opt/fhem installiert, sollte das Logfile in /opt/fhem/log liegen und fhem.log, fhem-YYYY.log oder fhem-YYYY-MM.log heißen, wobei YYYY für das Jahr und MM für den Monat stehen. Mit dem Befehl

  tail -200 /opt/fhem/log/fhem-2016-04.log | less

werden die letzten 200 Zeilen des Logfiles seitenweise angezeigt (Leertaste springt weiter).

Ein typischer Start des FHEM-Servers könnte z.B. so aussehen:

  2016.04.30 21:37:53 1: Including fhem.cfg
  2016.04.30 21:37:53 1: HMLAN_Parse: HMLAN1 new condition disconnected
  2016.04.30 21:37:53 1: HMLAN_Parse: HMLAN1 new condition init
  2016.04.30 21:37:53 1: HMLAN_Parse: HMLAN2 new condition disconnected
  2016.04.30 21:37:53 1: HMLAN_Parse: HMLAN2 new condition init
  2016.04.30 21:37:53 1: HMLAN_Parse: HMUSB1 new condition disconnected
  2016.04.30 21:37:53 1: HMLAN_Parse: HMUSB1 new condition init
  2016.04.30 21:37:54 1: Including ./FHEM/hm-lights-aussen.cfg
  2016.04.30 21:37:54 1: Including ./FHEM/hm-lights-eg-atelier.cfg
  2016.04.30 21:37:54 1: Including ./FHEM/hm-lights-eg-outside.cfg
  2016.04.30 21:37:54 1: Including ./FHEM/hm-lights-og-lennart.cfg
  2016.04.30 21:37:54 1: Including ./FHEM/hm-lights-og-schlafzimm
  [...]
  2016.04.30 21:37:55 1: Including ./FHEM/fhem-dewpoint-alarms.cfg
  2016.04.30 21:37:56 0: HourCounter HC_EG.HWR.Fussbodenpumpe Define.228 parameters: HC_EG.HWR.Fussbodenpumpe HourCounter EG.Heizung.8Relais:PIO.3:.on EG.Heizung.8Relais:PIO.3:.off
  given is experimental at ./FHEM/77_UWZ.pm line 201, <$fh> line 804.
  when is experimental at ./FHEM/77_UWZ.pm line 203, <$fh> line 804.
  when is experimental at ./FHEM/77_UWZ.pm line 208, <$fh> line 804.
  2016.04.30 21:37:56 1: Including ./log/fhem.save
  2016.04.30 21:37:59 1: in INITIALIZED
  2016.04.30 21:38:04 0: Featurelevel: 5.7
  2016.04.30 21:38:04 0: Server started with 431 defined entities (fhem.pl:11267/2016-04-17 perl:5.018002 os:linux user:root pid:14238)
  2016.04.30 21:38:05 1: HMLAN_Parse: HMLAN1 new condition ok
  2016.04.30 21:38:05 1: HMLAN_Parse: HMLAN2 new condition ok
  2016.04.30 21:38:05 1: HMLAN_Parse: HMUSB1 new condition ok
  2016.04.30 21:38:11 0: HourCounter HC_EG.HWR.Fussbodenpumpe Run.598 first run done countsOverall:304

Die Menge der angezeigten Informationen wird über die fhem.cfg und dem globalen Attribut verbose gesteuert. Das obige Beispiel zeigt ein verbose im Level 1, um Fehler zu finden, empfiehlt sich jedoch ein verbose-Level von 5:

  attr global verbose 5

entweder als Kommando oder in der fhem.cfg definiert. Danach zeigt das Logfile erheblich mehr und detaillierte Informationen und Fehler an:

  2016.04.30 21:46:20 1: Including fhem.cfg
  2016.04.30 21:46:21 1: HMLAN_Parse: HMLAN1 new condition disconnected
  2016.04.30 21:46:21 1: HMLAN_Parse: HMLAN1 new condition init
  2016.04.30 21:46:21 1: HMLAN_Parse: HMLAN2 new condition disconnected
  2016.04.30 21:46:21 1: HMLAN_Parse: HMLAN2 new condition init
  2016.04.30 21:46:21 1: HMLAN_Parse: HMUSB1 new condition disconnected
  2016.04.30 21:46:21 1: HMLAN_Parse: HMUSB1 new condition init
  2016.04.30 21:46:22 1: Including ./FHEM/hm-lights-aussen.cfg
  2016.04.30 21:46:22 1: Including ./FHEM/hm-lights-eg-atelier.cfg
  2016.04.30 21:46:22 1: Including ./FHEM/hm-lights-eg-outside.cfg
  [...]
  2016.04.30 21:46:22 1: Including ./FHEM/hm-heating-og-schlafzimmer.cfg
  2016.04.30 21:46:22 1: Including ./FHEM/hm-heating-og-wohnzimmer.cfg
  2016.04.30 21:46:22 1: Including ./FHEM/hm-sensors-innen.cfg
  2016.04.30 21:46:22 1: Including ./FHEM/hm-sensors-aussen.cfg
  2016.04.30 21:46:22 1: Including ./FHEM/hm-remotes.cfg
  2016.04.30 21:46:22 1: Including ./FHEM/fhem-notifies.cfg
  2016.04.30 21:46:22 1: Including ./FHEM/fhem-timers.cfg
  2016.04.30 21:46:22 1: Including ./FHEM/1wire-heizung.cfg
  2016.04.30 21:46:22 1: Including ./FHEM/fhem-structures.cfg
  2016.04.30 21:46:22 1: Including ./FHEM/fhem-dewpoint-alarms.cfg
  2016.04.30 21:46:24 0: HourCounter HC_EG.HWR.Fussbodenpumpe Define.228 parameters: HC_EG.HWR.Fussbodenpumpe HourCounter EG.Heizung.8Relais:PIO.3:.on EG.Heizung.8Relais:PIO.3:.off
  given is experimental at ./FHEM/77_UWZ.pm line 201, <$fh> line 804.
  when is experimental at ./FHEM/77_UWZ.pm line 203, <$fh> line 804.
  when is experimental at ./FHEM/77_UWZ.pm line 208, <$fh> line 804.
  2016.04.30 21:46:24 1: Including ./log/fhem.save
  2016.04.30 21:46:27 1: in INITIALIZED
  2016.04.30 21:46:32 0: Featurelevel: 5.7
  2016.04.30 21:46:32 0: Server started with 431 defined entities (fhem.pl:11267/2016-04-17 perl:5.018002 os:linux user:root pid:14409)
  2016.04.30 21:46:34 1: HMLAN_Parse: HMLAN2 new condition ok
  2016.04.30 21:46:34 1: HMLAN_Parse: HMLAN1 new condition ok
  2016.04.30 21:46:34 1: HMLAN_Parse: HMUSB1 new condition ok
  2016.04.30 21:46:39 0: HourCounter HC_EG.HWR.Fussbodenpumpe Run.598 first run done countsOverall:304
  2016.04.30 21:47:29 1: Including fhem.cfg
  2016.04.30 21:47:29 5: Cmd: >attr global userattr DbLogExclude DbLogInclude cmdIcon devStateIcon devStateStyle fp_StelleEG icon sortby webCmd widgetOverride<
  2016.04.30 21:47:29 5: Cmd: >attr global autoload_undefined_devices 1<
  2016.04.30 21:47:29 5: Cmd: >attr global holiday2we SH<
  2016.04.30 21:47:29 5: Cmd: >attr global latitude 34.253477<
  2016.04.30 21:47:29 5: Cmd: >attr global logfile ./log/fhem-%Y-%m.log<
  2016.04.30 21:47:29 5: Cmd: >attr global longitude 39.0656238<
  2016.04.30 21:47:29 5: Cmd: >attr global modpath .<
  2016.04.30 21:47:29 5: Cmd: >attr global motd SecurityCheck:
  
  WEB,WEBP has no associated allowed device with basicAuth.
  telnetPort has no associated allowed device with password/globalpassword.
  Running with root privileges.
  Restart FHEM for a new check if the problem is fixed,
  or set the global attribute motd to none to supress this message.
  <
  2016.04.30 21:47:29 5: Cmd: >attr global statefile ./log/fhem.save<
  2016.04.30 21:47:29 5: Cmd: >attr global updateInBackground 1<
  2016.04.30 21:47:29 5: Cmd: >attr global verbose 5<

usw. Im Verbose-Level 5 kommen bei einem Neustart schnell 30.000-50.000 Logeinträge zusammen, der tail-Befehl sollte dann mit

  tail -50000 /opt/fhem/log/fhem-YYYY-MM.log | less

gestartet werden und es empfiehlt sich bei der Fehlersuche, den verbose-Level schrittweise von 1 zu erhöhen.

In diesem Wust von Informationen muß nach Auffälligkeiten gesucht werden. Meldungen wie z.B.

  2016.04.27 14:31:05 3: Probing CUL device /dev/ttyAMA0
  2016.04.27 14:31:05 3: Can't open /dev/ttyAMA0: Keine Berechtigung

beschreiben exakt das Problem: der FHEM-User kann bei einem Neustart mangels Berechtigung nicht auf /dev/ttyAMA0 zugreifen.

Oder eine Fehlermeldung wie

  2016.04.27 14:31:05 3: Opening gz device /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A50285BI-if00-port0
  2016.04.27 14:31:05 3: Can't open /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A50285BI-if00-port0: Keine Berechtigung

weist auf dasselbe Problem hin.

Bei dem Lesen von Logfiles gilt die Grundregel: lies die Fehlermeldung - interpretiere sie nicht. Behebe exakt das Problem der Fehlermeldung, nichts anderes.

Wie ist die Auslastung des FHEM-Servers

Zur Ermittlung der Auslastung können die Befehle top und uptime verwendet werden. top wird dabei alle zwei Sekunden die Ausgabe aktualisieren und die Prozesse anzeigen, die gerade viel CPU-Zeit verbrennen, während uptime einmalig die Werte ausgibt:

  os@fhem:~$ uptime
   11:58:10 up 15 days, 16:33,  2 users,  load average: 0.09, 0.08, 0.12

Die Load Average wird in drei Werten angezeigt: 1-Minuten-Mittel, 5-Minuten-Mittel und 15-Minuten-Mittel. Eine Load von 1.0 indiziert das ein CPU-Kern zu 100% ausgelastet ist - kein sehr erstrebenswerter Zustand. In Abhängigkeit von der Hardware-Ausstattung des FHEM-Servers sollte die 15-Minuten-Load immer unter 1.0 (z.B. Raspberry Pi A), immer unter 2.0 (Raspberry Pi B), immer unter 4.0 (ODROID U3 oder besser) liegen. Im Normalfall ist eine hohe Load etwas schlechtes, da das System langsam wird und schlecht reagiert.

Der Befehl top zeigt regelmäßig aktualisiert die Prozesse, die viel CPU-Zeit verbrauchen:

  top - 16:31:01 up 15 days, 21:06,  2 users,  load average: 0.19, 0.16, 0.14
  Tasks: 100 total,   1 running,  99 sleeping,   0 stopped,   0 zombie
  %Cpu(s):  0.2 us,  0.2 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
  KiB Mem:   2071648 total,   491784 used,  1579864 free,    16432 buffers
  KiB Swap:        0 total,        0 used,        0 free.   353932 cached Mem
  
    PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
  10972 root      20   0   57188  53476   3256 S   1.3  2.6 242:13.52 perl
  22025 root      20   0       0      0      0 S   0.7  0.0   0:08.90 kworker/u:0
    950 root      20   0   11364    804    564 S   0.3  0.0   8:42.15 hmland
  22709 os        20   0    2552   1092    764 R   0.3  0.1   0:00.04 top
      1 root      20   0    3420   2028   1100 S   0.0  0.1   0:04.13 init
      2 root      20   0       0      0      0 S   0.0  0.0   0:00.15 kthreadd
      3 root      20   0       0      0      0 S   0.0  0.0   0:00.08 ksoftirqd/0
      5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:+
      7 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/u:+
      8 root      rt   0       0      0      0 S   0.0  0.0   0:00.50 migration/0
      9 root      20   0       0      0      0 S   0.0  0.0   0:07.98 rcu_preempt
     10 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh
     11 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_sched
     12 root      20   0       0      0      0 S   0.0  0.0   0:00.05 ksoftirqd/1
     13 root      rt   0       0      0      0 S   0.0  0.0   0:00.42 migration/1
     14 root      20   0       0      0      0 S   0.0  0.0   0:14.34 kworker/1:0
     15 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/1:+

In diesem Beispiel ist gut zu sehen, daß FHEM (perl) die meiste Rechenzeit, aber nur 1.3% CPU und 2.6% Speicher benötigt.

Partitionen

Ein Linux-System verwendet in seinem Dateibaum (dieser startet mit /, der Wurzel) viele Unterverzeichnisse mit speziellen Aufgaben. Manche Unterverzeichnisse werden in Festplattenbereiche ausgelagert (eine Partition) oder im RAM abgebildet. Ein Überblick ist mit dem Befehl mount zu erhalten:

  os@fhem:~$ mount
  /dev/mmcblk0p2 on / type ext4 (rw)
  proc on /proc type proc (rw,noexec,nosuid,nodev)
  none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,noexec,nosuid,nodev)
  sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
  none on /sys/fs/cgroup type tmpfs (rw)
  none on /sys/kernel/debug type debugfs (rw)
  udev on /dev type devtmpfs (rw,mode=0755)
  devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
  tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
  none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
  none on /run/shm type tmpfs (rw,nosuid,nodev)
  none on /run/user type tmpfs (rw,noexec,nosuid,nodev,size=104857600,mode=0755)
  /dev/mmcblk0p1 on /media/boot type vfat (rw)
  systemd on /sys/fs/cgroup/systemd type cgroup (rw,noexec,nosuid,nodev,none,name=systemd)

Hier sind die Unterverzeichnisse wie /, /proc, /run, /dev usw. zu sehen, die verwendeten Dateisysteme (ext4, sysfs, tmpfs, devpts, vfat) und spezielle Berechtigungen (der Teil in den Klammern).

Nur Daten, die in Partitionen mit Dateisystemen ext2, ext3, ext4, vfat, fat oder exfat gespeichert werden, stehen nach einem Neustart wieder zur Verfügung. Partitionen mit den Dateisystemen tmpfs, devpts, sysfs werden beim Neustart neu angelegt und verlieren ihren Inhalt.

Kontrolle des Netzwerkes

Alle Linux-Server haben mindestens eine IP-Adresse (die der Loopback-Schnittstelle), jedoch meist ein oder zwei weitere. Diese können mit dem Befehl ifconfig abgefragt werden:

  os@fhem:~$ ifconfig
  eth0      Link encap:Ethernet  HWaddr 36:e6:6a:0e:97:b1
            inet addr:10.10.10.11  Bcast:10.10.10.255  Mask:255.255.255.0
            inet6 addr: fe80::34e6:6aff:fe0e:97b1/64 Scope:Link
            UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
            RX packets:2091413 errors:0 dropped:0 overruns:0 frame:0
            TX packets:1787885 errors:0 dropped:0 overruns:0 carrier:0
            collisions:0 txqueuelen:1000
            RX bytes:214887739 (214.8 MB)  TX bytes:164453778 (164.4 MB)
  
  lo        Link encap:Local Loopback
            inet addr:127.0.0.1  Mask:255.0.0.0
            inet6 addr: ::1/128 Scope:Host
            UP LOOPBACK RUNNING  MTU:65536  Metric:1
            RX packets:1720103 errors:0 dropped:0 overruns:0 frame:0
            TX packets:1720103 errors:0 dropped:0 overruns:0 carrier:0
            collisions:0 txqueuelen:0
            RX bytes:137713989 (137.7 MB)  TX bytes:137713989 (137.7 MB)
  
  wlan0     Link encap:Ethernet  HWaddr 24:05:0f:17:f8:41
            inet addr:192.168.1.22  Bcast:192.168.1.255  Mask:255.255.255.0
            inet6 addr: fe80::2605:fff:fe17:f841/64 Scope:Link
            UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
            RX packets:1815618 errors:0 dropped:27825 overruns:0 frame:0
            TX packets:1390638 errors:0 dropped:196 overruns:0 carrier:0
            collisions:0 txqueuelen:1000
            RX bytes:877279199 (877.2 MB)  TX bytes:180359845 (180.3 MB)

Dieser FHEM-Server hat drei Schnittstellen: eth0 (Ethernet-Kabel), lo (Loopback) und wlan0 (WiFi). Jede Schnittstelle hat eine IP-Adresse (inet addr), die sich bei IPv4 aus vier Zahlen zwischen 0...255 von .-getrennt darstellt. Dazu gehört die Broadcast (Bcast) und Netzwerkmaske (Mask) Angaben, die die Größe des Netzwerkes beschreiben.

Jede IP-Adresse (außer die der Loopback-Schnittstelle) sollte im Normallfall auf einen ping-Befehl von einem anderen Computer reagieren:

  C:\Users\fhemuser>ping 192.168.1.22
  
  Pinging 192.168.1.22 with 32 bytes of data:
  Reply from 192.168.1.22: bytes=32 time=75ms TTL=64
  Reply from 192.168.1.22: bytes=32 time=1ms TTL=64
  Reply from 192.168.1.22: bytes=32 time=1ms TTL=64
  Reply from 192.168.1.22: bytes=32 time=1ms TTL=64
  
  Ping statistics for 192.168.1.22:
      Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
  Approximate round trip times in milli-seconds:
      Minimum = 1ms, Maximum = 75ms, Average = 19ms

Reagiert der FHEM-Server nicht auf einen ping-Befehl auf einer seiner IP-Adressen, ist vermutlich der Weg zwischen beiden Computern gestört. Der Router (Switch, Fritz!Box, Speedbox) und eventuell vorhandene Firewalls sollten kontrolliert und verifiziert werden. Manchmal hilft auch ein Reboot derselben.

Kontrolle der CUL-Definitionen

Kontrolle der Zugriffsberechtigungen

Kontrolle der Logfiles

Kontrolle der Festplatte

Backup einspielen