Daikin Roundflow FCAG35B R32 Inverter Zwischendecken-Klimageräte-Set 3,5 kW

Produktmerkmale:

Falls Sie keinen Fachbetrieb für die Montage Ihrer Anlage haben, bieten wir Ihnen gerne die Vermittlung eines zertifizierten Fachbetriebs für die bundesweite Montage oder Inbetriebnahme an. So erfüllen Sie die Anforderungen der EU-Verordnung 517/2014 zum Chemikalienklimaschutz (Art. 11, Abs. 5).
Hinweis! Split-Klimageräte müssen nach Klimaschutzverordnung (EU) 2024/2215 von einem zertifizierten Fachbetrieb installiert werden. Wir möchten darauf hinweisen, dass die Einbaupreise, sowie die Einbauzeiten aufgrund unterschiedlicher regionaler Fachbetrieben voneinander abweichen können.
Hinweis! Bitte beachten Sie, dass im Lieferumfang von Split-Klimageräten keine Kältemittelleitungen enthalten sind.
Diese erhalten Sie in der Rubrik: Zubehör

Angaben gemäß der Verordnung (EU) 626/2011
Energielabel »»
Produktdatenblatt »»

Unser Preis:

* inkl. ges. MwSt. zzgl. Versandkosten

Sofort versandfertig, Lieferzeit ca. 2-3 Werktage


Bestell-Nr.: 2438

if(!document.getElementById('paypal-smart-payment-script')) { var script = document.createElement("script"); script.type = "module"; script.id = "paypal-smart-payment-script"; script.src = "https://cdn02.plentymarkets.com/92oct1bax888/plugin/2/paypal/js/smartPaymentScript.min.js"; script.setAttribute("data-client-id", "AfslQana4f4CQjHvRBnUc6vBJg5jgJuZFwM-SbrTiGKUAqB7MrxQv3QWFdQ6U1h7ogMDokT1DNBzRxMw"); script.setAttribute("data-user-id-token", ""); script.setAttribute("data-merchant-id", "Y9ZBGN2R54ACY"); script.setAttribute("data-currency", "EUR"); script.setAttribute("data-append-trailing-slash", ""); script.setAttribute("data-locale", "de_DE"); script.setAttribute("sandbox", ""); script.setAttribute("googlePayComponent", 0); script.setAttribute("applePayComponent", 0); script.setAttribute("logToken", "547a33d689da83b8a2a462f7770fda86"); document.body.appendChild(script); } else { var script = document.getElementById('paypal-smart-payment-script'); script.src = "https://cdn02.plentymarkets.com/92oct1bax888/plugin/2/paypal/js/smartPaymentScript.min.js"; script.setAttribute("data-client-id", "AfslQana4f4CQjHvRBnUc6vBJg5jgJuZFwM-SbrTiGKUAqB7MrxQv3QWFdQ6U1h7ogMDokT1DNBzRxMw"); script.setAttribute("data-user-id-token", ""); script.setAttribute("data-merchant-id", "Y9ZBGN2R54ACY"); script.setAttribute("data-currency", "EUR"); script.setAttribute("data-append-trailing-slash", ""); script.setAttribute("data-locale", "de_DE"); script.setAttribute("sandbox", ""); script.setAttribute("googlePayComponent", 0); script.setAttribute("applePayComponent", 0); script.setAttribute("logToken", "547a33d689da83b8a2a462f7770fda86"); }

Pflichtangaben:

Energieeffizienzklasse1:
Jährlicher Stromverbrauch2 (kWh):
Kühlleistung3 max. (kW): 3,5
SEER4 (W):
Gerätetyp: Kühlen und Heizen
Kühlungsart: Luftkühlung
Heizleistung5 max. (kW): 4,2
Kältemitteltyp/GWP8: R32
Schalldruckpegel7, Innengerät
(Kühlen/Heizen), (dB(A)):
2727
SCOP6 (W):
Schalldruckpegel7, Außengerät
(Kühlen/Heizen), (dB(A)):

Technische Daten »»


Daikin Inverter R32 Roundflow Zwischendeckengeräte-Set inkl. LCD-Kabelfernbedienung.

FCAG_Ambiente_1

Highlights DAIKIN SkyAir Geräte

Hohe Energieeffizienz

  • Erstklassige saisonale Effizienz
  • SEER-Wert von bis zu 8,02 und Energieeffizienzklasse A++ beim Kühlen und Heizen
  • Variable Kältemitteltemperatur, die automatisch lastabhängig angepasst wird
  • Roundflow Zwischendeckengeräte und Kanalgeräte mit selbstreinigendem Filter

Ausgezeichneter Komfort

  • Variable Kältemitteltemperatur zur Vermeidung von kalter Zugluft
  • Geräuscharme Innen- und Außengeräte
  • Bewegungs- und Infrarotsensoren lenken den Luftstrom von Personen im Raum weg und sorgen für gleichmäßige Temperaturverteilung
  • Frischluftaufnahme ins Innengerät integriert

Herausragende Zuverlässigkeit

  • Für Technikraumkühlung: einzigartige Innengeräte mit höherer Leistung und Redundanzregelung
  • Kältemittelgekühlte Inverterplatine
  • Durch eine zusätzliche Kältemittelleitung in der Bodenplatte wird diese zuverlässig eisfrei gehalten und somit auch das Ablaufen des Wassers garantiert
  • Ausgiebige Tests vor der Auslieferung von Neugeräten
  • Umfassendes Supportnetzwerk und After Sales-Service
  • Alle Ersatzteile in Europa verfügbar

Branchenführende RegelungssystemeApp_2

  • Fernbedienbar dank Vernetzung
  • Regelung durch intuitive App
  • DAIKIN Cloud Service für Onlineregelung, Überwachung des Energieverbrauchs und Vergleich mehrerer Standorte
  • Benutzerfreundliche Kabel-Fernbedienung im Premiumdesign in 3 Farbvarianten (weiß, silbern und schwarz)
  • Intuitive Touch-Bedienflächen
  • Einfacher Zugriff auf erweiterte Einstellungen über Ihr Smartphone
  • Spezielle Regelungslösungen für Einzelhandelsanwendungen sowie für Technikraumkühlung

DAIKIN Sky Air ist die ideale Lösung für Shops und Technikräume. Die erste komplette Produktreihe mit dem Kältemittel R-32 für Shops und gewerbliche Anwendungen auf dem europäischen Markt. Branchenführende Produktpalette für kleinere Büros, Ladengeschäfte, Einzelhandel, Restaurants, Banken oder technisches Kühlen. Zuverlässige Kühlung von Technikräumen. Viele Komfortlösungen und innovative Shopsysteme. Maßgeschneiderte Anwendungen für intelligenten Energieverbrauch und hohe Flexibilität bei Installation und Betrieb. Große Auswahl an Innengeräten für jeden Bedarf, auch bei anspruchsvollen baulichen Voraussetzungen oder Vorgaben. Ermöglicht volle Kontrolle über Heizen und Kühlen.


Ideales Zwischendecken - Klimagerät für kleinere gewerbliche Anwendungen.

Dieses Klimagerät, mit einer Installationshöhe von nur 214 mm, hat eine breite Auswahlmöglichkeiten an Geräteblenden: Designerblenden in Weiß (RAL 9010) und Schwarz (RAL 9005) und Standardblenden in Weiß (RAL 9010) mit grauen Lamellen oder Vollweiß. 5 verschiedene Ventilatordrehzahlen sorgen für maximalen Komfort. Ein Abzweigkanalaustritt ermöglicht eine optimierte Luftverteilung in unregelmäßig gestalteten Räume oder eine Luftzufuhr für kleine Nachbarräume. Zwei optionale intelligente Sensoren verbessern Energieeffizienz und Komfort. Die Einzelregelung der Lamellen über die verkabelte Fernbedienung ermöglicht eine einfache Fixierung der Position jeder Lamelle individuell zur Anpassung an jede beliebige neue Raumkonfiguration.

Produkthighlights Innengerät

  • Kältemittel R32
  • integrierte Standard-Kondensatpumpe
  • flüsterleise
  • Vertikale Schwenkautomatik
  • Extrem flache Innengeräte, nur 214 mm hoch
  • Wochenzeitschaltuhr
  • Automatischer Wiederanlauf nach Stromausfall
  • Selbstreinigender Filter
  • Selbstdiagnose
  • Entfeuchtungsprogramm
  • Zugluftverhinderung
  • LCD-Kabelfernbedienung, weiß (schwarz oder silber auf Anfrage)
  • Infrarot-Fernbedienung (Zubehör)
  • Online-Regler (Zubehör)

Multi-Split-Invertergeräte bieten den Vorzug, das bis zu 5 Innengeräte an ein einziges Multisplit- Außengerät angeschlossen werden können, auch wenn es sich dabei um Geräte mit unterschiedlichen Leistungen handelt. Alle Innengeräte können in derselben Betriebsart (Kühlen oder Heizen) individuell betrieben werden. Das Entfeuchtungsprogramm ermöglicht die Verminderung des Feuchtigkeitsniveaus in einem Raum ohne Veränderung der Raumtemperatur. Bei einer Kombination mit der R32-Bluevolution-Technologie verringern sich im Vergleich zu R410A negative Auswirkungen auf die Umwelt um 68 %, dank höherer Energieeffizienz ergibt sich unmittelbar eine Senkung des Energieverbrauchs, und es wird eine um 16 % geringere Kältemittelfüllmenge benötigt. Das Gerät kann zur Infrastrukturkühlung verwendet werden. Es entfernt in einer zuverlässigen, effizienten und flexiblen Weise kontinuierlich die Wärme, die von IT und Servern erzeugt wird, um eine maximale Betriebszeit und somit die beste Amortisation zu gewährleisten. Zu Beginn der Aufwärmphase oder bei ausgeschaltetem Thermostat ist zur Verhinderung von Zugluft die horizontale Luftausblasrichtung und eine geringe Drehzahl des Ventilators eingestellt. Nach dem Aufwärmen werden die Luftausblasrichtung und die Drehzahl des Ventilators auf die gewünschten Einstellungen geändert.


Produkthighlights AussengerätAussengeraet_RXMN9

  • Spitzeneffizienz: – Energieeffizienzklasse bis A++ sowohl im Kühl- als auch im Heizbetrieb – Verdichter bietet erhebliche Effizienzverbesserungen
  • Für hochsensible Infrastruktur-Kühlanwendungen geeignet
  • Weiterverwendung bereits vorhandener Technik für R-22 oder R-407C
  • Garantiert Betrieb im Heiz- und Kühlmodus bis zu -20 °C
  • Maximale Rohrleitungslänge bis zu 50 m
  • Exklusives Angebot für Monosplit-Anwendungen (Leistung von 35 bis 60)

Die Außengeräte sind mit einem Swingverdichter ausgestattet, der sich durch einen niedrigen Geräuschpegel und äußerst geringen Energieverbrauch auszeichnet. Es können unterschiedliche Typen an Innengeräten angeschlossen werden: z. B. Wandgeräte, Zwischendeckengeräte für Eckmontage, Deckeneinbaugeräte. Inverter-Verdichter passen kontinuierlich die Verdichterdrehzahl an den tatsächlichen Bedarf an. Weniger energieverbrauchende Starts und Stops führen zu einem verringerten Energieverbrauch (bis zu 30 %) und zu stabileren Temperaturen. Automatischer Wechsel zwischen Kühl- oder Heizbetrieb, um eine eingestellte Temperatur zu erreichen.


Madoka

Verkabelte Fernbedienung Madoka.
Ambiente
Ein völlig neu gestalteter Regler für besseres Nutzererlebnis

  • Schlankes und elegantes Design, verfügbar in drei Farben, um zu jedem Innendekor zu passen
  • Benutzeroberfläche mit Symbolen und intuitiver Betätigung durch Touch-Schaltflächen
  • Funktionenschwerpunkt auf wichtigsten Kundenanforderungen: EIN/AUS, Temperatur, Betriebsart, Ventilatordrehzahl, Lamellen, Filter
  • Intuitive App zum Einstellen von Zeitplänen und; Energiesparfunktionen oder zur Überwachung durch fortgeschrittene Anwender und Technikmanager und zum Bereitstellen einer einfachen und zeitsparenden Inbetriebnahme für den Installateur
  • Energieeinsparungen dank Integration von Schlüsselkarte/Fensterkontakt, Begrenzung von Sollwerten und flexible Absenkfunktion, während der Komfort für den Gast oder Mieter gewährleistet wird
  • Kostengünstige Lösung für Infrastrukturkühlen mit integriertem Wechsel- und Reservebetrieb
  • Kompakt, nur 85 x 85 mm, problemlos in Standard-Schaltkästen zu integrieren
  • Automatische Sommer-/Winterzeitumstellung

 


Angaben zur GPSR Produktsicherheitsverordnung:

Hersteller

