Archiv ‘IT’

Sonntag, 4. April 2021

Netatmo Modulchaos: Nach Jahren gelöst

Kürzlich konnte ich ein langjähriges Problem mit einer Netatmo Weather Station-Installation eines Bekannten lösen.

Auf Grund der Beschränkung der Anzahl Innenmodule pro Basisstation betreibt er zwei Basisstationen.

Die Temperaturwerte der Module werden von einem Script über die Netatmo API abgefragt und dann auf einem Dashboard angezeigt.

Das Problem: Ein bestimmtes Innenmodul fehlte bisher in den API-Daten, obwohl dessen Werte in der Netatmo App problemlos angezeigt werden. Anstelle der Stationsdaten wurde im Dump der PHP-Variable mit den API-Nutzdaten null angezeigt, umgeben von den Daten anderer Innenmodule.

Vor einigen Wochen entschied ich mich, dem Problem ein für allemal auf den Grund zu gehen — und es zu lösen. Nach längerem hin- und her mit dem Netatmo Support gab mir Leslie letzte Woche den entscheidenden Hinweis: Er wies mich darauf hin, dass ein Innenmodul an beiden Basisstationen angemeldet sei. Aus Sicht der Entwickler könnte dies das Problem verursachen.

Darauf angesprochen erwähnte der Bekannte, dass er seinerzeit das Modul zuerst an der einen Basisstation angemeldet hatte, sich dann aber anders überlegt und es dann mit der anderen Basisstation verbunden hatte.

Bemerkung am Rande: Komisch, dass Netatmo sowas überhaupt zulässt (zuliess?). Meine Vermutung: In der Datenbank wird von einer Basisstation auf die Modul IDs verlinkt, weshalb verschiedene Basisstationen auf dasselbe Modul linken können (n:1). Besser wäre es umgekehrt: Ein Modul sollte zu einer Basisstation gelinkt sein (1:1).

In der iOS App wurde das Geister-Innenmodul nicht angezeigt. Im Web GUI hingegen gab pro Basisstation je ein Modul-Eintrag mit einem Fragezeichen, doch in den Einstellungen wurde das Modul dann doch nicht aufgelistet.

Schlussendlich entschied ich mich für einen anderen Weg: Ich lud die App NetatmoModulesManager.app herunter. Es handelt sich um eine macOS App, die man mit einer Google-Suche nicht einfach so zum Download findet — deshalb hier die Wegbeschreibung:

Wenn man auf dieser Seite startet und den Link No smartphone? No tablet? Click here for an alternative installation using your computer. klickt, loggt man sich in Netatmo ein und es wird einem dann der Download-Link präsentiert (meinem Verständnis nach setzt dies voraus, dass man bereits eine Weather Station in Betrieb hat?). Der Direktlink lautet derzeit (4. April 2021) fw.netatmo.net/NetatmoModulesManager_MacOS.dmg.

Nach der Installation verbanden wir nacheinander die zwei Basisstationen mit dem Mac (Screenshots der Oberfläche). Hierzu starteten wir zuerst die App, klickten auf Weiter und schlossen die Basisstation erst an, als wir dazu aufgefordert wurden. Nach 10-15 Sekunden warten erschien die Basisstation dann auf dem Bildschirm. Als erstes wurde ein Firmware-Update durchgeführt, anschliessend startete die Basisstation neu und uns wurde in der App die Liste der Aussen- und Innenmodule angezeigt.

Leider entsprachen die Namen der Module hier nicht dem Web GUI. Ich notierte deshalb die Modul ID in der App, und verglich diese mit dem Web GUI um sicher zu gehen, dass ich die richtigen Modulnamen notieren konnte.

Schlussendlich fand ich den Übeltäter; d.h. ein Modul, dessen ID bei beiden Basisstationen aufgeführt wurde. In der App löschte ich das richtige Modul von der richtigen Basisstation — und die App stürzte ab. Beim zweiten Versuch gelang es tatsächlich, das Modul zu löschen.

