Hallo Leute,
vor einigen Wochen tauchte mal die Fragestellung auf, ob denn die Management-Softwares wie Domoticz oder IOBroker und andere immer wirklich wissen, ob die Geräte denn da sind und was sie gerade machen. Zumindest für Domoticz kann man sagen, dass man in der Weboberfläche lustig an- und ausschalten kann, auch wenn das Gerät physisch gar nicht am Strom hängt. Vermutlich liegt das an den virtuellen Schaltern. - Wie auch immer...
Deshalb habe ich mir ein Bash-Skript gebastelt, das mein ganzes lokales Netz abklappert, jede IP anspricht und drei Sachen nachschaut:
a) Bist du online?
b) Bist du ein Tasmota-Sonoff
c) Wenn ja, in welchem Zustand befindest du dich - An oder Aus.
Das Skript läuft derzeit nur in einer Linux-Umgebung, z. B. auch auf einem Raspberry, der irgendwo mit im Netz hängt.
Folgende Pakete (Programme) werden gebraucht:
ping - das ist standardmäßig immer installiert
curl - möglicherweise muss das mit sudo apt-get install curl installiert werden
Curl - manchmal auch cURL geschrieben - ist ein Konsolenprogramm, mit dem man das HTTP-Protokoll (und viele andere Internet-Protokolle) benutzen kann, als hätte man einen Browser zur Verfügung.
Wie arbeitet man mit dem Programm:
Unten stehendes Listing 1 oder 2 markieren, kopieren und mit einem Programm wie nano oder gedit mit einem beliebigen Namen ins Homeverzeichnis abspeichern.
Das Skript ausführbar machen mit dem Befehl: chmod +x deinprogrammname
Das Skript starten mit: ./deinprogrammname
Listing 1 Sonoff-Checker einfarbig
#!/bin/bash
#############################################################################
#Einfaches Skript zur Suche nach Tasmota geflashten Sonoffs in einem lokalen#
#Netz. Die ersten drei Ziffernblöcke müssen auf das jeweilige Netz angepasst#
#werden. Vordefiniert ist ein Fritzbox-Netz. Es könnten auch IP-Werte sein#
#wie z. B. "192.169.0.". Dies geschieht in Zeile 13 #
#Geprüft wir mit 1 Ping: keine Antwort offline und weiter. Bei einer Antwort#
#wird im zweiten Schritt geprüft, ob das Gerät auf eine Sonoff typische http#
#Abfrage reagiert. Wenn ja, ist ein Sonoff - eine quick ans dirty Prüfung. #
#Dann erfolgt eine weitere Abfrage nach dem Power Status On oder 0ff. #
#############################################################################
#Hier Netzwerk eventuell anpassen
netz="192.168.178.";
#In den nächsten beiden Zeilen wird der IP-Bereich begrenzt,
#der überprüft wird; kleinster Wert ist 1, größter 255
read -p "Gib die Start-IP an: " ip_start;
read -p "Gib die letzte IP an: " ip_stop;
#Hier beginnt die Prüfung, welche Geräte online sind und wenn sie
#online sind, ob sie auf eine Sonoff typische Phrase reagieren
for ((i=$ip_start;i<=$ip_stop;i++)); do
if p=$(ping -c1 -W1 $netz$i | grep -i '1 received'); then
echo -e "\n"$netz$i" ist online";
if a=$(curl -s http://$netz$b$i/cm?cmnd=power | grep -i 'Power'); then
echo -e $netz$i" ist ein Sonoff";
if a=$(curl -s http://$netz$b$i/cm?cmnd=power | grep -i 'Power = On'); then
echo -e $netz$b$i" ist AN\n"
else
echo -e $netz$b$i" ist AUS\n"
fi;
else
echo -e $netz$i" ist kein Sonoff\n";
fi;
else
echo -e $netz$i" ist offline";
fi;
done;
Alles anzeigen
und hier ist dieselbe Funktionalität in bunt - wenn es das Terminal unterstützt
#!/bin/bash
#############################################################################
#Einfaches Skript zur Suche nach Tasmota geflashten Sonoffs in einem lokalen#
#Netz. Die ersten drei Ziffernblöcke müssen auf das jeweilige Netz angepasst#
#werden. Vordefiniert ist ein Fritzbox-Netz. Es könnten auch IP-Werte sein#
#wie z. B. "192.169.0.". Dies geschieht in Zeile 16. #
#Geprüft wir mit 1 Ping: keine Antwort offline und weiter. Bei einer Antwort#
#wird im zweiten Schritt geprüft, ob das Gerät auf eine Sonoff typische http#
#Abfrage reagiert. Wenn ja, ist ein Sonoff - eine quick ans dirty Prüfung. #
#Dann erfolgt eine weitere Abfrage nach dem Power Status On oder 0ff. #
# #
#Erforderliche Pakete ping und curl. #
#Zur Installation sudo apt-get install ping curl in einem Terminal eingeben #
#############################################################################
#Hier Netzwerk eventuell anpassen
netz="192.168.178.";
#In den nächsten beiden Zeilen wird der IP-Bereich begrenzt,
#der überprüft wird; kleinster Wert ist 1, größter 255
read -p "Gib die Start-IP an: " ip_start;
read -p "Gib die letzte IP an: " ip_stop;
#Hier beginnt die Prüfung, welche Geräte online sind und wenn sie
#online sind, ob sie auf eine Sonoff typische Phrase reagieren
for ((i=$ip_start;i<=$ip_stop;i++)); do
if p=$(ping -c1 -W1 $netz$i | grep -i '1 received'); then
echo -e "\n\033[33m"$netz$i" ist online\033[37m";
if a=$(curl -s http://$netz$b$i/cm?cmnd=power | grep -i 'Power'); then
echo -e "\033[32m\033[1m"$netz$i" ist ein Sonoff\033[0m";
if a=$(curl -s http://$netz$b$i/cm?cmnd=power | grep -i 'Power = On'); then
echo -e "\033[45m\033[32m\033[1m"$netz$b$i" ist an\033[0m\n"
else
echo -e "\033[32m\033[031m"$netz$b$i" ist aus\033[0m\n"
fi;
else
echo -e "\033[035m"$netz$i" ist kein Sonoff\033[0m";
fi;
else
echo -e "\033[31m"$netz$i" ist offline\033[0m";
fi;
done;
Alles anzeigen
Vielleicht kann jemand außer mir damit auch noch was anfangen
Gruß
Jörg
Hier könnt ihr die beiden Skripte downloaden: