Test automation at the battery test bench – Case Study | RCE { "@context": "https://schema.org", "@type": "Organization", "@id": "http://batterymanager.de/#organization", "name": "Rohr Consulting & Engineering (RCE)", "alternateName": "BatteryManager", "url": "http://batterymanager.de/", "logo": "http://batterymanager.de/static/assets/rce-logo-dark.png", "description": "RCE – Rohr Consulting & Engineering bietet Battery Consulting, Testing, Design Validation (DVP), Cost-Down-Workshops und Zertifizierungsunterstützung für Lithium-Ionen-Batteriesysteme in Automotive, LEV, eVTOL, Industrie und Stationary Storage.", "sameAs": [ "https://www.linkedin.com/company/107737624", "https://www.kununu.com/de/rohr-consulting-engineering", "https://www.batterymanager.de", "https://g.page/r/CZPsPogUVrDmEBM/review" ], "brand": { "@type": "Brand", "name": "BatteryManager", "url": "https://www.batterymanager.de", "logo": "https://www.batterymanager.de/static/images/favicon.png" } , "contactPoint": [{ "@type": "ContactPoint", "contactType": "customer support", "email": "info@batterymanager.de", "telephone": "+49-176-23307802", "areaServed": ["DE", "EU"], "availableLanguage": ["de", "en"] }], "address": { "@type": "PostalAddress", "streetAddress": "Christianstraße 34", "postalCode": "55130", "addressLocality": "Mainz", "addressCountry": "DE" } }  { "@context": "https://schema.org", "@type": "WebPage", "@id": "http://batterymanager.de/testautomation#webpage", "name": "Test automation at the battery test bench – Case Study | RCE", "url": "http://batterymanager.de/testautomation", "inLanguage": "de", "description": "Case study: Battery test bench automation – 66 % shorter test time, approx. €18,000 cost savings per year and 78 % higher accuracy through automated evaluation, DUT fault detection, and audit-proof data storage.", "keywords": [ "battery test automation", "battery testing", "test bench automation", "battery validation", "BMS testing", "climate chamber testing", "source sink control", "CAN communication", "test data evaluation", "automated reporting", "RCE", "BatteryManager" ], "about": { "@type": "Thing", "name": "Battery test automation and validation" }, "mainEntity": { "@type": "CaseStudy", "@id": "http://batterymanager.de/testautomation#casestudy", "name": "PULSE: Test bench automation – from zero to productive in 8 weeks", "description": "On-site developed test automation for HV battery testing with climate chamber, power source/sink, and BMS via CAN – featuring complete test sequences, safety interlocks, automatic evaluation, DUT fault detection, and audit-proof data storage.", "keywords": [ "battery test bench", "HV battery validation", "test automation", "automotive battery testing", "battery system testing", "DUT error detection", "climate chamber integration" ], "industry": [ "Automotive", "Battery Testing", "E-Mobility", "Energy Storage" ], "provider": { "@type": "Organization", "@id": "http://batterymanager.de/#organization" }, "result": { "@type": "QuantitativeValue", "name": "Time Reduction", "value": 66, "unitText": "percent", "description": "66 % shorter test time achieved through automation" }, "hasPart": [ { "@type": "HowToStep", "name": "Develop automation architecture", "text": "Integration of climate chamber, power source/sink and BMS communication via CAN." }, { "@type": "HowToStep", "name": "Implement safety interlocks and test sequences", "text": "Automated safety checks, test execution, and data capture." }, { "@type": "HowToStep", "name": "Automate evaluation and reporting", "text": "Automatic detection of DUT faults, data evaluation, and audit-proof report generation." } ] } }  /* Animations / helpers */ .gradient-volt-orange { background: linear-gradient(135deg, #0B1C33 0%, #FF5C00 100%); } .fade-in { animation: fadeIn 0.8s ease-in-out; } @keyframes fadeIn { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } .slide-in-left { animation: slideInLeft 0.8s ease-out; } @keyframes slideInLeft { from { opacity: 0; transform: translateX(-30px);} to { opacity: 1; transform: translateX(0);} } .slide-in-right { animation: slideInRight 0.8s ease-out; } @keyframes slideInRight { from { opacity: 0; transform: translateX( 30px);} to { opacity: 1; transform: translateX(0);} } .hover-lift { transition: transform 0.3s ease, box-shadow 0.3s ease; } .hover-lift:hover { transform: translateY(-2px); box-shadow: 0 10px 25px rgba(0,0,0,0.1); } .sr-only { position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0; } /* Brand tokens */ :root{ --rce-volt:#0B1C33; /* Volt Navy */ --rce-pulse:#FF5C00; /* Pulse Orange */ --rce-pulse-2:#FF7A33; --rce-white:#FFFFFF; --rce-focus:rgba(255,255,255,.65); } /* Base button */ .btn{ display:inline-flex; align-items:center; justify-content:center; gap:.5rem; padding:.75rem 1.75rem; border-radius:.875rem; font-weight:600; line-height:1; text-decoration:none; cursor:pointer; user-select:none; -webkit-user-select:none; transition:transform .15s ease, box-shadow .2s ease, filter .2s ease, background-color .2s ease, color .2s ease, border-color .2s ease; box-shadow:0 10px 18px rgba(0,0,0,.18); } .btn:focus{ outline:none; box-shadow:0 0 0 2px var(--rce-focus), 0 12px 22px rgba(0,0,0,.24); } .btn:active{ transform:translateY(0); filter:brightness(.98); } /* Variants */ .btn-primary{ color:var(--rce-white); background-image:linear-gradient(90deg,var(--rce-pulse),var(--rce-pulse-2)); border:0; } .btn-primary:hover{ filter:brightness(1.05); box-shadow:0 14px 26px rgba(0,0,0,.28); transform:translateY(-1px); } .btn-secondary{ background-color: transparent; border:2px solid var(--rce-white); border-radius: 12px; color: var(--rce-white); opacity: 0.9; display: inline-flex; align-items: center; justify-content: center; gap: 0.5rem; } .btn-secondary:hover{ filter:brightness(1.05); box-shadow:0 14px 26px rgba(0,0,0,.28); transform:translateY(-1px); } .btn-outline-white{ color:var(--rce-white); background:rgba(255,255,255,.06); border:2px solid rgba(255,255,255,.65); backdrop-filter: blur(10px); } .btn-outline-white:hover{ background:var(--rce-white); color:var(--rce-volt); transform:translateY(-1px); } .btn-outline-navy{ color:var(--rce-volt); background:transparent; border:2px solid var(--rce-volt); } .btn-outline-navy:hover{ background:var(--rce-volt); color:var(--rce-white); transform:translateY(-1px); } .btn-link{ padding:0; border:0; background:transparent; box-shadow:none; color:var(--rce-pulse); font-weight:600; } .btn-link:hover{ text-decoration:underline; filter:brightness(1.05); } /* Sizes & helpers */ .btn-sm{ padding:.5rem 1rem; border-radius:.75rem; font-size:.95rem; } .btn-lg{ padding:1rem 2rem; border-radius:1rem; font-size:1.125rem; } .btn-block{ display:flex; width:100%; } .btn-icon{ padding:.625rem .75rem; } .btn-ghost{ background:transparent; color:var(--rce-volt); border:0; box-shadow:none; } .btn[disabled], .btn.is-loading{ opacity:.6; cursor:not-allowed; transform:none!important; filter:none!important; box-shadow:none!important; } .btn .icon{ width:1.1em; height:1.1em; } html, body { max-width: 100%; overflow-x: hidden; }  (function(c,l,a,r,i,t,y){ c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)}; t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i; y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y); })(window, document, "clarity", "script", "strq37kgl7"); 

 (/)

-  Home  (/)
-  Fallstudien  (/references)
-  Fallstudie PULSE  (/testautomation)
-  Team  (/about)

 PULSE anfragen  (/#contact)

 (/set-lang/de?next=/testautomation?) (/set-lang/en?next=/testautomation?)

 Startseite  (/) Fallstudien  (/references) Team  (/about) Kontakt aufnehmen  (/#contact)

 (/set-lang/de?next=/testautomation?) (/set-lang/en?next=/testautomation?)

 Cookie-Einstellungen 

 Wir verwenden Cookies, um die Funktionalität unserer Website sicherzustellen und die Nutzererfahrung zu verbessern. Technisch notwendige Cookies (z. B. für Sprachpräferenz und Sicherheit) werden automatisch gesetzt. Für Analyse-Cookies (Microsoft Clarity) benötigen wir Ihre Einwilligung. Weitere Informationen (/privacy-policy)

 Nur notwendige  Alle akzeptieren 

 ← Zurück zur Startseite  (/)

 Alle Referenzen & Fallstudien  (/references)

 Fallstudie · Testing & Validation 

#  PULSE: Prüfstandautomation – von 0 auf produktiv in 8 Wochen 

 Vor Ort entwickelte Testautomatisierung für HV-Batterietests mit Klimakammer, Quelle/Senke und BMS über CAN – mit durchgängigen Sequenzen, automatischer Auswertung, DUT-Fehlererkennung und auditfester Datenablage. 
 Projekt zu Testautomation anfragen  (/#contact)

60 % reduziert

Testzeit pro Durchlauf

78 % genauer

Fehlererkennung

- 18 t€ gespart

Lizenzkosten p. a.

8 Wochen

Vollautomatisiert /* Clean headline wrapping */ #startseite h1 { word-break: normal; overflow-wrap: normal; white-space: normal; text-wrap: balance; text-shadow: 0 1px 3px rgba(0,0,0,.25); } /* Icon badge for KPIs */ .kpi-ico{ width: 44px; height: 44px; display: inline-flex; align-items: center; justify-content: center; border-radius: 9999px; background: rgba(255,255,255,.12); box-shadow: inset 0 0 0 1px rgba(255,255,255,.18); backdrop-filter: blur(4px); } .kpi-ico svg { width: 22px; height: 22px; color: #fff; } /* HERO: responsive tweaks for tablet & mobile */ @media (max-width: 1024px) { #startseite { min-height: 560px; } #startseite .pulse-hero-photo-layer { background-position: center bottom !important; background-size: 145% !important; -webkit-mask-image: linear-gradient( to top, rgba(0,0,0,0) 0%, rgba(0,0,0,0.15) 25%, rgba(0,0,0,0.8) 55%, rgba(0,0,0,1) 100% ) !important; mask-image: linear-gradient( to top, rgba(0,0,0,0) 0%, rgba(0,0,0,0.15) 25%, rgba(0,0,0,0.8) 55%, rgba(0,0,0,1) 100% ) !important; } #startseite .pulse-hero-overlay { background: linear-gradient( to top, rgba(11,28,51,0.96) 0%, rgba(11,28,51,0.96) 35%, rgba(11,28,51,0.9) 65%, rgba(11,28,51,0.85) 100% ) !important; } } @media (max-width: 640px) { #startseite h1 { font-size: 1.9rem; line-height: 1.25; } #startseite p { font-size: 1rem; } #startseite .kpi-item { align-items: flex-start; } }  @media (max-width: 767.98px){ /* 1. Mobile-Regel: Layer verstecken (LCP-Optimierung) */ #hero-photo-layer{display:none;} } @media (min-width: 768px){ /* 2a. Desktop-Regel: Layer anzeigen (stellt die Sichtbarkeit sicher) */ #hero-photo-layer{display:block;} /* 2b. Desktop-Regel: Bild nur auf Desktop laden */ .pulse-hero-photo-layer{ background:url('/static/images/testautomation.webp') right center / 50% no-repeat; } } /* Change background gradient on mobile (Volt Navy → Pulse Orange) - BLEIBT ORIGINAL */ @media (max-width: 767.98px){ /* Hero section + Collaboration section */ #startseite>div:first-child,.gradient-volt-orange{ background:linear-gradient(135deg, #0b1c33 0%, #102843 25%, #ff6600 75%, #ff8c33 100% )!important; } } 

##  Ausgangssituation & Projektumfang 

###  Situation im Ausgangszustand 

- 

 Jede einzelne Komponente (Klimakammer, Steuerelektronik, Leistungselektronik, Datenaufzeichnung, Batterie) musste individuell von einem Mitarbeiter eingestellt werden. 

- 

 Manueller Start/Stop der Tests und jeder Komponente, getrennte Bedienoberflächen pro Komponente, Excel-basierte Ergebnisreports nur aus der Datenaufzeichnung (keine Aufzeichnung anderer Komponenten). 

- 

 Kein Wiederanlauf (Resume) nach Fehler oder Stromausfall – Testläufe mussten häufig komplett neu gestartet werden. 

- 

 Hohe Abhängigkeit von mehreren Lizenzen und individuellem Personen-Know-how im Labor für verschiedene Komponenten. 

- 

 Unterschiedliches Vorgehen je nach Testingenieur – Vergleichbarkeit und Reproduzierbarkeit waren kaum gegeben. 

###  Ziele & Kennzahlen im Ausgangszustand 

MetrikVorherEinheitHinweisTestzeit pro Durchlauf10hinkl. manueller AuswertungReport-Erstellung2hScreenshots, manuelle Reporterstellungverschiedene Lizenzen im Einsatz6Lizenzen~28.000 € pro Jahr Lizenzkosten

### Tool-Landschaft

 Mehrere parallel genutzte Tools mit hohen Lizenzkosten führten zu komplexen Workflows und Problemen in der Datenkonvertierung zwischen Zielsignalen, Messung, Logging und Reporting. 

### Manuelle Abläufe

 Start/Stop, Grenzwertchecks und Plausibilisierung erfolgten manuell. Fehlererkennung eher Zufällig, beruhte stark auf Erfahrung einzelner Mitarbeiter – nicht auf systematischen Regeln. 

### Reporting & Daten

 Reports wurden per Excel erstellt, Screenshots eingefügt und als PDF versendet. Eine revisionssichere, zentral versionierte Ablage war nicht vorhanden. 

### Safety & Compliance

 Sicherheitsmaßnahmen und automatische Notfall-abschaltungen, waren nur teilweise mit den Testsequenzen integriert. Eine Nachvoll-ziehbarkeit war nicht gegeben (z.B. der Grund eines Abbruchs). 

##  Aufwand: Automatisierungsarchitektur & Gegenstand der Untersuchung 

 Ziel war eine durchgängige Testautomatisierung – von der Beschreibung der Testabläufe über die Geräteanbindung bis hin zu Datenverarbeitung und Reporting – ohne Abhängigkeit von proprietären Einzeltools zu entwickeln. 

### Prozessdefinition & Risikobewertung

 Aufbau einer modularen Kommunikations- und Ablauf-beschreibung mit Parametern, Grenzwerten, Start/Stop/Restart-Mechanismen und Sicherheits-überprüfung und Abschaltung – standardisiert für alle Tests. 

### Geräte-Treiber & Schnittstellen

 Entwicklung von individuellen Kommunikationsschnittstellen für Testequipment (Klimakammer, Steuer-/ Leistungselektronik, Datenaufzeichnung, Batterie) mit verschiedenen Kommunikations-protokollen (CAN, CANFD, LIN, Ethernet, RS232, USB) und Fehlerbehandlung. 

### Daten, Reporting & Traceability

 Echtzeit-Datenaufzeichnung, automatische Grenzwertchecks, PDF/CSV-Reports, revisionssichere Ablage und klare Verknüpfung zu Testfällen (z. B. Jira/CSV-Bridge) – Robustheit und Reproduzier-barkeit durch Audit bestätigt. 

### Projektverlauf & Enablement

 Vor Ort in rund 8 Wochen: Erster funktionierender Prototyp (Teilautomatisierung) nach einem Monat, anforderungskonforme Vollautomatisierung im zweiten Monat, anschließend Rollout, Schulung, Dokumentation und Stabilisierung der Tool-Landschaft. 

##  System nach der Automatisierung 

###  Situation nach Automatisierung 

- 

 Ein durchgängiger Prozessablauf zur Steuerung des Testequipments (Klimakammer, Steuer-/ Leistungselektronik, Datenaufzeichnung, Batterie) – mit klar definierten Testschritten und Parametern. 

- 

 Automatische Fehlererkennung bei allen Testgeräten und Prüflingen – Überwachung relevanter Grenzwerte erhöhen die Genauigkeit und reduzieren Fehlinterpretationen. 

- 

 Automatische Benachrichtigung des Testverantwortlichen (E-Mail, SMS) bei Fehlererkennung, Grenzwertverletzung oder Testabbruch – inklusive relevanter Messdaten und Logs. 

- 

 Automatisch generierte PDF- und CSV-Reports, revisionssichere Ablage und klare Zuordnung zum jeweiligen Prüfprogramm. 

###  Messbare Ergebnisse 

MetrikNachherKommentarTestzeit pro Durchlauf4 hVollautomatisierter Ablauf, weniger WartezeitenReport-Erstellung3 minAuto-Report (PDF + CSV) direkt nach TestendeLizenzen im Einsatz2Konsolidierte Software-Landschaft, geringere Abhängigkeiten

### Durchsatz- & Testzeitoptimierung

 Kürzere Testdauer pro Lauf und weniger Rüstaufwand ermöglichen mehr Durchläufe pro Woche – bei gleicher Mannschaftsstärke im Labor. 

### Fehlererkennung & Genauigkeit

 Automatisierte Fehlererkennung bei allen Testgeräten und Prüflingen. Grenzwertchecks und standardisierte Auswertelogik erhöhen die Vergleichbarkeit – Entlastung der Experten bei Routineprüfungen. 

### Software-Konsolidierung

 Ablösung redundanter Tools und proprietärer Skripte reduziert Kosten, vereinfacht IT-Security-Fragen und macht die Automatisierung langfristig wartbar. 

### Safety · Compliance · Datenintegrität

 Interlocks, Watchdog, sichere Stop-Sequenzen, Hash-Stempel und strukturierte Datenhaltung machen Nachweise für UN38.3 / IEC 62133 / ECE R100 evidenzfähig. 

##  Erfolg: Technologischer Mehrwert & organisatorische Wirkung 

 Durch die Prüfstandautomatisierung wurde mehr als nur die Testzeit reduziert. 

 Die Lösung vereinheitlicht Abläufe, schafft robuste Nachweise bei Audits und macht das Labor skalierbar – bei signifikanter reduktion der Lizenzkosten. 

### Organisatorischer & technischer Mehrwert

 Die Automatisierung entkoppelt Testqualität von Einzelpersonen, schafft standardisierte Abläufe und reduziert Abstimmungsaufwand zwischen Labor, Einkauf und Entwicklung. 

 Gleichzeitig bleibt die Architektur offen: Sequenzen können intern erweitert werden, neue Geräte werden über Treiber integriert und das System kann auch in anderen Laboren übernommen werden. 

 Für den Kunden bedeutet das: Resultate in kürzerer Zeit, höhere Testqualität und konstante Einsparungen, die typischerweise in unter 6 Monaten die Investition wieder reinholen – bei etwa 3 Läufen pro Woche und 4 Stunden Zeitersparnis pro Lauf. 

 Ähnliche Effekte erzielen wir mit unserer Kostenoptimierungsmethodik NOVA – etwa bei der Reduktion von Stücklisten- und Produktionskosten von Batteriepacks.  Zur NOVA-Fallstudie  (/cost_optimization)

−60 %

### Reduzierte Testzeit

 Von 10 h auf 4 h pro Lauf. 

−97,5 %

### Schnelleres Reporting

 Von 120 auf 3 Minuten. 

+78 %

### Höhere Testgenauigkeit

 automatisierte Fehlererkennung. 

−18.000 €

### Toolkosten gespart

 Von 6 auf 2 Kern-Tools. 

###  Lust auf 60% weniger Testzeit und präzisere Ergebnisse? 

 Wir zeigen Ihnen, wie Sie Ihre bestehende Prüfstandlandschaft schrittweise automatisieren – von der ersten Potenzialanalyse bis zur produktiven Lösung mit messbaren Effekten. 
 Erstgespräch vereinbaren  (/#contact)

 Mehr über das Team hinter der Prüfstandautomation erfahren Sie auf unserer  Über-uns-Seite  (/about). 

####  ❯ Schrittweises Vorgehen zur Prüfstandautomation

 Wir arbeiten iterativ – mit einem frühen ersten Prototyp am Prüfstand und klaren Meilensteinen bis zur produktiven Vollautomatisierung. Typischerweise läuft ein Projekt so ab: 

 1 

 Kurz-Call (15–30 min): Verständnis Ihrer Laborumgebung, Testobjekte und Ziele. 

 2 

 Remote- oder On-site-Assessment (1–2 Tage): Erhebung von Geräten, Schnittstellen und bestehenden Tools. 

 3 

 Konzept & Angebot: Architekturvorschlag, Aufwandsschätzung, grober Zeitplan. 

 4 

 Prototyp-Umsetzung (ca. 4 Wochen): erste Teilautomation mit ausgewählten Sequenzen. 

 5 

 Go-Live Prototyp: Parallelbetrieb zu bestehenden Abläufen, Feintuning nach Feedback aus dem Labor. 

 6 

 Erweiterung zur Vollautomation: Abdeckung aller relevanten Testfälle und Sonderfälle. 

 7 

 Einführung Auto-Reporting, Datenhaltung & Schnittstellen (z. B. Jira/CSV). 

 8 

 Schulung von Labor- und Entwicklungs-Teams, Handover der Sequenz-Bibliothek. 

 9 

 Stabilisierung & Rollout auf weitere Prüfstände / Standorte. 

 10 

 Review-Workshop & Feinschliff: Dokumentation, SOPs, Payback-Betrachtung. 

 Innovation auf dem nächsten Level – Ihre Experten für Batterien, E-Mobilität, Energiespeicher und Kostensenkung. 

 (https://www.linkedin.com/company/107737624)

### Navigation

- Home (/)
- Fallstudien (/references)
- Team (/about)
- PRODIGY (/prodigy)
- Kontakt (/#contact)

 © 2026 Rohr Consulting & Engineering. Alle Rechte vorbehalten. 

Datenschutzerklärung (/privacy-policy)AGB (/terms)Impressum (/impressum) Cookie-Einstellungen  // Mobile-Menü umschalten function toggleMobileMenu() { const mobileMenu = document.querySelector('.mobile-menu'); const toggleBtn = document.getElementById('mobile-menu-toggle'); const isHidden = mobileMenu.classList.contains('hidden'); mobileMenu.classList.toggle('hidden'); if (toggleBtn) { toggleBtn.setAttribute('aria-expanded', isHidden ? 'true' : 'false'); } } // Smooth Scrolling für Anker-Links (nur für echte Fragment-Links, nicht für /#contact nötig) document.addEventListener('DOMContentLoaded', function() { document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener('click', function (e) { const href = this.getAttribute('href'); const target = document.querySelector(href); if (target) { e.preventDefault(); target.scrollIntoView({ behavior: 'smooth', block: 'start' }); } }); }); // Flash-Nachrichten automatisch ausblenden const alerts = document.querySelectorAll('.alert[data-dismiss-delay]'); alerts.forEach(alert => { const delay = parseInt(alert.getAttribute('data-dismiss-delay')); setTimeout(() => { alert.style.display = 'none'; }, delay); }); }); // Animation beim Scrollen const observerOptions = { threshold: 0.1, rootMargin: '0px 0px -50px 0px' }; const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) entry.target.classList.add('fade-in'); }); }, observerOptions); document.addEventListener('DOMContentLoaded', function() { const animatedElements = document.querySelectorAll('.animate-on-scroll'); animatedElements.forEach(el => observer.observe(el)); });  // Apply Microsoft Clarity consent based on user choice function applyClarityConsent({ analyticsGranted=false, adsGranted=false }) { if (!window.clarity) return; window.clarity('consentv2', { analytics_Storage: analyticsGranted ? "granted" : "denied", ad_Storage: adsGranted ? "granted" : "denied" }); } // Cookie consent management function setStoredConsent(val) { localStorage.setItem('consent.analytics', val ? 'granted' : 'denied'); // Store timestamp for consent localStorage.setItem('consent.timestamp', new Date().toISOString()); } function getStoredConsent() { return localStorage.getItem('consent.analytics'); } function showBanner() { const el = document.getElementById('cookie-banner'); if (el) { el.classList.remove('hidden'); // Smooth scroll into view if needed el.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); } } function hideBanner() { const el = document.getElementById('cookie-banner'); if (el) el.classList.add('hidden'); } // Initialize cookie consent on page load document.addEventListener('DOMContentLoaded', function () { const stored = getStoredConsent(); if (stored === 'granted') { // User previously accepted analytics cookies applyClarityConsent({ analyticsGranted: true, adsGranted: false }); } else if (stored === 'denied') { // User previously rejected analytics cookies applyClarityConsent({ analyticsGranted: false, adsGranted: false }); } else { // No consent decision yet - show banner showBanner(); } // Accept all cookies (including analytics) document.getElementById('cookie-accept')?.addEventListener('click', function () { setStoredConsent(true); applyClarityConsent({ analyticsGranted: true, adsGranted: false }); hideBanner(); }); // Reject optional cookies (only necessary cookies remain) document.getElementById('cookie-reject')?.addEventListener('click', function () { setStoredConsent(false); applyClarityConsent({ analyticsGranted: false, adsGranted: false }); hideBanner(); }); }); // Function to show cookie settings (called from footer link) function showCookieSettings() { // Clear stored consent to force banner to show again localStorage.removeItem('consent.analytics'); localStorage.removeItem('consent.timestamp'); // Apply denied consent for now applyClarityConsent({ analyticsGranted: false, adsGranted: false }); // Show banner showBanner(); } // Expose function globally for footer link window.showCookieSettings = showCookieSettings; // Keep backward compatibility function revokeClarityConsent() { showCookieSettings(); } window.revokeClarityConsent = revokeClarityConsent;
