site-calc-investment 1.2.0__py3-none-any.whl → 1.2.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- site_calc_investment/__init__.py +1 -1
- {site_calc_investment-1.2.0.dist-info → site_calc_investment-1.2.1.dist-info}/METADATA +25 -17
- {site_calc_investment-1.2.0.dist-info → site_calc_investment-1.2.1.dist-info}/RECORD +5 -5
- {site_calc_investment-1.2.0.dist-info → site_calc_investment-1.2.1.dist-info}/WHEEL +0 -0
- {site_calc_investment-1.2.0.dist-info → site_calc_investment-1.2.1.dist-info}/licenses/LICENSE +0 -0
site_calc_investment/__init__.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: site-calc-investment
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.1
|
|
4
4
|
Summary: Python client for Site-Calc investment planning (capacity sizing, ROI analysis)
|
|
5
5
|
Project-URL: Homepage, https://github.com/stranma/site-calc-investment
|
|
6
6
|
Project-URL: Documentation, https://github.com/stranma/site-calc-investment#readme
|
|
@@ -52,9 +52,10 @@ from datetime import datetime
|
|
|
52
52
|
from zoneinfo import ZoneInfo
|
|
53
53
|
from site_calc_investment import InvestmentClient
|
|
54
54
|
from site_calc_investment.models import (
|
|
55
|
-
|
|
55
|
+
Resolution, Site, Battery, ElectricityImport, ElectricityExport,
|
|
56
56
|
InvestmentPlanningRequest, InvestmentParameters, OptimizationConfig
|
|
57
57
|
)
|
|
58
|
+
from site_calc_investment.models.requests import TimeSpanInvestment
|
|
58
59
|
|
|
59
60
|
# Initialize client
|
|
60
61
|
client = InvestmentClient(
|
|
@@ -62,13 +63,16 @@ client = InvestmentClient(
|
|
|
62
63
|
api_key="inv_your_api_key_here"
|
|
63
64
|
)
|
|
64
65
|
|
|
65
|
-
# Create
|
|
66
|
-
timespan =
|
|
66
|
+
# Create 1-week planning horizon (1-hour resolution)
|
|
67
|
+
timespan = TimeSpanInvestment(
|
|
67
68
|
start=datetime(2025, 1, 1, tzinfo=ZoneInfo("Europe/Prague")),
|
|
68
|
-
intervals=
|
|
69
|
+
intervals=168, # 1 week = 7 days × 24 hours
|
|
69
70
|
resolution=Resolution.HOUR_1
|
|
70
71
|
)
|
|
71
72
|
|
|
73
|
+
# Generate hourly prices (example: day/night pattern)
|
|
74
|
+
prices = [30.0 if h % 24 < 6 else 80.0 if 8 <= h % 24 < 20 else 50.0 for h in range(168)]
|
|
75
|
+
|
|
72
76
|
# Define devices (NO ancillary_services field)
|
|
73
77
|
battery = Battery(
|
|
74
78
|
name="Battery1",
|
|
@@ -82,14 +86,20 @@ battery = Battery(
|
|
|
82
86
|
|
|
83
87
|
grid_import = ElectricityImport(
|
|
84
88
|
name="GridImport",
|
|
85
|
-
properties={"price":
|
|
89
|
+
properties={"price": prices, "max_import": 10.0}
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
grid_export = ElectricityExport(
|
|
93
|
+
name="GridExport",
|
|
94
|
+
properties={"price": prices, "max_export": 10.0}
|
|
86
95
|
)
|
|
87
96
|
|
|
88
|
-
site = Site(site_id="investment_site", devices=[battery, grid_import])
|
|
97
|
+
site = Site(site_id="investment_site", devices=[battery, grid_import, grid_export])
|
|
89
98
|
|
|
90
99
|
# Investment parameters
|
|
91
100
|
inv_params = InvestmentParameters(
|
|
92
101
|
discount_rate=0.05,
|
|
102
|
+
project_lifetime_years=10, # Required field
|
|
93
103
|
device_capital_costs={"Battery1": 500000}, # €500k CAPEX
|
|
94
104
|
device_annual_opex={"Battery1": 5000} # €5k/year O&M
|
|
95
105
|
)
|
|
@@ -100,19 +110,17 @@ request = InvestmentPlanningRequest(
|
|
|
100
110
|
timespan=timespan,
|
|
101
111
|
investment_parameters=inv_params,
|
|
102
112
|
optimization_config=OptimizationConfig(
|
|
103
|
-
objective="
|
|
104
|
-
time_limit_seconds=
|
|
113
|
+
objective="maximize_profit", # Options: maximize_profit, minimize_cost, maximize_self_consumption
|
|
114
|
+
time_limit_seconds=300 # Max 900 seconds (15 min)
|
|
105
115
|
)
|
|
106
116
|
)
|
|
107
117
|
|
|
108
118
|
job = client.create_planning_job(request)
|
|
109
|
-
result = client.wait_for_completion(job.job_id, poll_interval=
|
|
119
|
+
result = client.wait_for_completion(job.job_id, poll_interval=5, timeout=600)
|
|
110
120
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
print(f"
|
|
114
|
-
print(f"IRR: {metrics.irr*100:.2f}%")
|
|
115
|
-
print(f"Payback: {metrics.payback_period_years:.1f} years")
|
|
121
|
+
print(f"Status: {result.status}")
|
|
122
|
+
print(f"Solver: {result.summary.solver_status}")
|
|
123
|
+
print(f"Profit: €{result.summary.expected_profit:,.2f}")
|
|
116
124
|
```
|
|
117
125
|
|
|
118
126
|
## Features
|
|
@@ -135,7 +143,7 @@ print(f"Payback: {metrics.payback_period_years:.1f} years")
|
|
|
135
143
|
| Resolution | 1-hour only |
|
|
136
144
|
| ANS Support | No |
|
|
137
145
|
| Binary Variables | Relaxed to continuous |
|
|
138
|
-
| Timeout |
|
|
146
|
+
| Timeout | 900 seconds (15 minutes) max |
|
|
139
147
|
|
|
140
148
|
## Supported Devices
|
|
141
149
|
|
|
@@ -203,7 +211,7 @@ print(comparison) # DataFrame with NPV, IRR, costs, revenues
|
|
|
203
211
|
|
|
204
212
|
## Documentation
|
|
205
213
|
|
|
206
|
-
Full documentation available at: https://
|
|
214
|
+
Full documentation available at: https://github.com/stranma/site-calc-investment#readme
|
|
207
215
|
|
|
208
216
|
## Examples
|
|
209
217
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
site_calc_investment/__init__.py,sha256=
|
|
1
|
+
site_calc_investment/__init__.py,sha256=pb78oxLhM7MDfT0SClqXiVEcXhJhJ7x5mndiYyl-7cw,2084
|
|
2
2
|
site_calc_investment/exceptions.py,sha256=dz1wXM3Y4hHzK-PaQPY7sFPgLwUd6bZyWfJDVH9aBZk,2108
|
|
3
3
|
site_calc_investment/analysis/__init__.py,sha256=u6nwlhY3gQnxn-nkUGc68ynmoBU7NUt3uoUuM9AfQIs,414
|
|
4
4
|
site_calc_investment/analysis/comparison.py,sha256=3aqKpVcGy-2YfQZjS6qAzN12vuzvwDmE1JgZn6fuuIE,4487
|
|
@@ -10,7 +10,7 @@ site_calc_investment/models/common.py,sha256=r6Acg8uICJTETQ1FoVuBEdM8ThLQqwCVhcl
|
|
|
10
10
|
site_calc_investment/models/devices.py,sha256=RmlbcxjavC3nFRyCJ6n8aUp2ZosVTpszmMmJfqpgd9c,9895
|
|
11
11
|
site_calc_investment/models/requests.py,sha256=K3ESSgh3Qkq26jIL3TLTD6TRGmttVSiUUPTdbCmwRiw,5089
|
|
12
12
|
site_calc_investment/models/responses.py,sha256=pmFfhSCAlCUZTxRDh0IdBn5znJiiFjF7U3LHZON_yQY,5482
|
|
13
|
-
site_calc_investment-1.2.
|
|
14
|
-
site_calc_investment-1.2.
|
|
15
|
-
site_calc_investment-1.2.
|
|
16
|
-
site_calc_investment-1.2.
|
|
13
|
+
site_calc_investment-1.2.1.dist-info/METADATA,sha256=RZ_epI5NF0vwgboTLAiMyLusx__Cf3pAjDMu60NTEnI,7412
|
|
14
|
+
site_calc_investment-1.2.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
15
|
+
site_calc_investment-1.2.1.dist-info/licenses/LICENSE,sha256=tmWogc4edAjn_ccDCKSLvMGW7asakJnAlQWuNqgApIs,1071
|
|
16
|
+
site_calc_investment-1.2.1.dist-info/RECORD,,
|
|
File without changes
|
{site_calc_investment-1.2.0.dist-info → site_calc_investment-1.2.1.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|