Uli Köhler

Lösung für KiCAD: Unable to add inotify watch: (error 28: Auf dem Gerät ist kein Speicherplatz mehr Verfügbar)

Problem:

Beim Öffnen von KiCAD auf Linux siehst du die Folgende Fehlermeldung Unable to add inotify watch: (error 28: No space left on device):

Lösung:

Erhöhe die Anzahl der inotify-Watches, die gleichzeitig aktiv sein dürfen:

echo fs.inotify.max_user_watches=65536 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

und starte KiCAD danach neu.

Posted by Uli Köhler in KiCAD

Interaktive Karte des Landkreis Ahrweiler mit leaflet.js darstellen

Das Folgende Beispiel zeigt das Gebiet um den Landkreis Bad Ahrweiler als Übersichtskarte. Als Kartenmaterial wird Stamen Terrain verwendet, um einen guten Überblick über die physische Geographie zu geben – weiterhin bietet Stamen den Vorteil, dass kein API-Key benötigt wird und somit auch keine spezifischen Einschränkungen für die Nutzung vorhanden sind:

<html>
    <head>
        <link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet.css"
        integrity="sha512-xodZBNTC5n17Xt2atTPuE1HxjVMSvLVW9ocqUKLsCC5CXdbqCmblAshOMAS6/keqq/sMZMZ19scR4PsZChSR7A=="
        crossorigin=""/>
        <script src="https://unpkg.com/[email protected]/dist/leaflet.js"
        integrity="sha512-XQoYMqMTK8LvdxXYG3nZ448hOEQiglfqkJs1NOQV44cWnUrBc8PkAOcXy20w0vlaXaVUearIOBhiXZ5V3ynxwA=="
        crossorigin=""></script>
        <script type="text/javascript" src="https://stamen-maps.a.ssl.fastly.net/js/tile.stamen.js?v1.3.0"></script>
        <style>
            #ahrweiler-map { width: 500px; height: 500px; }
        </style>
    </head>
    <body>
        <div id="ahrweiler-map"></div>
        <script type="text/javascript">
            var layer = new L.StamenTileLayer("terrain");
            var map = new L.Map("ahrweiler-map", {
                /* Zentrum: Landkreis Bad Ahrweiler */
                center: new L.LatLng(50.48, 7.09),
                /* Zoom 9.5, um den ganzen Landkreis zu zeigen */
                zoom: 9.5
            });
            map.addLayer(layer);
        </script>
    </body>
</html>

Interaktives Beispiel

Größe der Karte anpassen:

Die Breite und Höhe der Karte kann in der Folgenden Zeile auf eigene Bedürfnisse angepasst werden:

#ahrweiler-map { width: 500px; height: 500px; }
Posted by Uli Köhler in Leaflet

Was ist ein NPTH in der Elektronik/PCB-Fertigung?

Ein NPTH ist ein Non-plated through hole, das heißt ein nicht durchkontaktiertes Loch in einer Platine.

Posted by Uli Köhler in Elektronik

Wireguard automatisch starten mit systemd

Für eine bestehende wg-quick-Konfiguration, z.B. /etc/wireguard/wg0.conf, kann der automatische Start des Interfaces mit systemd wie Folgt aktiviert werden:

sudo systemctl enable --now wg-quick@wg0

 

Posted by Uli Köhler in Wireguard

O2-DSL-Festnetz-Anschluss: Rufnummernunterdrückung aktivieren

Bei O2-DSL-Festnetz-Anschlüssen (sip.alice-voip.de) kann die Rufnummernunterdrückung für einen Anruf mit dem Vorwahlcode

*31*

aktiviert werden. Das heißt, anstatt die 089123456789 zu wählen, wählt man

*31*089123456789

um die Rufnummer zu unterdrücken. Die Rufnummernunterdrückung ist nur für diesen Anruf aktiviert und hat keinen Einfluss auf weitere Anrufe.

Posted by Uli Köhler in FreePBX

O2 DSL SIP Trunk mit FreePBX und pjsip

O2-DSL-Anschlüsse bieten über sip.alice-voip.de einen SIP-Telefonie-Anschluss, der in typischen Konfigurationen allerdings nur über die FritzBox zugänglich ist.

Der Anschluss von sip.alice-voip.de über FreePBX bzw. Asterisk ist größtenteils undokumentiert – besonders schwierig zu finden ist eine Konfiguration mit dem chan_pjsip-Modul, denn die öffentlich dokumentierten Einstellungen. Wir haben die Folgenden Einstellungen per trial und error herausgefunden und

