{"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. State of charge from resting voltage is only reported when the series contains samples below the given rest_current_a, and carries a wide band because the LiFePO4 curve is flat between twenty and eighty percent. Cell imbalance cannot be detected from a pack voltage and is never claimed.","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}]},{"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. Nothing is measured here: the numbers are only as good as the watt figures supplied.","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}]},{"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}]},{"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. Nothing is fetched from a device or from VRM: the dump is supplied by the caller.","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}]},{"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}]},{"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. When obstacle_distance_m and obstacle_bearing_deg are given, a point counts as shaded while the shadow reaches at least that far and its direction is within the tolerance.","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}]},{"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. The yield penalty within a few degrees of the optimum is flat. Shading, snow load and mounting constraints are not considered. The azimuth is fixed as given and is not optimised.","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}]},{"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. That mirrors the shape of a real efficiency curve but is not the curve of a specific device; where a datasheet value exists, pass efficiency_at_load to pin the model. Battery internal resistance and controller loss are not included.","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}]}],"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-08-14T09:18:35.080Z"}