Sonntag, 27. Juni 2021

Linux - Mit curl Dateien herunterladen und Webseiten aufrufen

Durch curl ist es möglich von Webseiten (mittels Login und Cookies) auf Informationen per Kommandozeile zuzugreifen oder auch Dateien herunterzuladen. In dem Beitrag Linux - Statische Kopie einer Webseite anlegen mit wget bin ich bereits auf die Möglichkeiten von wget eingegangen.

Curl unterstützt neben HTTP eine Vielzahl von weiteren Netzwerkprotokollen wie FTP, FTPS, HTTPS, GOPHER, TELNET, DICT, FILE und LDAP.

In der Regel ist curl vorinstalliert, ansonsten geht dies über den folgenden Befehl:
sudo apt-get install curl 

Folgende Optionen lassen sich Beispielhaft mit curl ausführen

Den Inhalt der heruntergeladenen Datei in den angegebenen DATEINAME schreiben, anstatt in die Standardausgabe:
curl -o DATEINAME "URL"

Wiederaufnahme eines vorangegangenen Downloads (--continue-at OFFSET)
curl -C - "URL"

Den Anforderungs- und Antwortheader anzeigen
curl -v "URL"

HTTP-Header mit eigenen Daten einfügen (z.B. Content-Type oder Accept-Language), hierbei darf -H auch mehrfach verwendet werden.
curl -H 'Content-Type: application/json' "URL"
curl -H 'Accept-Language: de' "URL"


Zum Beispiel lässt sich so das Wetter in ASCII-Grafik auf der Konsole in unterschiedlichen Sprachen anzeigen:
curl -H 'Accept-Language: de' "https://wttr.in/Obergeis"
curl -H 'Accept-Language: en' "https://wttr.in/Obergeis" 

Verbindung SSL oder TLS herstellen
curl --sslv3 "URL"
curl --tlsv1.1 "URL"

Skripte mit python oder bash ausführen
-s, Silent or quiet mode. Don't show progress meter or error messages.
-f, (HTTP)  Fail  silently  (no  output at all) on server errors.
Kleiner Tipp, mit Hilfe von "https://explainshell.com/explain?cmd=curl+-sSL" kann man schnell heausfinden, was der Befhel bedeutet. 

curl -sf "URL" | sudo python3
Achtung: Da hier direkt die Installation eines Skripts mit höheren Rechten erfolgt, macht es ggf. Sinn erst das Skript herunterzuladen um dann mit z.B. less installer.py zu prüfen, was es genau tut.

Siehe z.B. Raspberry Pi-hole - Installation
curl -sSL https://install.pi-hole.net | bash