Am wichtigsten ist, in den advanced-Einstellungen des PJSIP-Trunks den From User-Header auf die Telefonnummer im internationalen Format ohne + zu setzen, d.h. auf z.B. 4989123456789. Als SIP-Server muss sip.alice-voip.de eingetragen werden. Abgesehen von den üblichen (offensichtlichen) Nutzername/Passwort-Einstellungen können alle anderen Einstellungen auf default gelassen werden.

Posted by Uli Köhler in FreePBX

RTC-Batterielebensdauer-Rechner

Onlinerechner für die RTC-Batterielebensdauer (z.B. CR2032) für RTCs.

Hinweis: Eine CR2032 hat typischerweise eine Kapazität von 220 mAh

TechOverflow-Online-Rechner:
Du kannst hier auch Werte mit SI-Suffix eingeben, z.B. 12.2m (entspricht 0.012) oder 14k (14000) oder 32u (0.000032) und Werte mit Einheiten (z.B. 12V).
Die Ergebnisse werden live während der Eingabe berechnet und direkt unter dem Rechner angezeigt, also musst du nicht Return drücken oder auf einen Berechnen-Button klicken. Stelle nur sicher, dass alle Eingabefelder grün sind, indem du valide Werte einträgst.

Ah

A

Posted by Uli Köhler in Calculators, Elektronik, Online-Rechner

Größe eines ByteIO in Python herausfinden

Um die Größes der Daten herauszufinden, die in einem io.BytesIO-Objekt in Python gespeichert sind, benutze

mein_bytesio.getbuffer().nbytes
Posted by Uli Köhler in Python

Ist mein BytesIO leer oder nicht (Python)?

Um herauszufinden, ob eine BytesIO-Instanz leer ist oder nicht, rufe die Größe des Bytes IO auf und überprüfe, ob diese > 0 ist:

mein_bytesio.getbuffer().nbytes > 0:

Das Folgende Beispiel zeigt, wie man in einer if-Abfrage überprüft, ob ein BytesIO-Objekt leer ist:

if mein_bytesio.getbuffer().nbytes > 0:
    print("mein_bytesio ist leer")
else:
    print("mein_bytesio ist NICHT leer")

 

Posted by Uli Köhler in Python

Wieviele Pins hat ein PCIe-Stecker/Buchse?

Ein PCIe x1-Steckverbinder hat 36 pins (18 pins pro Seite)

Ein PCIe x4-Steckverbinder hat 64 pins (32 pins pro Seite)

Ein PCIe x8-Steckverbinder hat 98 pins (49 pins pro Seite)

Ein PCIe x16-Steckverbinder hat 164 pins (82 pins pro Seite)

Ein PCIe x24-Steckverbinder hat 230 pins (115 pins pro Seite)

Quelle: Samtec-Katalog, Amphenol-Datasheet (x24)

 

Posted by Uli Köhler in Elektronik

Komplette AWG zu mm² Fläche / mm Durchmesser-Tabelle

Diese Tabelle zeigt alle AWG-Werte von 0000 AWG bis AWG41

AWGmm² areamm diameter
4/0 or 0000 AWG10711.68 mm
3/0 or 000 AWG8510.40384 mm
2/0 or 00 AWG67.4 mm²9.26592 mm
0 AWG53.5 mm²8.25246 mm
1 AWG42.4 mm²7.35 mm
2 AWG33.6 mm²6.54 mm
3 AWG26.7 mm²5.83 mm
4 AWG21.2 mm²5.19 mm
5 AWG16.8 mm²4.62 mm
6 AWG13.3 mm²4.11 mm
7 AWG10.6 mm²3.67 mm
8 AWG8.35 mm²3.26 mm
9 AWG6.62 mm²2.91 mm
10 AWG5.27 mm²2.59 mm
11 AWG4.15 mm²2.3 mm
12 AWG3.31 mm²2.05 mm
13 AWG2.63 mm²1.83 mm
14 AWG2.08 mm²1.63 mm
15 AWG1.65 mm²1.45 mm
16 AWG1.31 mm²1.29 mm
17 AWG1.04 mm²1.15 mm
18 AWG0.823 mm²1.024 mm
19 AWG0.653 mm²0.912 mm
20 AWG0.519 mm²0.812 mm
21 AWG0.412 mm²0.723 mm
22 AWG0.325 mm²0.644 mm
23 AWG0.259 mm²0.573 mm
24 AWG0.205 mm²0.511 mm
25 AWG0.163 mm²0.455 mm
26 AWG0.128 mm²0.405 mm
27 AWG0.102 mm²0.361 mm
28 AWG0.0804 mm²0.321 mm
29 AWG0.0646 mm²0.286 mm
30 AWG0.0503 mm²0.255 mm
31 AWG0.0404 mm²0.16002 mm
32 AWG0.0320 mm²0.2032 mm
33 AWG0.0254 mm²0.18034 mm
34 AWG0.0201 mm²0.16002 mm
35 AWG0.0160 mm²0.14224 mm
36 AWG0.0127 mm²0.12700 mm
37 AWG0.0100 mm²0.11430 mm
38 AWG0.00797 mm²0.10160 mm
39 AWG0.00632 mm²0.08890 mm
40 AWG0.00501 mm²0.07874 mm
Posted by Uli Köhler in Elektronik