Seither ist das API-Problem gelöst.

Tags: , , , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Samstag, 3. April 2021

Ubiquiti UniFi UAP-AC-M zurücksetzen

Da heute um ungefähr 4 Uhr morgens mein Ubiquiti UniFi AP AC PRO plötzlich und ohne Vorwarnung verstorben ist (vermutlich, weil ich dessen Sendeleistung letzte Woche manuell auf High gesetzt habe …), musste ich ihn mit einem hier ungenutzt herumliegenden Ubiquiti UniFi UAP-AC-M ersetzen.

Leider klappte der Reset des noch für den vorherige Standort konfigurierten Access Points mit fünf Sekunden langem Druck auf den physischen Reset-Knopf nicht (wie im Handbuch auf Seite 7 beschrieben).

Schlussendlich loggte ich mich deshalb mittels SSH auf den Access Point ein (natürlich muss man dazu die Zugangsdaten der vorher genutzten Installation kennen, sonst hat man Pech), und führte folgenden Befehl aus:

# syswrapper.sh restore-default
Clearing CFG ... [%100] done!

Nach dem Neustart erschien der Access Point im Device Tab meines UniFi Controllers und konnte dort problemlos adoptiert werden.

Tags: , , , , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Samstag, 3. April 2021

IKEA TRADFRI Gateway plötzlich offline

Heute in der Nacht erhalte ich von monit plötzlich die Meldung, dass mein IKEA TRADFRI Gateway offline gegangen sei.

Das Gateway verrichtet seinen Dienst seit Februar 2020 anstandslos und steuert zwei FLOALT Lampen in der Stube. Sowie einen FYRTUR Verdunkelungsrollo, den ich aussenseitig bei der Balkontür angebracht habe, um zu verhindern, dass die Morgensonne die Küche zu sehr aufheizt.

Fast gleichzeitig stirbt ein Ubiquiti UniFi UAP AC PRO (vermutlich, weil ich dessen Sendeleistung letzte Woche manuell auf High gesetzt habe …), weshalb ich zuerst vermute, dass TRADFRI ein Kollateralschaden des kaputten Access Points ist. Bis ich realisiere, dass das Gateway ja mittels Ethernet-Kabel am Switch hängt … hängt wortwörtlich wohl doch nicht damit zusammen.

Ausserdem: Mit der IKEA Home Smart App unter iOS ist es mir nicht möglich, auf das Gateway zuzugreifen. Mysteriös!

Mehrmals trenne ich das Gateway vom USB-Strom, es kommt hoch, scheint ein paar Minuten zu funktionieren, doch dann stirbt es. Ich starte den Switch neu, stecke auch das Ethernet-Kabel einmal aus und wieder ein, nichts hilft.

Auf dem DHCP-Server sehe ich, dass das Gateway am Vormittag seine fix zugewiesene IP bezogen hat, und in den Logs von Bind9 sehe ich, dass das Gateway regelmässig DNS-Queries absetzt (auf webhook.logentries.com mindestens alle 10 Sekunden, der Abfrageabstand kann sich aber auch auf ein bis zwei Minuten ausdehnen; sowie auf einen AWS IoT service mit kryptischem Subdomain %random%.iot.eu-central-1.amazonaws.com).

Doch wenn ich das Gateway pinge, antwortet es eine Weile lang (teilweise mit einer Latenz von bis zu 20 Sekunden — muss eine extrem schwachbrünstiger Compute-Chip verbaut sein), und dann ganz lange Perioden, wo alle Pings im Nirvana enden.

Plötzlich die Erkenntnis, dass ich gestern ja die Liste der mit Bind9 RPZ geblockten Ad- und Tracking-Server aktualisiert habe. Und tatsächlich, pixelserv-tls zeigt in seinen Logs seit dem Update Hits vom TRADFRI Gatway auf die Domain webhook.logentries.com.

