3D Roof Group

3D Roof Group
3D Group

3D Group containing at the highest level a number of Racks or Rail Pairs

Object
id
string
Example:
group-001
name
string
Example:
G1
rows
integer
Example:
2
cols
integer
Example:
8
panel
Object
id
string
Example:
45a29071-b7b3-4dd7-b16f-5c00c0574707
name
string
Example:
Aiko 445W N-Type ABC All Black Rigid Solar Panel
specification
Object
width
number
Example:
113.4
height
number
Example:
190.9
depth
number
Example:
3.5
orientation
string
Enumeration:
PORTRAIT
LANDSCAPE
mounting
Object
h_gap
number

Horizontal Gap between panels

Example:
0.3
v_gap
number

Vertical Gap Between Panels

Example:
0.1
origin
Object
x
number
Example:
-39.45608554384457
y
number
Example:
0.5605582630405639
z
integer
settings
Object
max_rows
string
max_cols
string
width
number
height
number
Example 1
{
    "id": "group-001",
    "name": "G1",
    "rows": 2,
    "cols": 8,
    "panel": {
        "id": "45a29071-b7b3-4dd7-b16f-5c00c0574707",
        "name": "Aiko 445W N-Type ABC All Black Rigid Solar Panel",
        "specification": {
            "width": 113.4,
            "height": 190.9,
            "depth": 3.5
        },
        "orientation": "LANDSCAPE",
        "mounting": {
            "h_gap": 0.3,
            "v_gap": 0.1
        }
    },
    "origin": {
        "x": -39.45608554384457,
        "y": 0.5605582630405639,
        "z": 1
    },
    "racks": {
        "mounting": {
            "h_gap": 1
        }
    },
    "settings": {
        "max_rows": "",
        "max_cols": "",
        "width": 1,
        "height": 1
    }
}
3D Racks
Object
rack_id
string
Example:
R1
row
integer
Example:
1
offset
Object
x
integer
y
integer
z
integer
rack_type
string

Type of Racks

Enumeration:
FLUSH
TILT
DUAL_TILT
CANOPY
DUAL_CANOPY
GROUIND
panel_columns
integer
panels_per_col
integer
Example:
3
faces
integer

number of faces for the rack

rack_geometry
Object
face
integer
Example:
1
type
string
Example:
DUAL_TILT
base_length
number
Example:
6.804
height
number
Example:
0.6
hypotenuse_length
number
Example:
6.804
tilt
Object
rad
number
Example:
0.261799
deg
integer
Example:
15
azimuth
Object
rad
number
Example:
1.5708
deg
integer
Example:
90
dual_ridge
Object
gap
number
Example:
0.15
length_m
number
Example:
6.804
mounting
Object
h_gap
string

Horizontal gap between next rack

v_gap
string

Vertical Gap to next group

walkways
Array

Walkway Gap between vertical columns

Object
id
string
width
string
after_col
string
ballast
string

Ballast Weight

