Skip to content

Instantly share code, notes, and snippets.

@Bouni
Bouni / docker-compose.yaml
Created April 28, 2022 14:56
Gitea + Drone CI docker-compose setup, not production ready, just for testing
gitea:
image: gitea/gitea:1.16.4
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=postgres
- GITEA__database__HOST=giteadb:5432
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
@Bouni
Bouni / flaskdrop.py
Last active March 31, 2022 11:37
A Flask based upload server, helps for example transfering files from mobile phone to PC
import os
import socket
from flask import Flask, render_template_string, request
from werkzeug.utils import secure_filename
app = Flask(__name__)
app.config["UPLOAD_FOLDER"] = "."
@Bouni
Bouni / lcsc-search-api.py
Created March 8, 2022 07:53
LCSC search API
from pprint import PrettyPrinter
import requests
pp = PrettyPrinter()
def query(search)
url = f"https://wwwapi.lcsc.com/v1/search/global-search?keyword={search}"
r = requests.get(url)
pp.pprint(r.json())
@Bouni
Bouni / wxNaturalSortListCtrl.py
Last active February 8, 2023 15:15
Allow for natural soting of wx ListCtrl data
# --------------------------------------------------------------------------------------
# Original code from the exccelent Mouse vs Python
# https://www.blog.pythonlibrary.org/2011/01/04/wxpython-wx-listctrl-tips-and-tricks/
# --------------------------------------------------------------------------------------
import re
import wx
import wx.lib.mixins.listctrl as listmix
import logging
@Bouni
Bouni / solar.py
Last active December 23, 2021 16:04 — forked from vschlegel/solar.py
import socket
# https://www.solarmax.com/Downloads/MaxComm_Protokollbeschreibung_DE.pdf
# Communication
ip = "192.168.50.2"
port = 12345
# inverters = ("01", "02", "03")
inverters = ("01",)
@Bouni
Bouni / detect.py
Last active December 23, 2021 13:00
Detect map in image to correct its position
import os
from datetime import datetime as dt
import cv2
from PIL import Image, ImageDraw, ImageFont
BASEPATH = os.path.abspath(os.path.dirname(__file__))
# read needle image as grayscale
template = cv2.imread(os.path.join(BASEPATH, "map.png"), 0)
@Bouni
Bouni / X1JET.py
Last active December 10, 2021 10:07
Control Weber Marking Markoprint X1Jet printer with python
# https://www.weber-marking.com/inkjet-printers/drop-on-demand-inkjet-printers/markoprint-x1jet.html
import serial
ESC = "\x1B"
CR = "\x0D"
STX = "\x02"
ETX = "\x03"
class X1Jet:
@Bouni
Bouni / dump-luxtronik.py
Created October 26, 2021 05:21
Dump all readings from a Luxtronik heatpump
from luxtronik import Luxtronik
l = Luxtronik('192.168.88.11', 8889)
print("="*80)
print ('{:^80}'.format(' Parameters '))
print("="*80)
for n, p in l.parameters.parameters.items():
print(f"Number: {n:<5} Name: {p.name:<60} Type: {p.__class__.__name__:<20} Value: {p.value}")
@Bouni
Bouni / discovery.py
Last active October 26, 2021 10:32
Broadcast discovery of Luxtronik heatpumps
import socket
import logging
logging.basicConfig()
LOGGER = logging.getLogger()
LOGGER.setLevel(logging.INFO)
def discover():
"""Broadcast discovery for luxtronik heatpumps."""
@Bouni
Bouni / db-update.py
Created September 3, 2021 15:10
Read JLCPCB library CSV and write it to a Postgres DB
from typing import Optional
from slugify import slugify
import time
import csv
from sqlmodel import Field, SQLModel, create_engine, Session, select
class Part(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
lcsc_part: str
first_cat_id: Optional[int] = Field(default=None, foreign_key="firstcat.id")