Skip to content

Tester

In dieser Kategorie werden Adapter Versionen vorgestellt die der Entwickler zum Testen Frei gibt.

1.1k Themen 198.6k Beiträge

NEWS

  • Grohe - Sense / Guard /Blue - Adapter

    92
    1 Stimmen
    92 Beiträge
    470 Aufrufe
    patricknitschP
    Supi. Dann gerne nächste Woche noch mal melden :)
  • Test Adapter renault v0.0.x für myRenault und myDacia

    373
    1
    0 Stimmen
    373 Beiträge
    75k Aufrufe
    A
    Der Bordcomputer sagt "Verbunden".
  • Test Tesla-Motors v1.0.0

    949
    4
    1 Stimmen
    949 Beiträge
    313k Aufrufe
    M
    Ich habe das Problem über Homme Assitant gelöst. Da bei mir iobroker auf ein MacBook mit Orbstack läuft, habe ich einfach einen Container mit HA erstellt und dort Tesla erstellt. War nicht viel Arbeit, da ich nur Aufwachen, Ampere und Ladegrenze von HA als Alias ersetzt habe.
  • Test F1 Adapter

    10
    0 Stimmen
    10 Beiträge
    121 Aufrufe
    mcm1957M
    Das repo ist genauso Adapter Incomplete :-) https://github.com/Skeletor-ai/ioBroker.system-health/issues/173
  • [TEST] Mammotion – Adapter für Mammotion Luba / Yuka

    Verschoben
    4
    3 Stimmen
    4 Beiträge
    111 Aufrufe
    stolly82S
    @Scrounger Hey, das mit dem 2. Account hatte ich vorgestern schon eingebaut, hatte das gestern in die GUT Version gepusht und funktioniert jetzt auch. mammotion.0.devices.XXXX.commands.applyTaskSettings: Wann muss ich das ausführen? Genrell wenn ich irgendwelche Einstellungen (wie. routeBorderMode, routeChannelMode, routeChannelWidthCm, targetMowSpeedMs, routeTowardDeg, etc.) geändert habe? Nicht nötig! Das passiert automatisch. Wenn du targetCutHeightMm oder targetMowSpeedMs änderst, wird applyTaskSettings nach 1,5 Sekunden automatisch im Hintergrund ausgelöst. Die anderen Einstellungen wie routeBorderMode, routeChannelMode, routeChannelWidthCm, routeTowardDeg etc. triggern stattdessen automatisch modifyRoute nach 2,5 Sekunden. applyTaskSettings manuell auf true setzen macht nur Sinn wenn man die Einstellungen direkt schicken will ohne auf den Debounce zu warten. mammotion.0.devices.XXXX.commands.routeAreasCsv: Kann man damit die Bereiche angeben, die gemäht werden sollen? Wenn ja, woher bekomm ich die hashes der existierenden Bereiche? Hier sitze ich noch dran, ignorieren den Datenpunkt bitte noch mal. Ich hatte hier geplant, dass die "Zonen" geladen werden und dann Datenpunkte angelegt werden (je Zone) mit true/false, und mann dann einen Zonenmähvorgang starten kann, der dann anhand der Datenpunkte im richtigem Format in den Payload haut den Mammotion benötogt. Da fehlt mir aber gerade noch was, was ich aus der App auslesen muss (ist relativ komplex und ich habe in der Regel nur nachts Zeit zum Entwickeln,... dann kann ich aber kaum Testen wegen Nachbarn :) )
  • 3 Stimmen
    1k Beiträge
    359k Aufrufe
    B
    Neue Testversion sun2000 Adapter Version v2.4.0 released. Die Installation erfolgt über npm oder morgen über das Beta Repository. Neues Statistik-Modul im sun2000 Adapter Der Adapter sammelt ab sofort automatisch Energie- und Verbrauchsdaten und bereitet sie zeitlich auf – ohne dass der Nutzer etwas konfigurieren muss. Was passiert im Hintergrund Jede Stunde speichert der Adapter einen Schnappschuss der wichtigsten Werte. Daraus baut er automatisch Tages-, Wochen-, Monats- und Jahreswerte zusammen. Die Daten werden dabei aufsummiert und alte Einträge regelmäßig bereinigt. Welche Werte werden erfasst PV-Ertrag, Hausverbrauch, Netzbezug, Netzeinspeisung sowie Batterie-Laden und -Entladen aus dem collected Pfad - also alle relevanten Energieflüsse der Anlage. Wo werden die Statistikdaten gespeichert Unter sun2000.x.statistics.* erscheinen fünf neue States: jsonHourly - Stundenwerte der letzten 2 Tage jsonDaily - Tageswerte des laufenden Jahres jsonWeekly - Wochenwerte des laufenden Jahres jsonMonthly - Monatswerte des laufenden Jahres jsonAnnual - Jahreswerte seit Inbetriebnahme Diese JSON-States lassen sich direkt in VIS, jarvis, Lovelace oder per Blockly/JavaScript auslesen und als Diagramme darstellen – ganz ohne eigene History-Abfragen oder Datenbankanbindung. Was bisher nötig war Für solche Auswertungen musste man bisher selbst ioBroker.history, InfluxDB oder SQL einrichten und die Abfragen manuell schreiben. Das entfällt nun für die wichtigsten PV-Kennzahlen. Ausblick Die Integration mit dem ioBroker.flexcharts-Adapter ist bereits vorbereitet. Damit sollen die Daten künftig mit wenigen Klicks als fertige Diagramme in VIS dargestellt werden können. Hier der entsprechende Wiki-Eintrag: https://github.com/bolliy/ioBroker.sun2000/wiki/Statistk-(statistics) LG Stephan Changelog • fix: the order of bit assignment corrected of alarmsJSON • new state inverter.x.emma.activeAlarmSN and inverter.x.emma.HistoricalAlarmSN : emma alarms #226 • statistics: Aggregates historical collected datapoints into time-based summaries (e.g. hourly, daily, monthly, yearly). The data is stored in the path statistics as JSON.
  • Test Adapter Nissan v.0.0.x

    104
    2
    1 Stimmen
    104 Beiträge
    16k Aufrufe
    B
    Ein schreiben von Nissan an alle Ze0 Besitzer hat bei euch sicherlich für Unmut gesorgt. Sofern der Dienst tatsächlich für Modelle bis Modelljahr 2019 eingestellt werden sollte, werde ich die entsprechende Funktionalität im Adapter enfernen. Wie steht ihr zu dieser Ankündigung von Nissan? Sehr geehrte Kundin, sehr geehrter Kunde, wir möchten Sie darüber informieren, dass die NissanConnect EV-App, die aktuell mit Ihrem Fahrzeug SJNFAAZE1UXXXXXXX verknüpft ist, ab dem 30. März 2026 nicht mehr zur Verfügung steht. Dies betrifft Nissan LEAF Modelle bis Modelljahr 2019 sowie Nissan e-NV200 Modelle bis Modelljahr 2022. Das bedeutet: Ab dem 30. März 2026 können Sie die NissanConnect Services nicht mehr per Fernzugriff über die NissanConnect EV-App nutzen. Zudem entfallen bestimmte kartenbasierte Funktionen in den betroffenen Fahrzeugen. Wir möchten Sie jedoch beruhigen: Wichtige Funktionen wie der Klima-Timer und der Lade-Timer bleiben weiterhin über das Navigations-Infotainmentsystem Ihres Fahrzeugs verfügbar. Weitere Hinweise zur Nutzung der Bordfunktionen finden Sie in der Nissan Drivers Guide App sowie in der Betriebsanleitung Ihres Fahrzeugs. Nissan ist weiterhin bestrebt, moderne und zukunftsfähige Konnektivitätslösungen zu entwickeln, die den Anforderungen unserer heutigen und zukünftigen Kunden gerecht werden. Danke, dass Sie sich für einen Nissan entschieden haben und für Ihr Vertrauen. Mit freundlichen Grüßen Nissan
  • TESTER: Neuer Adapter Webuntis

    Verschoben
    200
    4 Stimmen
    200 Beiträge
    43k Aufrufe
    madingM
    Hi zusammen, der Adapter war mir zu unzuverlässig bzw. hatte ich ein Javascript gefunden, dass mir alles für vis in einer Tabelle aufarbeitet. Das war aber nicht immer richtig. Ich habe mit Hilfe von copilot ein Skript gebaut, das mir Screenshots des Stundenplans macht. # Create a new folder for the script mkdir webuntis-shot && cd webuntis-shot # Initialize and install dependencies npm init -y npm i playwright dotenv # Install browsers for Playwright (first time only) npx playwright install dann .env Datei erstellen # .env WEBUNTIS_USERNAME="user" WEBUNTIS_PASSWORD="xyz" HEADLESS="1" OUTPUT_DIR="/opt/iobroker" dann die Datei z.B. webuntis.js anlegen // webuntis-screenshot.js // Usage: node webuntis-screenshot.js // Optional env: WEBUNTIS_USERNAME, WEBUNTIS_PASSWORD, HEADLESS, OUTPUT_DIR, TARGET_HASH_FILE import { chromium } from 'playwright'; import fs from 'fs'; import fsp from 'fs/promises'; import path from 'path'; import 'dotenv/config'; const USERNAME = process.env.WEBUNTIS_USERNAME || 'user'; const PASSWORD = process.env.WEBUNTIS_PASSWORD || 'pass'; const HEADLESS = (process.env.HEADLESS || '1') !== '0'; const OUTPUT_DIR = process.env.OUTPUT_DIR || '/opt/iobroker/iobroker-data/files/vis.0/main/img/'; const BASE_URL = 'https://gss-realschule.webuntis.com/timetable/my-student?date='; // === NEW: read TARGET_HASH from external file === const TARGET_HASH_FILE = process.env.TARGET_HASH_FILE || path.resolve(process.cwd(), 'target-hash.txt'); async function loadTargetHash(filePath) { const exists = fs.existsSync(filePath); if (!exists) { throw new Error(`Target-hash file not found: ${filePath}`); } const ext = path.extname(filePath).toLowerCase(); if (ext === '.json') { const raw = await fsp.readFile(filePath, 'utf-8'); let data; try { data = JSON.parse(raw); } catch (e) { throw new Error(`Invalid JSON in ${filePath}: ${e.message}`); } const hash = (data.TARGET_HASH || '').trim(); if (!hash) throw new Error(`Missing "TARGET_HASH" property in ${filePath}`); validateHash(hash); return hash; } else { // treat as plain text const hash = (await fsp.readFile(filePath, 'utf-8')).trim(); validateHash(hash); return hash; } } function validateHash(hash) { if (!hash.startsWith('#/')) { throw new Error(`TARGET_HASH must start with "#/". Got: "${hash}"`); } } // Utility: ensure directory exists (try to create if not) function ensureDir(dir) { try { if (!fs.existsSync(dir)) { fs.mkdirSync(dir, { recursive: true }); } const testFile = path.join(dir, '.test_write.tmp'); fs.writeFileSync(testFile, 'ok'); fs.unlinkSync(testFile); return true; } catch (e) { console.error(`[WARN] Cannot write to ${dir}: ${e.message}`); return false; } } async function tryFill(page, selectors, value, opts = {}) { for (const sel of selectors) { try { const el = await page.$(sel); if (el) { await el.fill(value, { timeout: opts.timeout || 3000 }); return true; } } catch { /* continue */ } } return false; } async function tryClick(page, candidates, opts = {}) { for (const c of candidates) { try { if (c.selector) { await page.click(c.selector, { timeout: opts.timeout || 3000 }); return true; } if (c.text) { const el = page.getByText(c.text, { exact: false }); await el.first().click({ timeout: opts.timeout || 3000 }); return true; } } catch { /* continue */ } } return false; } async function acceptCookies(page) { const candidates = [ { text: 'Accept all' }, { text: 'Accept All' }, { text: 'Accept' }, { text: 'Alle akzeptieren' }, { text: 'Akzeptieren' }, { text: 'Einverstanden' }, { selector: 'button#onetrust-accept-btn-handler' }, { selector: 'button[aria-label*="accept"]' }, ]; await tryClick(page, candidates, { timeout: 2000 }); } async function loginIfNeeded(page, username, password) { const usernameSelectors = [ 'input[name="username"]', 'input#username', 'input[name="user"]', 'input[type="text"]', 'input[autocomplete="username"]' ]; const passwordSelectors = [ 'input[name="password"]', 'input#password', 'input[type="password"]', 'input[autocomplete="current-password"]' ]; const loginButtonCandidates = [ { text: 'Log in' }, { text: 'Login' }, { text: 'Anmelden' }, { text: 'Sign in' }, { selector: 'button[type="submit"]' } ]; let needsLogin = false; for (const sel of passwordSelectors) { const el = await page.$(sel); if (el) { needsLogin = true; break; } } if (!needsLogin) { const clicked = await tryClick(page, [{ text: 'Login' }, { text: 'Anmelden' }, { text: 'Log in' }], { timeout: 2000 }); if (clicked) { await page.waitForTimeout(1200); } for (const sel of passwordSelectors) { const el = await page.$(sel); if (el) { needsLogin = true; break; } } } if (!needsLogin) return false; const uFilled = await tryFill(page, usernameSelectors, username); const pFilled = await tryFill(page, passwordSelectors, password); if (!uFilled || !pFilled) { throw new Error('Could not locate username/password fields to perform login.'); } const clickedSubmit = await tryClick(page, loginButtonCandidates, { timeout: 3000 }); if (!clickedSubmit) { for (const sel of passwordSelectors) { const el = await page.$(sel); if (el) { await el.press('Enter'); break; } } } await page.waitForLoadState('domcontentloaded'); await page.waitForTimeout(2000); return true; } function timestamp() { const d = new Date(); const pad = (n) => String(n).padStart(2, '0'); return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}_${pad(d.getHours())}-${pad(d.getMinutes())}-${pad(d.getSeconds())}`; } (async () => { console.log('[INFO] Starting WebUntis screenshot task...'); const canWrite = ensureDir(OUTPUT_DIR); const outDir = canWrite ? OUTPUT_DIR : process.cwd(); if (!canWrite) { console.warn(`[WARN] Falling back to current directory: ${outDir}`); } // Load external hash let TARGET_HASH = ''; try { TARGET_HASH = await loadTargetHash(TARGET_HASH_FILE); console.log(`[INFO] Loaded TARGET_HASH from ${TARGET_HASH_FILE}: ${TARGET_HASH}`); } catch (e) { console.error('[ERROR] Failed to load TARGET_HASH:', e.message); process.exit(1); } const TARGET_URL = `${BASE_URL}${TARGET_HASH}`; const browser = await chromium.launch({ headless: HEADLESS }); const context = await browser.newContext({ viewport: { width: 1400, height: 900 } }); const page = await context.newPage(); try { console.log('[INFO] Navigating to base URL…'); await page.goto(BASE_URL, { waitUntil: 'domcontentloaded', timeout: 60000 }); await acceptCookies(page); await loginIfNeeded(page, USERNAME, PASSWORD); console.log('[INFO] Navigating to target timetable URL…'); await page.goto(TARGET_URL, { waitUntil: 'domcontentloaded', timeout: 60000 }); await page.waitForTimeout(4000); await acceptCookies(page); const filePath = path.join(outDir, `webuntis-screenshot.png`); await page.screenshot({ path: filePath, fullPage: true }); console.log(`[SUCCESS] Screenshot saved to: ${filePath}`); } catch (err) { console.error('[ERROR]', err.message); process.exitCode = 1; } finally { await context.close(); await browser.close(); } })(); eigentlich dachte ich, ich muss die URL noch wöchentlich auf die richtige Woche ändern, das macht aber ein redirect. die target-hash.txt Datei ist aber geblieben (gleicher Ordner) - steht "nichts" drin, könnte geändert werden #/ dann das Skript laufen lassen node webuntis.js Bei mir kamen noch ein paar Fehler, ich musste ein paar libraries nachinstallieren. Somit läuft es bei mir, ich muss jetzt nur noch schauen, ob ich es mit einem blockly und cron triggere oder von debian aus. [image: 1773492443224-494470b8-8e71-4663-8202-0716112cdf72-grafik.png] Damit läuft das Skript stündlich 0 * * * * /usr/bin/node /home/mading/webuntis-shot/webuntis.js >> /home/mading/webuntis-shot/cron.log 2>&1
  • Test ViessmannAPI v2.0.0

    827
    2
    5 Stimmen
    827 Beiträge
    302k Aufrufe
    M
    Sieht gut aus, funktioniert bei mir auch wieder.
  • Test Adapter open-meteo-weather v2.6.x GitHub/Latest

    220
    5 Stimmen
    220 Beiträge
    11k Aufrufe
    H5N1H
    Good News Open-Meteo-Weather ist jetzt im Latest. Es Kann aber noch bis zu 24 Std. dauern bis es angezeigt wird.
  • Test Adapter bshb (Bosch Smart Home) v0.0.x

    bosch
    448
    1
    3 Stimmen
    448 Beiträge
    121k Aufrufe
    mcm1957M
    Erinnerungs Issue gibts bereits: https://github.com/holomekc/ioBroker.bshb/issues/921 pUpdate muss der Maintainer triggern (= PR erstellen, in www.iobroker.dev einloggen und auf "set as stable" klicken)
  • Ultrahuman Ring Adapter

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    76 Aufrufe
    T
    Danke fürs verschieben @samson71 👍🏻 ich hatte keine Rechte hier direkt einen Beitrag zu erstellen.
  • Test/Support Adapter iobroker.fail2bancontrol

    3
    0 Stimmen
    3 Beiträge
    47 Aufrufe
    OliverIOO
    @mcm1957 ja war private. hatte mich in vscode wohl verklickt
  • Adapter Hyundai (Bluelink) oder KIA (UVO)

    Verschoben
    2k
    5 Stimmen
    2k Beiträge
    944k Aufrufe
    J
    @arteck sagte in Adapter Hyundai (Bluelink) oder KIA (UVO): wo ist das problem ? Habe hier die Objekte aufgelistet, die mir noch ein Rätsel aufgeben Objekte stammen von einem Hyundai Kona Bj. 2021 driveHistory.cumulated01 - monatliche Zusammenfassung? driveHistory.cumulated02 - ? wöchentlich? driveHistory.cumulated01.period - ? driveHistory.cumulated01.regen - tippe auf rekuperierte Energie monthlyReport.driving.durations.drive - Fahrzeit in ....Minuten? monthlyReport.driving.durations.idle - Fahrzeug an, aber im Stand befindlich? monthlyReport.driving.startCount - Wie oft das Fahrzeug eingeschaltet wurde? vehicleStatusRaw.climate.steeringwheelHeat - zeigt öfters "true" obwohl Lenkradheizung nicht in Benutzung. vehicleStatusRaw.engine.accessory - ? vehicleStatusRaw.engine.batteryCharge12v - Value=75 - Scheint nicht der SOC zu sein, sondern? vehicleStatusRaw.engine.batteryChargeHV - Value=50 - Ebenso hier. Soc ist aktuell auf 85%. Was sagt dieser Parameter? vehicleStatusRaw.vehicleStatus.battery.sjbDeliveryMode - ? vehicleStatusRaw.vehicleStatus.evStatus.reservChargeInfos.offpeakPowerInfo.offPeakPowerTime1.endtime.time - Value=1200 - ? vehicleStatusRaw.vehicleStatus.evStatus.reservChargeInfos.offpeakPowerInfo.offPeakPowerTime1.starttime.time - Value=1200 - ? vehicleStatusRaw.vehicleStatus.evStatus.reservChargeInfos.offpeakPowerInfo.offPeakPowerFlag - ? vehicleStatusRaw.vehicleStatus.lampWireStatus.headLamp - Parameter scheinen nicht Licht an/aus zu repräsentieren, sondern einen Lampendefekt? vehicleStatusRaw.vehicleStatus.acc - ? vehicleStatusRaw.vehicleStatus.hazardStatus - ? vehicleStatusRaw.vehicleStatus.ign3 - Fahrzeug ist aus, Parameter steht aber auf "true" ? vehicleStatusRaw.vehicleStatus.systemCutOffAlert - ? vehicleStatusRaw.vehicleStatus.transCond - ?
  • Test Adapter google-sharedlocations2

    35
    4 Stimmen
    35 Beiträge
    768 Aufrufe
    GaspodeG
    @Garfonso Super, dass du dich um den Adapter kümmerst. Edit: Nach dem 3. Versuch hat es jetzt einfach so funktioniert. keine Ahnung, warum es zunächst den Fehler gab. Jetzt läuft die Sache erst mal. Ich beobachte. Vielen Dank! Ich hab jetzt mal getestet (unter Windows) und bekomme allerdings folgende Fehlermeldung: 2026-03-09 15:24:40.580 - info: google-sharedlocations2.0 (6680) starting. Version 0.3.3 (non-npm: Garfonso/ioBroker.google-sharedlocations2#861d3ca3b6b823f42e232d261e612220ab634de9) in C:/ioBroker/lonwolf/node_modules/iobroker.google-sharedlocations2, node: v22.21.0, js-controller: 7.0.7 2026-03-09 15:24:40.623 - debug: google-sharedlocations2.0 (6680) Loaded 0 cookies from state. 2026-03-09 15:24:40.624 - debug: google-sharedlocations2.0 (6680) No cookie found in states, trying to log in to get new one. 2026-03-09 15:24:40.625 - debug: google-sharedlocations2.0 (6680) Trying to refresh cookie by loading Google Maps with existing cookie in Browser. 2026-03-09 15:24:40.625 - debug: google-sharedlocations2.0 (6680) Starting browser. 2026-03-09 15:24:43.037 - debug: google-sharedlocations2.0 (6680) browser started, opening new page. 2026-03-09 15:24:45.277 - debug: google-sharedlocations2.0 (6680) Loading Google login page to refresh cookie. 2026-03-09 15:24:50.482 - debug: google-sharedlocations2.0 (6680) Waiting for page to load, currently waiting fixed 5 seconds, because network never gets idle for maps 2026-03-09 15:24:56.034 - info: google-sharedlocations2.0 (6680) Trying to login to Google to get new cookies. 2026-03-09 15:24:56.034 - debug: google-sharedlocations2.0 (6680) Starting browser. 2026-03-09 15:25:00.589 - debug: google-sharedlocations2.0 (6680) browser started, opening new page. 2026-03-09 15:25:01.197 - debug: google-sharedlocations2.0 (6680) going to google login page. 2026-03-09 15:25:05.681 - debug: google-sharedlocations2.0 (6680) waiting for login / maps page to load (fixed 3 seconds timeout) 2026-03-09 15:25:08.689 - debug: google-sharedlocations2.0 (6680) filling in username. 2026-03-09 15:25:09.774 - debug: google-sharedlocations2.0 (6680) clicking user next button. 2026-03-09 15:25:10.140 - debug: google-sharedlocations2.0 (6680) waiting for network idle before filling password 2026-03-09 15:25:14.094 - debug: google-sharedlocations2.0 (6680) filling in password. 2026-03-09 15:25:44.104 - error: google-sharedlocations2.0 (6680) Error in puppeteer: Timed out after waiting 30000ms 2026-03-09 15:25:44.104 - error: google-sharedlocations2.0 (6680) The step puppeteer failed was: filling in password. Eine Idee, woran das liegen könnte?
  • Test Adapter Solaredge 1.2.x

    16
    0 Stimmen
    16 Beiträge
    274 Aufrufe
    B
    Kann jemand von euch sagen ob die beiden Werte überhaupt noch angeboten werden Noch ein update zu meinen post an dich. Ich habe das Inventar meines Wechselrichter abgefragt mit folgenden Befehl: curl -s "https://monitoringapi.solaredge.com/site/<id>/inventory?api_key=xxx" | jq { "Inventory": { "inverters": [ { "name": "Inverter 1", "manufacturer": "SolarEdge", "model": "SE8K-ER-01-DEU", "communicationMethod": "ETHERNET", "dsp1Version": "1.13.1031", "dsp2Version": "2.19.922", "cpuVersion": "3.2434.0", "connectedOptimizers": 40, "partNumber": "SE8K-ER-01-DEU", "SN": "7E19C28D-E6" } ], "batteries": [], "gateways": [], "sensors": [], "meters": [] } } Den Adapter Meters kennt er nicht in meinen Wechselrichter, somit ist klar warum da nichts kommt. Mein Wechselrichter ist Baujahr 2014, ein Fossil so zu sagen. :-)
  • Test Adapter sureflap v3.4.2

    154
    2 Stimmen
    154 Beiträge
    37k Aufrufe
    Sickboy78S
    Version 3.4.0, 3.4.1 and 3.4.2 beinhalten hauptsächlich Updates der Abhängigkeiten. English: Versions 3.4.0, 3.4.1, and 3.4.2 mainly contain dependency updates.
  • Test Adapter OnlyCat v0.5.4

    19
    0 Stimmen
    19 Beiträge
    2k Aufrufe
    Sickboy78S
    Version 0.5.4 ist da und kann mit entfernten oder umbenannten Geräten und Türrichtlinien umgehen. English Version 0.5.4 is available and can handle removed or renamed devices and transit policies.
  • lokales Auslesen von Daikin Altherma

    27
    2
    0 Stimmen
    27 Beiträge
    497 Aufrufe
    B
    Konnte es noch nicht nachstellen zu warm für alles sry
  • Test Schlueter Fußbodenheizung OWD5 - Ditra Heat

    1
    1 Stimmen
    1 Beiträge
    25 Aufrufe
    Niemand hat geantwortet

519

Online

32.7k

Benutzer

82.5k

Themen

1.3m

Beiträge