Z-Park Medical Device Hub EMS (zpark-ems)

Z-Park Medical Device Hub Smart Energy Management System

Current Version: 1.2.0 | Core: 1.1.0 | See VERSIONS.json

Customer project for Z-Park Medical Device Hub (中关村医疗器械园), built on ems-core.


Park Characteristics

  • PV-focused: 4,561 solar panels across 22+ buildings
  • Sungrow string inverters: AP101-AP208, 10 units
  • DC combiner boxes: 49 units
  • Data collection: Sungrow iSolarCloud API

Directory Structure

zpark-ems/
+-- core/                       # EMS core (git subtree, DO NOT modify directly)
+-- frontend/                   # Customer frontend (React/TypeScript)
|   +-- src/                   # React source code
|   +-- Dockerfile             # Frontend container
|   +-- package.json
|   +-- vite.config.ts
+-- customers/zpark/            # Customer configuration
|   +-- config.yaml            # Branding and feature flags
|   +-- devices.json           # Sungrow inverter & combiner box inventory
|   +-- pricing.json           # Beijing C&I time-of-use pricing
|   +-- hooks/                 # Customer hooks plugin (zpark_hooks.py)
+-- scripts/                   # Data seeding scripts
|   +-- seed_zpark.py          # Z-Park seed data
+-- docker-compose.override.yml # Customer Docker overrides
+-- docker-compose.ports.yml    # Port configuration
+-- VERSIONS.json              # Version tracking
+-- .env.example               # Environment variables template (incl. Sungrow API)

Quick Start (Docker)

# Configure environment
cp .env.example .env
# Edit .env — fill in Sungrow iSolarCloud API credentials

# Start all services
docker compose -f core/docker-compose.yml -f docker-compose.override.yml up -d

# Seed data
docker compose -f core/docker-compose.yml -f docker-compose.override.yml exec backend python scripts/seed_zpark.py

Access

Service URL
Frontend http://localhost:3000
Backend API http://localhost:8000
API Docs http://localhost:8000/docs

Default Login

Role Username Password
Admin admin admin123

Local Development

Backend

cd core/backend
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate
pip install -r requirements.txt
python -m alembic upgrade head
uvicorn app.main:app --port 8000 --reload

Frontend

cd frontend
npm install
npm run dev
# Opens at http://localhost:3000, proxies /api to localhost:8000

Sungrow API Configuration

Fill in Sungrow iSolarCloud API credentials in .env, then set USE_SIMULATOR=false to connect to real data.


Updating Core

When ems-core releases a new version:

git subtree pull --prefix=core ems-core main --squash

Make sure the ems-core remote is configured:

git remote add ems-core http://100.69.143.96:3300/tianpu/ems-core.git

After pulling, update core_version in VERSIONS.json.


Version Management

Releasing a New Version

# 1. Update VERSIONS.json (project_version, last_updated, notes)
# 2. Commit
git add VERSIONS.json
git commit -m "chore: bump version to vX.Y.Z"

# 3. Tag (MUST be after VERSIONS.json update)
git tag -a vX.Y.Z -m "vX.Y.Z: release description"

# 4. Push commit + tag
git push origin main
git push origin vX.Y.Z

# 5. Update Gitea description (Settings page or API)

Version must match in all three places: VERSIONS.json, git tag, and Gitea description.

Download / Switch to an Older Version

# List all versions
git tag -l

# Switch to a specific version
git checkout v1.1.0

# Compare versions
git diff v1.1.0 v1.2.0

# Download as zip (no clone needed)
curl -o zpark-ems-v1.1.0.zip \
  "http://100.69.143.96:3300/tianpu/zpark-ems/archive/v1.1.0.zip"

# Go back to latest
git checkout main

See ems-core README for the full version management guide.


License

Copyright 2026. All rights reserved.

Description
[v1.2.0] Z-Park EMS — core:v1.1.0 | frontend:v1.2.0
Readme 785 KiB
Languages
TypeScript 59.3%
Python 37.8%
CSS 2.1%
HTML 0.3%
Shell 0.3%