{"x402Version":2,"type":"bazaar-listing","service":{"name":"HALOWERK solarwerk","url":"https://solar.halowerk.com","version":"1.0.0","icon":"https://solar.halowerk.com/favicon.svg"},"items":[{"id":"solarwerk.lifepo4_cycle_analysis","name":"lifepo4_cycle_analysis","title":"Evaluates a measured charge or discharge series of a LiFePO4 pack: charge throughput, energy, efficiency, usable capacity, internal resistance and voltage limit violations.","description":"Integrates the supplied current over time by the trapezoidal rule, so the result is only as good as the sampling interval; gaps longer than the stated max_gap_seconds are excluded and reported. Sign convention: positive current is charging, negative is discharging. Internal resistance is estimated from the largest current step in the series and is a rough figure, not a measurement under defined conditions.","category":"solarwerk","keywords":[],"resource":"https://solar.halowerk.com/battery-cycle","method":"POST","mimeType":"application/json","inputSchema":{"type":"object","required":["samples"],"additionalProperties":false,"properties":{"samples":{"type":"array","minItems":3,"maxItems":5000,"items":{"type":"object","required":["t_s","voltage_v","current_a"],"additionalProperties":false,"properties":{"t_s":{"type":"number","minimum":0,"maximum":100000000,"description":"Seconds since series start, strictly increasing."},"voltage_v":{"type":"number","minimum":0,"maximum":1000,"description":"Pack voltage."},"current_a":{"type":"number","minimum":-2000,"maximum":2000,"description":"Positive charging, negative discharging."},"temperature_c":{"type":"number","minimum":-60,"maximum":120}}}},"cells_in_series":{"type":"integer","minimum":1,"maximum":64,"default":4},"nominal_capacity_ah":{"type":"number","minimum":0.1,"maximum":10000},"rest_current_a":{"type":"number","minimum":0,"maximum":100,"default":0.5,"description":"Below this absolute current a sample counts as resting."},"max_gap_seconds":{"type":"number","minimum":1,"maximum":86400,"default":300}}},"outputSchema":{"type":"object"},"price":{"amount":"4000","currency":"USDC","decimals":6,"human":"0.004 USDC"},"accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"4000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}],"serviceName":"lifepo4_cycle_analysis","tags":["off-grid","battery","lifepo4"],"example_request":{"samples":[{"t_s":0,"voltage_v":13.2,"current_a":0},{"t_s":60,"voltage_v":13.1,"current_a":-5},{"t_s":120,"voltage_v":13,"current_a":-5}],"cells_in_series":4,"nominal_capacity_ah":100},"requestExample":{"samples":[{"t_s":0,"voltage_v":13.2,"current_a":0},{"t_s":60,"voltage_v":13.1,"current_a":-5},{"t_s":120,"voltage_v":13,"current_a":-5}],"cells_in_series":4,"nominal_capacity_ah":100},"outputExample":{"samples_used":3,"duration_s":120,"intervals_excluded":0,"charge_ah":0,"discharge_ah":0.125,"charge_energy_wh":0,"discharge_energy_wh":1.64,"coulombic_efficiency_percent":null,"energy_efficiency_percent":null,"measured_capacity_ah":0.125,"capacity_vs_nominal_percent":0.1,"pack_voltage_v":{"min":13,"max":13.2},"cell_voltage_v":{"min":3.25,"max":3.3},"current_a":{"min":-5,"max":0},"mean_c_rate":0.033,"internal_resistance_ohm_estimate":null,"internal_resistance_basis":null,"soc_from_rest_voltage_percent":60,"soc_uncertainty_percent":20,"rest_sample_used":{"t_s":0,"voltage_v":13.2},"temperature_c":null,"unavailable_fields":["internal_resistance_ohm_estimate","cell_imbalance"],"warnings":[],"limits":["Trapezoidal integration; accuracy follows the sampling interval.","Internal resistance is a rough estimate from one current step, not a defined-condition measurement.","Cell imbalance cannot be derived from a pack voltage and is not reported."],"method":"trapezoidal integration of current and power, LiFePO4 open-circuit voltage table for resting state of charge"}},{"id":"solarwerk.inverter_load_check","name":"inverter_load_check","title":"Checks a list of appliances against an inverter: continuous load, apparent power, worst-case starting surge, headroom and the resulting DC current from the battery.","description":"Continuous load is the sum of the running watts of all appliances marked as simultaneous. The surge check adds the largest single starting surge on top of the continuous load, which is the case that trips an inverter; simultaneous starts of two motors are reported separately as a second figure. Starting factors and power factors are design rules of thumb per appliance class and are stated in the response, they are not device data.","category":"solarwerk","keywords":[],"resource":"https://solar.halowerk.com/inverter-load-check","method":"POST","mimeType":"application/json","inputSchema":{"type":"object","required":["inverter","loads"],"additionalProperties":false,"properties":{"inverter":{"type":"object","required":["continuous_w"],"additionalProperties":false,"properties":{"continuous_w":{"type":"number","minimum":50,"maximum":100000},"surge_w":{"type":"number","minimum":50,"maximum":400000,"description":"Peak rating. Defaults to twice the continuous rating."},"efficiency":{"type":"number","minimum":0.5,"maximum":1,"default":0.9},"idle_w":{"type":"number","minimum":0,"maximum":500,"default":15}}},"loads":{"type":"array","minItems":1,"maxItems":60,"items":{"type":"object","required":["name","watts"],"additionalProperties":false,"properties":{"name":{"type":"string"},"watts":{"type":"number","minimum":0.1,"maximum":50000},"quantity":{"type":"integer","minimum":1,"maximum":200,"default":1},"type":{"type":"string","description":"Appliance class: resistive, electronics, led, motor, pump, compressor, induction."},"simultaneous":{"type":"boolean","default":true,"description":"False if the appliance never runs together with the others."},"surge_factor":{"type":"number","minimum":1,"maximum":12},"power_factor":{"type":"number","minimum":0.3,"maximum":1}}}},"battery_voltage_v":{"type":"number","minimum":6,"maximum":1000,"description":"For the DC current figure. Without it that field stays null."}}},"outputSchema":{"type":"object"},"price":{"amount":"2000","currency":"USDC","decimals":6,"human":"0.002 USDC"},"accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"2000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}],"serviceName":"inverter_load_check","tags":["off-grid","inverter","sizing"],"example_request":{"inverter":{"continuous_w":50,"efficiency":0.9,"idle_w":15},"loads":[{"name":"beispiel","watts":0.1,"quantity":1,"simultaneous":true}]},"requestExample":{"inverter":{"continuous_w":50,"efficiency":0.9,"idle_w":15},"loads":[{"name":"beispiel","watts":0.1,"quantity":1,"simultaneous":true}]},"outputExample":{"inverter":{"continuous_w":50,"surge_w":100,"efficiency_used":0.9,"idle_w_used":15},"loads":[{"name":"beispiel","type":null,"quantity":1,"running_w":0.1,"apparent_va":0.1,"surge_w":0.2,"surge_factor_used":1.5,"power_factor_used":0.9,"factor_source":"generic default 1.5","simultaneous":true}],"continuous_load_w":15.1,"apparent_power_va":15.1,"headroom_w":34.9,"utilisation_percent":30.2,"worst_start_w":15.2,"worst_start_driver":"beispiel","two_simultaneous_starts_w":null,"dc_current_a":null,"dc_current_at_worst_start_a":null,"verdict":"ok","notes":[],"unavailable_fields":["dc_current_a","dc_current_at_worst_start_a"],"assumptions":["Starting factors and power factors are design rules of thumb per class unless the caller supplies them.","The surge case is the largest single start on top of the running load; two simultaneous starts are reported separately.","Idle draw of the inverter is included in the continuous load."],"method":"sum of running watts plus largest single starting surge against continuous and peak ratings"}},{"id":"solarwerk.clear_sky_pv_yield","name":"clear_sky_pv_yield","title":"Returns the clear-sky yield of a photovoltaic module for a location, date and mounting: irradiance in the module plane over the day, daily energy and peak power.","description":"This is an astronomical and geometric calculation, not a forecast. It assumes a cloudless sky and states the models used; real yield is lower whenever there is cloud, haze, snow, soiling or high cell temperature. The system_derate factor covers cabling, controller and temperature losses as one flat number and defaults to 0.8. Shading is not modelled here. Times are UTC. Use the figure as an upper bound for sizing, not as an expected daily production.","category":"solarwerk","keywords":[],"resource":"https://solar.halowerk.com/clear-sky-yield","method":"POST","mimeType":"application/json","inputSchema":{"type":"object","required":["lat","lon","date"],"additionalProperties":false,"properties":{"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"date":{"type":"string","description":"Day as YYYY-MM-DD."},"panel_wp":{"type":"number","minimum":1,"maximum":100000,"default":415,"description":"Module rating at standard test conditions."},"tilt_deg":{"type":"number","minimum":0,"maximum":90,"default":30},"azimuth_deg":{"type":"number","minimum":0,"maximum":360,"default":180,"description":"Module azimuth, 180 is south, 0 is north."},"system_derate":{"type":"number","minimum":0.1,"maximum":1,"default":0.8},"albedo":{"type":"number","minimum":0,"maximum":1,"default":0.2},"elevation_m":{"type":"number","minimum":-500,"maximum":6000,"default":0},"step_minutes":{"type":"integer","minimum":5,"maximum":60,"default":15},"include_series":{"type":"boolean","default":true}}},"outputSchema":{"type":"object"},"price":{"amount":"3000","currency":"USDC","decimals":6,"human":"0.003 USDC"},"accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"3000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}],"serviceName":"clear_sky_pv_yield","tags":["off-grid","solar","pv"],"example_request":{"lat":52.52,"lon":13.405,"date":"2026-06-21","panel_wp":415},"requestExample":{"lat":52.52,"lon":13.405,"date":"2026-06-21","panel_wp":415},"outputExample":{"lat":52.52,"lon":13.405,"date":"2026-06-21","panel_wp":415,"tilt_deg":30,"azimuth_deg":180,"system_derate_used":0.8,"albedo_used":0.2,"step_minutes":15,"sunrise_utc":"02:43","sunset_utc":"19:33","solar_noon_utc":"11:08","daylight_hours":16.84,"polar_day":false,"polar_night":false,"plane_of_array_wh_per_m2":8102.1,"peak_plane_of_array_w_per_m2":1011.7,"dc_energy_wh":3362.4,"ac_energy_wh":2689.9,"peak_ac_w":335.9,"full_load_hours":6.48,"series":[{"time_utc":"03:00","sun_elevation_deg":1.18,"sun_azimuth_deg":51.15,"poa_w_m2":0.1,"ac_w":0},{"time_utc":"03:15","sun_elevation_deg":2.99,"sun_azimuth_deg":54.07,"poa_w_m2":0.8,"ac_w":0.3},{"time_utc":"03:30","sun_elevation_deg":4.87,"sun_azimuth_deg":56.96,"poa_w_m2":2.2,"ac_w":0.7},{"time_utc":"03:45","sun_elevation_deg":6.82,"sun_azimuth_deg":59.81,"poa_w_m2":4.1,"ac_w":1.4},{"time_utc":"04:00","sun_elevation_deg":8.82,"sun_azimuth_deg":62.64,"poa_w_m2":6.6,"ac_w":2.2},{"time_utc":"04:15","sun_elevation_deg":10.87,"sun_azimuth_deg":65.44,"poa_w_m2":9.4,"ac_w":3.1},{"time_utc":"04:30","sun_elevation_deg":12.97,"sun_azimuth_deg":68.23,"poa_w_m2":19.6,"ac_w":6.5},{"time_utc":"04:45","sun_elevation_deg":15.1,"sun_azimuth_deg":71,"poa_w_m2":54.8,"ac_w":18.2},{"time_utc":"05:00","sun_elevation_deg":17.28,"sun_azimuth_deg":73.78,"poa_w_m2":95.1,"ac_w":31.6},{"time_utc":"05:15","sun_elevation_deg":19.48,"sun_azimuth_deg":76.56,"poa_w_m2":139.5,"ac_w":46.3},{"time_utc":"05:30","sun_elevation_deg":21.71,"sun_azimuth_deg":79.36,"poa_w_m2":187,"ac_w":62.1},{"time_utc":"05:45","sun_elevation_deg":23.97,"sun_azimuth_deg":82.18,"poa_w_m2":236.8,"ac_w":78.6},{"time_utc":"06:00","sun_elevation_deg":26.23,"sun_azimuth_deg":85.04,"poa_w_m2":288.5,"ac_w":95.8},{"time_utc":"06:15","sun_elevation_deg":28.51,"sun_azimuth_deg":87.94,"poa_w_m2":341.2,"ac_w":113.3},{"time_utc":"06:30","sun_elevation_deg":30.79,"sun_azimuth_deg":90.9,"poa_w_m2":394.4,"ac_w":130.9},{"time_utc":"06:45","sun_elevation_deg":33.07,"sun_azimuth_deg":93.94,"poa_w_m2":447.7,"ac_w":148.6},{"time_utc":"07:00","sun_elevation_deg":35.34,"sun_azimuth_deg":97.06,"poa_w_m2":500.5,"ac_w":166.2},{"time_utc":"07:15","sun_elevation_deg":37.6,"sun_azimuth_deg":100.29,"poa_w_m2":552.5,"ac_w":183.4},{"time_utc":"07:30","sun_elevation_deg":39.83,"sun_azimuth_deg":103.65,"poa_w_m2":603.2,"ac_w":200.3},{"time_utc":"07:45","sun_elevation_deg":42.03,"sun_azimuth_deg":107.15,"poa_w_m2":652.2,"ac_w":216.5},{"time_utc":"08:00","sun_elevation_deg":44.18,"sun_azimuth_deg":110.82,"poa_w_m2":699.2,"ac_w":232.1},{"time_utc":"08:15","sun_elevation_deg":46.29,"sun_azimuth_deg":114.69,"poa_w_m2":743.8,"ac_w":246.9},{"time_utc":"08:30","sun_elevation_deg":48.33,"sun_azimuth_deg":118.77,"poa_w_m2":785.8,"ac_w":260.9},{"time_utc":"08:45","sun_elevation_deg":50.28,"sun_azimuth_deg":123.11,"poa_w_m2":824.9,"ac_w":273.9},{"time_utc":"09:00","sun_elevation_deg":52.14,"sun_azimuth_deg":127.74,"poa_w_m2":860.8,"ac_w":285.8},{"time_utc":"09:15","sun_elevation_deg":53.89,"sun_azimuth_deg":132.67,"poa_w_m2":893.3,"ac_w":296.6},{"time_utc":"09:30","sun_elevation_deg":55.49,"sun_azimuth_deg":137.93,"poa_w_m2":922.2,"ac_w":306.2},{"time_utc":"09:45","sun_elevation_deg":56.93,"sun_azimuth_deg":143.55,"poa_w_m2":947.3,"ac_w":314.5},{"time_utc":"10:00","sun_elevation_deg":58.19,"sun_azimuth_deg":149.52,"poa_w_m2":968.5,"ac_w":321.5},{"time_utc":"10:15","sun_elevation_deg":59.24,"sun_azimuth_deg":155.83,"poa_w_m2":985.6,"ac_w":327.2},{"time_utc":"10:30","sun_elevation_deg":60.05,"sun_azimuth_deg":162.45,"poa_w_m2":998.5,"ac_w":331.5},{"time_utc":"10:45","sun_elevation_deg":60.61,"sun_azimuth_deg":169.31,"poa_w_m2":1007.2,"ac_w":334.4},{"time_utc":"11:00","sun_elevation_deg":60.9,"sun_azimuth_deg":176.33,"poa_w_m2":1011.6,"ac_w":335.9},{"time_utc":"11:15","sun_elevation_deg":60.9,"sun_azimuth_deg":183.4,"poa_w_m2":1011.7,"ac_w":335.9},{"time_utc":"11:30","sun_elevation_deg":60.63,"sun_azimuth_deg":190.43,"poa_w_m2":1007.5,"ac_w":334.5},{"time_utc":"11:45","sun_elevation_deg":60.08,"sun_azimuth_deg":197.3,"poa_w_m2":998.9,"ac_w":331.6},{"time_utc":"12:00","sun_elevation_deg":59.28,"sun_azimuth_deg":203.92,"poa_w_m2":986.1,"ac_w":327.4},{"time_utc":"12:15","sun_elevation_deg":58.24,"sun_azimuth_deg":210.25,"poa_w_m2":969.2,"ac_w":321.8},{"time_utc":"12:30","sun_elevation_deg":56.99,"sun_azimuth_deg":216.23,"poa_w_m2":948.2,"ac_w":314.8},{"time_utc":"12:45","sun_elevation_deg":55.55,"sun_azimuth_deg":221.86,"poa_w_m2":923.2,"ac_w":306.5},{"time_utc":"13:00","sun_elevation_deg":53.95,"sun_azimuth_deg":227.14,"poa_w_m2":894.5,"ac_w":297},{"time_utc":"13:15","sun_elevation_deg":52.21,"sun_azimuth_deg":232.08,"poa_w_m2":862.1,"ac_w":286.2},{"time_utc":"13:30","sun_elevation_deg":50.36,"sun_azimuth_deg":236.72,"poa_w_m2":826.3,"ac_w":274.3},{"time_utc":"13:45","sun_elevation_deg":48.4,"sun_azimuth_deg":241.07,"poa_w_m2":787.4,"ac_w":261.4},{"time_utc":"14:00","sun_elevation_deg":46.37,"sun_azimuth_deg":245.16,"poa_w_m2":745.5,"ac_w":247.5},{"time_utc":"14:15","sun_elevation_deg":44.27,"sun_azimuth_deg":249.04,"poa_w_m2":700.9,"ac_w":232.7},{"time_utc":"14:30","sun_elevation_deg":42.11,"sun_azimuth_deg":252.71,"poa_w_m2":654,"ac_w":217.1},{"time_utc":"14:45","sun_elevation_deg":39.91,"sun_azimuth_deg":256.22,"poa_w_m2":605.1,"ac_w":200.9},{"time_utc":"15:00","sun_elevation_deg":37.68,"sun_azimuth_deg":259.58,"poa_w_m2":554.5,"ac_w":184.1},{"time_utc":"15:15","sun_elevation_deg":35.43,"sun_azimuth_deg":262.82,"poa_w_m2":502.5,"ac_w":166.8},{"time_utc":"15:30","sun_elevation_deg":33.16,"sun_azimuth_deg":265.95,"poa_w_m2":449.7,"ac_w":149.3},{"time_utc":"15:45","sun_elevation_deg":30.88,"sun_azimuth_deg":268.98,"poa_w_m2":396.5,"ac_w":131.6},{"time_utc":"16:00","sun_elevation_deg":28.6,"sun_azimuth_deg":271.95,"poa_w_m2":343.2,"ac_w":113.9},{"time_utc":"16:15","sun_elevation_deg":26.32,"sun_azimuth_deg":274.85,"poa_w_m2":290.5,"ac_w":96.4},{"time_utc":"16:30","sun_elevation_deg":24.05,"sun_azimuth_deg":277.71,"poa_w_m2":238.8,"ac_w":79.3},{"time_utc":"16:45","sun_elevation_deg":21.8,"sun_azimuth_deg":280.54,"poa_w_m2":188.8,"ac_w":62.7},{"time_utc":"17:00","sun_elevation_deg":19.57,"sun_azimuth_deg":283.33,"poa_w_m2":141.2,"ac_w":46.9},{"time_utc":"17:15","sun_elevation_deg":17.36,"sun_azimuth_deg":286.12,"poa_w_m2":96.8,"ac_w":32.1},{"time_utc":"17:30","sun_elevation_deg":15.19,"sun_azimuth_deg":288.89,"poa_w_m2":56.3,"ac_w":18.7},{"time_utc":"17:45","sun_elevation_deg":13.05,"sun_azimuth_deg":291.67,"poa_w_m2":20.8,"ac_w":6.9},{"time_utc":"18:00","sun_elevation_deg":10.95,"sun_azimuth_deg":294.45,"poa_w_m2":9.5,"ac_w":3.2},{"time_utc":"18:15","sun_elevation_deg":8.9,"sun_azimuth_deg":297.26,"poa_w_m2":6.7,"ac_w":2.2},{"time_utc":"18:30","sun_elevation_deg":6.89,"sun_azimuth_deg":300.08,"poa_w_m2":4.2,"ac_w":1.4},{"time_utc":"18:45","sun_elevation_deg":4.95,"sun_azimuth_deg":302.93,"poa_w_m2":2.2,"ac_w":0.7},{"time_utc":"19:00","sun_elevation_deg":3.07,"sun_azimuth_deg":305.82,"poa_w_m2":0.9,"ac_w":0.3},{"time_utc":"19:15","sun_elevation_deg":1.25,"sun_azimuth_deg":308.74,"poa_w_m2":0.1,"ac_w":0}],"models":["Sonnenstand: NOAA-Verfahren mit Spencer-Reihe fuer Deklination und Zeitgleichung.","Luftmasse: Kasten-Young 1989.","Direktnormalstrahlung: Luftmassenmodell nach Meinel, Klarhimmel.","Diffusstrahlung: fester Anteil von zehn Prozent der Direktstrahlung, Himmel isotrop.","Modulebene: isotroper Himmel plus Bodenreflex mit Albedo."],"limits":["Cloudless sky assumed; this is an upper bound, not a forecast.","Shading, soiling, snow and cell temperature are not modelled beyond the flat derate factor.","All times are UTC."],"method":"solar position per NOAA, clear-sky irradiance per air mass model, isotropic sky in the module plane"}},{"id":"solarwerk.low_wattage_cooking_estimate","name":"low_wattage_cooking_estimate","title":"Calculates a theoretical heating floor and a practical energy and time range for low-wattage cooking solely from caller-supplied device and thermal assumptions.","description":"Uses rated electrical power, food mass, start and target temperature, specific heat and an explicit efficiency range supplied by the caller. Optional vessel heat, evaporation and a caller-defined hold phase can be included. It contains no recipes, recipe text, food-specific cooking claims or hidden food database; the output separates the thermodynamic lower bound from the practical range and is not a food-safety clearance.","category":"solarwerk","keywords":[],"resource":"https://solar.halowerk.com/low-wattage-cooking","method":"POST","mimeType":"application/json","inputSchema":{"type":"object","required":["device_power_w","food_mass_kg","start_temperature_c","target_temperature_c","specific_heat_kj_kg_k","efficiency"],"additionalProperties":false,"properties":{"device_power_w":{"type":"number","exclusiveMinimum":0,"maximum":10000,"description":"Caller-supplied rated electrical input power in watts."},"food_mass_kg":{"type":"number","exclusiveMinimum":0,"maximum":100,"description":"Mass being heated in kilograms."},"start_temperature_c":{"type":"number","minimum":-50,"maximum":200},"target_temperature_c":{"type":"number","minimum":-49,"maximum":300},"specific_heat_kj_kg_k":{"type":"number","exclusiveMinimum":0,"maximum":10,"description":"Caller-supplied effective specific heat of the contents."},"efficiency":{"type":"object","required":["low","expected","high"],"additionalProperties":false,"properties":{"low":{"type":"number","exclusiveMinimum":0,"maximum":1},"expected":{"type":"number","exclusiveMinimum":0,"maximum":1},"high":{"type":"number","exclusiveMinimum":0,"maximum":1}}},"vessel":{"type":"object","required":["mass_kg","specific_heat_kj_kg_k"],"additionalProperties":false,"properties":{"mass_kg":{"type":"number","minimum":0,"maximum":100},"specific_heat_kj_kg_k":{"type":"number","exclusiveMinimum":0,"maximum":10}}},"evaporation":{"type":"object","required":["mass_kg","latent_heat_kj_kg"],"additionalProperties":false,"properties":{"mass_kg":{"type":"number","minimum":0,"maximum":100},"latent_heat_kj_kg":{"type":"number","minimum":0,"maximum":5000}}},"hold":{"type":"object","required":["minutes","power_fraction"],"additionalProperties":false,"properties":{"minutes":{"type":"number","minimum":0,"maximum":1440},"power_fraction":{"type":"number","minimum":0,"maximum":1,"description":"Average fraction of rated input power during the hold phase."}}}}},"outputSchema":{"type":"object"},"price":{"amount":"3000","currency":"USDC","decimals":6,"human":"0.003 USDC"},"accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"3000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}],"serviceName":"low_wattage_cooking_estimate","tags":["off-grid","energy","cooking","calculator"],"example_request":{"device_power_w":300,"food_mass_kg":1.2,"start_temperature_c":20,"target_temperature_c":90,"specific_heat_kj_kg_k":4,"efficiency":{"low":0.45,"expected":0.6,"high":0.75},"vessel":{"mass_kg":0.8,"specific_heat_kj_kg_k":0.9},"hold":{"minutes":20,"power_fraction":0.3}},"requestExample":{"device_power_w":300,"food_mass_kg":1.2,"start_temperature_c":20,"target_temperature_c":90,"specific_heat_kj_kg_k":4,"efficiency":{"low":0.45,"expected":0.6,"high":0.75},"vessel":{"mass_kg":0.8,"specific_heat_kj_kg_k":0.9},"hold":{"minutes":20,"power_fraction":0.3}},"outputExample":{"device_power_w":300,"temperature_rise_k":70,"useful_heat":{"food_kj":336,"vessel_kj":50.4,"evaporation_kj":0,"total_kj":386.4},"theoretical_minimum":{"energy_wh":107.333,"heat_up_minutes_at_full_power":21.47,"basis":"Useful heat divided by rated power at 100% transfer efficiency; no hold phase."},"practical_estimate":{"heat_up_minutes":{"low":28.62,"expected":35.78,"high":47.7},"total_minutes_including_hold":{"low":48.62,"expected":55.78,"high":67.7},"input_energy_wh_including_hold":{"low":173.111,"expected":208.889,"high":268.519}},"assumptions_used":{"food_mass_kg":1.2,"specific_heat_kj_kg_k":4,"start_temperature_c":20,"target_temperature_c":90,"efficiency":{"low":0.45,"expected":0.6,"high":0.75},"vessel":{"mass_kg":0.8,"specific_heat_kj_kg_k":0.9},"evaporation":null,"hold":{"minutes":20,"power_fraction":0.3}},"uncertainty":["The range comes only from the caller-supplied efficiency bounds.","Rated device power is treated as constant during heat-up.","Heat loss, cycling, phase changes and vessel heat are absent unless represented by the supplied assumptions.","This calculation does not determine whether a food is cooked or microbiologically safe."],"safety_notice":"This energy and time estimate is not a food-safety clearance. Verify safe preparation with an appropriate validated method.","meta":{"cache":"miss"}}},{"id":"solarwerk.victron_log_parse","name":"victron_log_parse","title":"Turns a VE.Direct text dump from a Victron MPPT charger, BMV monitor or Phoenix inverter into normalised JSON with units applied and state and error codes decoded.","description":"Reads the key-tab-value lines of the VE.Direct text protocol, applies the unit scaling that belongs to each key, and decodes the charger state, tracker state and error number into plain text. Multiple blocks in one dump are returned as separate records in order. Keys that are not in the field table are preserved verbatim under unknown_keys rather than guessed at. The checksum line is not verified, since a text export usually no longer carries the original byte framing.","category":"solarwerk","keywords":[],"resource":"https://solar.halowerk.com/victron-log-parse","method":"POST","mimeType":"application/json","inputSchema":{"type":"object","required":["text"],"additionalProperties":false,"properties":{"text":{"type":"string","minLength":3,"maxLength":120000,"description":"Raw VE.Direct dump, one key-tab-value pair per line."},"keep_raw":{"type":"boolean","default":false,"description":"Also return the raw key-value pairs per record."}}},"outputSchema":{"type":"object"},"price":{"amount":"3000","currency":"USDC","decimals":6,"human":"0.003 USDC"},"accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"3000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}],"serviceName":"victron_log_parse","tags":["off-grid","victron","parser"],"example_request":{"text":"beispiel","keep_raw":false},"requestExample":{"text":"beispiel","keep_raw":false}},{"id":"solarwerk.offgrid_autonomy","name":"offgrid_autonomy","title":"Calculates how long an off-grid battery lasts at a given state of charge and load, with and without a stated daily solar input, and what daily input would hold the level.","description":"Daily energy balance and straight run-down from the figures supplied. Solar input is caller data in watt-hours per day; nothing is fetched and no weather is assumed. Time to empty means time to the reserve floor, not to zero. Idle draw and conversion efficiency apply to AC loads only. Ageing, temperature and Peukert behaviour are not modelled, which matters for lead acid far more than for LiFePO4.","category":"solarwerk","keywords":[],"resource":"https://solar.halowerk.com/autonomy-forecast","method":"POST","mimeType":"application/json","inputSchema":{"type":"object","required":["battery","loads"],"additionalProperties":false,"properties":{"battery":{"type":"object","required":["soc_percent"],"additionalProperties":false,"properties":{"capacity_wh":{"type":"number","minimum":10,"maximum":10000000},"capacity_ah":{"type":"number","minimum":1,"maximum":100000},"nominal_voltage_v":{"type":"number","minimum":6,"maximum":1000,"default":12},"soc_percent":{"type":"number","minimum":0,"maximum":100},"reserve_soc_percent":{"type":"number","minimum":0,"maximum":90,"default":20,"description":"Floor not to be crossed."}}},"loads":{"type":"array","minItems":1,"maxItems":60,"items":{"type":"object","required":["name","watts"],"additionalProperties":false,"properties":{"name":{"type":"string"},"watts":{"type":"number","minimum":0,"maximum":50000},"hours_per_day":{"type":"number","minimum":0,"maximum":24,"default":24},"dc":{"type":"boolean","default":false,"description":"True for loads fed straight from the battery."}}}},"inverter":{"type":"object","additionalProperties":false,"properties":{"efficiency":{"type":"number","minimum":0.5,"maximum":1,"default":0.9},"idle_w":{"type":"number","minimum":0,"maximum":500,"default":15},"hours_powered_per_day":{"type":"number","minimum":0,"maximum":24,"default":24}}},"daily_solar_input_wh":{"type":"number","minimum":0,"maximum":1000000,"default":0,"description":"Expected harvest per day."}}},"outputSchema":{"type":"object"},"price":{"amount":"3000","currency":"USDC","decimals":6,"human":"0.003 USDC"},"accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"3000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}],"serviceName":"offgrid_autonomy","tags":["off-grid","battery","planning"],"example_request":{"battery":{"capacity_wh":2400,"soc_percent":80,"reserve_soc_percent":20},"loads":[{"name":"router","watts":10,"hours_per_day":24,"dc":true}],"daily_solar_input_wh":300},"requestExample":{"battery":{"capacity_wh":2400,"soc_percent":80,"reserve_soc_percent":20},"loads":[{"name":"router","watts":10,"hours_per_day":24,"dc":true}],"daily_solar_input_wh":300},"outputExample":{"battery":{"capacity_wh":2400,"soc_percent":80,"reserve_soc_percent":20,"available_wh":1440},"loads":[{"name":"router","watts":10,"hours_per_day":24,"dc":true,"battery_wh_per_day":240}],"inverter_idle_wh_per_day":360,"consumption_wh_per_day":600,"mean_load_w":25,"solar_input_wh_per_day":300,"daily_balance_wh":-300,"hours_to_reserve_without_input":57.6,"days_to_reserve_at_stated_input":4.8,"sustainable":false,"required_daily_input_wh":600,"input_shortfall_wh_per_day":300,"extra_capacity_needed_wh_for_3_days":0,"unavailable_fields":[],"assumptions":["Solar input is caller data in watt-hours per day; no weather source is used.","Time to empty means time to the reserve floor, not to zero.","Conversion efficiency and idle draw apply to AC loads only.","Ageing, temperature and Peukert effects are not modelled."],"method":"daily energy balance and straight run-down between state of charge and reserve"}},{"id":"solarwerk.sun_position_shadow","name":"sun_position_shadow","title":"Returns sun position, shadow length and shadow direction of an object over a day, and states when a point at a given distance and bearing lies in that shadow.","description":"Pure astronomy and geometry on level ground: sun position by the NOAA method, shadow length as object height divided by the tangent of the sun elevation. Refraction is only applied to sunrise and sunset. Terrain slope, surrounding buildings, vegetation and diffuse light are not modelled, so a point outside the shadow can still be shaded in reality. Times are UTC.","category":"solarwerk","keywords":[],"resource":"https://solar.halowerk.com/shadow-simulator","method":"POST","mimeType":"application/json","inputSchema":{"type":"object","required":["lat","lon","date","object_height_m"],"additionalProperties":false,"properties":{"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"date":{"type":"string","description":"Day as YYYY-MM-DD."},"object_height_m":{"type":"number","minimum":0.01,"maximum":1000},"step_minutes":{"type":"integer","minimum":5,"maximum":60,"default":30},"obstacle_distance_m":{"type":"number","minimum":0.01,"maximum":10000,"description":"Distance of the point of interest from the object."},"obstacle_bearing_deg":{"type":"number","minimum":0,"maximum":360,"description":"Compass bearing from the object to that point."},"bearing_tolerance_deg":{"type":"number","minimum":1,"maximum":90,"default":10},"max_shadow_length_m":{"type":"number","minimum":1,"maximum":100000,"default":500,"description":"Shadow lengths above this are reported as capped."}}},"outputSchema":{"type":"object"},"price":{"amount":"2000","currency":"USDC","decimals":6,"human":"0.002 USDC"},"accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"2000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}],"serviceName":"sun_position_shadow","tags":["off-grid","solar","geometry"],"example_request":{"lat":-90,"lon":-180,"date":"beispiel","object_height_m":0.01,"step_minutes":30,"bearing_tolerance_deg":10,"max_shadow_length_m":500},"requestExample":{"lat":-90,"lon":-180,"date":"beispiel","object_height_m":0.01,"step_minutes":30,"bearing_tolerance_deg":10,"max_shadow_length_m":500}},{"id":"solarwerk.panel_tilt_optimiser","name":"panel_tilt_optimiser","title":"Finds the module tilt with the highest clear-sky yield per month, the best fixed tilt for the whole year, a two-position summer and winter setting, and the loss of a tilt the caller already uses.","description":"Evaluates clear-sky irradiance in the module plane for tilt angles from zero to ninety degrees on the fifteenth of each month and sums the days. Because it assumes a cloudless sky, the optimum leans slightly steeper than a real-weather optimum, where diffuse light from an overcast sky rewards flatter angles; in summer the difference is small, in winter months it reaches ten to fifteen degrees, so treat the winter figures as an upper bound.","category":"solarwerk","keywords":[],"resource":"https://solar.halowerk.com/tilt-optimiser","method":"POST","mimeType":"application/json","inputSchema":{"type":"object","required":["lat","lon"],"additionalProperties":false,"properties":{"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"azimuth_deg":{"type":"number","minimum":0,"maximum":360,"default":180},"albedo":{"type":"number","minimum":0,"maximum":1,"default":0.2},"elevation_m":{"type":"number","minimum":-500,"maximum":6000,"default":0},"current_tilt_deg":{"type":"number","minimum":0,"maximum":90,"description":"Tilt in use today, for the loss comparison."},"tilt_step_deg":{"type":"number","minimum":1,"maximum":10,"default":2},"year":{"type":"integer","minimum":1970,"maximum":2100,"default":2026}}},"outputSchema":{"type":"object"},"price":{"amount":"3000","currency":"USDC","decimals":6,"human":"0.003 USDC"},"accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"3000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}],"serviceName":"panel_tilt_optimiser","tags":["off-grid","solar","pv"],"example_request":{"lat":-90,"lon":-180,"azimuth_deg":180,"albedo":0.2,"elevation_m":0,"tilt_step_deg":2,"year":2026},"requestExample":{"lat":-90,"lon":-180,"azimuth_deg":180,"albedo":0.2,"elevation_m":0,"tilt_step_deg":2,"year":2026},"outputExample":{"lat":-90,"lon":-180,"azimuth_deg":180,"year":2026,"tilt_step_deg":2,"best_fixed_tilt_deg":56,"best_fixed_year_wh_per_m2":843997,"flat_year_wh_per_m2":715089,"gain_vs_flat_percent":18,"two_position":{"summer_tilt_deg":63,"winter_tilt_deg":0},"monthly":[{"month":"January","best_tilt_deg":48,"best_day_wh_per_m2":6643.4,"flat_day_wh_per_m2":6424,"gain_vs_flat_percent":3.4},{"month":"February","best_tilt_deg":68,"best_day_wh_per_m2":4209.1,"flat_day_wh_per_m2":3002.6,"gain_vs_flat_percent":40.2},{"month":"March","best_tilt_deg":86,"best_day_wh_per_m2":831.3,"flat_day_wh_per_m2":112.3,"gain_vs_flat_percent":640.5},{"month":"April","best_tilt_deg":0,"best_day_wh_per_m2":0,"flat_day_wh_per_m2":0,"gain_vs_flat_percent":null},{"month":"May","best_tilt_deg":0,"best_day_wh_per_m2":0,"flat_day_wh_per_m2":0,"gain_vs_flat_percent":null},{"month":"June","best_tilt_deg":0,"best_day_wh_per_m2":0,"flat_day_wh_per_m2":0,"gain_vs_flat_percent":null},{"month":"July","best_tilt_deg":0,"best_day_wh_per_m2":0,"flat_day_wh_per_m2":0,"gain_vs_flat_percent":null},{"month":"August","best_tilt_deg":0,"best_day_wh_per_m2":0,"flat_day_wh_per_m2":0,"gain_vs_flat_percent":null},{"month":"September","best_tilt_deg":0,"best_day_wh_per_m2":0,"flat_day_wh_per_m2":0,"gain_vs_flat_percent":null},{"month":"October","best_tilt_deg":76,"best_day_wh_per_m2":2991.2,"flat_day_wh_per_m2":1449.2,"gain_vs_flat_percent":106.4},{"month":"November","best_tilt_deg":54,"best_day_wh_per_m2":5929.1,"flat_day_wh_per_m2":5238.2,"gain_vs_flat_percent":13.2},{"month":"December","best_tilt_deg":48,"best_day_wh_per_m2":7687.7,"flat_day_wh_per_m2":7300.7,"gain_vs_flat_percent":5.3}],"current_tilt_comparison":null,"unavailable_fields":["current_tilt_comparison"],"high_latitude_note":"Above the polar circle single days carry the year; treat the fixed optimum with care.","models":["Sonnenstand: NOAA-Verfahren mit Spencer-Reihe fuer Deklination und Zeitgleichung.","Luftmasse: Kasten-Young 1989.","Direktnormalstrahlung: Luftmassenmodell nach Meinel, Klarhimmel.","Diffusstrahlung: fester Anteil von zehn Prozent der Direktstrahlung, Himmel isotrop.","Modulebene: isotroper Himmel plus Bodenreflex mit Albedo."],"limits":["Clear sky, so the optimum comes out steeper than under real weather, in winter noticeably so.","Shading, snow load and mounting constraints are not considered.","Azimuth is taken as given and not optimised."],"method":"clear-sky plane-of-array insolation on the fifteenth of each month, tilt scanned in steps"}},{"id":"solarwerk.inverter_loss_calc","name":"inverter_loss_calc","title":"Splits the DC to AC path into cable loss and inverter loss for a given load, returns overall efficiency, battery current and the smallest cable size that stays inside the allowed voltage drop.","description":"Cable loss uses the DC resistance of the two-way run at twenty degrees Celsius; warm cable in a hot compartment carries roughly four percent more resistance per ten kelvin, which is not applied. Inverter loss follows a three-part model of idle draw, a proportional share and a quadratic share, fitted so that the stated peak efficiency is met near half of the rated power.","category":"solarwerk","keywords":[],"resource":"https://solar.halowerk.com/inverter-losses","method":"POST","mimeType":"application/json","inputSchema":{"type":"object","required":["load_w","battery_voltage_v"],"additionalProperties":false,"properties":{"load_w":{"type":"number","minimum":1,"maximum":100000,"description":"AC power drawn at the output."},"battery_voltage_v":{"type":"number","minimum":6,"maximum":1000},"inverter":{"type":"object","additionalProperties":false,"properties":{"rated_w":{"type":"number","minimum":50,"maximum":100000,"default":1200},"peak_efficiency":{"type":"number","minimum":0.5,"maximum":0.99,"default":0.93},"idle_w":{"type":"number","minimum":0,"maximum":500,"default":15},"efficiency_at_load":{"type":"number","minimum":0.3,"maximum":0.99,"description":"Measured efficiency at this exact load, overrides the model."}}},"cable":{"type":"object","required":["length_m","cross_section_mm2"],"additionalProperties":false,"properties":{"length_m":{"type":"number","minimum":0.1,"maximum":200,"description":"One-way run; the calculation doubles it."},"cross_section_mm2":{"type":"number","minimum":0.5,"maximum":500},"material":{"type":"string","enum":["copper","aluminium"],"default":"copper"}}},"max_voltage_drop_percent":{"type":"number","minimum":0.5,"maximum":10,"default":3}}},"outputSchema":{"type":"object"},"price":{"amount":"2000","currency":"USDC","decimals":6,"human":"0.002 USDC"},"accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"2000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}],"serviceName":"inverter_loss_calc","tags":["off-grid","inverter","cable"],"example_request":{"load_w":1,"battery_voltage_v":6,"max_voltage_drop_percent":3},"requestExample":{"load_w":1,"battery_voltage_v":6,"max_voltage_drop_percent":3},"outputExample":{"load_w":1,"battery_voltage_v":6,"inverter":{"rated_w":1200,"loss_w":15,"efficiency_percent":6.25,"efficiency_source":"three-part model fitted to peak efficiency","idle_w_used":15,"load_share_of_rating_percent":0.1},"cable":null,"cable_recommendation":null,"dc_input_w":16,"dc_current_a":2.67,"battery_drain_ah_per_hour":2.67,"total_loss_w":15,"overall_efficiency_percent":6.25,"unavailable_fields":["cable","cable_recommendation"],"assumptions":["Cable resistance at twenty degrees Celsius, two-way run.","Inverter loss is a fitted three-part model unless a measured efficiency is supplied.","Battery internal resistance and charge controller loss are not included."],"method":"quadratic cable loss plus idle and quadratic inverter loss"}},{"id":"solarwerk.offgrid_weather_alarm","name":"offgrid_weather_alarm","title":"Detects multi-hour low-renewable periods for an off-grid system from the current DWD MOSMIX point forecast and simulates whether the stated battery reaches its reserve.","description":"Uses the nearest current DWD MOSMIX_L station forecast, or a station explicitly supplied by the caller. Global irradiance drives a transparent PV estimate and forecast wind speed drives a stated generic turbine curve; neither replaces a site-specific yield model. A constant hourly load and optional battery are simulated over 12 to 120 hours. The result is an installation-risk signal, not an official weather warning, emergency alert or guarantee of supply.","category":"solarwerk","keywords":[],"resource":"https://solar.halowerk.com/off-grid-weather-alarm","method":"POST","mimeType":"application/json","inputSchema":{"type":"object","required":["load_wh_per_day"],"additionalProperties":false,"properties":{"station_id":{"type":"string","pattern":"^[A-Za-z0-9]{4,5}$","description":"Optional DWD MOSMIX station id. Use this or coordinates."},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"max_station_distance_km":{"type":"number","minimum":1,"maximum":300,"default":80},"forecast_hours":{"type":"integer","minimum":12,"maximum":120,"default":72},"load_wh_per_day":{"type":"number","minimum":1,"maximum":10000000},"solar":{"type":"object","additionalProperties":false,"properties":{"capacity_wp":{"type":"number","minimum":0,"maximum":10000000},"performance_ratio":{"type":"number","minimum":0.1,"maximum":1,"default":0.78}}},"wind":{"type":"object","additionalProperties":false,"properties":{"capacity_w":{"type":"number","minimum":0,"maximum":10000000},"cut_in_m_s":{"type":"number","minimum":0.5,"maximum":10,"default":3},"rated_m_s":{"type":"number","minimum":2,"maximum":30,"default":12},"cut_out_m_s":{"type":"number","minimum":5,"maximum":60,"default":25}}},"battery":{"type":"object","required":["capacity_wh","soc_percent"],"additionalProperties":false,"properties":{"capacity_wh":{"type":"number","minimum":10,"maximum":100000000},"soc_percent":{"type":"number","minimum":0,"maximum":100},"reserve_soc_percent":{"type":"number","minimum":0,"maximum":90,"default":20},"charge_efficiency":{"type":"number","minimum":0.5,"maximum":1,"default":0.95},"discharge_efficiency":{"type":"number","minimum":0.5,"maximum":1,"default":0.95}}},"alert":{"type":"object","additionalProperties":false,"properties":{"renewable_coverage_percent":{"type":"number","minimum":0,"maximum":100,"default":50},"minimum_duration_hours":{"type":"integer","minimum":3,"maximum":48,"default":6}}},"include_series":{"type":"boolean","default":true}}},"outputSchema":{"type":"object"},"price":{"amount":"5000","currency":"USDC","decimals":6,"human":"0.005 USDC"},"accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"5000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}],"serviceName":"offgrid_weather_alarm","tags":["off-grid","solar","wind","battery","forecast","dwd"],"example_request":{"lat":52.52,"lon":13.405,"forecast_hours":72,"load_wh_per_day":4200,"solar":{"capacity_wp":2400,"performance_ratio":0.78},"wind":{"capacity_w":800,"cut_in_m_s":3,"rated_m_s":12,"cut_out_m_s":25},"battery":{"capacity_wh":9600,"soc_percent":72,"reserve_soc_percent":20},"alert":{"renewable_coverage_percent":50,"minimum_duration_hours":6}},"requestExample":{"lat":52.52,"lon":13.405,"forecast_hours":72,"load_wh_per_day":4200,"solar":{"capacity_wp":2400,"performance_ratio":0.78},"wind":{"capacity_w":800,"cut_in_m_s":3,"rated_m_s":12,"cut_out_m_s":25},"battery":{"capacity_wh":9600,"soc_percent":72,"reserve_soc_percent":20},"alert":{"renewable_coverage_percent":50,"minimum_duration_hours":6}}},{"id":"solarwerk.building_heat_demand","name":"building_heat_demand","title":"Estimates annual building heat demand from envelope areas, U-values, air change rate and a user profile, using DWD climate normals and an openly stated degree-day method.","description":"Computes a transparent planning estimate for space-heating demand. The method is not DIN, VDI, GEG or PHPP and must not be used as regulatory proof. It combines transmission heat loss from each envelope component, ventilation heat loss from heated volume and air changes, monthly heating degree days from the nearest DWD 1991-2020 temperature-normal station, stated internal gains and optional domestic hot water.","category":"solarwerk","keywords":[],"resource":"https://solar.halowerk.com/building-heat-demand","method":"POST","mimeType":"application/json","inputSchema":{"type":"object","required":["lat","lon","heated_floor_area_m2","heated_volume_m3","envelope"],"additionalProperties":false,"examples":[{"lat":52.52,"lon":13.405,"heated_floor_area_m2":145,"heated_volume_m3":365,"envelope":[{"name":"external walls","area_m2":168,"u_value_w_m2k":0.22},{"name":"roof","area_m2":118,"u_value_w_m2k":0.16},{"name":"ground floor","area_m2":92,"u_value_w_m2k":0.25},{"name":"windows","area_m2":31,"u_value_w_m2k":0.95}],"ventilation":{"air_changes_per_hour":0.45,"heat_recovery_efficiency":0.15},"profile":{"indoor_temp_c":20,"heating_base_temp_c":15,"internal_gains_w":350},"domestic_hot_water_kwh_year":1800,"system_efficiency":0.92,"max_station_distance_km":70}],"properties":{"lat":{"type":"number","minimum":47,"maximum":56,"description":"Latitude in Germany; the DWD normal dataset used here covers Germany."},"lon":{"type":"number","minimum":5,"maximum":16},"heated_floor_area_m2":{"type":"number","minimum":5,"maximum":100000},"heated_volume_m3":{"type":"number","minimum":10,"maximum":1000000},"envelope":{"type":"array","minItems":1,"maxItems":40,"items":{"type":"object","required":["name","area_m2","u_value_w_m2k"],"additionalProperties":false,"properties":{"name":{"type":"string","minLength":1,"maxLength":80},"area_m2":{"type":"number","minimum":0.1,"maximum":100000},"u_value_w_m2k":{"type":"number","minimum":0.01,"maximum":8}}}},"ventilation":{"type":"object","additionalProperties":false,"properties":{"air_changes_per_hour":{"type":"number","minimum":0,"maximum":5,"default":0.5},"heat_recovery_efficiency":{"type":"number","minimum":0,"maximum":0.95,"default":0}}},"thermal_bridge_w_k":{"type":"number","minimum":0,"maximum":100000,"default":0},"profile":{"type":"object","additionalProperties":false,"properties":{"indoor_temp_c":{"type":"number","minimum":5,"maximum":30,"default":20},"heating_base_temp_c":{"type":"number","minimum":0,"maximum":25,"default":15},"internal_gains_w":{"type":"number","minimum":0,"maximum":100000,"default":0}}},"domestic_hot_water_kwh_year":{"type":"number","minimum":0,"maximum":1000000,"default":0},"system_efficiency":{"type":"number","minimum":0.5,"maximum":1.5,"default":1},"max_station_distance_km":{"type":"number","minimum":1,"maximum":200,"default":80}}},"outputSchema":{"type":"object"},"price":{"amount":"4000","currency":"USDC","decimals":6,"human":"0.004 USDC"},"accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"4000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}],"serviceName":"building_heat_demand","tags":["building","energy","heat-demand","dwd"],"example_request":{"lat":52.52,"lon":13.405,"heated_floor_area_m2":145,"heated_volume_m3":365,"envelope":[{"name":"external walls","area_m2":168,"u_value_w_m2k":0.22},{"name":"roof","area_m2":118,"u_value_w_m2k":0.16},{"name":"ground floor","area_m2":92,"u_value_w_m2k":0.25},{"name":"windows","area_m2":31,"u_value_w_m2k":0.95}],"ventilation":{"air_changes_per_hour":0.45,"heat_recovery_efficiency":0.15},"profile":{"indoor_temp_c":20,"heating_base_temp_c":15,"internal_gains_w":350},"domestic_hot_water_kwh_year":1800,"system_efficiency":0.92,"max_station_distance_km":70},"requestExample":{"lat":52.52,"lon":13.405,"heated_floor_area_m2":145,"heated_volume_m3":365,"envelope":[{"name":"external walls","area_m2":168,"u_value_w_m2k":0.22},{"name":"roof","area_m2":118,"u_value_w_m2k":0.16},{"name":"ground floor","area_m2":92,"u_value_w_m2k":0.25},{"name":"windows","area_m2":31,"u_value_w_m2k":0.95}],"ventilation":{"air_changes_per_hour":0.45,"heat_recovery_efficiency":0.15},"profile":{"indoor_temp_c":20,"heating_base_temp_c":15,"internal_gains_w":350},"domestic_hot_water_kwh_year":1800,"system_efficiency":0.92,"max_station_distance_km":70}}],"capability_request":{"url":"https://bedarf.halowerk.com/capabilities/request","method":"POST","cost":"free","description":"Missing a capability, or does the scope not fit? Report the need here - no payment required. Similar reports are bundled; the response returns an id you can check back on.","body_example":{"requested_capability":"short label","description":"what exactly is needed","max_price":0.01}},"updated_at":"2026-11-13T11:50:07.583Z"}