# EnergyPlanner > EnergyPlanner is an electrical and energy-system planning tool by G.T. GmbH (Berlin) for buildings. One JSON model per object — building with its floors, grid connection, generation and storage, and each distribution board with its enclosure, rails, devices and conductors — is the only stored thing. Conductor list, loss balance, temperature rise and derating, impedances and the short-circuit proofs A–D, bill of material, the rule checks and the German Projektmappe are all derived from that model on request. Agents read the model and propose changes as RFC 6902 JSON-Patch; every write is schema-validated, invariant-checked and committed to git. Status: stage 1. Pilot object: the house at Kirschstraße 41, Berlin-Rosenthal (issue 25, 05.09.2026) with four distribution boards, all four modelled from the execution package and the manufacturer datasheets: UV1 with 22 devices and 28 conductors, UV Keller 26 and 46, UV Erdgeschoss 18 and 31, UV Obergeschoss 8 and 14. The floor-plan editor now includes a versioned interior library; cable routing with measured lengths, catalogue and PVGIS follow in later stages. ## Read the model Reading this pilot project needs no key — every address below answers an anonymous request. Other projects and every write require `Authorization: Bearer ` and answer 401 without one. - [Project list](https://planer.ione.energy/api/v1/projects): ids and cover-sheet meta - [Pilot model](https://planer.ione.energy/api/v1/projects/kirschstr41): the complete object — building, floors, grid connection, generation, all boards (JSON) - [Boards](https://planer.ione.energy/api/v1/projects/kirschstr41/verteiler): which distribution boards the object has and which of them have been surveyed - [Everything derived](https://planer.ione.energy/api/v1/projects/kirschstr41/berechnung) for one board (`?verteiler=`, default the main board): currents, conductor list, loss balance, rail temperatures, TE occupancy, impedances, proofs A–D, bill of material - [Rule checks](https://planer.ione.energy/api/v1/projects/kirschstr41/pruefungen): each finding with rule, severity, actual, required and the standard - [Project status](https://planer.ione.energy/api/v1/projects/kirschstr41/status): release matrix, open points, register of proofs - [Document list](https://planer.ione.energy/api/v1/projects/kirschstr41/mappe) and one document, e.g. [06 conductor list](https://planer.ione.energy/api/v1/projects/kirschstr41/mappe/06-leiterliste.md) the object-wide [07 cable schedule](https://planer.ione.energy/api/v1/projects/kirschstr41/mappe/07-kabelliste.md) (one row per consumption point; length from its floor-plan position and the board's position, `OFFEN` while either is missing) the [12 wiring routes](https://planer.ione.energy/api/v1/projects/kirschstr41/mappe/12-verlegung.md) (wiring ducts derived from the enclosure, route and computed length per conductor, fill level per duct segment — limit 70 %; raw data at `/verlegung`) the [16 test report template](https://planer.ione.energy/api/v1/projects/kirschstr41/mappe/16-pruefprotokoll.md) (DIN VDE 0100-600 initial-verification sheet prepared from the model: per circuit the cable, protective device, upstream RCD and the expected Zs,max / Ik,min; measurement columns left for the electrician, who signs it as his own statement about that model revision) and the [17 grid-operator application data sheet](https://planer.ione.energy/api/v1/projects/kirschstr41/mappe/17-netzanmeldung.md) (every figure Stromnetz Berlin asks for under VDE-AR-N 4100/4105 and §14a EnWG — connection, generator, storage, controllable loads — with its source; unknown values shown as «—») or the [assembly plan as SVG](https://planer.ione.energy/api/v1/projects/kirschstr41/mappe/05-aufbauplan.svg) - [Model integrity](https://planer.ione.energy/api/v1/projects/kirschstr41/violations) - [JSON Schema of the object](https://planer.ione.energy/api/v1/schema) · [OpenAPI 3.1](https://planer.ione.energy/openapi.json) ## Write to the model `PATCH /api/v1/projects/{id}` with a JSON-Patch body and `Authorization: Bearer `. Example — add a circuit (device plus its two conductors): [{"op":"add","path":"/verteiler/0/geraete/-","value":{"bmk":"F13","article":"NCN316","maker":"Hager","name":"LS C16 3P","te":3,"ebene":"E1","x_mm":[413.8,466.3],"tmax_C":60,"verlust":{"p_W":8.27,"at_A":16},"schutz":{"char":"C","in_A":16,"t_s":0.4},"icn_kA":10,"src":"datasheet"}}, {"op":"add","path":"/verteiler/0/leiter/-","value":{"id":"W16","von":"F13","nach":"Sauna","typ":"NYM-J 5×2.5","s_mm2":2.5,"l_m":18,"last_A":13,"src":"survey"}}] Responses: `200 {ok, revision, warnings[]}` · `401 UNAUTHORIZED` · `422 SCHEMA_INVALID | INVARIANT_VIOLATION | PATCH_FAILED` with `details[]`. Nothing is written unless all checks pass. After the write, every derived table and every check is recomputed — in the example above the loss balance rises from 79.34 W to 86.06 W and the rule engine reports that the enclosure's proven limit of 83 W is exceeded. ## Model conventions - A board is addressed by its index or id under `/verteiler`; everything computed refers to exactly one board. - Floor areas and heights, PV planes (azimuth 0 = south, tilt from horizontal) and coordinates belong to the object, not to a board. - Consumption points live at `gebaeude.etagen[i].punkte[j]` (floors bottom-up, `etagen[0]` = Keller in the pilot); a point is addressed by its index, so read the model first to find it. A point that carries no `xy` yet gets its coordinates with a JSON-Patch `add` on `/gebaeude/etagen/i/punkte/j/xy` (`replace` fails with `PATCH_FAILED` on a missing member); `xy` is metres, y up. - Coordinates inside a board are millimetres, y up, origin at the lower left inner corner of the enclosure; `te_mm` is the module pitch. - Currents are not stored: leaf loads carry `last_A`, everything upstream is summed by the calculation. - Every value carries `src` — the document, datasheet or measurement it comes from. No source, no value. A board with no enclosure and no devices counts as not surveyed: it is listed as an open point and computing it returns `409 NICHT_AUFGENOMMEN` rather than a guess. All four boards of the pilot are surveyed, so that answer does not occur here today. - Identifiers follow the German convention: devices by BMK (`Q1`, `F3`, `CU0`), conductors by number (`L6` internal, `W8` external). ## Legal Planning tool only. Sign-off, Stückprüfung and grid registration (Anmeldung) remain with the Elektrofachbetrieb. ## Company G.T. GmbH, Klingsorstraße 105 b, 12203 Berlin, Germany · https://gtlab.org · Related: https://ione.store (products), https://invest.ione.energy (investor memorandum) ## Interior library and canvas (v1) The floor-plan editor includes 43 original parametric furniture and equipment assets and a dedicated 2D render with PNG/SVG export. Read `/api/v1/interior` for the versioned catalog and stable rule IDs, and `/api/v1/schema` for the optional `gebaeude.etagen[].moebel` array. Furniture uses metres, centre coordinates, y up and counter-clockwise quarter turns. Bed presets describe sleeping dimensions; the physical envelope includes the catalog frame. Presets are design defaults, not regulatory standards. Furniture mutations use the project PATCH endpoint with existing bearer authorization. Include an RFC 6902 `test` of the current furniture list before replacing it. The server rejects invalid dimensions, unknown references and envelopes outside the actual floor contour; overlaps and wall intersections produce review warnings. Furniture never moves electrical points. Rules and catalog are versioned independently from model training; synthetic examples require review before entering a training dataset. Interior catalog 1.1 adds gym equipment, fireplaces, kitchen/laundry, storage and office equipment. Version 1.0 furniture remains supported. Room-purpose suggestions may use room names to refine generic legacy types; suggestions never change project room types. Floor materials in rendered images are illustrative, not surveyed facts.