Energy inference and EV charging ETA utilities (SoC-based).
Project description
stroomer
Utilities for appliance inference (menebak perangkat yang menyala dari V, I, PF, P) dan EV charging ETA (SoC-based).
- Catalog built-in: tiap perangkat punya
watt,pf,type,phase,standby_w,surge_mult. - Prediksi multi-fitur: cocokkan P, I, dan PF (bukan power saja).
- Standby-aware: total daya = standby seluruh unit + kontribusi aktif unit yang ON.
- SoC ETA: hitung durasi & waktu selesai charging berbasis SoC, kapasitas, efisiensi.
Install
Dari PyPI:
pip install stroomer
(Opsional) Dari TestPyPI:
pip install -i https://test.pypi.org/simple --extra-index-url https://pypi.org/simple stroomer
Usage
1) Appliance inference (catalog-based)
from stroomer import StroomerPredictor
p = StroomerPredictor()
# Lihat daftar elektronik yang tersedia di catalog (nama → spec)
catalog = p.electronic_list()
# print(catalog) # optional
# Beri JUMLAH MAKSIMAL unit yang mungkin ADA di lokasi (bukan watt per unit)
# Nama boleh alias/varian: "lampu_18W", "TV", "chrger_motor", dsb (akan dinormalkan)
p.set_appliances({
"kipas": 5,
"lampu_18W": 5,
"lampu_32W": 5,
"lampu": 3,
"TV": 2,
"Kulkas": 2,
"AC": 1,
"ev_charger": 1,
"mesin_cuci": 1,
"chrger_motor": 3, # alias typo → otomatis dipetakan
})
# (Opsional) Override spesifikasi catalog untuk site tertentu
p.configure_catalog({
"ev_charger": {"watt": 3200, "pf": 0.99}, # contoh: wallbox lebih besar
})
# Pembacaan meter saat ini
V = 220
I = 6
PF = 0.95
P = 2301 # jika P real dari meter tersedia, berikan ini (diprioritaskan)
out = p.predict(voltage=V, current=I, power_factor=PF, power=P)
print("Perangkat ON :", out["on"]) # contoh: {"lampu_18w": 3, "kipas": 1, ...}
print("Target :", out["target"]) # {"P":..., "I":..., "PF":..., "V":...}
print("Prediksi :", out["pred"]) # {"P":..., "I":..., "PF":...}
print("Loss :", out["loss"])
print("RelErr P :", out["rel_error_P"])
Catatan: Bila
V*I*PFdanPtidak konsisten (sering terjadi pada meter berbeda), model memprioritaskan P sambil tetap menilai I & PF agar kombinasi lebih masuk akal.
2) EV Charging ETA (SoC-based)
from stroomer import ChargingTimePredictor
eta = ChargingTimePredictor(capacity_kwh=50, target_soc=90, efficiency=0.92)
print(eta.predict(power=8000, SoC=30))
# -> {"FinishDuration":"03:14","FinishTime":"2025-08-18T13:25:00+00:00"}
API Ringkas
StroomerPredictor
electronic_list() -> dictKatalog efektif (watt, pf, type, phase, standby_w, surge_mult).configure_catalog(overrides: dict)Override sebagian atribut katalog, mis.{"ev_charger": {"watt": 3500, "pf": 0.99}}.set_appliances(counts: dict[str,int])Daftarkan jumlah maksimal unit per perangkat di lokasi (nama fleksibel/alias).predict(voltage=None, current=None, power_factor=None, power=None) -> dictMengembalikan:{ "on": {"nama": jumlah_on, ...}, "target": {"P":..., "I":..., "PF":..., "V":...}, "pred": {"P":..., "I":..., "PF":...}, "loss": float, # skor gabungan (semakin kecil semakin baik) "rel_error_P": float # |P_pred - P_meas| / P_meas }
- Atribut yang bisa dituning:
weights = {"P": 0.6, "I": 0.3, "PF": 0.1}tolerance = 0.08(pruning relatif di domain P)global_count_cap = 30(batas hard per perangkat)
ChargingTimePredictor
__init__(capacity_kwh, target_soc=90.0, efficiency=0.92)predict(power: W, SoC: %) -> {"FinishDuration": "HH:MM", "FinishTime": ISO8601_UTC}
Dev
pip install -U build twine pytest
pip install -e .
pytest -q
python -m build
Deploy
- Bump versi di
pyproject.toml, mis.version = "0.1.2"
Deploy
rm -rf dist/ build/
rm -rf src/stroomer.egg-info
python3.11 -m build
python3.11 -m twine upload -r testpypi dist/*
or
python3.11 -m twine upload dist/*
Pastikan
~/.pypircsudah diset (username=__token__,password=pypi-...).
Catatan Akurasi
- PF tipikal di katalog adalah nilai rata-rata umum; silakan sesuaikan per lokasi melalui
configure_catalog. - Standby dihitung otomatis sebagai baseline; kontribusi aktif =
watt - standby_w. - Sensor/metode pengukuran berbeda bisa membuat P dan V·I·PF tidak identik—model tetap memadukan ketiganya (dengan bobot).
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file stroomer-0.1.4.tar.gz.
File metadata
- Download URL: stroomer-0.1.4.tar.gz
- Upload date:
- Size: 14.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aa37fb5e5ca49672f36a6aeaa19004416211cf4e03b4d414307833ff5951031f
|
|
| MD5 |
95e9853c218d4e02663a0b30491bd8f9
|
|
| BLAKE2b-256 |
8896eb0763a32374b0397ced904d0a87b3b4b1f778188451d8c11e182a218b2f
|
File details
Details for the file stroomer-0.1.4-py3-none-any.whl.
File metadata
- Download URL: stroomer-0.1.4-py3-none-any.whl
- Upload date:
- Size: 12.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1f4e3382562cc10b18dca9254f51c382d2838633c8bf0879e31f88782887dbe4
|
|
| MD5 |
fa1bb884493a6fa42a7b84761de208c1
|
|
| BLAKE2b-256 |
15f3bf60686c91ab9c69d37c2a7ce42e7040811599bdbcdf7c2886a6827e1035
|