Name: DAIKIN Airconditioning Germany GmbH
Adresse: Inselkammerstrasse 2 , 82008 Unterhaching , Deutschland
Kontakt: info@daikin.de

Verantwortliche Stelle in der EU
Ein in der EU ansässiger Wirtschaftsbeteiligter, der sicherstellt, dass das Produkt allen erforderlichen Vorschriften entspricht.

EU-Verantwortlicher Name: DAIKIN Airconditioning Germany GmbH
EU-Verantwortliche Adresse: Inselkammerstrasse 2, 82008 Unterhaching, Deutschland
EU-Verantwortlicher Kontakt: info@daikin.de



Technische Daten:

Innengerät FCAG35B
Außengerät RXM35N9
Kälteleistung (nom.) (kW) 3,5
Leistungsaufnahme (nom.) (kW) 0,94
Jährl. Energieverbrauch (kWh)3 470
SEER 6,35
Energieeffizienzklasse2 A++
Heizleistung (nom.) (kW) 4,2
Leistungsaufnahme (nom.) (kW) 1,11
Jährl. Energieverbrauch (kWh)3 555
SCOP 4,9
Energieeffizienzklasse2 A++
Innengerät
Spannungsversorgung (V) 230
Verbindungskabel (mm²) 4 x 1,5
Luftvolumenstrom, Kühlen / Heizen (hoch, m3/h) 750 / 834
Schalldruckpegel (niedrig/hoch) (Kühlen, dB(A)) 27 / 31
Schalldruckpegel (niedrig/hoch) (Heizen, dB(A)) 27 / 31
Abmessungen (H x B x T, mm) 204 x 840 x 840
Gewicht (kg) 18
Außengerät
Schallleistungspegelpegel (Kühlen, dB(A)) 61
Abmessungen (H x B x T, mm) 550 x 765 x 285
Gewicht (kg) 32
Kältetechnische Angaben
Leitungsanschlüsse Ø (mm) Flüssigkeitsleitung 6 (1/4)
Gasleitung 10 (3/8)
Kältemittel (Typ / GWP / Füllmenge (kg) / tCO2-Äqu.) R32 / 675 / 0,76 / 0,52
Höhenunterschied IG/AG (max.) (m) 20
Leitungslänge IG/AG (max.) (m) 20
Vorgefüllte Leitungslänge (max.) (m) 10
Nachfüllmenge Kältemittel (g/m) 20
1) SEER-/SCOP-Werte werden in Übereinstimmung mit EN14511 berechnet. 
2) Energieeffizienzklassenskala von A+++ bis D. 
3)  Jährlicher Stromverbrauch: basierend auf durchschnittlich 500 Betriebsstunden pro Jahr bei Volllast (= Nennleistung). 

Änderungen und Irrtümer vorbehalten.

Produkte mit ähnlichen Merkmalen:

Kühlen

Heizen

WARUM KLIMAPROFIS?

  • Expertise: Unser Team von Klimaexperten steht Ihnen mit Rat und Tat zur Seite, um sicherzustellen, dass Sie die perfekte Kühllösung für Ihre Bedürfnisse finden.
  • Qualität: Wir bieten nur Produkte von renommierten Herstellern, um sicherzustellen, dass Sie nicht nur Kühlen oder Heizen, sondern auch Langlebigkeit genießen.
  • Stilvolles Design: Wir glauben, dass Klimakontrolle nicht auf Kosten des Stils gehen muss. Unsere Geräte sind so gestaltet, dass sie sich harmonisch in Ihr Ambiente einfügen.
