INTELLIGENT SOLUTIONS FOR SUSTAINABLE SURFACES.

hyCLEANER CLEANING SOLUTIONS FOR SOLAR, FACADE & GLASS

Efficient. Sustainable. Innovative.

hyCLEANER has stood for modern cleaning technology “Made in Germany” since 2010. With a broad product portfolio of cleaning robots and cleaning systems, the company offers efficient, safe and sustainable solutions for cleaning solar plants, facades and glass surfaces worldwide.
As a pioneer and leading player in the industry, hyCLEANER impresses with technical expertise, innovative strength and quality – for permanently clean results.

Cost- &
time-saving

Automated cleaning saves time, reduces costs and increases efficiency.

Gentle
Cleaning

Clean gently without any chemicals thanks to high mechanical brush performance.

Safety
first

Clean dangerous workplaces by machine instead of by hand – for your safety.

Sustainable
& low-maintenance

Regular cleaning ensures the long-term preservation of your investment.

hyCLEANER CLEANING SOLUTIONS FOR SOLAR, FACADE & GLASS

Efficient. Sustainable. Innovative.

Since 2010, hyCLEANER has been a pioneer in modern cleaning technology, proudly “Made in Germany.” With a comprehensive portfolio of cleaning robots and systems, the company provides efficient, safe, and eco-friendly solutions for maintaining solar panels, facades, and glass surfaces worldwide.

RELIABLE hyCLEANER CLEANING TECHNOLOGY

solarROBOT ultimate: The new benchmark for PV cleaning of large-scale systems

World premiere. More area. More endurance. More efficiency: The new solarROBOT ultimate was developed for large ground-mounted systems, agri-PV systems, and extensive roof installations. With up to 2,400 mm cleaning width, ≥ 5 hours battery life, and intelligent AutoDrive, it takes professional solar panel cleaning to a new level.

The perfect addition for PV cleaning: the electric professional hand brush solarBRUSH

With the PV cleaning brush solarBRUSH, hyCLEANER brings a powerful professional hand brush for efficient cleaning of solar systems to the market. The electric brush rotation, flexible working method, and gentle cleaning application make it the ideal solution for edge areas, partial surfaces, and hard-to-reach PV modules.

Cleaning with the facadeBRUSH v-line on an IKEA building facade

Efficient cleaning of all facades!

Our facade cleaning devices make cleaning much easier: Various facade types such as industrial facades, shopping centers and sophisticated architecture can be cleaned easily, safely and, above all, efficiently.

Glass roof cleaning with the glassROBOT

Glass roof maintenance made easy!

With the glass cleaning robot, you can clean large glass surfaces not only efficiently, but above all safely. The almost automated use reduces personnel costs and ensures streak-free shine with minimal time and expense.

INDUSTRY NEWS

Solar Panel Cleaning: How Often Is It Really Necessary?

Contamination such as dust, pollen, or bird droppings can significantly reduce the performance of your PV system – in the worst case, by up to 30%. But when is cleaning truly necessary, and how often is it worthwhile? In our article, you will learn which factors are crucial and how to avoid yield losses.

hyCLEANER EVENTS AND DATES

Stand and employees at Solar Solutions Düsseldorf

Clean Pro Expo –
September 15–17, 2026

This year, we are represented at the Clean Pro Expo in Friedrichshafen, presenting our latest solutions and available for professional exchange. We look forward to your visit at booth F0-200!

A hyCleaner van

hyCLEANER on Tour – coming soon to your area!

Experience hyCLEANER on a demo tour directly at your location.

Get to know our cleaning systems and exchange ideas directly with our team.

Training situation carried out by employees of OQS World

Become an OQS-certified solar panel cleaner

Take this opportunity and complete the training to become an OQS-certified solar panel cleaner. The Cleaning Academy regularly visits various locations – secure your spot now for one of the upcoming dates.

WHATSAPP BUSINESS

Reach hyCLEANER quickly and easily via WhatsApp – for quotes, questions, or support.

Receive quote information, status updates, and news directly from the team. Submit inquiries in seconds, send documents or photos via WhatsApp, and receive a prompt response.
WhatsApp: +49 2562 992540

OUR CUSTOMERS AT hyCLEANER®

Don’t listen to us, listen to our customers.

LOSS CALCULATOR

Calculate your loss due to contamination of your solar modules and find out how much additional yield you can achieve through professional cleaning.