mounting_components
Array
Object
span
Object
face
integer
Example:
1
start_col
integer
Example:
1
end_col
integer
Example:
8
length_m
number
Example:
3.65
components
Array
Object
component_type
string
Example:
RAIL
product_id
string
Example:
5cf86dc2-ae72-11f0-abdb-42010a9a0021
sku
string
Example:
2004207
name
string
Example:
K2 SingleRail Connector
specification
Object
width
integer
Example:
8
height
number
Example:
3.6
weight
number
Example:
0.3
quantity
integer
Example:
8
mounting_group
Object
id
string
Example:
c363cac3-ade6-11f0-abdb-42010a9a0021
name
string
Example:
Rail Connector
Example 1
{
    "rack_id": "R1",
    "row": 1,
    "offset": {
        "x": 1,
        "y": 1,
        "z": 1
    },
    "rack_type": "FLUSH",
    "panel_columns": 1,
    "panels_per_col": 3,
    "faces": 1,
    "rack_geometry": {
        "face": 1,
        "type": "DUAL_TILT",
        "base_length": 6.804,
        "height": 0.6,
        "hypotenuse_length": 6.804,
        "tilt": {
            "rad": 0.261799,
            "deg": 15
        },
        "azimuth": {
            "rad": 1.5708,
            "deg": 90
        }
    },
    "dual_ridge": {
        "gap": 0.15,
        "length_m": 6.804
    },
    "mounting": {
        "h_gap": "",
        "v_gap": "",
        "walkways": [
            {
                "id": "",
                "width": "",
                "after_col": ""
            }
        ],
        "ballast": ""
    },
    "mounting_components": {
        "span": {
            "start_col": "",
            "end_col": "",
            "length": "",
            "components": [
                {
                    "component_type": "RAIL_ENUM",
                    "undefined": "5cf86dc2-ae72-11f0-abdb-42010a9a0021",
                    "sku": "2004207",
                    "name": "K2 SingleRail Connector",
                    "specification": {
                        "width": 8,
                        "height": 3.6,
                        "weight": 0.3
                    },
                    "quantity": 8,
                    "mounting_group": {
                        "id": "c363cac3-ade6-11f0-abdb-42010a9a0021",
                        "name": "Rail Connector"
                    }
                }
            ]
        }
    }
}
3D Panel Cell
Object
id
string
Example:
C1_1
row
integer
Example:
1
col
integer
Example:
1
rack_id
string
Example:
R1
rack_face
integer
Example:
1
present
boolean
removed_reason
string
Enumeration:
MANUAL
OBSTRUCTION
AUTO
NONE
obstruction_id
unknown nullable
string_id
string
Example:
S1
shade_factor
integer
Example:
1
cache
Object
world
Object
x
number
Example:
-38.23
y
number
Example:
0.45
z
number
Example:
2.1
bounds
Object
w
number
Example:
1.134
h
number
Example:
1.909
Example 1
{
    "id": "C1_1",
    "row": 1,
    "col": 1,
    "rack_id": "R1",
    "rack_face": 1,
    "present": true,
    "removed_reason": "AUTO",
    "obstruction_id": null,
    "string_id": "S1",
    "shade_factor": 1,
    "cache": {
        "world": {
            "x": -38.23,
            "y": 0.45,
            "z": 2.1
        },
        "bounds": {
            "w": 1.134,
            "h": 1.909
        }
    }
}
3D Strings
Object
id
string
Example:
S1
inverter_id
string
Example:
INV1
mppt_channel
integer
Example:
1
max_voltage
integer
Example:
600
max_current
integer
Example:
12
max_power
integer
Example:
6000
actual_voltage
integer
Example:
540
actual_current
integer
Example:
11
actual_power
integer
Example:
5940
cabling
Array
Object
rack_id
string
Example:
R1
face
integer
Example:
1
start
Object
row
integer
Example:
1
col
integer
Example:
1
end
Object
row
integer
Example:
1
col
integer
Example:
3
length_m
number
Example:
3.65
components
Array
Object
component_type
string
Example:
CABLE
product_id
string
Example:
5cf86dc2-ae72-11f0-abdb-42010a9a0021
sku
string
Example:
2004207
name
string
Example:
4mm DC Cable
quantity
integer
Example:
6
entry_point
Object
x
number
Example:
-38.23
y
number
Example:
0.45
z
number
Example:
2.1
lat
number
lon
number
cable_length_m
number
Example:
28.5
Example 1
{
    "id": "S1",
    "inverter_id": "INV1",
    "mppt_channel": 1,
    "max_voltage": 600,
    "max_current": 12,
    "max_power": 6000,
    "actual_voltage": 540,
    "actual_current": 11,
    "actual_power": 5940,
    "cabling": [
        {
            "rack_id": "R1",
            "face": 1,
            "start": {
                "row": 1,
                "col": 1
            },
            "end": {
                "row": 1,
                "col": 3
            },
            "length_m": 3.65,
            "components": [
                {
                    "component_type": "CABLE",
                    "product_id": "5cf86dc2-ae72-11f0-abdb-42010a9a0021",
                    "sku": "2004207",
                    "name": "4mm DC Cable",
                    "quantity": 6
                }
            ]
        }
    ],
    "entry_point": {
        "x": -38.23,
        "y": 0.45,
        "z": 2.1,
        "lat": 1,
        "lon": 1
    },
    "cable_length_m": 28.5
}
3D Segment Group
Object
group
racks
Array of 3D Racks
panel_cells
Array of 3D Panel Cell
strings
Array of 3D Strings
Example 1
Sample Roof 2 x 8 with 2 panels removed
{
    "group": {
        "id": "group-001",
        "name": "G1",
        "rows": 2,
        "cols": 8,
        "panel": {
            "id": "45a29071-b7b3-4dd7-b16f-5c00c0574707",
            "name": "Aiko 445W N-Type ABC All Black Rigid Solar Panel",
            "specification": {
                "width": 113.4,
                "height": 190.9,
                "depth": 3.5
            },
            "orientation": "LANDSCAPE",
            "mounting": {
                "h_gap": 0.3,
                "v_gap": 0.1
            }
        },
        "origin": {
            "x": -39.45608554384457,
            "y": 0.5605582630405639,
            "z": 1
        },
        "settings": {
            "max_rows": "",
            "max_cols": "",
            "width": 1,
            "height": 1
        }
    },
    "racks": [
        {
            "rack_id": "R1",
            "row": 1,
            "offset": {
                "x": 1,
                "y": 1,
                "z": 1
            },
            "rack_type": "DUAL_CANOPY",
            "panel_columns": 1,
            "panels_per_col": 3,
            "faces": 1,
            "rack_geometry": {
                "face": 1,
                "type": "DUAL_TILT",
                "base_length": 6.804,
                "height": 0.6,
                "hypotenuse_length": 6.804,
                "tilt": {
                    "rad": 0.261799,
                    "deg": 15
                },
                "azimuth": {
                    "rad": 1.5708,
                    "deg": 90
                }
            },
            "dual_ridge": {
                "gap": 0.15,
                "length_m": 6.804
            },
            "mounting": {
                "h_gap": "",
                "v_gap": "",
                "walkways": [
                    {
                        "id": "",
                        "width": "",
                        "after_col": ""
                    }
                ],
                "ballast": ""
            },
            "mounting_components": [
                {
                    "span": {
                        "face": 1,
                        "start_col": 1,
                        "end_col": 8,
                        "length_m": 3.65
                    },
                    "components": [
                        {
                            "component_type": "RAIL",
                            "product_id": "5cf86dc2-ae72-11f0-abdb-42010a9a0021",
                            "sku": "2004207",
                            "name": "K2 SingleRail Connector",
                            "specification": {
                                "width": 8,
                                "height": 3.6,
                                "weight": 0.3
                            },
                            "quantity": 8,
                            "mounting_group": {
                                "id": "c363cac3-ade6-11f0-abdb-42010a9a0021",
                                "name": "Rail Connector"
                            }
                        }
                    ]
                }
            ]
        }
    ],
    "panel_cells": [
        {
            "id": "C1_1",
            "row": 1,
            "col": 1,
            "rack_id": "R1",
            "rack_face": 1,
            "present": true,
            "removed_reason": "OBSTRUCTION",
            "obstruction_id": null,
            "string_id": "S1",
            "shade_factor": 1,
            "cache": {
                "world": {
                    "x": -38.23,
                    "y": 0.45,
                    "z": 2.1
                },
                "bounds": {
                    "w": 1.134,
                    "h": 1.909
                }
            }
        }
    ],
    "strings": [
        {
            "id": "S1",
            "inverter_id": "INV1",
            "mppt_channel": 1,
            "max_voltage": 600,
            "max_current": 12,
            "max_power": 6000,
            "actual_voltage": 540,
            "actual_current": 11,
            "actual_power": 5940,
            "cabling": [
                {
                    "rack_id": "R1",
                    "face": 1,
                    "start": {
                        "row": 1,
                        "col": 1
                    },
                    "end": {
                        "row": 1,
                        "col": 3
                    },
                    "length_m": 3.65,
                    "components": [
                        {
                            "component_type": "CABLE",
                            "product_id": "5cf86dc2-ae72-11f0-abdb-42010a9a0021",
                            "sku": "2004207",
                            "name": "4mm DC Cable",
                            "quantity": 6
                        }
                    ]
                }
            ],
            "entry_point": {
                "x": -38.23,
                "y": 0.45,
                "z": 2.1,
                "lat": 1,
                "lon": 1
            },
            "cable_length_m": 28.5
        }
    ]
}
{
  "group": {
    "id": "group-001",
    "name": "G1",
    "rows": 2,
    "cols": 8,
    "panel": {
      "id": "45a29071-b7b3-4dd7-b16f-5c00c0574707",
      "name": "Aiko 445W N-Type ABC All Black Rigid Solar Panel",
      "specification": {
        "width": 113.4,
        "height": 190.9,
        "depth": 3.5
      },
      "orientation": "LANDSCAPE",
      "mounting": {
        "h_gap": 0.3,
        "v_gap": 0.1
      }
    },
    "origin": { "x": -39.456, "y": 0.561, "z": 1 },
    "settings": {
      "max_rows": 2,
      "max_cols": 8,
      "width": 1,
      "height": 1
    }
  },

  "racks": [
    {
      "rack_id": "R1",
      "row": 1,
      "offset": { "x": 0, "y": 0, "z": 0 },
      "rack_type": "FLUSH",
      "panel_columns": 8,
      "panels_per_col": 1,
      "faces": 1,
      "rack_geometry": {
        "face": 1,
        "type": "SINGLE_TILT",
        "base_length": 3.5,
        "height": 0,
        "hypotenuse_length": 3.5,
        "tilt": { "rad": 0, "deg": 0 },
        "azimuth": { "rad": 1.5708, "deg": 90 }
      },
      "mounting": {
        "h_gap": 0.3,
        "v_gap": 0.1,
        "walkways": [],
        "ballast": ""
      },
      "mounting_components": [
        {
          "span": { "face": 1, "start_col": 1, "end_col": 3, "length": 3.5 },
          "components": [
            {
              "component_type": "RAIL",
              "product_id": "SR-3500",
              "sku": "2003273",
              "name": "K2 SingleRail 36 - 3.5 m",
              "specification": { "width": 35, "height": 3.6, "weight": 4.5 },
              "quantity": 2,
              "mounting_group": { "id": "MG-RAIL", "name": "Rails" }
            },
            {
              "component_type": "CONNECTOR",
              "product_id": "SR-CONN",
              "sku": "2004207",
              "name": "K2 SingleRail Connector",
              "specification": { "width": 8, "height": 3.6, "weight": 0.3 },
              "quantity": 1,
              "mounting_group": { "id": "MG-CONN", "name": "Rail Connector" }
            }
          ]
        },
        {
          "span": { "face": 1, "start_col": 6, "end_col": 8, "length": 3.5 },
          "components": [
            {
              "component_type": "RAIL",
              "product_id": "SR-3500",
              "sku": "2003273",
              "name": "K2 SingleRail 36 - 3.5 m",
              "specification": { "width": 35, "height": 3.6, "weight": 4.5 },
              "quantity": 2,
              "mounting_group": { "id": "MG-RAIL", "name": "Rails" }
            }
          ]
        }
      ]
    },
    {
      "rack_id": "R2",
      "row": 2,
      "offset": { "x": 0, "y": 2.1, "z": 0 },
      "rack_type": "FLUSH",
      "panel_columns": 8,
      "panels_per_col": 1,
      "faces": 1,
      "rack_geometry": {
        "face": 1,
        "type": "SINGLE_TILT",
        "base_length": 3.5,
        "height": 0,
        "hypotenuse_length": 3.5,
        "tilt": { "rad": 0, "deg": 0 },
        "azimuth": { "rad": 1.5708, "deg": 90 }
      },
      "mounting": {
        "h_gap": 0.3,
        "v_gap": 0.1,
        "walkways": [],
        "ballast": ""
      },
      "mounting_components": [
        {
          "span": { "face": 1, "start_col": 1, "end_col": 8, "length": 3.5 },
          "components": [
            {
              "component_type": "RAIL",
              "product_id": "SR-3500",
              "sku": "2003273",
              "name": "K2 SingleRail 36 - 3.5 m",
              "specification": { "width": 35, "height": 3.6, "weight": 4.5 },
              "quantity": 2,
              "mounting_group": { "id": "MG-RAIL", "name": "Rails" }
            }
          ]
        }
      ]
    }
  ],

  "panel_cells": [
    { "id": "C1_1", "row": 1, "col": 1, "rack_id": "R1", "rack_face": 1, "present": true, "removed_reason": "NONE", "string_id": "S1", "shade_factor": 1, "cache": { "world": { "x": -38.23, "y": 0.45, "z": 2.1 }, "bounds": { "w": 1.134, "h": 1.909 } } },
    { "id": "C1_2", "row": 1, "col": 2, "rack_id": "R1", "rack_face": 1, "present": true, "removed_reason": "NONE", "string_id": "S1", "shade_factor": 1, "cache": { "world": { "x": -37.1, "y": 0.45, "z": 2.1 }, "bounds": { "w": 1.134, "h": 1.909 } } },
    { "id": "C1_3", "row": 1, "col": 3, "rack_id": "R1", "rack_face": 1, "present": true, "removed_reason": "NONE", "string_id": "S1", "shade_factor": 1, "cache": { "world": { "x": -35.9, "y": 0.45, "z": 2.1 }, "bounds": { "w": 1.134, "h": 1.909 } } },
    { "id": "C1_4", "row": 1, "col": 4, "rack_id": "R1", "rack_face": 1, "present": false, "removed_reason": "OBSTRUCTION", "string_id": null, "shade_factor": 0, "cache": { "world": { "x": -34.7, "y": 0.45, "z": 2.1 }, "bounds": { "w": 1.134, "h": 1.909 } } },
    { "id": "C1_5", "row": 1, "col": 5, "rack_id": "R1", "rack_face": 1, "present": false, "removed_reason": "OBSTRUCTION", "string_id": null, "shade_factor": 0, "cache": { "world": { "x": -33.5, "y": 0.45, "z": 2.1 }, "bounds": { "w": 1.134, "h": 1.909 } } },
    { "id": "C1_6", "row": 1, "col": 6, "rack_id": "R1", "rack_face": 1, "present": true, "removed_reason": "NONE", "string_id": "S1", "shade_factor": 1, "cache": { "world": { "x": -32.3, "y": 0.45, "z": 2.1 }, "bounds": { "w": 1.134, "h": 1.909 } } },
    { "id": "C1_7", "row": 1, "col": 7, "rack_id": "R1", "rack_face": 1, "present": true, "removed_reason": "NONE", "string_id": "S1", "shade_factor": 1, "cache": { "world": { "x": -31.1, "y": 0.45, "z": 2.1 }, "bounds": { "w": 1.134, "h": 1.909 } } },
    { "id": "C1_8", "row": 1, "col": 8, "rack_id": "R1", "rack_face": 1, "present": true, "removed_reason": "NONE", "string_id": "S1", "shade_factor": 1, "cache": { "world": { "x": -29.9, "y": 0.45, "z": 2.1 }, "bounds": { "w": 1.134, "h": 1.909 } } },

    { "id": "C2_1", "row": 2, "col": 1, "rack_id": "R2", "rack_face": 1, "present": true, "removed_reason": "NONE", "string_id": "S2", "shade_factor": 1, "cache": { "world": { "x": -38.23, "y": 2.55, "z": 2.1 }, "bounds": { "w": 1.134, "h": 1.909 } } },
    { "id": "C2_2", "row": 2, "col": 2, "rack_id": "R2", "rack_face": 1, "present": true, "removed_reason": "NONE", "string_id": "S2", "shade_factor": 1, "cache": { "world": { "x": -37.1, "y": 2.55, "z": 2.1 }, "bounds": { "w": 1.134, "h": 1.909 } } },
    { "id": "C2_3", "row": 2, "col": 3, "rack_id": "R2", "rack_face": 1, "present": true, "removed_reason": "NONE", "string_id": "S2", "shade_factor": 1, "cache": { "world": { "x": -35.9, "y": 2.55, "z": 2.1 }, "bounds": { "w": 1.134, "h": 1.909 } } },
    { "id": "C2_4", "row": 2, "col": 4, "rack_id": "R2", "rack_face": 1, "present": true, "removed_reason": "NONE", "string_id": "S2", "shade_factor": 1, "cache": { "world": { "x": -34.7, "y": 2.55, "z": 2.1 }, "bounds": { "w": 1.134, "h": 1.909 } } },
    { "id": "C2_5", "row": 2, "col": 5, "rack_id": "R2", "rack_face": 1, "present": true, "removed_reason": "NONE", "string_id": "S2", "shade_factor": 1, "cache": { "world": { "x": -33.5, "y": 2.55, "z": 2.1 }, "bounds": { "w": 1.134, "h": 1.909 } } },
    { "id": "C2_6", "row": 2, "col": 6, "rack_id": "R2", "rack_face": 1, "present": true, "removed_reason": "NONE", "string_id": "S2", "shade_factor": 1, "cache": { "world": { "x": -32.3, "y": 2.55, "z": 2.1 }, "bounds": { "w": 1.134, "h": 1.909 } } },
    { "id": "C2_7", "row": 2, "col": 7, "rack_id": "R2", "rack_face": 1, "present": true, "removed_reason": "NONE", "string_id": "S2", "shade_factor": 1, "cache": { "world": { "x": -31.1, "y": 2.55, "z": 2.1 }, "bounds": { "w": 1.134, "h": 1.909 } } },
    { "id": "C2_8", "row": 2, "col": 8, "rack_id": "R2", "rack_face": 1, "present": true, "removed_reason": "NONE", "string_id": "S2", "shade_factor": 1, "cache": { "world": { "x": -29.9, "y": 2.55, "z": 2.1 }, "bounds": { "w": 1.134, "h": 1.909 } } }
  ],

  "strings": [
    {
      "id": "S1",
      "inverter_id": "INV1",
      "mppt_channel": 1,
      "max_voltage": 600,
      "max_current": 12,
      "max_power": 6000,
      "actual_voltage": 540,
      "actual_current": 11,
      "actual_power": 5940,
      "cabling": [
        {
          "rack_id": "R1",
          "face": 1,
          "start": { "row": 1, "col": 1 },
          "end": { "row": 1, "col": 3 },
          "length_m": 3.5,
          "components": [
            {
              "component_type": "CABLE",
              "product_id": "DC4",
              "sku": "2004207",
              "name": "4mm DC Cable",
              "quantity": 6
            }
          ]
        },
        {
          "rack_id": "R1",
          "face": 1,
          "start": { "row": 1, "col": 6 },
          "end": { "row": 1, "col": 8 },
          "length_m": 3.5,
          "components": [
            {
              "component_type": "CABLE",
              "product_id": "DC4",
              "sku": "2004207",
              "name": "4mm DC Cable",
              "quantity": 6
            }
          ]
        }
      ],
      "entry_point": { "x": -38.23, "y": 0.45, "z": 2.1, "lat": 51.5, "lon": -0.12 },
      "cable_length_m": 28.5
    },
    {
      "id": "S2",
      "inverter_id": "INV1",
      "mppt_channel": 2,
      "max_voltage": 600,
      "max_current": 12,
      "max_power": 6000,
      "actual_voltage": 540,
      "actual_current": 11,
      "actual_power": 5940,
      "cabling": [
        {
          "rack_id": "R2",
          "face": 1,
          "start": { "row": 2, "col": 1 },
          "end": { "row": 2, "col": 8 },
          "length_m": 3.5,
          "components": [
            {
              "component_type": "CABLE",
              "product_id": "DC4",
              "sku": "2004207",
              "name": "4mm DC Cable",
              "quantity": 16
            }
          ]
        }
      ],
      "entry_point": { "x": -38.23, "y": 2.45, "z": 2.1, "lat": 51.5, "lon": -0.12 },
      "cable_length_m": 20
    }
  ]
}
Mounting Components
Object
span
Object
span_start
Object
row
string
col
string
span_end
Object
row
string
col
string
width
number
components
Array
Object
product_id
string
Example:
5cf86dc2-ae72-11f0-abdb-42010a9a0021
sku
string
Example:
2004207
name
string
Example:
K2 SingleRail Connector
specification
Object
width
integer
Example:
8
height
number
Example:
3.6
weight
number
Example:
0.3
quantity
integer
Example:
8
mounting_group
Object
id
string
Example:
c363cac3-ade6-11f0-abdb-42010a9a0021
name
string
Example:
Rail Connector
component_type
string
parent
Object
id
string
name
string
component_type
string
Example 1
Example 2
{
    "span": {
        "span_start": {
            "row": "",
            "col": ""
        },
        "span_end": {
            "row": "",
            "col": ""
        },
        "width": 1,
        "components": [
            {
                "product_id": "5cf86dc2-ae72-11f0-abdb-42010a9a0021",
                "sku": "2004207",
                "name": "K2 SingleRail Connector",
                "specification": {
                    "width": 8,
                    "height": 3.6,
                    "weight": 0.3
                },
                "quantity": 8,
                "mounting_group": {
                    "id": "c363cac3-ade6-11f0-abdb-42010a9a0021",
                    "name": "Rail Connector",
                    "component_type": "",
                    "parent": {
                        "id": "",
                        "name": "",
                        "component_type": ""
                    }
                }
            }
        ]
    }
}
{
  "group": {
    "id": "group-big-dual",
    "name": "G1",
    "rows": 13,
    "cols": 20,
    "panel": {
      "id": "45a29071-b7b3-4dd7-b16f-5c00c0574707",
      "name": "Aiko 445W N-Type ABC All Black Rigid Solar Panel",
      "specification": {
        "width": 113.4,
        "height": 190.9,
        "depth": 3.5
      },
      "orientation": "LANDSCAPE",
      "mounting": {
        "h_gap": 0.01,
        "v_gap": 0.20
      }
    },
    "origin": {
      "x": -17.70885231350297,
      "y": -2.7544326212497587,
      "z": 0.0
    },
    "settings": {
      "max_rows": 13,
      "max_cols": 20
    }
  },

  "racks": [
    {
      "rack_id": "R1",
      "row": 1,
      "rack_type": "DUAL_TILT",
      "faces": 2,
      "panel_columns": 20,
      "rack_geometry": {
        "type": "DUAL_TILT",
        "base_length": 2.2407,
        "height": 0.6,
        "hypotenuse_length": 2.32,
        "tilt": { "rad": 0.261799, "deg": 15 },
        "azimuth_face_1": { "deg": 85 },
        "azimuth_face_2": { "deg": 265 }
      },
      "mounting": { "h_gap": 0.2, "v_gap": 0.1 }
    },
    {
      "rack_id": "R2",
      "row": 2,
      "rack_type": "DUAL_TILT",
      "faces": 2,
      "panel_columns": 20,
      "rack_geometry": {
        "type": "DUAL_TILT",
        "base_length": 2.2407,
        "height": 0.6,
        "hypotenuse_length": 2.32,
        "tilt": { "rad": 0.261799, "deg": 15 },
        "azimuth_face_1": { "deg": 85 },
        "azimuth_face_2": { "deg": 265 }
      },
      "mounting": { "h_gap": 0.2, "v_gap": 0.1 }
    },
    {
      "rack_id": "R3",
      "row": 3,
      "rack_type": "DUAL_TILT",
      "faces": 2,
      "panel_columns": 20,
      "rack_geometry": {
        "type": "DUAL_TILT",
        "base_length": 2.2407,
        "height": 0.6,
        "hypotenuse_length": 2.32,
        "tilt": { "rad": 0.261799, "deg": 15 },
        "azimuth_face_1": { "deg": 85 },
        "azimuth_face_2": { "deg": 265 }
      },
      "mounting": { "h_gap": 0.2, "v_gap": 0.1 }
    },
    {
      "rack_id": "R4",
      "row": 4,
      "rack_type": "DUAL_TILT",
      "faces": 2,
      "panel_columns": 20,
      "rack_geometry": {
        "type": "DUAL_TILT",
        "base_length": 2.2407,
        "height": 0.6,
        "hypotenuse_length": 2.32,
        "tilt": { "rad": 0.261799, "deg": 15 },
        "azimuth_face_1": { "deg": 85 },
        "azimuth_face_2": { "deg": 265 }
      },
      "mounting": { "h_gap": 0.2, "v_gap": 0.1 }
    },
    {
      "rack_id": "R5",
      "row": 5,
      "rack_type": "DUAL_TILT",
      "faces": 2,
      "panel_columns": 20,
      "rack_geometry": {
        "type": "DUAL_TILT",
        "base_length": 2.2407,
        "height": 0.6,
        "hypotenuse_length": 2.32,
        "tilt": { "rad": 0.261799, "deg": 15 },
        "azimuth_face_1": { "deg": 85 },
        "azimuth_face_2": { "deg": 265 }
      },
      "mounting": { "h_gap": 0.2, "v_gap": 0.1 }
    },
    {
      "rack_id": "R6",
      "row": 6,
      "rack_type": "DUAL_TILT",
      "faces": 2,
      "panel_columns": 20,
      "rack_geometry": {
        "type": "DUAL_TILT",
        "base_length": 2.2407,
        "height": 0.6,
        "hypotenuse_length": 2.32,
        "tilt": { "rad": 0.261799, "deg": 15 },
        "azimuth_face_1": { "deg": 85 },
        "azimuth_face_2": { "deg": 265 }
      },
      "mounting": { "h_gap": 0.2, "v_gap": 0.1 }
    },
    {
      "rack_id": "R7",
      "row": 7,
      "rack_type": "DUAL_TILT",
      "faces": 2,
      "panel_columns": 20,
      "rack_geometry": {
        "type": "DUAL_TILT",
        "base_length": 2.2407,
        "height": 0.6,
        "hypotenuse_length": 2.32,
        "tilt": { "rad": 0.261799, "deg": 15 },
        "azimuth_face_1": { "deg": 85 },
        "azimuth_face_2": { "deg": 265 }
      },
      "mounting": { "h_gap": 0.2, "v_gap": 0.1 }
    },
    {
      "rack_id": "R8",
      "row": 8,
      "rack_type": "DUAL_TILT",
      "faces": 2,
      "panel_columns": 20,
      "rack_geometry": {
        "type": "DUAL_TILT",
        "base_length": 2.2407,
        "height": 0.6,
        "hypotenuse_length": 2.32,
        "tilt": { "rad": 0.261799, "deg": 15 },
        "azimuth_face_1": { "deg": 85 },
        "azimuth_face_2": { "deg": 265 }
      },
      "mounting": { "h_gap": 0.2, "v_gap": 0.1 }
    },
    {
      "rack_id": "R9",
      "row": 9,
      "rack_type": "DUAL_TILT",
      "faces": 2,
      "panel_columns": 20,
      "rack_geometry": {
        "type": "DUAL_TILT",
        "base_length": 2.2407,
        "height": 0.6,
        "hypotenuse_length": 2.32,
        "tilt": { "rad": 0.261799, "deg": 15 },
        "azimuth_face_1": { "deg": 85 },
        "azimuth_face_2": { "deg": 265 }
      },
      "mounting": { "h_gap": 0.2, "v_gap": 0.1 }
    },
    {
      "rack_id": "R10",
      "row": 10,
      "rack_type": "DUAL_TILT",
      "faces": 2,
      "panel_columns": 20,
      "rack_geometry": {
        "type": "DUAL_TILT",
        "base_length": 2.2407,
        "height": 0.6,
        "hypotenuse_length": 2.32,
        "tilt": { "rad": 0.261799, "deg": 15 },
        "azimuth_face_1": { "deg": 85 },
        "azimuth_face_2": { "deg": 265 }
      },
      "mounting": { "h_gap": 0.2, "v_gap": 0.1 }
    },
    {
      "rack_id": "R11",
      "row": 11,
      "rack_type": "DUAL_TILT",
      "faces": 2,
      "panel_columns": 20,
      "rack_geometry": {
        "type": "DUAL_TILT",
        "base_length": 2.2407,
        "height": 0.6,
        "hypotenuse_length": 2.32,
        "tilt": { "rad": 0.261799, "deg": 15 },
        "azimuth_face_1": { "deg": 85 },
        "azimuth_face_2": { "deg": 265 }
      },
      "mounting": { "h_gap": 0.2, "v_gap": 0.1 }
    },
    {
      "rack_id": "R12",
      "row": 12,
      "rack_type": "DUAL_TILT",
      "faces": 2,
      "panel_columns": 20,
      "rack_geometry": {
        "type": "DUAL_TILT",
        "base_length": 2.2407,
        "height": 0.6,
        "hypotenuse_length": 2.32,
        "tilt": { "rad": 0.261799, "deg": 15 },
        "azimuth_face_1": { "deg": 85 },
        "azimuth_face_2": { "deg": 265 }
      },
      "mounting": { "h_gap": 0.2, "v_gap": 0.1 }
    },
    {
      "rack_id": "R13",
      "row": 13,
      "rack_type": "DUAL_TILT",
      "faces": 2,
      "panel_columns": 20,
      "rack_geometry": {
        "type": "DUAL_TILT",
        "base_length": 2.2407,
        "height": 0.6,
        "hypotenuse_length": 2.32,
        "tilt": { "rad": 0.261799, "deg": 15 },
        "azimuth_face_1": { "deg": 85 },
        "azimuth_face_2": { "deg": 265 }
      },
      "mounting": { "h_gap": 0.2, "v_gap": 0.1 }
    }
  ],

  "panel_cells": [
    /* total 520 panels (13 racks × 20 cols × 2 faces) */
    { "id": "C1_1_F1", "row": 1, "col": 1, "face": 1, "rack_id": "R1", "present": true },
    { "id": "C1_1_F2", "row": 1, "col": 1, "face": 2, "rack_id": "R1", "present": true },
    { "id": "C1_2_F1", "row": 1, "col": 2, "face": 1, "rack_id": "R1", "present": true },
    { "id": "C1_2_F2", "row": 1, "col": 2, "face": 2, "rack_id": "R1", "present": true }
    /* ... continue programmatically for 20 cols × 13 rows × 2 faces ... */
  ],

  "strings": [
    {
      "id": "S1",
      "inverter_id": "INV1",
      "mppt_channel": 1,
      "face": 1,
      "racks": ["R1", "R2", "R3", "R4", "R5", "R6", "R7"],
      "entry_point": { "x": -17.7, "y": -2.75, "z": 1, "lat": 51.5, "lon": -0.12 }
    },
    {
      "id": "S2",
      "inverter_id": "INV1",
      "mppt_channel": 2,
      "face": 2,
      "racks": ["R8", "R9", "R10", "R11", "R12", "R13"],
      "entry_point": { "x": -17.7, "y": -2.75, "z": 1, "lat": 51.5, "lon": -0.12 }
    }
  ]
}