Skip to main content

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*PF dan P tidak 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() -> dict Katalog 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) -> dict Mengembalikan:
    {
      "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

  1. 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 ~/.pypirc sudah 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

stroomer-0.1.4.tar.gz (14.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

stroomer-0.1.4-py3-none-any.whl (12.3 kB view details)

Uploaded Python 3

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

Hashes for stroomer-0.1.4.tar.gz
Algorithm Hash digest
SHA256 aa37fb5e5ca49672f36a6aeaa19004416211cf4e03b4d414307833ff5951031f
MD5 95e9853c218d4e02663a0b30491bd8f9
BLAKE2b-256 8896eb0763a32374b0397ced904d0a87b3b4b1f778188451d8c11e182a218b2f

See more details on using hashes here.

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

Hashes for stroomer-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 1f4e3382562cc10b18dca9254f51c382d2838633c8bf0879e31f88782887dbe4
MD5 fa1bb884493a6fa42a7b84761de208c1
BLAKE2b-256 15f3bf60686c91ab9c69d37c2a7ce42e7040811599bdbcdf7c2886a6827e1035

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page