diff --git a/deploy/quick.deploy b/deploy/quick.deploy
new file mode 100644
index 0000000..c19e8c9
--- /dev/null
+++ b/deploy/quick.deploy
@@ -0,0 +1,3 @@
+sudo apt install docker-compose-v2 git -y
+git clone https://git.core.uz/mikrotik/ROSzetta.git
+sudo docker compose up -d --build
\ No newline at end of file
diff --git a/frontend/src/components/DeviceMockup.tsx b/frontend/src/components/DeviceMockup.tsx
index b193ad3..6b51554 100644
--- a/frontend/src/components/DeviceMockup.tsx
+++ b/frontend/src/components/DeviceMockup.tsx
@@ -14,6 +14,11 @@ export interface DeviceMockupProps {
const isHapAcLite = (b?: string | null): boolean =>
!!b && /h\s*A\s*P\s*ac\s*lite/i.test(b);
+// hAP ac² (RBD52G-5HacD2HnD): отличаем по цифре «2» / «²» после «ac»,
+// чтобы случайно не перехватить hAP ac lite.
+const isHapAc2 = (b?: string | null): boolean =>
+ !!b && (/h\s*A\s*P\s*ac\s*[²2]/i.test(b) || /RBD52G/i.test(b));
+
const isHapLike = (b?: string | null): boolean => !!b && /\bh\s*A\s*P\b/i.test(b);
const isRb5009 = (b?: string | null): boolean =>
@@ -49,7 +54,13 @@ function portColor(it: InterfaceInfo | undefined): { fill: string; stroke: strin
}
export default function DeviceMockup({ boardName, interfaces }: DeviceMockupProps) {
- if (isHapAcLite(boardName) || (isHapLike(boardName) && interfaces.filter((it) => /^ether/.test(it.name)).length === 5)) {
+ if (isHapAcLite(boardName)) {
+ return ;
+ }
+ if (isHapAc2(boardName)) {
+ return ;
+ }
+ if (isHapLike(boardName) && interfaces.filter((it) => /^ether/.test(it.name)).length === 5) {
return ;
}
if (isRb5009(boardName)) {
@@ -228,6 +239,141 @@ function HapAcLiteMockup({ interfaces }: { interfaces: InterfaceInfo[] }) {
);
}
+// --------- hAP ac² ---------
+// Чёрный пластиковый корпус (RBD52G-5HacD2HnD).
+// Слева: DC 12-28V, утопленная кнопка res/wps, индикаторы pwr / usr.
+// Справа: 5 GigE портов — ether1 «Internet/PoE in», ether2..ether5 «LAN».
+// PoE-out нет (в отличие от hAP ac lite).
+
+function HapAc2Mockup({ interfaces }: { interfaces: InterfaceInfo[] }) {
+ const ports = [
+ { name: 'ether1', label: '1', accent: 'poe-in' as const },
+ { name: 'ether2', label: '2', accent: null as const },
+ { name: 'ether3', label: '3', accent: null as const },
+ { name: 'ether4', label: '4', accent: null as const },
+ { name: 'ether5', label: '5', accent: null as const },
+ ];
+
+ // Соотношение фото задней панели ~4.3:1. При height: 62px ширина ≈ 268px.
+ const W = 1180, H = 274;
+ const bodyR = 20;
+ const portW = 130, portH = 130;
+ const portGap = 14;
+ const firstPortX = 410;
+ const portsTopY = 60;
+ const lanStartX = firstPortX + portW + portGap;
+ const lanSpanW = 4 * portW + 3 * portGap;
+
+ return (
+
+
+ Лицевая панель hAP ac² · подсветка портов в реальном времени
+
+
+
+
+
+
+ );
+}
+
// --------- RB5009UG+S+ ---------
// Чёрный корпус, 8 GigE портов (ether1..ether8) + 1 SFP+ (sfp-sfpplus1).
// Слева: DC jack 12-57V, кнопка R (reset), USB 3.0 порт.