Wie kann man in Python eine E-Mail mit Anhang per SMTP versenden?

Dieses Bespiel zeigt, wie man in Python eine E-Mail mit Anhang versenden kann. Der Anhang wird direkt aus einer Datei gelesen.

#!/usr/bin/env python3
import smtplib
import mimetypes
from email.message import EmailMessage

# E-Mail-Objekt initialisieren und Nachrichtentext setzen:
msg = EmailMessage()
msg['Subject'] = 'Diese E-mail enthält einen Anhang'
msg['From'] = '[email protected]'
msg['To'] = '[email protected]'
# Set text content
msg.set_content('Please see attached file')

def attach_file_to_email(email, filename):
    """Attach a file identified by filename, to an email message"""
    with open(filename, 'rb') as fp:
        file_data = fp.read()
        maintype, _, subtype = (mimetypes.guess_type(filename)[0] or 'application/octet-stream').partition("/")
        email.add_attachment(file_data, maintype=maintype, subtype=subtype, filename=filename)

# Anhang anhängen
attach_file_to_email(msg, "myfile.pdf")

def send_mail_smtp(mail, host, username, password):
    s = smtplib.SMTP(host)
    s.starttls()
    s.login(username, password)
    s.send_message(mail)
    s.quit()

# E-Mail per SMTP senden
send_mail_smtp(msg, 'smtp.domain.com', '[email protected]', 'sae7ooka0S')

Das oben gezeigte Skript benutzt die Folgenden Funktionen:

import smtplib
import mimetypes

def attach_file_to_email(email, filename):
    """Attach a file identified by filename, to an email message"""
    with open(filename, 'rb') as fp:
        file_data = fp.read()
        maintype, _, subtype = (mimetypes.guess_type(filename)[0] or 'application/octet-stream').partition("/")
        email.add_attachment(file_data, maintype=maintype, subtype=subtype, filename=filename)

def send_mail_smtp(mail, host, username, password):
    s = smtplib.SMTP(host)
    s.starttls()
    s.login(username, password)
    s.send_message(mail)
    s.quit()

Initalisiere das E-Mail-Object wie Folgt:

# E-Mail-Objekt initialisieren und Nachrichtentext setzen:
msg = EmailMessage()
msg['Subject'] = 'This email contains an attachment'
msg['From'] = '[email protected]'
msg['To'] = '[email protected]'
# Set text content
msg.set_content('Please see attached file')

und hänge dann die Datei so an:

attach_file_to_email(msg, "myfile.pdf")

Danach kannst du die E-Mail so per SMTP versenden:

send_mail_smtp(msg, 'smtp.my-domain.com', '[email protected]', 'sae7ooka0S')
Posted by Uli Köhler in E-Mail, Python

Wo kann ich mich bei WordPress anmelden / einloggen?

Bei WordPress kann man sich unter /wp-admin einloggen.

Falls euer WordPress unter https://meinedomain.de installiert ist, könnt ihr euch also unter https://meinedomain.de/wp-admin einloggen.

Ist euer WordPress unter https://wordpress.meinedomain.de installiert, könnt ihr euch unter https://wordpress.meinedomain.de einloggen.

Ist euer WordPress in einem Unterverzeichnis installiert, z.B. unter https://meinedomain.de/wordpress, könnt ihr euch typischerweise unter https://meinedomain.de/wordpress/wp-admin anmelden. Sollte das nicht funktionieren (je nach Konfiguration des Webservers), versucht auch /wp-admin ohne das Unterverzeichnis, z.B: https://meinedomain.de/wp-admin .

Posted by Uli Köhler in Wordpress

Was bedeutet „DOM“ bei Glasfaser-Transceiver-Modulen (SFP/SFP+)?

Viele neue und gebrauchte Glasfasermodule werden mit DOM-Unterstützung beworben.

