# MikroTik CCR2004-16G-2S+
# Converted from the punchdown catalog on 2026-11-10. Source of the data: vendor and netbox.
network: 1
imports:
  - ../../defaults/types.network.yaml
models:
  mikrotik/ccr2004-16g-2s+:
    name: CCR2004-16G-2S+
    vendor: MikroTik
    role: router
    mount: 19in
    size: { units: 1, depth: 210 }
    weight: 1.18
    ports:
      ether1..16: { type: 1000base-t }
      sfp-sfpplus1..2: { type: 10gbase-x-sfpp }
      serial0: { type: console-rj-45, role: console }
      psu1..2: { type: iec-60320-c14, role: power, side: rear, native: "PSU {n}" }
    x-family: ethernet-routers
    x-airflow: front-to-rear
    x-full-depth: false
    x-module-bays: 2
    faces:
      front:
        background: "#e3e3e3"
        padding: { x: 3, y: 3 }
        layout:
          row:
            gap: 0
            items:
              # The vents: V, /, Λ, \ repeating every 25.85 mm. Each kind is its own cutout, pinned to an edge of the
              # strip; a region narrower by half a period, pinned left or right, shifts its pattern a quarter period.
              - column:
                  width: 59.2
                  height: 38.45
                  gap: 0
                  justify: start
                  align: end
                  items:
                    - row:
                        width: 58.3
                        height: 5.4
                        margin: { top: 5.9 }
                        items:
                          - cutout-chevron: { width: 45.38, height: 5.4, position: { left: 0, top: 0 }, mask: { pattern: { length: 11, height: 5.3, thickness: 1.3, columns: 2, gap-x: 14.85, margin: 0 } } }
                          - cutout-chevron-inverted: { width: 45.38, height: 5.4, position: { right: 0, top: 0 }, mask: { pattern: { length: 11, height: 5.3, thickness: 1.3, columns: 2, gap-x: 14.85, margin: 0 } } }
                          - cutout-diagonal-slots: { width: 58.3, height: 5.4, position: { left: 0, top: 0 }, mask: { pattern: { length: 6.96, thickness: 1.3, columns: 2, rows: 1, gap-x: 20.55, margin: 0 } } }
                          - cutout-diagonal-slots: { width: 58.3, height: 5.4, position: { left: 0, top: 0 }, mask: { rotation: 90, pattern: { length: 6.96, thickness: 1.3, columns: 1, rows: 3, gap-y: 20.55, margin: 0 } } }
                    - row:
                        width: 59.2
                        gap: 7.35
                        margin: { top: 12.4 }
                        items:
                          - sfp-sfpplus1: { lights: link-activity, margin: { left: 21.7 } }
                          - sfp-sfpplus2: { lights: link-activity }
              # Even ports on top, odd below, in two blocks of eight.
              - grid: { ports: ether1..16, rows: 2, order: odd-bottom, groups: 4, gap: 2.1, group-gap: 10.9, margin: { left: 4.6, right: 6 } }
              - column:
                  height: 38.45
                  gap: 0
                  justify: start
                  align: start
                  items:
                    - row:
                        width: 226.9
                        height: 5.4
                        margin: { top: 5.9 }
                        items:
                          - cutout-chevron: { width: 226.9, height: 5.4, position: { left: 0, top: 0 }, mask: { pattern: { length: 11, height: 5.3, thickness: 1.3, columns: 8, gap-x: 14.85, margin: 0 } } }
                          - cutout-chevron-inverted: { width: 226.9, height: 5.4, position: { left: 0, top: 0 }, mask: { pattern: { length: 11, height: 5.3, thickness: 1.3, columns: 9, gap-x: 14.85, margin: 0 } } }
                          - cutout-diagonal-slots: { width: 213.97, height: 5.4, position: { left: 0, top: 0 }, mask: { pattern: { length: 6.96, thickness: 1.3, columns: 9, rows: 1, gap-x: 20.55, margin: 0 } } }
                          - cutout-diagonal-slots: { width: 213.97, height: 5.4, position: { right: 0, top: 0 }, mask: { rotation: 90, pattern: { length: 6.96, thickness: 1.3, columns: 1, rows: 9, gap-y: 20.55, margin: 0 } } }
                    - row:
                        gap: 0
                        width: 228.6
                        margin: { top: 3.13 }
                        items:
                          - serial0: { label-position: none, margin: { left: 2.2, right: 0.5 }, caption: { text: CONSOLE, text-style: { size: 2.17 } } }
                          - button: { id: reset, width: 3.8, height: 3.8, margin: { left: 3 }, caption: { text: RESET, text-style: { size: 2.17 } } }
                          - panel: { id: cover, width: 8.8, height: 21, color: "#d4d4d4", margin: { left: 2, right: 5 } }
                          - leds:
                              gap: 2.2
                              items:
                                - { id: user, text: USER }
                                - { id: fault, text: FAULT }
                                - { id: pwr2, text: PWR 2, color: "#3c6fb0" }
                                - { id: pwr1, text: PWR 1, color: "#3c6fb0" }
                          - grow
                          - column: { gap: 1, align: end, items: [ { logo: { text: MikroTik, width: 26, height: 6 } }, { label: { id: model, text: CCR2004-16G-2S+, width: 29.5, height: 3.6 } } ] }
      rear:
        background: "#dcdcdc"
        padding: { x: 3, y: 3 }
        layout:
          row:
            gap: 0
            items:
              - column:
                  background: "#bdbdbd"
                  width: 51
                  height: 38
                  gap: 0
                  justify: start
                  align: start
                  margin: { left: 10.6 }
                  items:
                    # Slots along the top: one left of the handle, three above the inlet.
                    - row: { gap: 9.9, margin: { top: 3, left: 9.9 }, items: [ { cutout-horizontal-slots: { width: 6.2, height: 2.7, mask: { pattern: { length: 5.8, thickness: 2.3, columns: 1, margin: 0.2 } } } }, { cutout-horizontal-slots: { width: 20.8, height: 2.7, mask: { pattern: { length: 5.8, thickness: 2.3, columns: 3, gap-x: 1.5, margin: 0.2 } } } } ] }
                    # Two rows of four tall openings behind the handle, then the inlet.
                    - row: { gap: 1.8, align: start, margin: { top: 6.05, left: 3.3 }, items: [ { cutout-vertical-slots: { width: 18.4, height: 15.7, margin: { top: 5.8 }, mask: { pattern: { length: 7, thickness: 3.4, columns: 4, rows: 2, gap-x: 1.6, gap-y: 1.7, margin: 0 } } } }, { psu1: { label-position: none } } ] }
              - column:
                  background: "#bdbdbd"
                  width: 51
                  height: 38
                  gap: 0
                  justify: start
                  align: start
                  margin: { left: 8 }
                  items:
                    # Slots along the top: one left of the handle, three above the inlet.
                    - row: { gap: 9.9, margin: { top: 3, left: 9.9 }, items: [ { cutout-horizontal-slots: { width: 6.2, height: 2.7, mask: { pattern: { length: 5.8, thickness: 2.3, columns: 1, margin: 0.2 } } } }, { cutout-horizontal-slots: { width: 20.8, height: 2.7, mask: { pattern: { length: 5.8, thickness: 2.3, columns: 3, gap-x: 1.5, margin: 0.2 } } } } ] }
                    # Two rows of four tall openings behind the handle, then the inlet.
                    - row: { gap: 1.8, align: start, margin: { top: 6.05, left: 3.3 }, items: [ { cutout-vertical-slots: { width: 18.4, height: 15.7, margin: { top: 5.8 }, mask: { pattern: { length: 7, thickness: 3.4, columns: 4, rows: 2, gap-x: 1.6, gap-y: 1.7, margin: 0 } } } }, { psu2: { label-position: none } } ] }
              - grow
              # Each fan turns behind a ring of hexagons cut in the case, around a solid hub.
              - fan: { id: fan-1, width: 36.5, height: 37.5, grille: { mask: { pattern: { preset: hex-grid, size: 4.8, gap-x: 0.8, gap-y: 0.8, margin: 0 }, shape: { ring: { outer: 36.5, inner: 19 } } } } }
              - fan: { id: fan-2, width: 37.5, height: 37.5, margin: { left: 48, right: 40 }, grille: { mask: { pattern: { preset: hex-grid, size: 4.8, gap-x: 0.8, gap-y: 0.8, margin: 0 }, shape: { ring: { outer: 37.5, inner: 19 } } } } }
    source:
      url: https://mikrotik.com/product/ccr2004_16g_2splus
      checked: 2026-11-11
      x-from: vendor and netbox
      x-faces: measured by hand from the NetBox photos on 2026-11-11 (docs/face-examples.md)
      x-netbox: mikrotik-ccr2004-16g-2s-plus
      x-reference-image: https://cdn.mikrotik.com/web-assets/rb_images/2563_hi_res.png
      x-netbox-elevation: [ front, rear ]
