Wartungsmodus für den Terkin-Datenlogger

Basic maintenance mode

Siehe auch Maintenance mode galore.

Einleitung

Mit der neuesten Version im Repository bekommt man:

  • Einführung des Wartungsmodus, bei dem deep sleep maskiert und der Schlafzyklus auf fünf Sekunden begrenzt wird.
  • Einfache aber effektive und komfortable Aktivierung des Wartungsmodus inkl. device discovery im LAN. Anleitung: Toggle between maintenance and field mode.

Synopsis

Displays successful device discovery and maintenance mode enablement.

$ sudo python3 tools/terkin.py maintain
2019-07-10 19:49:21,698 [tools/terkin.py] INFO   : IP networks found: ['192.168.178.0/24']
2019-07-10 19:49:21,698 [tools/terkin.py] INFO   : Sending an ARP ping to discover already connected devices on network 192.168.178.0/24
2019-07-10 19:49:21,698 [tools/terkin.py] INFO   : Waiting for any devices having MAC address prefixes of ['30:ae:a4', '80:7d:3a'] to appear on your local network
2019-07-10 19:49:25,172 [tools/terkin.py] INFO   : Found device at {'mac': '80:7d:3a:c2:de:44', 'ip': '192.168.178.166'}
2019-07-10 19:49:25,172 [tools/terkin.py] INFO   : Connecting to device mode server at 192.168.178.166:666
2019-07-10 19:49:25,172 [tools/terkin.py] INFO   : Pulling 192.168.178.166 into maintenance mode

Details

Mit obigen Dingen wurden einige Aspekte implementiert, die wir bei ESP32 network discovery through LAN IP scanning and Ethernet ARP monitoring diskutiert hatten, es bildet gleichzeitig die Grundlage für Maintenance mode galore. Vielen Dank für Eure Beiträge!

Damit lassen sich bei folgenden Beiträgen aufgegriffene Dinge zukünftig komfortabler gestalten:

Es besteht nun die Möglichkeit, direkt von der commandline aus komfortabel die IP-Adresse des Geräts herausfinden zu können sowie – neueste Firmware aus dem Repository HEAD/master vorausgesetzt – das Gerät jeweils temporär in den Wartungs- bzw. wieder zurück in den Feldbetriebsmodus zu versetzen.

Unter der Haube wird dazu ein kleines UDP Beacon an das Gerät versendet, sobald es im Netzwerk gefunden werden konnte, à la

echo 'maintenance.enable()' | ncat --udp 192.168.178.20 666

Howto

Hier eine kurze Übersicht der aktuell noch etwas hemdsärmligen Bedienung:

# Device discovery only.
# Will continuously monitor local network for 
# devices and print out their MAC- and IP-addresses.
sudo python3 tools/terkin.py monitor

# Device discovery plus "maintenance mode" switchover.
# Wait for device to appear on local network, then enable maintenance mode.
sudo python3 tools/terkin.py maintain

# Same as above, but address specific device.
sudo python3 tools/terkin.py maintain 80:7d:3a:c2:de:44

# Device discovery plus "field mode" switchover.
# Wait for device to appear on local network, then disable maintenance mode.
# Note that power cycling will also do the same.
sudo python3 tools/terkin.py field

Setup

Damit das klappt, muss man noch ein paar Abhängigkeiten installieren. Wir skizzieren hier die Installation unter Linux/macOS sowie Windows.

Installationsanleitungen für Linux, macOS und Windows

Installation unter Linux/macOS

Da Python meist schon installiert ist, reicht normalerweise eine einfache Installation der benötigten Pakete à la…

pip3 install scapy netifaces netaddr

Installation unter Windows

Es handelt sich um Python 3.x für Windows, einige weitere Python Pakete, sowie die Npcap: Windows Packet Capture Library & Driver.

:warning: Es ist zu beachten, dass der MicroTerkin Agent nativ unter Windows installiert werden muss, eine Installation innerhalb von WSL funktioniert hier nicht.

Python 3 über Anaconda oder Chocolatey

Unter Windows ist der Griff zu Anaconda oft hilfreicher als der Fußweg. Danke, @MKO!

Eine weitere komfortable Alternative ist aber auch die Installation des neuesten Python 3.x

Letzteres ist u.U. sparsamer bei der Download-Größe. Anaconda hat in der Basisinstallation laut bereits ~500 MB. Danke, @clemens.

Npcap

Bei Npcap: Windows Packet Capture Library & Driver bekommt man Npcap (den Nachfolger von Winpcap) solo. Direktlink: Npcap 0.996 installer for Windows Vista/2008, 7/2008R2, 8/2012, 8.1/2012R2, 10/2016 (x86 and x64).

Python Pakete

bekommt man entweder per pip oder per conda installiert. Es handelt sich um scapy · PyPI, netifaces · PyPI und netaddr · PyPI.

# Installation per pip
pip install scapy netifaces netaddr

# Installation per conda
conda install -c conda-forge scapy netifaces netaddr
1 Like

Zwei Hinweise dazu:

Das Zurückschalten des field modes kann man auch auf ein Gerät begrenzen, wenn man die MAC mit angibt, oder? Steht in der Doku so nicht explizit drin:

sudo python3 tools/terkin.py field 80:7d:3a:c2:de:44

Hatte gestern etwas Probleme damit, den mode wieder per power cycling will / reset auf field-Mode, d.h. mit dem ursprünglichen intervall und dem deep sleep, zurückzuschalten, da der python-Befehl

sudo python3 tools/terkin.py maintain

in einer Schleife läuft und wenn das skript weiter läuft der jedes mal nach einem reset sofort wieder in den maintenance mode geschickt wird.

Entweder das skript dann vorher manuell stoppen oder das skript stoppt, wenn es die angeforderte MAC uimgeschaltet hat.

Das skript ist da sehr hartnäckig! ;-)

2019-07-12 09:14:47,235 [tools/terkin.py] INFO   : Found device at {'mac': '30:ae:a4:4f:fc:84', 'ip': '192.168.178.26'}
2019-07-12 09:14:47,235 [tools/terkin.py] INFO   : Connecting to device mode server at 192.168.178.26:666
2019-07-12 09:14:47,235 [tools/terkin.py] INFO   : Pulling 192.168.178.26 into maintenance mode
2019-07-12 09:15:16,885 [tools/terkin.py] INFO   : Found device at {'mac': '30:ae:a4:4f:fc:84', 'ip': '192.168.178.26'}
2019-07-12 09:15:16,885 [tools/terkin.py] INFO   : Connecting to device mode server at 192.168.178.26:666
2019-07-12 09:15:16,885 [tools/terkin.py] INFO   : Pulling 192.168.178.26 into maintenance mode
2019-07-12 09:15:16,978 [tools/terkin.py] INFO   : Found device at {'mac': '30:ae:a4:4f:fc:84', 'ip': '192.168.178.26'}
2019-07-12 09:15:16,978 [tools/terkin.py] INFO   : Connecting to device mode server at 192.168.178.26:666
2019-07-12 09:15:16,978 [tools/terkin.py] INFO   : Pulling 192.168.178.26 into maintenance mode
2019-07-12 09:15:17,897 [tools/terkin.py] INFO   : Found device at {'mac': '30:ae:a4:4f:fc:84', 'ip': '192.168.178.26'}
2019-07-12 09:15:17,897 [tools/terkin.py] INFO   : Connecting to device mode server at 192.168.178.26:666
2019-07-12 09:15:17,897 [tools/terkin.py] INFO   : Pulling 192.168.178.26 into maintenance mode

Hi Clemens,

schön, dass es nun auch bei Dir gut klappt und danke für die Hinweise.

As intended ;].

Es wurde nun so implementiert wie geplant. Falls es konzeptionelle Verbesserungsvorschläge gibt, können wir sie u.U. einarbeiten. Der Gedanke ist, dass man sorgenfrei auf dem Gerät arbeiten kann (inkl. power cycle), während der “maintenance mode puller” aka MicroTerkin Agent läuft. Man muss sich nur daran erinnern, ihn abzuschalten, wenn man das nicht mehr will.

Man könnte über irgendeine Art von Timeout-Verhalten nachdenken (z.B. nach 10 Minuten automatisch den Maintenance Mode wieder verlassen, wie @roh auch kurz anriss), aber a) benötigt das zusätzliche Infrastruktur/Bookkeeping und ist b) nicht workflow-deterministisch. Falls wir uns solche Dinge doch “on top” wünschen, gebt gern Bescheid.

Feedback welcome and have fun.

Viele Grüße,
Andreas.

The MicroTerkin Agent

Introduction

As we have been busy to build this small tool, there might be some explanatory words missing yet. Let’s catch up on that. Also thanks to all who participated in making this happen.

About

The MicroTerkin Agent to be (for now called tools/terkin.py) acts as a generic network scanner like a poor-man’s LAN sweeper – as outlined with the following command. Multiple ARP address prefixes can be specified comma-separated on the command line to designate devices of interest.

Synopsis

sudo python3 tools/terkin.py monitor 80-7D-3A,30-AE-A4
2019-07-12 16:24:29,024  IP networks found: ['192.168.178.0/24']
2019-07-12 16:24:29,024  Waiting for any devices having MAC address prefixes of ['80:7d:3a', '30:ae:a4'] to appear on your local network
2019-07-12 16:24:29,528  Sending ARP ping request to 192.168.178.0/24
2019-07-12 16:24:30,488  Found device at {'mac': '80:7d:3a:c2:de:44', 'ip': '192.168.178.44'}

Details

Under the hood, it works by sweeping through all sensible IP networks attached to your workstation using ARP ping requests when starting up. While sitting there and running, it will sniff for any ARP traffic to find devices of interest and optionally will invoke some actions on them.

Possible actions are the currently implemented subcommands "maintain" and "field" to pull the device into maintenance mode and put it back into field mode respectively. More details about what they actually do have been described at Wartungsmodus für den Terkin-Datenlogger and constitute the baseline for Maintenance mode galore.

1 Like