Verbindung über einem Proxy aufbauen
curl -x yourproxy:port "URL"
-x, <[protocol://][user@password]proxyhost[:port]>

User-Agent verändern und eine URL aufrufen
curl -LA "Mozilla/5.0 (MSIE; Windows 10)" "https://www.google.com/search?q=Obergeis"
Hinweis: Siehe auch List of User Agent strings.

Formulardaten an einen Server senden, ist mit Hilfe von curl -X POST und -F für jedes Feld (field=value), welches man beim POST hinzufügen möchte, möglich.
curl -X POST -F 'username=admin' -F 'password=123456' https://test.de/login.php
Hinweis: Weitere Beispiele finden sich unter https://gist.github.com/subfuzion/08c5d85437d5d4f00e58#file-curl-md .

Cookies erstellen und verwenden (https://curl.se/docs/http-cookies.html)
Erstellen eines Cookies
curl -c "/tmp/cookie" http://localhost:8080/login -d username=admin password=123456
Verwenden eines Cookies
curl -b "/tmp/cookie" http://localhost:8080/getUserData

Curl Befehle mit Hilfe von Firefox kopieren

Dank der Entwicklerwerkzeuge in Firefox, lassen sich curl-Befehle einfach kopieren.



Mittwoch, 23. Juni 2021

Raspberry Pi - VNC Fernwartung: Fehler - Der Desktop kann derzeit nicht angezeigt werden

In dem Beitrag Raspberry Pi - VNC Fernwartung / Zugriff ohne Bildschirm bin ich auf die Aktivierung von VNC eingegangen. Unter Umständen kann es beim Raspberry Pi ohne angeschlossenes HDMI Kabel zu der oben genannten Fehlermeldung kommen.

Wird bei Verwendung von VNC die Meldung "Der Desktop kann derzeit nicht angezeigt werden" bzw. "Cannot currently show the desktop" angezeigt, muss die Auflösung der Standardeinstellung geändert werden.


Wenn kein HDMI-Monitor angeschlossen ist, muss in der config.txt eine Bildschirmauflösung angeben werden. Hierfür kann man sich z.B. per SSH mit dem Pi verbinden und die Konfiguration per Konsole anpassen.

sudo raspi-config

==> 2 Display Options     Configure display settings


==> D1 Resolution         Set a specific screen resolution

==> <Finish>

==> Reboot

Nach ca. 20 sec sollte dann eine Verbindung per VNC wieder möglich sein!

Raspberry Pi - Wärmebildkamera AMG8833 thermal infrared camera

Für dieses Projekt setze ich den neuen Raspberry Pi 4 ein. Hierfür werden die Daten vom AMG8833 Wärmebildkamerasensor gelesen und in Temperaturmesswerte umgewandelt, damit basierend auf den Messwerten Live-Wärmebilder angeizeigt werden können.

Der AMG8833 ist ein 64-Pixel-Temperatursensor (8x8-Array), der von Panasonic entwickelt wurde. Er kommuniziert über den I2C-Bus (Raspberry Pi - OLED Display (SSD1306) I2C ansteuern und Temperatur auslesen), wodurch er direkt mit Raspberry Pi und Arduino kompatibel ist.
Der AMG8833 bietet sich daher für Anwendungen in der Wärmebildgebung, Wärmeübertragungsanalysen, der Überwachung der menschlichen Temperatur, des Heizungs- und Klimamanagements, der industriellen Steuerung und anderer Anwendungen bei der berührungslosen Temperaturmessung an.


In diesem Beitrag wird der AMG8833 mit einem Raspberry Pi 4 verbunden (I2C-Bus), um die Temperaturen von Objekten über berührungslose Strahlungsmessung darzustellen. Benötigt wird folgendes:

Folgender Aufbau ergibt sich inklusive Verwendung des AMG8833, siehe auch folgende Grafik inkl. der korrekten Zuordnung für die Verkabelung (I2C-Adresse des AMG8833 auf 0x69):


Der Sensor wird zur Spannungsversorgung an 5 Volt (Pin 2) und Ground (ein GND z.B. Pin 6, 9, 14 usw.) und an die I2C Schnittstelle des Raspberry Pi angeschlossen. Für I2C muss man Pin 3 (SDA) und 5 (SCL) verwenden.

I2C Kommunikation mit dem AMG8833

I2C Schnittstelle im Raspbian Betriebssystem einschalten (per GUI)

 


 

I2C Schnittstelle im Raspbian Betriebssystem einschalten (per Konsole)

sudo nano /etc/modules

Und die folgenden 2 Zeilen hinzufügen:


i2c-bcm2708
i2c-dev


Jetzt muss noch die Konfigurationsdatei angepasst werden:
sudo nano /boot/config.txt

dtparam=i2c_arm=on #entfernen
dtparam=i2s=on     #entfernen

Jetzt muss noch ein reboot erfolgen, damit die Einstellungen übernommen werden:
sudo reboot

I2C Verbindung testen

Damit man jetzt die Verbindung testen kann, sollte noch das folgemde Packet installiert werden:
sudo apt-get install i2c-tools

Mit dem folgenden Befehl kann überprüft werden, ob die Verbindung zum Display funktioniert bzw. verbunden ist:
i2cdetect -y 1


Hinweis: Mit dem Befehl i2dect werden alle 256 Adressen abgefragt: Antwortet ein Chip, sieht man seine Adresse auf dem Raster.

Um mit Python per I2C auf den Sensor zugreifen zu können, benötigt man zusätzlich die smbus-Bibliothek, die in Raspbian Linux enthalten ist.

sudo apt-get install -y python-smbus

Mögliche Projekte

Python Thermal Camera with Raspberry Pi (AMG8833) - Python Thermal Camera with Raspberry Pi (AMG8833)

Build a thermal camera with Raspberry Pi and Go

Adafruit AMG8833 8x8 Thermal Camera Sensor - Build your own mini thermal camera

1979 Apollo Pi Thermal Camera - A vintage microwave monitor converted into a thermal camera! Raspberry Pi powered, with Adafruit components.

Samstag, 19. Juni 2021

Windows 10 - Ruhezustand funktioniert nicht mehr

Ich habe bei meinem Dell XPS 13 7390 i7-10510U nach einiger Zeit (2-3 Tage) das Problem, dass der Ruhezustand nicht mehr funktioniert. Wenn ich den PC per Menü in den Ruhezustand versetze, sieht zunächst alles normal aus. Allerdings erscheint nach wenigen Sekunden der Sperrbildschirm und das Versetzen in den Ruhezustand hat nicht geklappt.

Nach einem Neusart, funktionierte anschließend der Ruhezustand wieder für ein paar Tage. Jedoch immer wieder das gleiche Verhalten! Aktuelles Bios, Treiber und Windows Updates wurden regelmäßig installiert, dies führte aber zu keiner Verbesserung.

Hilfe verschafft mir aktuell die Funktion den Ruhezustand per Eingabeaufforderung (cmd) zu deaktivieren und anschließend wieder zu aktivieren. Danach kann ich wieder mein XPS in den Ruhezustand versetzen.

  1. Klick mit rechter Maustaste auf Windows Startbutton
  2. Eingabeaufforderung (Administrator) auswählen
  3. Benutzerkontensteuerung mit "Ja" bestätigen
  4. In der Eingabeaufforderung die folgenden Befehle eingeben und mit [Enter] bestätigen:
    • powercfg /hibernate off
    • powercfg /hibernate on

Siehe auch https://docs.microsoft.com/de-de/troubleshoot/windows-client/deployment/disable-and-re-enable-hibernation .

Freitag, 18. Juni 2021

Raspberry Pi-hole - Backup configuration (settings & lists)

In dem Artikel Raspberry Pi-hole - Installation habe ich beschrieben, wie die Installation auf einem Raspberry Pi durchgeführt werden muss. Ich möchte daher kurz das Sichern der Pi-Hole-Konfiguration (Einstellungen & Listen) eingehen.

Ein Pi-hole Backup erstellt man unter dem Menüpunkt:

  • Settings / Teleporter / Backup

Anschließend kann man auf dem neuen Pi wieder ein Restore durchführen.

Mittwoch, 16. Juni 2021

Windows - Neues Benutzerkonto mittels Befehlszeile (CMD) hinzufügen

Mittlerweile versucht Microsoft immer häufiger den "Konto Zwang" durchzusetzen, wie bereits in dem Artikel Windows - Eingabeaufforderung während der Installation öffnen erwähnt. So benötigt man mittlerweile bis zu vier Klicks, bis man ein weiteres "lokales Benutzerkonto" hinzufügen kann. Daher möchte ich kurz auf die Möglichkeit des Anlegens unter der Kommandozeile eingehen.

Ein neues Benutzerkonto auf dem lokalen Computer (per GUI) hinzufügen:

     

Ein neues Benutzerkonto auf dem lokalen Computer (per CMD) hinzufügen:

net user username passwort /ADD


Soll das Passwort beim Hinzufügen eines neuen Benutzerkontos nicht sichtbar sein, ist dies mit dem folgenden Befehl möglich:

net user /add username *

Um z.B. "Sebastian" zur Administratorengruppe hinzuzufügen, muss der folgende Befehl ausgeführt werden.

net localgroup administrators Sebastian /add

Alle möglichen Befehle lassen sich mit dem Kommando net help user anzeigen.


Dienstag, 1. Juni 2021

ImageMagick - Wasserzeichen (watermark) einem Bild hinzufügen

In dem Artikel Raspberry Pi - Camera Modul V2.1 bin ich bereits kurz auf ImageMagick eingegangen, um das Bild meiner Webcam anzupassen. Mittlerweile nutzen viele Dienste ungefragt meine Webcam Bilder und schneiden sogar den Copyright Hinweis einfach ab (siehe z.B. https://www.outdooractive.com/de/webcam/obergeis-webcam-neuenstein/55939506/). Daher habe ich mich entschieden in jedes Bild ein größeres Wasserzeichen einzubauen und das Vorgehen hier zu beschreiben.


Damit man ein Wasserzeichen in sein Bild einbauen kann, wird natürlich ein passendes Logo benötigt.
Ich nehme dafür das bereits vorhandene Logo meiner Android App und setze es oben rechts (northeast) in die Ecke.

Dafür ist der folgende Befehl notwendig:

convert cam.jpg ic_launcher_192x192.png -gravity northeast -geometry +10+10 -composite cam-watermark.jpg

Was genau bedeuten die beiden Befehle?

  • convert - liest Bilder, bearbeitet sie und speichert sie ab
  • geometry +10+10 - um das Wasserzeichen 10 Pixel von der ausgewählten Ecke nach innen zu verschieben
  • composite - überlagert mehrere Bilder zu einem Bild