Ich generiere die Liste der Ad- und Trackingserver neu (ich beziehe sie von Steven Black), whiteliste aber webhook.logentries.com.

Die IKEA Home Smart App kann sich weiterhin nicht mit dem Gateway verbinden. Wahlweise werden mir eine der folgenden zwei Meldungen gezeigt:

Der Hilfetext könnte auch noch relevant werden:

Schlussendlich reicht es mir, und ich wähle den kleinen Link Disconnect Gateway aus, um das Gateway aus der App zu löschen. Hinzufügen kann ich dasselbe Gateway sowohl mittels Barcode als auch manuell via IP hingegen nicht mehr.

Schlussendlich entscheide ich mich, das Gateway noch einmal vom Strom zu trennen und neu zu starten. Und siehe da: Aus irgendeinem Grund klappt die Registration des Gateways mit der App nach dem Neustart reibungslos.

In der App entdecke ich, dass die Firmware des Gateways am 25. März 2021 das letzte Mal aktualisiert wurde:

Könnte es sein, dass die Firmware buggy ist? Ich weiss es nicht; bis jetzt kann ich die Lichter wieder mittels unserer Apple Homepods ein- und ausschalten, sowie den Rollo betätigten.

Ich behalte die Situation im Auge.

Tags: , , , , , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Freitag, 2. April 2021

Videos auf WhatsApp hochladbar machen

Soeben wollte ich einen Playback-Mitschnitt meiner Wyze-Kamera über WhatsApp teilen, doch auf dem iPhone erhalte ich beim Versand die Meldung:

This video could not be sent. Please choose a different video.

Unter macOS war der Versand möglich, das Video wird aber nicht abspielbar angezeigt, sondern nur als Attachment zum Download angeboten (als wäre es irgendein Binärformat).

Die Lösung:

$ ffmpeg -i "2021-04-01 23-25.mp4" -c:v libx264 -profile:v baseline -level 3.0 -pix_fmt yuv420p "2021-04-01 23-25.whatsapp.mp4"

Quelle: ffmpeg – whatsapp: video format not supported

Wie unterscheiden sich die beiden Videoformate?

$ ffmpeg -i "2021-04-01 23-25.mp4"
...
Guessed Channel Layout for Input Stream #0.1 : mono
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '2021-04-01 23-25.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: mp42isom
  Duration: 00:01:39.40, start: 0.000000, bitrate: 841 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1920x1080, 1143 kb/s, 15 fps, 15 tbr, 90k tbn, 20 tbc (default)
    Metadata:
      encoder         : JVT/AVC Coding
    Stream #0:1(und): Audio: pcm_alaw (alaw / 0x77616C61), 8000 Hz, mono, s16, 64 kb/s (default)

sowie der WhatsApp-kompatible Clip:

$ ffmpeg -i "2021-04-01 23-25.whatsapp.mp4" 
...
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '2021-04-01 23-25.whatsapp.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.45.100
  Duration: 00:01:39.53, start: 0.000000, bitrate: 1628 kb/s
    Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 1920x1080, 2344 kb/s, 15 fps, 15 tbr, 15360 tbn, 30 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 8000 Hz, mono, fltp, 36 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

Tags: , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 31. März 2021

Cacti motzt über cactiNotifyDeviceFailedPoll

SNMPAGENT WARNING: No notification receivers configured for event: cactiNotifyDeviceFailedPoll (CACTI-MIB), severity: medium

Die Lösung: Aus irgendeinem Grund wurde in der Administrationsoberfläche folgende Einstellung aktiviert, die man nun deaktivieren sollte, wenn man die Fehlermeldung nicht mehr im Log sehen möchte:

  1. Console
  2. Configuration
  3. Settings
  4. Poller
  5. SNMP Agent Support von Enabled auf Disabled setzen

Quelle: about snmpagent warning

Tags: , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 28. März 2021

Mit gehärtetem SSH-Client kann man sich nicht mehr auf UniFi-Geräte einloggen