DOM bedeutet Digital Optics Monitoring. Das bedeutet, dass die Elektronik im Glasfaser-Modul die Verbindung überwacht und über eine digitale Schnittstelle Diagnosewerte zur Verfügung stellt.

Die DOM-Schnittstelle ist ein Industriestandard und wird daher von zahlreichen Geräteherstellern unterstützt. Dennoch ist die DOM-Funktionalität nur dann nutzbar, wenn das entsprechende Gerät (Switch, Router, PCIe-Karte, …). DOM-Transceiver können auch in Geräten ohne DOM-Unterstützung verwendet werden.

Früher war DOM ein Zusatzfeature, für das man bei jedem Glasfasermodul extra zahlen musste. Heutzutage haben fast alle modernen Transceiver DOM eingebaut.

Das Folgende Beispiel zeigt die DOM-Diagnostic im Webinterface eines Mikrotik CRS305-1G-4S+ mit einem FS SFP-10GSR-85 für Multimode-Fasern. Das Paar aus identischen Modulen ist mit einem 25m-Multimode-Kabel (OM3, 50/125um, LC UPC Duplex) miteinander verbunden.

Wie in diesem Screenshot zu sehen ist, zeigt das DOM neben allgemeinen Fehlern (Rx LoseTx Fault) die kritischen Werte Rx Power und Tx Power an. Hier lässt sich ablesen, ob der sendende Laser defekt ist (falls Tx Power zu gering ist) oder ob nicht genug Signal an der empfangenden Photodiode ankommt (falls Rx Power zu gering ist). So lassen sich auch Trends und schlechte Verbindungen erkennen und so reparieren, bevor sie komplett versagen.

Posted by Uli Köhler in Netzwerk

Parallele Ausführung von Prozessen mit xargs

Ein guter Startpunkt ist -P 4 -n 1 um 4 Prozesses parallel laufen zu lassen (-P 4), aber jeder Instanz des auszuführenden Prozesses nur ein Argument zu geben (-n 1)

Dies sind die xargs-Optionen für die parallele Ausführung aus der xargs-manpage:

-P, --max-procs=ANZAHL       höchstens diese ANZAHL Prozesse zugleich ausführen

-n, --max-args=ANZAHL        höchstens diese ANZAHL Argumente in der
                                 Befehlszeile verwenden

Beispiel:

cat urls.txt | xargs -P 4 -n 1 wget

Dieser Befehl führt bis zu 4 wget-Befehle parallel aus, bis jede der URLs aus urls.txt heruntergeladen wurde. Die Folgenden Prozesse würden parallel ausgeführt:

wget [URL #1]
wget [URL #2]
wget [URL #3]
wget [URL #4]

Benutzt man stattdessen die Parameter -P 4 -n 2 dann würden die Folgenden Prozesse parallel ausgeführt:

wget [URL #1] [URL #2]
wget [URL #3] [URL #4]
wget [URL #5] [URL #6]
wget [URL #7] [URL #8]

Ein größerer Wert für -n könnte die Effizienz leicht erhöhen, da nicht für jede URL ein eigener Prozess initialisiert werden muss. Allerdings funktioniert ein Wert von n > 1 für manche Befehle nicht.

Posted by Uli Köhler in Linux

Wo kann man in der Fritz!Box statische IP-Routen setzen?

Die statischen IP-Routen findet man unter

  • Heimnetz
  • Netzwerk
  • Tab Netzwerkeinstellungen
  • Ganz nach unten scrollen, dort steht Statische Routingtabelle
  • Rechts unten davon sind die beiden Buttons zum setzen von statischen IPv4-Routen und IPv6-Routen !

Sollten diese Einträge nicht vorhanden sein => Erweiterte Ansicht ganz rechts oben aktivieren.

Posted by Uli Köhler in Netzwerk

How to fix PowerShell The term ‚Remove-Service‘ is not recognized as the name of a cmdlet, …

Problem:

You want to remove a Windows service using the Remove-Service cmdlet. However, you see an error message like

Remove-Service : The term 'Remove-Service' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was
included, verify that the path is correct and try again.
At line:1 char:63
+ Remove-Service
+ ~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Remove-Service:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Solution:

The Remove-Service cmdlet was introduced in PowerShell version 6.x.

When you run

Get-Host | Select-Object Version

in your PowerShell, you will see that you are running an older PowerShell version, e.g.

Version
-------
5.1.19041.610

However, you can use this one liner in order to install PowerShell

iex "& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI"

Source for the one-liner: thomasmaurer.ch

Posted by Uli Köhler in PowerShell, Windows