/* ========================= Scoped Design Tokens ========================= */ .pvx{ --brand: #2a5bd5; --brand2: #1d3fa6; --ink: #0b1220; --muted: #4b5563; --card: #ffffff; --border: #e6e9ef; --track: #e7e9ee; --trackDim:#9aa3a9; --shadow: 0 .625rem 1.5rem rgba(16,24,40,.08); --radius-lg: 1rem; --radius-md: .75rem; --radius-sm: .625rem; --space-1: .5rem; --space-2: .75rem; --space-3: 1rem; --space-4: 1.25rem; --space-5: 1.75rem; --space-6: 2.25rem; background: transparent; color: var(--ink); line-height: 1.5; } .pvx *{ box-sizing: border-box } .pvx .wrap{ width:100% } /* keine Außenränder – Elementor regelt */ /* ================= Layout ================= */ .pvx .grid{ display:grid; grid-template-columns: 1.05fr .95fr; gap: var(--space-5) } @media (max-width: 64rem){ .pvx .grid{ grid-template-columns:1fr; gap: var(--space-3) } } /* ================= Cards ================= */ .pvx .card{ background: var(--card); border: .0625rem solid var(--border); border-radius: var(--radius-lg); padding: var(--space-4); box-shadow: var(--shadow); } .pvx .sticky{ position: sticky; top: 1rem } @media (max-width:64rem){ .pvx .sticky{ position: static } } /* ================= Inputs ================= */ .pvx .inputs{ display:grid; grid-template-columns:1fr 1fr; gap: var(--space-3) } @media (max-width:35rem){ .pvx .inputs{ grid-template-columns:1fr } } .pvx .label{ font-size:.875rem; color:#111827; font-weight:600; margin:0 0 .375rem } .pvx input[type="number"]{ width:100%; padding:.625rem .75rem; border:.0625rem solid var(--border); border-radius: var(--radius-sm); background:#fff; font-size:1rem; line-height:1.4; transition: box-shadow .18s ease, border-color .18s ease; } .pvx input[type="number"]::-webkit-outer-spin-button, .pvx input[type="number"]::-webkit-inner-spin-button{ -webkit-appearance: none; margin: 0 } .pvx input[type="number"]{ -moz-appearance:textfield } .pvx input[type="number"]:hover{ border-color:#d5dae4 } .pvx input[type="number"]:focus-visible{ outline: none; border-color: var(--brand); box-shadow: 0 0 0 .2rem rgba(42,91,213,.15); } /* ================= Result ================= */ .pvx .result{ display:flex; justify-content:space-between; align-items:center; gap:1rem; flex-wrap:wrap } .pvx .result .title{ font-size:1.125rem; font-weight:800; letter-spacing:.01rem } .pvx .result .sub{ margin:.125rem 0 0; color:var(--muted); font-size:.95rem } .pvx .amount{ font-size:3rem; font-weight:900; letter-spacing:.02rem } @media (max-width:48rem){ .pvx .amount{ font-size:2.25rem } .pvx .result .title{ font-size:1rem } } /* ================= Preset Tiles ================= */ .pvx .presets{ margin-top: var(--space-3) } .pvx .presets .lead{ margin:0 0 .5rem; font-size:1rem; color:#111827 } .pvx .tiles{ display:grid; grid-template-columns:repeat(5,1fr); gap: var(--space-3) } @media (max-width:68.75rem){ .pvx .tiles{ grid-template-columns:repeat(4,1fr) } } @media (max-width:51.25rem){ .pvx .tiles{ grid-template-columns:repeat(3,1fr) } } @media (max-width:35rem){ .pvx .tiles{ grid-template-columns:repeat(1,1fr) } } .pvx .tile{ cursor:pointer; background:#fff; border:.0625rem solid var(--border); border-radius: var(--radius-md); padding: var(--space-3); min-height:7.5rem; display:grid; place-items:center; gap:.625rem; transition: transform .14s ease, box-shadow .18s ease, border-color .18s ease, background .18s ease; } .pvx .tile:hover{ box-shadow:var(--shadow); transform: translateY(-.06rem) } .pvx .tile:focus-visible{ outline:none; box-shadow:0 0 0 .25rem rgba(42,91,213,.18); border-color:transparent } .pvx .tile img{ width:3.125rem; height:auto; transition: filter .18s ease, opacity .18s ease } .pvx .tile .t{ font-weight:700; text-align:center; color:#0b1220 } .pvx .tile.active{ background:#1d3fa6 linear-gradient(180deg, var(--brand), var(--brand2)) !important; border-color: transparent; color:#fff; } .pvx .tile.active .t{ color:#fff !important } .pvx .tile.active img{ filter: brightness(0) invert(1) !important } /* ================= Slider ================= */ .pvx .slider-wrap{ position:relative; margin-top: var(--space-3) } .pvx .s-head{ display:flex; align-items:center; gap:.5rem; color:#111827; font-size:1rem; margin-bottom:.5rem} /* Füllung via --val (0–100%) */ .pvx input.slider{ --val: 0%; -webkit-appearance:none; width:100%; height:.5rem; border-radius:999rem; outline:none; background: linear-gradient(90deg, var(--brand) 0%, var(--brand) var(--val), var(--track) var(--val), var(--track) 100%); transition: box-shadow .18s ease; } .pvx input.slider:hover{ box-shadow: 0 0 0 .2rem rgba(42,91,213,.08) } .pvx input.slider:focus-visible{ box-shadow: 0 0 0 .25rem rgba(42,91,213,.18) } .pvx input.slider::-webkit-slider-runnable-track{ height:.5rem; border-radius:999rem; background: transparent } .pvx input.slider::-webkit-slider-thumb{ -webkit-appearance:none; width:1.125rem; height:1.125rem; border-radius:50%; background: var(--brand); box-shadow:0 0 0 .25rem rgba(42,91,213,.18); cursor:pointer; margin-top:-.3125rem; } .pvx input.slider::-moz-range-track{ height:.5rem; border-radius:999rem; background: var(--track) } .pvx input.slider::-moz-range-progress{ height:.5rem; border-radius:999rem; background: var(--brand) } .pvx input.slider::-moz-range-thumb{ width:1.125rem; height:1.125rem; border-radius:50%; border:0; background: var(--brand); box-shadow:0 0 0 .25rem rgba(42,91,213,.18); cursor:pointer; } /* ==== Neues Prozent-Badge über dem Thumb ==== */ .pvx .pct{ position:absolute; left:0; top:0; transform:translateX(-50%); padding:.25rem .5rem; border-radius:.5rem; background:#fff; border:.0625rem solid var(--border); box-shadow:0 .3125rem .75rem rgba(16,24,40,.12); font-weight:700; font-size:.875rem; line-height:1; color:var(--ink); white-space:nowrap; pointer-events:none; z-index:2; } .pvx .pct::after{ content:""; position:absolute; left:50%; bottom:-.35rem; transform:translateX(-50%) rotate(45deg); width:.55rem; height:.55rem; background:#fff; border-left:.0625rem solid var(--border); border-bottom:.0625rem solid var(--border); box-shadow: 0 .125rem .25rem rgba(16,24,40,.06); } .pvx .minmax{ display:flex; justify-content:space-between; color:black; font-size:.8rem} /* ================= Erfahrungsband ================= */ .pvx .band{ position:relative; height:1.75rem; margin-top:.5rem } .pvx .band::before{ content:""; position:absolute; left:0; right:0; bottom:0; height:.375rem; border-radius:999rem; background:#eef2ff } .pvx #band-indicator{ position:absolute; bottom:0; height:.375rem; border-radius:999rem; background:linear-gradient(90deg, var(--brand2), var(--brand)) } .pvx .min-text, .pvx .max-text{ position:absolute; top:-.125rem; transform:translateX(-50%); background:transparent; border:0; color:#0f172a; font-weight:800; font-size:.75rem; padding:0; } /* ================= Motion/Prefs ================= */ @media (prefers-reduced-motion: reduce){ .pvx .tile, .pvx input.slider, .pvx input[type="number"]{ transition: none } } /* ================= Ergänzungen ================= */ /* 1) Kachel-Titel 0.9rem */ .pvx .tile .t{ font-size:.8rem; line-height:1.25; } /* 2) Prozentanzeige statisch neben dem Label */ .pvx .pct{ position: static !important; left: auto !important; top: auto !important; transform: none !important; } .pvx .pct::after{ display:none; } /* Fix: Elementor überschreibt unseren Range-Slider. -> Nur für unseren Slider in der PVX-Section zurücksetzen. */ .elementor-kit-8 .pvx input[type="range"].slider{ border: 0 !important; padding: 0 !important; border-radius: 999rem !important; /* keine kantigen 1px-Ränder */ -webkit-appearance: none; appearance: none; } /* Sicherheitsnetz: keine Border auf dem Track */ .elementor-kit-8 .pvx input[type="range"].slider::-webkit-slider-runnable-track{ border: 0 !important; } .elementor-kit-8 .pvx input[type="range"].slider::-moz-range-track{ border: 0 !important; } /* (optional, falls Elementor irgendwo line-height o.ä. setzt) */ .elementor-kit-8 .pvx input[type="range"].slider{ line-height: 1 !important; } /* A) Der versteckte Dummy-Label im rechten Feld soll KEINEN Platz einnehmen */ .pvx .inputs .label[style*="visibility:hidden"]{ display:none !important; /* entfernt die Höhe -> Felder sind wieder auf einer Linie */ } /* B) Elementor überschreibt die Number-Inputs – hier setzen wir unsere Werte durch */ .elementor-kit-8 .pvx input[type="number"]{ border: .0625rem solid var(--border) !important; border-radius: var(--radius-sm) !important; padding: .625rem .75rem !important; background:#fff !important; } /* (falls Elementor eine dunkle Rahmenfarbe erzwingt) */ .elementor-kit-8 .pvx input[type="number"]{ border-color: var(--border) !important; } /* C) (Du hast den Slider schon gefixt – hier der Vollständigkeit halber nochmal) */ .elementor-kit-8 .pvx input[type="range"].slider{ border:0 !important; padding:0 !important; border-radius:999rem !important; -webkit-appearance:none; appearance:none; } .elementor-kit-8 .pvx input[type="range"].slider::-webkit-slider-runnable-track{ border:0 !important; } .elementor-kit-8 .pvx input[type="range"].slider::-moz-range-track{ border:0 !important; } .erfahrung { margin-bottom: 10px; font-size: 1rem; }
Bitte ausfüllen:
Anlagenleistung in kWp:
.

Einspeisevergütung in EUR:
Verlust
durch Verschmutzung pro Jahr ca.:
0,00 €
Bitte wählen Sie das zutreffendste Standortkriterium Ihrer PV-Anlage aus (auch Umgebung berücksichtigen):
Ø Verschmutzung in % :
Basierend auf Erfahrungswerten:
1% 50%
3% 8%
* Alle Angaben ohne Gewähr.
(function(){ /* ========= Scope ========= */ const root = document.getElementById('verlustrechner'); const $$ = sel => root.querySelector(sel); const $$$ = sel => Array.from(root.querySelectorAll(sel)); /* ========= Presets ========= */ const sliderSettings = [ { name:"range-slide-1", set:5, min:3, max:8 }, { name:"range-slide-2", set:12, min:8, max:15 }, { name:"range-slide-3", default:22, min:15, max:30 }, { name:"range-slide-4", set:30, min:17, max:35 }, { name:"range-slide-5", set:45, min:30, max:50 } ]; /* ========= Elements ========= */ const slider = $$('#pvx-slider'); const pctTxt = $$('#slider-pct'); const power = $$('#power'); const payment = $$('#payment'); const money = $$('#money'); const minText = $$('#minText'); const maxText = $$('#maxText'); const bandEl = $$('#band-indicator'); /* ========= Helpers ========= */ function setSliderFill(){ const min = Number(slider.min)||0; const max = Number(slider.max)||100; const val = Number(slider.value)||0; const p = ((val - min) / (max - min)) * 100; slider.style.setProperty('--val', p + '%'); } function setBand(minPct, maxPct){ minText.style.left = minPct + '%'; maxText.style.left = maxPct + '%'; minText.textContent = Math.round(minPct/2) + '%'; maxText.textContent = Math.round(maxPct/2) + '%'; bandEl.style.left = minPct + '%'; bandEl.style.width = Math.max(0, maxPct - minPct) + '%'; } /* ========= Calculation ========= */ function calc(){ const pwr = parseFloat(String(power.value).replace(",", ".")); const pay = parseFloat(String(payment.value).replace(",", ".")); const perc = parseFloat(slider.value); const result = (pwr * 1000 * pay) * (perc/100); if(!isNaN(result)){ money.textContent = new Intl.NumberFormat('de-DE',{style:'currency',currency:'EUR'}).format(result); } pctTxt.textContent = perc + '%'; setSliderFill(); $$('.min-label').style.opacity = (perc===1)?0:'1'; $$('.max-label').style.opacity = (perc===50)?0:'1'; } /* ========= Preset-Klicks ========= */ function onTileClick(e){ const tile = e.currentTarget; $$$('.tile').forEach(t=>{ t.classList.toggle('active', t===tile); t.setAttribute('aria-pressed', t===tile ? 'true' : 'false'); }); const conf = sliderSettings.find(s=>s.name===tile.id); if(!conf) return; const next = typeof conf.set==="number" ? conf.set : (typeof conf.default==="number" ? conf.default : 5); slider.value = next; setBand(conf.min*2, conf.max*2); calc(); } /* ========= Events ========= */ ['input','change'].forEach(ev=>{ slider.addEventListener(ev, calc, {passive:true}); power.addEventListener(ev, calc, {passive:true}); payment.addEventListener(ev, calc, {passive:true}); }); $$$('.tile').forEach(t=>t.addEventListener('click', onTileClick)); /* ========= Init ========= */ (function init(){ const s = sliderSettings[0]; slider.value = s.set; setBand(s.min*2, s.max*2); setSliderFill(); calc(); })(); })();

DO YOU HAVE FURTHER QUESTIONS?

Please feel free to send us a message; we will get back to you promptly.

*Required field

PROVEN. STILL STRONG.

Discover inspected machines in top condition at attractive prices.
Now to our used machines – fast, reliable, hyCLEANER.

DON'T MISS A THING!

Sign up now and receive exclusive insights, product innovations, and special offers from hyCLEANER directly in your inbox!