$ ssh us-8-60w
Unable to negotiate with 10.1.2.3 port 22: no matching MAC found. Their offer: hmac-sha1

Bummer. Ich musste meine gehärtete ~/.ssh/config folgendermassen abschwächen, um mich per SSH wieder auf den Access Point einloggen zu können:

...
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com,hmac-sha1
...

Siehe auch SSH Into Ubiquiti Access Point

Die lokal verfügbaren MACs zeigt man folgendermassen an:

$ $ ssh -Q mac
hmac-sha1
hmac-sha1-96
hmac-sha2-256
hmac-sha2-512
hmac-md5
hmac-md5-96
umac-64@openssh.com
umac-128@openssh.com
hmac-sha1-etm@openssh.com
hmac-sha1-96-etm@openssh.com
hmac-sha2-256-etm@openssh.com
hmac-sha2-512-etm@openssh.com
hmac-md5-etm@openssh.com
hmac-md5-96-etm@openssh.com
umac-64-etm@openssh.com
umac-128-etm@openssh.com

Tags: , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 28. März 2021

Auf einem UniFi Switch die Vitaldaten eines SFPs auslesen

Dieses Anliegen ist zum Glück deutlich besser dokumentiert als bei einem EdgeRouter ER-X-SFP, generell aber etwas komplizierter umgesetzt:

Nachdem man sich per SSH auf den UniFi Switch mit SFP-Modul eingeloggt hat, gibt man folgende Befehle ein:

# telnet localhost
(UBNT) >show fiber-ports optics all

                                    Output    Input
Port      Temp  Voltage  Current     Power    Power   TX     LOS
           [C]   [Volt]     [mA]     [dBm]    [dBm]   Fault
--------  ----  -------  -------   -------  -------   -----  ---
0/9       42.9    3.284     34.3    -5.983   -8.520   No     No

Quelle: SFP/SFP+ info on UniFi switches

Nachtrag

Um anzuzeigen, was genau für SFPs im Switch verbaut sind, verwendet man folgenden Befehl (Achtung, es handelt sich um einen anderen Switch als den obigen):

# swctrl sfp show
Port  Vendor Name      Serial Number    Part Number      Rev  Compliance
----  ---------------- ---------------- ---------------- ---- ----------------
   9  UBNT             X20061111111     UF-RJ45-1G       1.0  1000T           
  10  UBNT             X20061111112     UF-RJ45-1G       1.0  1000T

Quelle: Ubiquiti US-16-XG 10GbE switch command line

Tags: , , , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 28. März 2021

Auf einem ER-X-SFP die Vitaldaten eines SFPs auslesen

Nirgends sauber dokumentiert, habe ich es nach einigen Stunden Recherche geschafft, die Temperatur, die Spannung, den Strom sowie die Sende- und Empfangsstärke eines in einem ER-X-SFP verbauten Fiber7-SFPs auszulesen:

/usr/sbin/ubnt-hal getSfp eth5
connector=LC
vendor=FLEXOPTIX       
oui=38-86-02
part=S.B1312.10.XDL  
rev=A   
serial=1234567
date=170110  
temp=67.601 C
voltage=3.23 V
current=17.03 mA
tx_power=0.15 mW
rx_power=0.23 mW
tx_fault=no
rx_los=no

Diesen goldenen Tipp erhielt ich von diesem Kommentar im Community-Thread Support for g.fast SPF. Was /usr/sbin/ubnt-hal sonst noch kann, ist im (leider seit 2013 nicht mehr aktualisierten) Artikel Undocumented EdgeOS commands beschrieben.

Wieso ich wusste, dass das geht? Im Router GUI werden diese Daten angezeigt, wenn man mit der Maus über den im Header graphisch dargestellten SFP-Port fährt. Das GUI holt diese Daten über die Websockets-Schnittstelle /ws/stats, welche von lighthttpd auf den Socket /tmp/ubnt.socket.statsd zeigt. Leider habe ich nicht herausgefunden, wie ich diesen Socket von der Kommandozeile aus ansprechen kann.

