Skip to content

Instantly share code, notes, and snippets.

@tedwardd
tedwardd / hardware-questions-meshtoad.md
Created August 11, 2026 13:19
MeshToad (E22-900M30S + CH341): observations and questions from a userspace Reticulum driver bring-up

MeshToad (E22-900M30S + CH341): observations and questions

Notes from bringing up a MeshToad dongle under Reticulum on a Raspberry Pi, driving the SX1262 directly from userspace over the CH341 rather than through RNode firmware.

Nothing here is a bug report. The board works: it exchanges LoRa traffic with an RNode in both directions, and the application layer (NomadNet messaging) works over it. These are observations we could not fully explain from the software side, written up in case they are useful

#!/bin/bash
##############################################################################
## Preflight check for a given project to ensure it is in a state where
## it can be shutdown
##
## Checks the following:
## - What assets are present, ignoring $ignored_assets
## - Ignore known assets from specific asset types
## - If WIF pools are present
## - If Secrets are present

Last Modified: $= dv.current().file.mtime

<% tp.file.title %>

<< [[<% tp.date.now("YYYY-MM-DD", -1, tp.file.title, "YYYY-MM-DD") %>]] | [[<% tp.date.now("YYYY-MM-DD", 1, tp.file.title, "YYYY-MM-DD") %>]]>>

Tasks

Over Due

@tedwardd
tedwardd / main.go
Created November 7, 2024 21:51
mesh-activity-logger
package main
import (
"crypto/tls"
"database/sql"
"flag"
"fmt"
// "log"
"os"
"os/signal"
Connected to radio
Owner: K4KPW-Relay (TRLY)
My info: { "myNodeNum": 1128210200, "rebootCount": 827, "minAppVersion": 30200 }
Metadata: { "firmwareVersion": "2.5.0.9ac0e26", "deviceStateVersion": 23, "canShutdown": true, "hasWifi": true, "hasBluetooth": true, "positionFlags": 811, "hwModel": "HELTEC_V3", "hasEthernet": false, "role": "CLIENT", "hasRemoteHardware": false }
Nodes in mesh: {
"!433f1f18": {
"num": 1128210200,
"user": {
$ ansible-playbook -i inventory/hosts setup.yml --tags=install-all,ensure-matrix-users-created,start -K -vvvvvvv
ansible-playbook 2.10.8
config file = /home/elw/matrix-docker-ansible-deploy/ansible.cfg
configured module search path = ['/home/elw/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3/dist-packages/ansible
executable location = /usr/bin/ansible-playbook
python version = 3.10.6 (main, Nov 14 2022, 16:10:14) [GCC 11.3.0]
Using /home/elw/matrix-docker-ansible-deploy/ansible.cfg as config file
BECOME password:
setting up inventory plugins
@tedwardd
tedwardd / keymap.c
Last active February 25, 2023 01:08
keymap.c
#include QMK_KEYBOARD_H
#define _BASE 0
#define _RAISE 1
#define _LOWER 2
#define SFT_ESC SFT_T(KC_ESC)
#define CTL_BSPC CTL_T(KC_BSPC)
#define ALT_SPC ALT_T(KC_SPC)
#define CTL_ENT CTL_T(KC_ENT)
@tedwardd
tedwardd / main.log
Created November 22, 2022 01:34
Mysterium VPN Bug Report Logs
[2022-11-21 20:25:25.419] [info] Opening in browser window: file:///C:/Program%20Files/MysteriumVPN/resources/app.asar/index.html
[2022-11-21 20:25:26.046] [info] Checking for update
[2022-11-21 20:25:26.078] [info] Resolved machine ID 9de090e44b2f9a6acff28a9b3338dcaf34f270b8da8d49cc04c73745d745788a
[2022-11-21 20:25:26.244] [info] Pushy device token: 34ed07148b605c5a24b86d
[2022-11-21 20:25:27.037] [info] Update for version 10.13.3 is not available (latest version: 10.13.3, downgrade is disallowed).
[2022-11-21 20:25:27.041] [info] Connecting to the supervisor...
[2022-11-21 20:25:27.549] [info] Connecting to the supervisor...
[2022-11-21 20:25:28.050] [info] Connecting to the supervisor...
[2022-11-21 20:25:28.551] [info] Connecting to the supervisor...
[2022-11-21 20:25:29.053] [info] Connecting to the supervisor...
Error: Error creating Database: googleapi: got HTTP response code 404 with body: <!DOCTYPE html>
<html lang=en>
<meta charset=utf-8>
<meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
<title>Error 404 (Not Found)!!1</title>
<style>
*{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.pn
@tedwardd
tedwardd / google_resourcemanager_path_crawler.py
Created December 11, 2020 18:27
Inefficient GCP Path Crawler
"""
This crawls through a folder hierarchy searching for a specific folder in GCP using Google's v2 folders API:
https://cloud.google.com/resource-manager/reference/rest/v2/folders
The better way to do this for real is to use the v2 folder search API:
https://cloud.google.com/resource-manager/reference/rest/v2/folders/search
This is here only as a reminder that you should always read API docs COMPLETELY before writing a solution to a problem
"""
def __get_folder_id(self, folder, parent):
folder_data = (
self.crm_v2.folders().list(parent=parent).execute().get("folders", "")