Skip to content

Instantly share code, notes, and snippets.

View muety's full-sized avatar
🤓

Ferdinand Mütsch muety

🤓
View GitHub Profile
@muety
muety / tibber.py
Created July 19, 2024 13:03
Script to fetch the current electricity market price in Germany
#!/usr/bin/python
# Script to fetch the current electricity market price in Germany from Tibber's API.
# Borrowed from https://github.com/mampfes/ha_epex_spot/blob/main/custom_components/epex_spot/EPEXSpot/Tibber/__init__.py, thanks!
import argparse
import asyncio
import aiohttp
from datetime import datetime, timedelta
@muety
muety / smard.py
Created June 27, 2024 06:31
Script to fetch the current electricity market price in Germany
#!/usr/bin/python
# Script to fetch the current electricity market price in Germany.
# Borrowed from https://github.com/mampfes/ha_epex_spot/blob/main/custom_components/epex_spot/EPEXSpot/SMARD/__init__.py, thanks!
import argparse
from datetime import datetime, timedelta, timezone
import aiohttp
import asyncio
-- https://livebook.manning.com/book/postgis-in-action-second-edition/chapter-17/242
-- with a couple of bugs fixed
CREATE OR REPLACE FUNCTION get_rast_tile(
param_format text, -- e.g. 'image/png'
param_width integer, -- e.g. 256
param_height integer, -- e.g. 256
param_srid integer, -- e.g. 'EPSG:3857'
param_bbox text, -- e.g. '660415.9243839228,3713005.085980721,665307.8941941742,3717897.0557909757' in EPSG:3857
param_schema text,
@muety
muety / track.php
Last active June 12, 2024 16:10
OwnTracks receiver script
<?php
$data = file_get_contents('php://input');
$json = json_decode($data);
header("Content-type: application/json");
if ($json->_type !== 'location') {
return;
}
@muety
muety / shelly_wifi_reconnect.js
Last active April 12, 2024 10:07
Shelly 2. Gen device script to repeatedly check for WiFi status and reboot the device if disconnected for long enough
// Reboot after 5 minutes of disconnect
let wait_sec = 30;
let retries = 10;
let c = 0;
let timer = Timer.set(wait_sec * 1000, true, function () {
Shelly.call('WiFi.GetStatus', null, function (result, error_code) {
if (result.status !== 'got ip') {
if (c++ < retries) {
print('wifi not connected, waiting another', (retries - c) * wait_sec, 'seconds until reboot');
@muety
muety / next_subuid.sh
Last active August 17, 2023 10:20
Script to determine the next available subuid on Linux
#!/bin/bash
# Author: Ferdinand Mütsch <ferdinand@muetsch.io>
# Script to determine the next subuid / subgid for a user.
# It will consider (a) all already existing subuid / subgid ranges and (b) all "real" user ids.
#
# Note: When using LDAP login (e.g. with SSSD), /etc/passwd won't contain those external users.
# In the case of SSSD, you will have to enable enumeration (https://access.redhat.com/solutions/500433) to make "getent passwd" all local AD / LDAP users.
# However, on the other hand, enabling recommendation is not recommended, because it will cause high load on server and client (https://docs.pagure.org/sssd.sssd/users/faq.html#when-should-i-enable-enumeration-in-sssd-or-why-is-enumeration-disabled-by-default).
# before: https://anchr.io/i/1NQ3x.png
# after: https://anchr.io/i/iMkiK.png
# script is interactive
# it will first fetch all broken products and then ask you for confirmation before actually updating them
import re
import sys
from typing import Tuple, Set, List, Any, Dict
import requests
@muety
muety / current_power.py
Created April 20, 2023 06:12
Simple script to print current power draw in Watts on Linux notebooks
import time
if __name__ == '__main__':
while True:
with open('/sys/class/power_supply/BAT0/current_now', 'r') as f:
current = float(f.readline().strip())
with open('/sys/class/power_supply/BAT0/voltage_now', 'r') as f:
voltage = float(f.readline().strip())
print(f'{current * voltage / 1000000000000} W', end='\r')
@muety
muety / webdav-fileserver.caddyfile
Created April 10, 2023 07:43
Caddy config for anonymous file uploads
http://localhost:8080 {
@get method GET
@propfind method PROPFIND
root * /tmp/data
# TODO: add basic auth for DELETE, PROPPATCH, LOCK, etc.
# TODO: add matchers so uploaded file keys must be uuids
route {
@muety
muety / rclone_sync.txt
Last active December 20, 2022 20:32
Automated Google Drive sync for Linux using rclone
Script that will trigger a local to remote sync when any changes below your local Google Drive folder occur - but at max. every 10 minutes - and a remote to local sync every x (e.g. 30 minutes) via a cron job.
0. Install rclone and configure it for Google Drive
1. Create files listed below
2. Configure rclone_watch_local.sh to be run on startup (e.g. using a systemd service unit)
3. Add a cron job that runs rclone_remote2local.sh every x (e.g. 30) minutes
----------------------
rclone_local2remote.sh
----------------------