Weiter zum Inhalt

Tester

1.2k Themen 203.8k Beiträge

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

NEWS

Unterkategorien


  • In dieser Kategorie werden Adapter Versionen, die noch nicht in offiziellen Repos sind, vorgestellt.

    62 2k
    62 Themen
    2k Beiträge
    skvarelS
    Mit der MotionEye 0.44.0 bekomme ich auch Probelme motioneye.1 2026-07-01 09:00:55.581 info MotionEye adapter ready motioneye.1 2026-07-01 09:00:55.577 warn MotionEye not reachable at startup: unauthorized motioneye.1 2026-07-01 09:00:55.560 warn No enabled cameras configured — add cameras on the Cameras tab motioneye.1 2026-07-01 09:00:55.560 info Webhook server listening on 0.0.0.0:8090 motioneye.1 2026-07-01 09:00:55.581 info MotionEye adapter ready Wir testen gerade eine Alpha-Version und passen den Login für die >= 0.44.0 an.
  • Test Adapter PV Notifications GitHub/Latest

    Verschoben
    1
    3
    0 Stimmen
    1 Beiträge
    99 Aufrufe
    Niemand hat geantwortet
  • Test Myenergi Adapter

    Verschoben
    99
    4
    0 Stimmen
    99 Beiträge
    20k Aufrufe
    oswibzO
    HAllo zusammen - ich versuche auch gerade die EDDI in BOOST mode zu bringen - ich kriege es aber nicht hin - hat jemand eine Idee wie man das machen könnte? gerne per Blockly oder mit Javascript.
  • Test Adapter OpenLigaDB

    Verschoben adapter openligadb test
    716
    1
    6 Stimmen
    716 Beiträge
    197k Aufrufe
    OliverIOO
    @Meister-Mopper @chronos81 Wenn ihr mir einen Zeitpunkt habt bzw. noch besser ein log vom openligadb adapter im debug modus, kann ich da mal nachschauen. wahrscheinlich ist es ein problem wenn der openligadb server nicht zur verfügung steht oder eine andere fehlermeldung produziert, das die nicht ordentlich abgefangen wird. wenn das ein paar mal hintereinander passiert, dann stoppt iobroker den adapter. habe ich aber in den letzten paar tagen in meinen logs nichts finden können.
  • Test Adapter powerfox2 v0.0.x GitHub/Latest

    Verschoben energie powerfox strom stromzähler
    154
    0 Stimmen
    154 Beiträge
    32k Aufrufe
    A
    Hallo zusammen, brauche jemanden der einen Flow im Einsatz hat und mir ein paar Daten zur Verfügung stellen kann. Den Teil xxxxxxxxx mit deiner ID ersetzen (solltest du entweder in deiner Powerfox App irgendwo sehen oder in den Einstellungen des Powerfox2 Adapters). A: die JSON Ausgabe von https://backend.powerfox.energy/api/2.0/my/xxxxxxxxx/report B: die JSON Ausgabe von https://backend.powerfox.energy/api/2.0/my/xxxxxxxxx/report?day=0&month=0&year=0&fromhour=0 C: die JSON Ausgabe von https://backend.powerfox.energy/api/2.0/my/all/devices D: die JSON Ausgabe von https://backend.powerfox.energy/api/2.0/my/main/current (wenn der was gasmäßiges liefert wäre das mein Favorit, da schon im Code verwendet) Dann kann ich mal versuchen ob ich die FLOW Werte in den Adapter bekomme. Gruß AxLED
  • Betatest Bright Sky v1.1.x

    Verschoben
    209
    10 Stimmen
    209 Beiträge
    26k Aufrufe
    T
    1.1.0 (2026-03-23) (ticaki) Fixed: DWD station ID was incorrectly logged as WMO station ID fixes #91 (cavernerg) Added nested hourly forecast data under daily.XX.hourly.YY (0 = disabled) (cavernerg) Added configurable number of forecast days (forecastDays, default 7) (cavernerg) Admin UI restructured into labeled sections (Location, Forecast, Current Weather, Radar)
  • Frigate Adapter für ioBroker

    Verschoben
    375
    1
    2 Stimmen
    375 Beiträge
    128k Aufrufe
    crunchipC
    hab es heute nochmal mit der v2.1.3 versucht, trotzdem 100%js-controller Auslastung, da laut Instanz kein docker mehr erkannt wird. Issue ist bereits erstellt
  • Test Adapter apsystems-ez1 v0.2.4 GitHub/Latest

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    212 Aufrufe
    black.falcon87B
    @Thomas-Braun sagte in Test Adapter apsystems-ez1 v0.2.4 GitHub/Latest: Da würde ich eher empfehlen, beim Admin ein Issue zu eröffen und anzuregen, dass die Sortierung nach den Adapternamen erfolgen soll und nicht nach den Beschreibungen. @skvarel sagte in Test Adapter apsystems-ez1 v0.2.4 GitHub/Latest: Das fällt dann auch nur auf, wenn Entwickler unterschiedliche Benennungen bei "name" und "titleLang" nutzen. Oh das wusste ich nicht. Danke für die Info. @tt-zhi Ansonsten läuft der Adapter bisher ganz normal und empfängt fehlerfrei Daten :-) [image: 1774173915843-87c7701b-5c6e-4309-9e83-610774633145-image-resized.png]
  • Test Adapter mihome-cloud

    Verschoben
    235
    4
    1 Stimmen
    235 Beiträge
    60k Aufrufe
    bahnuhrB
    @tombox Guten Morgen, bekommt man mit dem Adapter irgendwie die map vom Staubsaugerroboter raus. Erkannt wurde dieser und es wurden zahlreiche DP erstellt. Geht dies? Wenn ja, wie müsste man da vorgehen ? mfg Dieter
  • Test eCharts Adapter

    Verschoben echarts
    666
    1
    10 Stimmen
    666 Beiträge
    232k Aufrufe
    Siggi0904S
    Hallo zusammen, ich steige gerade neu in den echarts-Adapter ein. Wenn ich die vorhandenen Daten aus dem SQL-Adpater nach Räume sortieren lasse, sortiert der Adapter alles unter andere ein. Kann der Adapter auch die Räume des übergeordneten Raumes aus dem Gruppen-Ordner verwenden? Oder wäre das umsetzbar als neues Feature? Bei mir sieht ein DeConz-Datenpunkt z.B. so aus: [image: 1774122293023-1a87b494-090a-49a0-800d-462e16ced1db-grafik.png] Da sieht man die Zuordnung auf die Gruppe, aber nicht auf jeden Datenpunkt. Danke im Voraus.
  • Test Adapter LG ThinQ

    Verschoben
    936
    2
    2 Stimmen
    936 Beiträge
    364k Aufrufe
    L
    @Thomas-Diederichs Da könnte man mal nachschauen wie die APP die Daten berechnet. Dazu musst du aber erstmal Daten bekommen. Das Thema hatten wir hier im Thread schon einmal, finde aber die Posts nicht. Die APP fragt beim öffnen den aktuellen Monat ab. Beispiel: täglich 2026.01.01 2026.01.31 Versuche auch mal monatlich oder jährlich Gruß//Lucky
  • Test Adapter Autodarts

    Gesperrt Verschoben
    50
    3
    1 Stimmen
    50 Beiträge
    3k Aufrufe
    HomoranH
    @skvarel sagte in Test Adapter Autodarts: Auch wieder in dieser Rubrik, richtig? ja! und ich mach hier zu
  • Test Adapter frontier_silicon v0.5.x Latest

    Verschoben
    138
    2 Stimmen
    138 Beiträge
    33k Aufrufe
    ESP8266E
    Danke für die Mühe. Werde die Tage testen. 👍
  • Test Adapter EnOcean v0.8.x

    Verschoben enocean
    255
    1
    1 Stimmen
    255 Beiträge
    61k Aufrufe
    D
    Werd ich testen.. hab keine Etagen und alles offen... evt kann der Stick das schaffen. Bis dato werkelt ein homee mit Enocean Cube... aber der nervt
  • TESTER: Neuer Adapter Webuntis

    Verschoben
    200
    4 Stimmen
    200 Beiträge
    54k 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 Damit vis das Bild kennt bzw. lesen kann, ist ein Javascript notwendig, dass die Datei in vis.0 schreibt: var fs = require('fs'); const picture= fs.readFileSync('/opt/iobroker/iobroker-data/files/vis.0/main/img/webuntis-screenshot.png'); //liest linux-datei-system writeFile('vis.0','/main/img/webuntis-screenshot.png', picture, function (error) { }); //schreibt in iobroker system Blockly: <xml xmlns="https://developers.google.com/blockly/xml"> <block type="procedures_defcustomnoreturn" id="FuE%6{wZt7R{vL]0sp=:" x="-37" y="38"> <mutation statements="false"></mutation> <field name="NAME">etwas tun</field> <field name="SCRIPT">dmFyIGZzID0gcmVxdWlyZSgnZnMnKTsgDQogDQogY29uc3QgcGljdHVyZT0gZnMucmVhZEZpbGVTeW5jKCcvb3B0L2lvYnJva2VyL2lvYnJva2VyLWRhdGEvZmlsZXMvdmlzLjAvbWFpbi9pbWcvd2VidW50aXMtc2NyZWVuc2hvdC5wbmcnKTsgLy9saWVzdCBsaW51eC1kYXRlaS1zeXN0ZW0NCndyaXRlRmlsZSgndmlzLjAnLCcvbWFpbi9pbWcvd2VidW50aXMtc2NyZWVuc2hvdC5wbmcnLCBwaWN0dXJlLCBmdW5jdGlvbiAoZXJyb3IpIHsgfSk7ICAgLy9zY2hyZWlidCBpbiBpb2Jyb2tlciBzeXN0ZW0=</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> </block> <block type="schedule" id="9DD.a-@UNvoRp8i:Yode" x="63" y="113"> <field name="SCHEDULE">{"time":{"start":"06:00","end":"23:00","mode":"minutes","interval":61},"period":{"days":1}}</field> <statement name="STATEMENT"> <block type="procedures_callcustomnoreturn" id="esc^G_dpBegT:H7{mULt"> <mutation name="etwas tun"></mutation> </block> </statement> </block> </xml>
  • Test ViessmannAPI v2.0.0

    Verschoben
    827
    2
    5 Stimmen
    827 Beiträge
    344k Aufrufe
    M
    Sieht gut aus, funktioniert bei mir auch wieder.
  • Ultrahuman Ring Adapter

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    150 Aufrufe
    T
    Danke fürs verschieben @samson71 👍🏻 ich hatte keine Rechte hier direkt einen Beitrag zu erstellen.
  • Test Adapter Solaredge 1.2.x

    Verschoben
    16
    0 Stimmen
    16 Beiträge
    568 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

    Verschoben
    154
    2 Stimmen
    154 Beiträge
    40k 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 Porsche v0.0.x

    Verschoben
    95
    4
    0 Stimmen
    95 Beiträge
    12k Aufrufe
    G
    @tombox Hallo, seit heute habe ich kein Captcha mehr! LOG: "Captcha required but could not extract image" Haben die das LogIn wieder geändert? Lässt sich ein LogIn mit Passkey verwirklichen? LG Thomas
  • Neuer Adapter hagelschutz-vkf

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    259 Aufrufe
    mcm1957M
    @ChrisPrefect sagte in Neuer Adapter hagelschutz-vkf: Lustig, ich hatte schon den Prompt vorbereitet um mit Claude Code auf dem ioBroker eine Extension für diese Hagel-API programmieren zu lassen. Gut, wenn das nun jemand anders maintained :-) Merci! Wenn du planst einen Adapter mittesl AI programmieren zu lassen dann geht bitte UNBEDINGT so vor: Grundgerüst des Adapters mittels @iobroker/create-adapter anlegen DANN erst die AI die entsprechenden "Anpassungen", sprich die Funktionen erstellen lassen. Die bisherige Erfahrung zeigt, dass die AIs nicht in der Lage sind einen Adapter vollständig inclusive der entsprechenden Infrastruktur wie z.B. zwingend erforderliches Testing anzulegen. Dies führt dann bei der Aufnahme in die Repos (sofern gewünscht) zu zusätzlichem Aufwand.

385

Online

33.0k

Benutzer

83.3k

Themen

1.3m

Beiträge