Skip to content

Instantly share code, notes, and snippets.

import pulsectl
import time
import paramiko
import traceback
while 1:
pulse = pulsectl.Pulse('my-client-name')
ssh = paramiko.SSHClient()
# Audio device
ADEVICE pulse pulse
# Modem speed
MODEM 1200
xssfox /
Last active March 31, 2024 21:26
basic ax25 setup


sudo apt-get install direwolf ax25-apps ax25-tools

Setting up direwolf

Direwolf is our software TNC

import kissfix # TODO do we need to worry about the python3 issue / kissfix
import serial
import os, pty, serial, tty, termios
import threading
import logging
import sys, traceback
import fcntl
import time
logger = logging.getLogger()

First up you need to run this python3 script and leave it running - it's a web server that lets you control the printer from HTTP commands

You probably need to have lucon.ttf in your systems font dir or in scripts directory

And you'll need bleak, Pillow and flask installed by pip

Some people have reported issues getting TypeError: a bytes-like object is required, not 'list' in this case :

xssfox /
Last active September 18, 2022 06:56
SSTV Stream
Requires an RTSP stream (I used rtsp-simple-server) and rigctld running
requirements pyaudio, pillow, numpy, pysstv, opencv-python
Update output_device_index to be your audio sink (I use pulse)
import cv2
from urllib.request import urlopen, Request
import json
URL = ",Restocks,SalesLocations"
SMOL = ",Restocks,SalesLocations"
stores = {
"557" : {
"name": "Adelaide"
"451": {
xssfox / TOTP-DTMF.cpp
Last active January 4, 2022 18:12
Control a NodeMCU semi-securely over radio (rename to .ino)
Built for NodeMCU ESP32
You'll need
NTPClient :
PhoneDTFM :
For connecting a baofeng UV-5R I used the kenwood connector and this circuit to remove any bias
from the baofeng and decouple then used the resistors to center the signal for the NodeMCU.
# based on
# can be used as a raw postscript printer (a4, one page only) on port 9100
# status : curl --location --request GET 'localhost:5000'
# curl --location --request POST 'localhost:5000' \
# --form 'image=@"/image.jpg"' \ #optional
# --form 'text="hello world"' \ #optional
# --form 'size="48"' \ #optional
build to get
depager and multifm
"device" : {
"type" : "rtlsdr",
"deviceIndex" : 0,
"dBGainLNA" : 42