Tags: , , , , , , , , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Freitag, 29. Januar 2021

Welcher Linux-Prozess schreibt am meisten Daten auf die Festplatte?

Ganz einfach, dafür installiert man sich unter Debian GNU/Linux am Besten das Tool iotop:

# apt-get install iotop

Sofort habe ich das soeben installierte Tool gestartet, wurde aus der sich ständig wechselnden Ausgabe aber nicht schlau.

Nach einigen Recherchen im Netz fand ich dann die Startparameter, um die (jedenfalls von mir) gesuchte Diagnose-Funktionalität herbeizuzaubern:

# iotop --accumulated --only --processes
  • --accumulated Summiere alle Lese- und Schreibaktivitäten eines Prozess fortlaufend
  • --only Zeige nur Prozesse, welche auch tatsächlich von der Festplatte lesen oder auf sie schreiben
  • --processes Führe nur Prozesse auf, nicht aber Threads

Nachgelesen unter man iotop.

Anschliessend hilft es vermutlich, mittels Cursor rechts resp. Cursor links diejenige Spalte auszuwählen, nach welcher man die Ausgabe sortieren möchte. Für meinen Anwendungszweck war das natürlich die Spalte DISK WRITE. Die ausgewählte Spalte erkennt man an der Fettschrift sowie dem rechtsstehenden Grösser als.

Tags: , , , , , , , , , , ,
Labels: IT, Linux

Keine Kommentare | neuen Kommentar verfassen

Dienstag, 1. Dezember 2020

Mehrere Unix Timestamps auf der macOS Kommandozeile in Daten umwandeln

Voraussetzung: MacPorts und das Utility gdate (unter Linux: date) (Teil des Pakets coreutils) sind installiert.

$ python -mjson.tool < netatmo.json | grep utc | cut -d ":" -f 2 | awk '{print $1}' | xargs -I '{}' gdate -d "@{}"
Mon Nov 30 22:28:06 CET 2020
Mon Nov 30 22:27:57 CET 2020
Mon Nov 30 22:28:03 CET 2020
Mon Nov 30 22:27:38 CET 2020
Mon Nov 30 22:28:03 CET 2020
Mon Nov 30 22:28:03 CET 2020
Mon Nov 30 22:28:03 CET 2020
Mon Nov 30 17:07:34 CET 2020
Mon Nov 30 17:07:21 CET 2020
Mon Nov 30 17:07:21 CET 2020
Mon Nov 30 20:03:52 CET 2020
Mon Nov 30 20:03:52 CET 2020
Mon Nov 30 20:03:52 CET 2020
Mon Nov 30 20:03:52 CET 2020
Mon Nov 30 20:03:46 CET 2020
Mon Nov 30 22:07:42 CET 2020
Mon Nov 30 22:07:00 CET 2020
Mon Nov 30 22:07:07 CET 2020

Im vorliegenden Fall nahm mich Wunder, wann meine Netatmo-Sensoren das letzte Mal einen Wert an den Server übertragen hatten.

Mindestens zwei Stationen mit einer handvoll Sensoren haben den Wert seit gestern nicht mehr aktualisiert. Ich vermute auf Grund dieses Absturzes.

Hierzu lud ich über die Netatmo API das JSON mit den Daten aller meiner Stationen herunter, gab das JSON schön formatiert aus (ein Key-Value Pair pro Zeile), selektierte die Zeilen mit dem Attribut time_utc, isolierte deren Wert — die Unix Timestamp (ein Integer), entfernte die Leerzeichen vor und nach dem Wert und übergab die Liste der Werte mittels xargs dem Tool gdate zur Umwandlung in ein menschenlesbares Datum.

Tags: , , , , , , , , , , , , , ,
Labels: Apple, IT, Linux

Keine Kommentare | neuen Kommentar verfassen