Skip to content

Instantly share code, notes, and snippets.

View jplitza's full-sized avatar

Jan-Philipp Litza jplitza

View GitHub Profile
@jplitza
jplitza / copy_influxdb_to_homeassistant_db.sh
Created July 31, 2025 09:56
Small script to copy sensor data from InfluxDB to Home Assistant's SQLite DB
#!/bin/sh
TMPFILE="$(mktemp)"
read -p "InfluxDB password: " INFLUXDB_PASSWORD
QUERY='SELECT mean("value"), min("value"), max("value") FROM "infinite"."°C" WHERE ("friendly_name" =~ /Temperatur$/) AND time < '"'2022-11-03T00:00:00Z'"' GROUP BY time(1h), "entity_id" fill(none);'
HA_DB="$1"
influx -precision rfc3339 -username admin -password "$INFLUXDB_PASSWORD" -database home_assistant -format csv -execute "$QUERY" \
| sed \
-e 's/^°C,entity_id=/sensor./' \
@jplitza
jplitza / kyverno-junit.jq
Created January 10, 2025 13:37
Convert output from `kyverno apply -p` (converted to JSON) to JUnit XML format using `jq`
@html "<testsuite name=\"kyverno\" tests=\"\(.summary|add)\" failures=\"\(.summary.fail)\" skipped=\"\(.summary.skip)\" errors=\"\(.summary.error)\">",
(.results | group_by(.policy) | .[] | [
@html "<testsuite name=\"\(.[0].policy)\">",
(group_by(.rule) | .[] | [
"<testsuite name=\"\(.[0].policy).\(.[0].rule)\">",
(.[] | [
@html "<testcase name=\"\(.policy).\(.rule).\(.resources[0].namespace)/\(.resources[0].kind)/\(.resources[0].name)\">",
(if .result == "fail"
then @html "<failure message=\"\(.message)\" />"
else if .result == "skip"
@jplitza
jplitza / resize-pvc.sh
Created December 4, 2024 11:16
Resize PersistentVolumeClaims according to owning StatefulSet spec
#!/bin/sh -eu
# Update the actual storage requets of existing PVCs to those specified in their owning StatefulSet.
# This assumes the StatefulSet was already "updated" (via `kubectl replace --force --cascade=orphan` or similar)
STS="$1"
kubectl get statefulset "$STS" -o jsonpath='{range .spec.volumeClaimTemplates[]}{.metadata.name} {.spec.resources.requests.storage}{"\n"}{end}' |
while read -r VOLNAME SIZE; do
for PVC in $(kubectl get pvc -o custom-columns=NAME:.metadata.name | grep -E "^$VOLNAME-$STS-[0-9]+\$"); do
#!/bin/sh
set -eu
REPO="$1"
ARCHIVE="$2"
FILE="$3"
# Fetch the latest version using GitHub API
VERSION="$(curl -s "https://api.github.com/repos/${REPO}/releases" | jq -r 'map(select(.prerelease | not)) | .[0].tag_name' | cut -c 2-)"
@jplitza
jplitza / nc.sh
Created February 23, 2024 14:10
Netcat in Bash
#!/bin/bash
set -eu
PROXY=false
usage() {
echo "Usage: $0 [-X connect -x <proxy:port>] <host> <port>"
}
@jplitza
jplitza / 41-firefox-callback.lua
Created November 24, 2022 14:16
Make Wireplumber route Firefox' voice output to internal ALSA output
stream_defaults.rules = {
{
matches = {
{
{ "application.name", "matches", "Firefox" },
{ "media.name", "matches", "AudioCallbackDriver" },
{ "media.class", "matches", "Stream/Output/Audio" },
}
},
apply_properties = {
@jplitza
jplitza / tplink.rb
Created December 17, 2021 15:34
Slightly modified Oxidized model for TP-Link switches
@jplitza
jplitza / co2mon.init
Last active October 11, 2022 20:54 — forked from librarian/hidapi_co2mon.py
Basic programm to use hidapi and report temp/co2 from Holtek Semiconductor, Inc. USB-zyTemp (hidapi is python3-hidapi in debian buster)
#!/bin/sh /etc/rc.common
START=50
USE_PROCD=1
NAME=co2mon
PROG=/root/co2mon/hidapi_co2mon.py
start_service() {
local url=$(uci -q get co2mon.@co2mon[0].url)
#!/bin/bash
set -eu
declare -a STATES=(OK WARNING CRITICAL UNKNOWN)
declare -i STATE_OK=0
declare -i STATE_WARNING=1
declare -i STATE_CRITICAL=2
declare -i STATE_UNKNOWN=3
@jplitza
jplitza / flash_router.sh
Created August 29, 2018 08:35
Flash a router running OpenWrt via SSH
#!/bin/sh
set -eu
if [ "$#" != 2 ]; then
echo "Usage: $(basename "$0") <iface> <file>"
exit 1
fi
IFACE="$1"