/* PW PROBE 2025-08-31T-now v1.3.0-h */ console.log('PropertyWizard v1.3.0 loaded (shadow+iframe+picker)', cfg); const toIdSet=s=>new Set(String(s||'').split(',').map(x=>x.trim()).filter(v=>/^\d+$/.test(v)).map(Number)); const isUrl=v=>/^https?:\/\//i.test(String(v||'')); const labelFor=pid=>cfg.labelMap[pid+'_de']||cfg.labelMap[pid+'_en']||('Property '+pid); const once=(el,k)=>{const key='__pw_'+k; if(el[key])return false; el[key]=true; return true;}; function injectStyles(doc){ try{ const s=doc.createElement('style'); s.textContent=CSS_INJECT; (doc.head||doc.documentElement).appendChild(s); }catch(e){} } function getDocs(){ const docs=[document]; document.querySelectorAll('iframe').forEach(f=>{ try{ if(f.contentDocument){ docs.push(f.contentDocument); injectStyles(f.contentDocument); } }catch(e){ /* cross-origin, ignore */ } }); return docs; } function getShards(doc){ const shards=[doc]; // collect shadow roots const all = Array.from(doc.querySelectorAll('*')); for(let i=0;is.trim()).filter(Boolean); const genericAttrSelectors=['[data-variation-id]','[data-variationid]','[data-variationId]','[data-item-id]','[data-vid]','[data-variation]','[data-product-id]','[data-productid]']; const basketSelectors=['.basket-item','.basket-list-item','[data-basket-item]']; const schemaSelectors=['[itemscope][itemtype*=\"Product\"]','[itemtype*=\"schema.org/Product\"]']; const linkSelectors=['a[href*=\"/item/\"]','a[href*=\"/artikel/\"]','a[href*=\"/produkt/\"]','a[href*=\"/p/\"]']; function overrideFor(ctxKey){ switch(ctxKey){ case 'category': return ""; case 'search': return ""; case 'crossSelling': return ""; case 'slider': return ""; case 'basket': return ""; } return ""; } function nearestCard(node){ let el=node; let depth=0; while(el && depth<6){ if(el.className && /product|item|tile|card|box|cmp|grid|list/i.test(String(el.className))) return el; el = el.parentElement; depth++; } return node.parentElement || node; } function autoDiscoverRoots(shards){ const candidates=[]; for(const sh of shards){ const kids = Array.from(sh.querySelectorAll(':scope > *')); // top-level children in this shard // If no direct children container, scan elements with many children const scan = kids.length? kids : Array.from(sh.querySelectorAll('*')).filter(e=>e.children && e.children.length>=6).slice(0,200); for(const el of scan){ if(!el.children || el.children.length<6) continue; const groups = new Map(); const arr = Array.from(el.children); arr.forEach(k=>{ const tag = k.tagName.toLowerCase(); const cls = Array.from(k.classList).sort().join('.'); const key = tag+(cls?'.'+cls:''); if(!groups.has(key)) groups.set(key, []); groups.get(key).push(k); }); groups.forEach(list=>{ if(list.length>=6){ const score = list.reduce((acc,k)=>acc+ (k.querySelector('a[href],img')?1:0),0) / list.length; candidates.push({list, score}); } }); } } if(!candidates.length) return []; candidates.sort((a,b)=> b.score - a.score || b.list.length - a.list.length); return candidates[0].list; } function detectRoots(ctxKey){ const docs=getDocs(); let by='none'; let nodes=[]; for(const doc of docs){ const shards=getShards(doc); const ov = overrideFor(ctxKey).trim(); let found=[]; if(ctxKey==='basket'){ found = qAll(shards, basketSelectors); if(found.length){ by = (doc !== document ? 'iframe' : 'basket'); nodes.push(...found); continue; } } if(ov){ found=qAll(shards, [ov]); if(found.length){ by='override'; nodes.push(...found); continue; } } if(defaultTileSelectors.length){ found=qAll(shards, defaultTileSelectors); if(found.length){ by='classes'; nodes.push(...found); continue; } } found = qAll(shards, genericAttrSelectors).map(nearestCard); if(found.length){ by='data-*'; nodes.push(...found); continue; } found = qAll(shards, schemaSelectors).map(nearestCard); if(found.length){ by='schema'; nodes.push(...found); continue; } found = qAll(shards, linkSelectors).map(nearestCard); if(found.length){ by='links'; nodes.push(...found); continue; } // auto found = autoDiscoverRoots(shards); if(found && found.length){ by='auto'; nodes.push(...found); continue; } } nodes = [...new Set(nodes)]; return {by, nodes}; } function renderBadge(doc, pid,value){ const w=doc.createElement('span');w.className='pw-badge pw-muted'; const i=doc.createElement('span');i.className='pw-icon';i.innerHTML='📄';w.appendChild(i); const c=doc.createElement(isUrl(value)?'a':'span'); if(isUrl(value)){c.href=value;c.target='_blank';c.rel='noopener';} c.textContent=labelFor(String(pid)); w.appendChild(c); return w; } function addTileMarker(tile){ if(!cfg.debug.showTileMarkers) return; if(tile.querySelector('.pw-marker')) return; const doc=tile.ownerDocument||document; const m=doc.createElement('span'); m.className='pw-marker'; m.textContent='PW'; if(!tile.style.position) tile.style.position='relative'; tile.appendChild(m); } function pickTarget(tile,placement,customSelector){ const sel=(r,s)=>r.querySelector(s); if(customSelector){const n=sel(tile,customSelector); if(n) return n;} const cand={afterPrice:['[data-testing=\"current-price\"]','.price','.price-box','.price-wrapper .text-muted','.cmp-price'], afterTitle:['.item-title a','.item-title','h3 a','h3','.title a','.title'], afterImage:['.thumb a','.thumb img','.item-image a','.item-image img','.cmp-image img']}[placement]||['.item-title','.title']; for(const s of cand){const n=sel(tile,s); if(n) return n;} return tile.firstElementChild||tile; } function extractId(tile){ const a = tile.querySelector('a[href]'); const dataIds = [ tile.getAttribute('data-variation-id'), tile.getAttribute('data-variationid'), tile.getAttribute('data-item-id'), tile.getAttribute('data-product-id'), tile.dataset?.variationId, tile.dataset?.itemId, tile.dataset?.productId ].filter(Boolean); if(dataIds.length) return String(dataIds[0]).match(/\d+/)?.[0] || null; if(a){ const m = String(a.getAttribute('href')||'').match(/(\d{4,})/g); if(m && m.length) return m[m.length-1]; } return null; } function timeoutPromise(ms){ return new Promise((_,rej)=>setTimeout(()=>rej(new Error('timeout')),ms)); } async function fetchJson(url, useCred){ const opt = {headers: {'Accept':'application/json'}}; if(useCred) opt.credentials = 'same-origin'; const res = await Promise.race([fetch(url,opt), timeoutPromise(cfg.apiFetch.timeoutMs)]); if(!res.ok) throw new Error('HTTP '+res.status); return res.json().catch(()=> ({})); } async function fetchPropsById(id){ for(const p of cfg.apiFetch.paths){ const url = p.replace('{id}', encodeURIComponent(id)); try{ const j = await fetchJson(url, cfg.apiFetch.useCredentials); if(Array.isArray(j) && j.length && (j[0]?.property || j[0]?.texts || j[0]?.id)) return j; const keys = cfg.apiFetch.propPath.split('.'); let cur=j; for(const k of keys){ if(cur && typeof cur==='object' && k in cur) cur=cur[k]; else { cur=null; break; } } if(Array.isArray(cur)) return cur; if(j && j.variation && Array.isArray(j.variation.properties)) return j.variation.properties; }catch(e){} } return null; } function ensureOverlay(doc){ if(!cfg.debug.enabled || !cfg.debug.overlay) return null; if(doc!==document) return null; // overlay nur im Top-Dokument let el=document.getElementById('pw-overlay'); if(!el){ el=document.createElement('div'); el.id='pw-overlay'; el.className='pw-overlay'; el.title='PW Overlay — Alt+R: Root-Highlight, Alt+P: DOM-Picker'; document.body.appendChild(el); } return el; } function domPickerActivate(){ let last=null; function over(e){ if(last) last.classList.remove('pw-pick'); last = e.target; last.classList.add('pw-pick'); e.preventDefault(); e.stopPropagation(); } function out(e){ if(last){ last.classList.remove('pw-pick'); last=null; } } function click(e){ e.preventDefault(); e.stopPropagation(); if(!last) return; // compute simple selector path const path=[]; let el=last; let depth=0; while(el && el!==document.body && depth<5){ const id = el.id ? '#'+el.id : ''; const cls = (el.className && typeof el.className==='string') ? '.'+el.className.split(/\s+/).filter(Boolean).slice(0,2).join('.') : ''; path.unshift(el.tagName.toLowerCase()+id+cls); el=el.parentElement; depth++; } const selector = path.join(' > '); localStorage.setItem('pw.selectorOverride.category', selector); alert('PW: Root-Selector gespeichert:\n'+selector+'\nReload, um ihn zu verwenden.'); deactivate(); } function key(e){ if(e.key==='Escape'){ deactivate(); } } function deactivate(){ document.removeEventListener('mousemove', over, true); document.removeEventListener('mouseout', out, true); document.removeEventListener('click', click, true); document.removeEventListener('keydown', key, true); if(last){ last.classList.remove('pw-pick'); last=null; } } document.addEventListener('mousemove', over, true); document.addEventListener('mouseout', out, true); document.addEventListener('click', click, true); document.addEventListener('keydown', key, true); } function processContext(ctxKey){ const ctx=cfg.contexts[ctxKey]; // merge in local override from picker const lsOverride = localStorage.getItem('pw.selectorOverride.'+ctxKey); if(lsOverride && !overrideFor(ctxKey)) { cfg.themeHints.knownTileClasses = lsOverride; } const ids = toIdSet(ctx.propertyIds); const allowNoIds = true; if(!ids.size && !allowNoIds) return; // bei Force trotzdem laufen const bucket=detectRoots(ctxKey); const roots=[...new Set(bucket.nodes)]; let processed=0, matchedCount=0, fetchedOk=0, fetchedFail=0, idx=0; const overlay=ensureOverlay(document); const upd=()=>{ if(overlay) overlay.innerHTML = 'PW ctx='+ctxKey+' by='+bucket.by+' roots='+roots.length+' matched='+matchedCount+' fetched='+fetchedOk+'/'+(fetchedOk+fetchedFail); }; upd(); if(cfg.debug.enabled) console.log('[PropertyWizard] %s by=%s roots=%d', ctxKey, bucket.by, roots.length); if(cfg.debug.picker){ document.addEventListener('keydown', (ev)=>{ if(ev.altKey && (ev.key==='p' || ev.key==='P')){ domPickerActivate(); } }); } async function processTile(tile){ addTileMarker(tile); const doc = tile.ownerDocument || document; let props=null; const s=tile.querySelector('script[type=\"application/json\"]'); if(s){ try{ const o=JSON.parse(s.textContent||'{}'); if(Array.isArray(o?.properties)) props=o.properties; if(Array.isArray(o?.variationProperties)) props=o.variationProperties; }catch(e){} } if(!props && cfg.apiFetch.enabled){ const id = extractId(tile); if(id){ try{ props = await fetchPropsById(id); if(Array.isArray(props)&&props.length){ tile.__pw_props=props; fetchedOk++; } else { fetchedFail++; } } catch(e){ fetchedFail++; } upd(); } } let matched=false; if(Array.isArray(props) && props.length){ const m = props.find(p=>{ const pid=p?.property?.id||p?.id||p?.propertyId; const val=p?.texts?.value||p?.value||p?.selection?.name||p?.valueText; return ids.has(Number(pid)) && val; }); if(m){ matched=true; matchedCount++; const pid=m.property?.id||m.id||m.propertyId; const val=m.texts?.value||m.value||m.selection?.name||m.valueText; const target=tile.querySelector(ctx.selector) || pickTarget(tile,ctx.placement,''); const badge=renderBadge(doc, pid,val); if(!(target && target.parentNode && target.parentNode.insertBefore(badge, target.nextSibling))){ tile.appendChild(badge); } } } if(!matched && cfg.debug.forceRender){ const target=tile.querySelector(ctx.selector) || pickTarget(tile,ctx.placement,''); const b=renderBadge(doc, 0,''); b.textContent='PW (force)'; if(!(target && target.parentNode && target.parentNode.insertBefore(b, target.nextSibling))){ tile.appendChild(b); } } } async function run(){ const conc = 4; let running = 0, idx = 0; function pump(){ while(running < conc && idx < roots.length && processed < cfg.performance.maxTiles){ const tile = roots[idx++]; running++; Promise.resolve() .then(() => processTile(tile)) .finally(() => { running--; processed++; pump(); }); } } pump(); } run(); const mo=new MutationObserver(()=>{ const again=detectRoots(ctxKey); const newRoots=[...new Set(again.nodes)]; if(newRoots.length!==roots.length){ roots.length=0; roots.push(...newRoots); upd(); run(); } }); mo.observe(document, {subtree:true, childList:true}); window.addEventListener('load', ()=> setTimeout(()=>{ const again=detectRoots(ctxKey); if(again.nodes.length!==roots.length){ roots.length=0; roots.push(...again.nodes); upd(); run(); } }, 500)); ['popstate','pushstate','replacestate'].forEach(evt=> window.addEventListener(evt, ()=> setTimeout(()=>{ const again=detectRoots(ctxKey); if(again.nodes.length!==roots.length){ roots.length=0; roots.push(...again.nodes); upd(); run(); } }, 300))); } const onReady=fn=>(document.readyState==='loading')?document.addEventListener('DOMContentLoaded',fn):fn(); onReady(()=>['category','search','crossSelling','slider','basket'].forEach(processContext)); })();