Weiter zum Inhalt

Tester

1.3k Themen 205.9k 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.

    92 3k
    92 Themen
    3k Beiträge
    T
    Em - das hört sich nicht richtig an. Jedoch ist im Adapter nix was eine Telegramnachricht versendet.
  • Test Adapter mihome-cloud

    Verschoben
    235
    4
    1 Stimmen
    235 Beiträge
    67k 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
    261k 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 Autodarts

    Gesperrt Verschoben
    50
    3
    1 Stimmen
    50 Beiträge
    5k 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
    36k 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
    66k 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
    61k 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
    392k Aufrufe
    M
    Sieht gut aus, funktioniert bei mir auch wieder.
  • Ultrahuman Ring Adapter

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    168 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
    648 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
    44k 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
    13k 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
    295 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.
  • Test Adapter ioBroker.imap latest/stable

    Verschoben
    414
    2
    4 Stimmen
    414 Beiträge
    142k Aufrufe
    L
    @maximal1981 Eine neue Mail sollte unter imap.0.xxx_de.email.email_01 und unter imap.0.xxx_de.json aktualisiert werden. Gehe nicht nach dem Timestamp da auch durch wechseln von unseen auf seen ein neuer Timestamp gesetzt wird. Gruß//Lucky
  • Test Adapter vbus-gw v0.3.x Latest

    Verschoben resol vbus serial-to-tcp
    6
    0 Stimmen
    6 Beiträge
    781 Aufrufe
    P
    0.3.2 (2026-03-04) - 2026H1 maintenance release (pdbjjens) Changed: node>=20, js-controller>=7.0.7 and admin>=7.7.22 required (pdbjjens) Fixed: update release-script (#149)
  • Test Adapter Remeha Home

    Verschoben
    13
    1 Stimmen
    13 Beiträge
    2k Aufrufe
    M
    Vielen dank für den Adapter. Wäre es möglich den Gasverbrauch auszulesen?
  • Test Adapter sma-em v1.3.x Latest

    Verschoben
    392
    2 Stimmen
    392 Beiträge
    159k Aufrufe
    P
    Ich habe soeben ioBroker.sma-em v1.3.1 latest zum Testen freigegeben. Es handelt sich um eine Wartungsfreigabe ohne neue Funktionen. Changelog siehe oben im ersten Eintrag dieses Threads. Wichtig: node>=20, js-controller>=7.0.7 and admin>=7.7.22 erforderlich. Aktualisieren Sie Ihren ioBroker mindestens auf diese Softwareversion, wenn Sie diesen Adapter verwenden möchten. Über Test-Feedback würde ich mich freuen.
  • Test Adapter MyVBus v0.6.x Latest

    Verschoben resol vbus
    382
    5
    0 Stimmen
    382 Beiträge
    135k Aufrufe
    P
    Ich habe soeben ioBroker.mybus v0.6.1 latest zum Testen freigegeben. Es handelt sich um eine Wartungsfreigabe ohne neue Funktionen. Bitte beachten: node>=20, js-controller>=7.0.7 and admin>=7.7.22 erforderlich Über Test-Feedback würde ich mich freuen.
  • Test Adapter ioBroker.n8n

    Verschoben
    42
    1
    7 Stimmen
    42 Beiträge
    7k Aufrufe
    OliverIOO
    Der Port alleine wird nicht reichen. Da n8n umfangreich auf webhooks basiert, muss man auch die umgebungsvariablen n8n_Host und n8n_path konfigurieren um die Node spezifischen URLs korrekt generieren zu lassen.
  • Test Adapter yahoo-stock-market Github

    Verschoben
    45
    4 Stimmen
    45 Beiträge
    9k Aufrufe
    B
    Ich fürchte, der Adapter wird nicht mehr gepflegt. Gibt es mittlerweile eigentlich eine Alternative?
  • Test Adapter Device-Watcher v2.x.x GitHub/Latest

    Verschoben
    2k
    1
    14 Stimmen
    2k Beiträge
    737k Aufrufe
    R
    Hallo. Hab' gerade festgestellt dass obwohl der Matter Adapter ausgewählt ist keine Matter Geräte in den Listen auftauchen. Auch in der Blackilst finde ich keine. Die Matterinstanz taucht in device-watcher.0.adapterAndInstances.listAllInstances auf. Device Watcher 2.15.5 Matter 0.5.6

375

Online

33.0k

Benutzer

83.6k

Themen

1.3m

Beiträge