<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Test Adapter für Blink Kameras entwickelt mit KI]]></title><description><![CDATA[<table class="table table-bordered table-striped">
<thead>
<tr>
<th style="text-align:left">Aktuelle Testversion</th>
<th style="text-align:center">0.0.6</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">Github Link</td>
<td style="text-align:center"><a href="https://github.com/Pischleuder1/ioBroker.blink" rel="nofollow ugc">https://github.com/Pischleuder1/ioBroker.blink</a></td>
</tr>
<tr>
<td style="text-align:left">Veröffentlichungsdatum</td>
<td style="text-align:center">28.04.2026</td>
</tr>
</tbody>
</table>
<p dir="auto">In den letzten Jahren gab es diverse BLINK Adapter für die Amazon Kameras, die jedoch nicht weiterentwickelt wurden und alle, mehr oder weniger, auf blinkpy basierten. Als Alternative funktionierten temporär python scripte mit blinkpy oder die Option über IFTTT.</p>
<p dir="auto">Zuletzt sind die meisten sicherlich am HAM Adapter oder Homeassistant hängen geblieben, um die Kameras zu steuern. Da Amazon jedoch wieder einmal an den API herumbastelt, funktioniert das tlw. nur noch suboptimal.<br />
Die Idee mit blinkpy zu arbeiten habe ich auf anraten des Forums verworfen und einen Adapter (<strong>unter Zuhilfenahme von KI</strong>) erstellt, um die gesamte Login - Logik im Adapter nachzubauen.</p>
<p dir="auto"><strong>Funktionen:</strong><br />
• Kameras und Sync-Modul werden ausgelesen und die entsprechenden States etc. angezeigt<br />
• Temperaturanzeige über die Kamera in Grad Celsius und Fahrenheit<br />
• Batterienanzeige der Kamera, umgerechnet in Volt<br />
• bei geringem Batteriestand wird / kann eine pushover oder telegram Info gesendet werden<br />
• Snapshot von Bildern über commands in einen state bzw. auch lokal in den Ordner /opt/iobroker/iobroker-data/blink<br />
• Snapshot als image_base64 mit Zeitstempel<br />
• automatische Erzeugung von Snapshots nach Zeit über admin Bereich<br />
• motion detect<br />
• aktuell, von Blink gespeicherte Videos werden in die entsprechenden Datenpunkte geschrieben oder per fetch geholt<br />
• Speicherort kann im Admin Bereich festgelegt werden</p>
<p dir="auto"><strong>Was funktioniert (noch) nicht:</strong><br />
• kein Echtzeit Video (in Arbeit)<br />
• Video Doorbell <s>(in Arbeit)</s> <strong>sollte mit 0.0.4 unterstützt werden</strong>, jedoch keine Temperaturanzeige, da diese offensichtlich bei der Doorbell nicht verbaut ist</p>
<p dir="auto"><strong>VIS-Widget</strong><br />
Zusätzlich habe ich ein VIS-Widget Generator erstellt, bei dem ihr lediglich die Kamera ID´s eingeben müsst und es wird daraus ein json erstellt, welches als widget in Vis importiert werden kann </p><section class="spoiler-wrapper"><button class="spoiler-control btn btn-default">Bild</button><section style="display:none" class="spoiler-content"><br />
<img src="/assets/uploads/files/1777056436258-widget.png" alt="Widget.png" class=" img-fluid img-markdown" /><br />
<a href="/assets/uploads/files/1777056413229-blink-vis-raster-widget-generator.html">blink-vis-raster-widget-generator.html</a><br />
</section></section><p></p>
<p dir="auto">1.) Widgetgenerator für Cameras ohne letzte Videodarstellung:</p>
<ul>
<li><a href="/assets/uploads/files/1777056620962-blink-vis-raster-widget-generator.html">blink-vis-raster-widget-generator.html</a></li>
</ul>
<p dir="auto">2.) Widgetgenerator mit Anzeige der zuletzt gespeicherten Videos. Dazu muss ein javascript in den Scripten erstellt werden mit dem Inhalt unter Code, <strong>im Code bitte die Kamera ID´s anpassen !</strong>:</p>
<ul>
<li><a href="/assets/uploads/files/1777124449055-blink-vis-raster-widget-generator-video-2.html">blink-vis-raster-widget-generator-video-2.html</a></li>
<li><section class="spoiler-wrapper"><button class="spoiler-control btn btn-default">Code</button><section style="display:none" class="spoiler-content"></section></section></li>
</ul>
<pre><code>// ioBroker JavaScript Adapter Script
// Blink-Videos aus blink.0.cameras.&lt;ID&gt;.video.file lesen,
// per ffmpeg konvertieren und direkt als Data-URL-States bereitstellen.
//
// Ergebnis:
// javascript.0.blinkVideos.&lt;ID&gt;.data_url       = MP4 / H.264 + AAC, gut für Safari
// javascript.0.blinkVideos.&lt;ID&gt;.data_url_webm  = WebM / VP8 + Opus, gut für Chrome/Edge
//
// Voraussetzung auf dem ioBroker-Server:
// sudo apt install ffmpeg

const fs = require('fs');
const path = require('path');
const { execFile } = require('child_process');

const BLINK_INSTANCE = 'blink.0';

// HIER deine Kamera-IDs eintragen/anpassen:
const CAMERA_IDS = [
  '548730',
  '1136145',
  '1136121',
  '1723473'
];

const OUT_PREFIX = 'blinkVideos';

const FFMPEG = '/usr/bin/ffmpeg';
const FFPROBE = '/usr/bin/ffprobe';

const CACHE_DIR = '/opt/iobroker/iobroker-data/blink-vis-cache';

// Limit pro fertiger Datei, bevor sie als Base64 in einen State geschrieben wird
const MAX_MB_MP4 = 50;
const MAX_MB_WEBM = 50;

// Warten, damit Blink/ioBroker die Datei sicher fertig geschrieben hat
const READ_DELAY_MS = 5000;

const timers = {};
const running = {};
const rerun = {};

function localId(camera, name) {
  return `${OUT_PREFIX}.${camera}.${name}`;
}

function ensureState(id, def, common) {
  try {
    createState(id, def, Object.assign({
      read: true,
      write: false
    }, common));
  } catch (e) {
    log(`createState ${id}: ${e.message || e}`, 'warn');
  }
}

function setLocal(camera, name, value) {
  try {
    setState(localId(camera, name), value, true);
  } catch (e) {
    log(`setState ${localId(camera, name)}: ${e.message || e}`, 'warn');
  }
}

function ensureCameraStates(camera) {
  ensureState(localId(camera, 'data_url'), '', {
    name: `Blink ${camera} MP4 Data URL`,
    type: 'string',
    role: 'text'
  });

  ensureState(localId(camera, 'data_url_webm'), '', {
    name: `Blink ${camera} WebM Data URL`,
    type: 'string',
    role: 'text'
  });

  ensureState(localId(camera, 'source_file'), '', {
    name: `Blink ${camera} Original video.file`,
    type: 'string',
    role: 'text'
  });

  ensureState(localId(camera, 'converted_file'), '', {
    name: `Blink ${camera} konvertierte MP4-Datei`,
    type: 'string',
    role: 'text'
  });

  ensureState(localId(camera, 'converted_file_webm'), '', {
    name: `Blink ${camera} konvertierte WebM-Datei`,
    type: 'string',
    role: 'text'
  });

  ensureState(localId(camera, 'original_size'), 0, {
    name: `Blink ${camera} Originalgröße`,
    type: 'number',
    role: 'value',
    unit: 'Bytes'
  });

  ensureState(localId(camera, 'converted_size'), 0, {
    name: `Blink ${camera} MP4 Größe`,
    type: 'number',
    role: 'value',
    unit: 'Bytes'
  });

  ensureState(localId(camera, 'converted_size_webm'), 0, {
    name: `Blink ${camera} WebM Größe`,
    type: 'number',
    role: 'value',
    unit: 'Bytes'
  });

  ensureState(localId(camera, 'data_url_length'), 0, {
    name: `Blink ${camera} MP4 Data URL Länge`,
    type: 'number',
    role: 'value'
  });

  ensureState(localId(camera, 'data_url_webm_length'), 0, {
    name: `Blink ${camera} WebM Data URL Länge`,
    type: 'number',
    role: 'value'
  });

  ensureState(localId(camera, 'updated'), 0, {
    name: `Blink ${camera} aktualisiert`,
    type: 'number',
    role: 'date'
  });

  ensureState(localId(camera, 'ffprobe'), '', {
    name: `Blink ${camera} ffprobe MP4`,
    type: 'string',
    role: 'text'
  });

  ensureState(localId(camera, 'ffprobe_webm'), '', {
    name: `Blink ${camera} ffprobe WebM`,
    type: 'string',
    role: 'text'
  });

  ensureState(localId(camera, 'status'), '', {
    name: `Blink ${camera} Status`,
    type: 'string',
    role: 'text'
  });

  ensureState(localId(camera, 'error'), '', {
    name: `Blink ${camera} Fehler`,
    type: 'string',
    role: 'text'
  });
}

function readStateValue(id) {
  const s = getState(id);
  return s &amp;&amp; s.val !== null &amp;&amp; s.val !== undefined ? String(s.val).trim() : '';
}

function finish(camera) {
  running[camera] = false;

  if (rerun[camera]) {
    rerun[camera] = false;
    scheduleConvert(camera, 3000);
  }
}

function fail(camera, message) {
  setLocal(camera, 'status', 'Fehler');
  setLocal(camera, 'error', message);
  log(`Blink ${camera}: ${message}`, 'warn');
  finish(camera);
}

function waitForStableFile(filePath, callback) {
  let lastSize = -1;
  let stableCount = 0;
  let tries = 0;

  const timer = setInterval(() =&gt; {
    tries++;

    fs.stat(filePath, (err, stat) =&gt; {
      if (err) {
        clearInterval(timer);
        callback(err);
        return;
      }

      if (stat.size &gt; 0 &amp;&amp; stat.size === lastSize) {
        stableCount++;
      } else {
        stableCount = 0;
        lastSize = stat.size;
      }

      if (stableCount &gt;= 2) {
        clearInterval(timer);
        callback(null, stat);
        return;
      }

      if (tries &gt;= 25) {
        clearInterval(timer);
        callback(new Error(`Dateigröße wurde nicht stabil: ${filePath}`));
      }
    });
  }, 1000);
}

function probeFile(camera, filePath, stateName, callback) {
  const args = [
    '-v', 'error',
    '-show_streams',
    '-show_format',
    filePath
  ];

  execFile(FFPROBE, args, { timeout: 30000 }, (err, stdout, stderr) =&gt; {
    const output = String(stdout || stderr || (err &amp;&amp; err.message) || '').slice(0, 12000);
    setLocal(camera, stateName, output);
    callback();
  });
}

function removeIfExists(filePath) {
  try {
    if (fs.existsSync(filePath)) {
      fs.unlinkSync(filePath);
    }
  } catch (e) {
    // ignorieren
  }
}

function transcodeToMp4(inputFile, outputFile, callback) {
  const tmpFile = `${outputFile}.tmp.mp4`;

  removeIfExists(tmpFile);

  const args = [
    '-hide_banner',
    '-nostdin',
    '-y',

    '-fflags', '+genpts',
    '-err_detect', 'ignore_err',

    '-i', inputFile,

    '-map', '0:v:0',
    '-map', '0:a:0?',

    '-c:v', 'libx264',
    '-preset', 'veryfast',
    '-crf', '23',
    '-pix_fmt', 'yuv420p',
    '-profile:v', 'baseline',
    '-level', '3.1',
    '-tag:v', 'avc1',
    '-vf', 'scale=trunc(iw/2)*2:trunc(ih/2)*2',

    '-c:a', 'aac',
    '-b:a', '128k',
    '-ac', '2',
    '-ar', '44100',

    '-movflags', '+faststart',
    '-f', 'mp4',

    tmpFile
  ];

  execFile(FFMPEG, args, { timeout: 120000 }, (err, stdout, stderr) =&gt; {
    if (err) {
      callback(new Error(`ffmpeg MP4 Fehler: ${stderr || err.message}`));
      return;
    }

    try {
      removeIfExists(outputFile);
      fs.renameSync(tmpFile, outputFile);
    } catch (e) {
      callback(new Error(`MP4 konnte nicht übernommen werden: ${e.message}`));
      return;
    }

    callback(null);
  });
}

function transcodeToWebm(inputFile, outputFile, callback) {
  const tmpFile = `${outputFile}.tmp.webm`;

  removeIfExists(tmpFile);

  const args = [
    '-hide_banner',
    '-nostdin',
    '-y',

    '-fflags', '+genpts',
    '-err_detect', 'ignore_err',

    '-i', inputFile,

    '-map', '0:v:0',
    '-map', '0:a:0?',

    // Chrome/Edge-kompatibles WebM
    '-c:v', 'libvpx',
    '-deadline', 'realtime',
    '-cpu-used', '5',
    '-b:v', '0',
    '-crf', '32',
    '-pix_fmt', 'yuv420p',
    '-vf', 'scale=trunc(iw/2)*2:trunc(ih/2)*2',

    // Audio behalten und nach Opus wandeln
    '-c:a', 'libopus',
    '-b:a', '96k',
    '-ac', '2',
    '-ar', '48000',

    '-f', 'webm',

    tmpFile
  ];

  execFile(FFMPEG, args, { timeout: 180000 }, (err, stdout, stderr) =&gt; {
    if (err) {
      callback(new Error(`ffmpeg WebM Fehler: ${stderr || err.message}`));
      return;
    }

    try {
      removeIfExists(outputFile);
      fs.renameSync(tmpFile, outputFile);
    } catch (e) {
      callback(new Error(`WebM konnte nicht übernommen werden: ${e.message}`));
      return;
    }

    callback(null);
  });
}

function writeDataUrl(camera, filePath, mimeType, dataState, lengthState, sizeState, maxMb, callback) {
  fs.stat(filePath, (statErr, stat) =&gt; {
    if (statErr) {
      callback(new Error(`Datei nicht lesbar: ${statErr.message}`));
      return;
    }

    const maxBytes = maxMb * 1024 * 1024;

    if (stat.size &gt; maxBytes) {
      callback(new Error(`Video zu groß für State: ${stat.size} Bytes, Limit ${maxBytes} Bytes`));
      return;
    }

    fs.readFile(filePath, (readErr, buf) =&gt; {
      if (readErr) {
        callback(new Error(`Video konnte nicht gelesen werden: ${readErr.message}`));
        return;
      }

      const dataUrl = `data:${mimeType};base64,${buf.toString('base64')}`;

      setLocal(camera, dataState, dataUrl);
      setLocal(camera, lengthState, dataUrl.length);
      setLocal(camera, sizeState, stat.size);

      callback(null);
    });
  });
}

function convertVideo(camera) {
  if (running[camera]) {
    rerun[camera] = true;
    return;
  }

  running[camera] = true;

  const sourceState = `${BLINK_INSTANCE}.cameras.${camera}.video.file`;
  const sourceFile = readStateValue(sourceState);

  if (!sourceFile) {
    fail(camera, `${sourceState} ist leer`);
    return;
  }

  setLocal(camera, 'source_file', sourceFile);
  setLocal(camera, 'data_url', '');
  setLocal(camera, 'data_url_webm', '');
  setLocal(camera, 'data_url_length', 0);
  setLocal(camera, 'data_url_webm_length', 0);
  setLocal(camera, 'error', '');
  setLocal(camera, 'status', 'Warte auf stabile Videodatei ...');

  setTimeout(() =&gt; {
    waitForStableFile(sourceFile, (stableErr, originalStat) =&gt; {
      if (stableErr) {
        fail(camera, stableErr.message);
        return;
      }

      setLocal(camera, 'original_size', originalStat.size);

      try {
        if (!fs.existsSync(CACHE_DIR)) {
          fs.mkdirSync(CACHE_DIR, { recursive: true });
        }
      } catch (e) {
        fail(camera, `Cache-Verzeichnis konnte nicht erstellt werden: ${e.message}`);
        return;
      }

      const mp4File = path.join(CACHE_DIR, `${camera}_browser.mp4`);
      const webmFile = path.join(CACHE_DIR, `${camera}_browser.webm`);

      setLocal(camera, 'converted_file', mp4File);
      setLocal(camera, 'converted_file_webm', webmFile);

      setLocal(camera, 'status', 'Konvertiere MP4 für Safari ...');

      transcodeToMp4(sourceFile, mp4File, (mp4Err) =&gt; {
        if (mp4Err) {
          fail(camera, mp4Err.message);
          return;
        }

        setLocal(camera, 'status', 'Prüfe MP4 ...');

        probeFile(camera, mp4File, 'ffprobe', () =&gt; {
          setLocal(camera, 'status', 'Schreibe MP4 Data URL ...');

          writeDataUrl(
            camera,
            mp4File,
            'video/mp4',
            'data_url',
            'data_url_length',
            'converted_size',
            MAX_MB_MP4,
            (mp4WriteErr) =&gt; {
              if (mp4WriteErr) {
                fail(camera, mp4WriteErr.message);
                return;
              }

              setLocal(camera, 'status', 'Konvertiere WebM für Chrome/Edge ...');

              transcodeToWebm(sourceFile, webmFile, (webmErr) =&gt; {
                if (webmErr) {
                  fail(camera, webmErr.message);
                  return;
                }

                setLocal(camera, 'status', 'Prüfe WebM ...');

                probeFile(camera, webmFile, 'ffprobe_webm', () =&gt; {
                  setLocal(camera, 'status', 'Schreibe WebM Data URL ...');

                  writeDataUrl(
                    camera,
                    webmFile,
                    'video/webm',
                    'data_url_webm',
                    'data_url_webm_length',
                    'converted_size_webm',
                    MAX_MB_WEBM,
                    (webmWriteErr) =&gt; {
                      if (webmWriteErr) {
                        fail(camera, webmWriteErr.message);
                        return;
                      }

                      setLocal(camera, 'updated', Date.now());
                      setLocal(camera, 'status', 'Fertig');
                      setLocal(camera, 'error', '');

                      log(`Blink ${camera}: MP4 + WebM Data-URLs aktualisiert`, 'info');
                      finish(camera);
                    }
                  );
                });
              });
            }
          );
        });
      });
    });
  }, READ_DELAY_MS);
}

function scheduleConvert(camera, delayMs) {
  if (timers[camera]) {
    clearTimeout(timers[camera]);
  }

  timers[camera] = setTimeout(() =&gt; {
    convertVideo(camera);
  }, delayMs || 3000);
}

CAMERA_IDS.forEach((camera) =&gt; {
  ensureCameraStates(camera);

  on({ id: `${BLINK_INSTANCE}.cameras.${camera}.video.file`, change: 'any' }, () =&gt; scheduleConvert(camera, 3000));
  on({ id: `${BLINK_INSTANCE}.cameras.${camera}.video.timestamp`, change: 'any' }, () =&gt; scheduleConvert(camera, 3000));
  on({ id: `${BLINK_INSTANCE}.cameras.${camera}.video.ready`, change: 'any' }, () =&gt; scheduleConvert(camera, 3000));

  // Einmal beim Scriptstart ausführen
  scheduleConvert(camera, 5000);
});
[/s]
</code></pre>
]]></description><link>https://forum.iobroker.net/topic/84386/test-adapter-für-blink-kameras-entwickelt-mit-ki</link><generator>RSS for Node</generator><lastBuildDate>Fri, 01 May 2026 16:43:19 GMT</lastBuildDate><atom:link href="https://forum.iobroker.net/topic/84386.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 24 Apr 2026 18:53:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Test Adapter für Blink Kameras entwickelt mit KI on Tue, 28 Apr 2026 20:13:54 GMT]]></title><description><![CDATA[<p dir="auto">freut mich</p>
]]></description><link>https://forum.iobroker.net/post/1336993</link><guid isPermaLink="true">https://forum.iobroker.net/post/1336993</guid><dc:creator><![CDATA[Pischleuder]]></dc:creator><pubDate>Tue, 28 Apr 2026 20:13:54 GMT</pubDate></item><item><title><![CDATA[Reply to Test Adapter für Blink Kameras entwickelt mit KI on Tue, 28 Apr 2026 20:12:58 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/ofbeqnpolkkl6mby5e13" aria-label="Profile: ofbeqnpolkkl6mby5e13">@<bdi>ofbeqnpolkkl6mby5e13</bdi></a> Done: Wunderbar! :-)</p>
<p dir="auto"><img src="/assets/uploads/files/1777407170344-cad187b7-c54a-405b-8049-65f5287e0187-image.jpeg" alt="cad187b7-c54a-405b-8049-65f5287e0187-image.jpeg" class=" img-fluid img-markdown" /></p>
]]></description><link>https://forum.iobroker.net/post/1336991</link><guid isPermaLink="true">https://forum.iobroker.net/post/1336991</guid><dc:creator><![CDATA[adarof]]></dc:creator><pubDate>Tue, 28 Apr 2026 20:12:58 GMT</pubDate></item><item><title><![CDATA[Reply to Test Adapter für Blink Kameras entwickelt mit KI on Tue, 28 Apr 2026 18:56:13 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/adarof" aria-label="Profile: adarof">@<bdi>adarof</bdi></a></p>
<p dir="auto">Installiere mal die 0.0.6 und prüfe dann noch mal, ob jetzt "not available" in den Datenpunkten steht.</p>
]]></description><link>https://forum.iobroker.net/post/1336966</link><guid isPermaLink="true">https://forum.iobroker.net/post/1336966</guid><dc:creator><![CDATA[oFbEQnpoLKKl6mbY5e13]]></dc:creator><pubDate>Tue, 28 Apr 2026 18:56:13 GMT</pubDate></item><item><title><![CDATA[Reply to Test Adapter für Blink Kameras entwickelt mit KI on Tue, 28 Apr 2026 18:45:37 GMT]]></title><description><![CDATA[<p dir="auto">die Version 0.0.6 ist online.</p>
]]></description><link>https://forum.iobroker.net/post/1336961</link><guid isPermaLink="true">https://forum.iobroker.net/post/1336961</guid><dc:creator><![CDATA[Pischleuder]]></dc:creator><pubDate>Tue, 28 Apr 2026 18:45:37 GMT</pubDate></item><item><title><![CDATA[Reply to Test Adapter für Blink Kameras entwickelt mit KI on Tue, 28 Apr 2026 18:07:29 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/pischleuder" aria-label="Profile: Pischleuder">@<bdi>Pischleuder</bdi></a></p>
<p dir="auto">Mach doch einfach eine 0.0.6 mit den Anpassungen von gestern. Ich bin sicher, dann löst sich das.</p>
]]></description><link>https://forum.iobroker.net/post/1336955</link><guid isPermaLink="true">https://forum.iobroker.net/post/1336955</guid><dc:creator><![CDATA[oFbEQnpoLKKl6mbY5e13]]></dc:creator><pubDate>Tue, 28 Apr 2026 18:07:29 GMT</pubDate></item><item><title><![CDATA[Reply to Test Adapter für Blink Kameras entwickelt mit KI on Tue, 28 Apr 2026 16:29:24 GMT]]></title><description><![CDATA[<p dir="auto">bei <a class="plugin-mentions-user plugin-mentions-a" href="/user/ofbeqnpolkkl6mby5e13" aria-label="Profile: ofbeqnpolkkl6mby5e13">@<bdi>ofbeqnpolkkl6mby5e13</bdi></a>  funktioniert es perfekt. Ich habe mir das Teil mal bei Amazon bestellt und werde testen - wenn es funktioniert, baue ich das in die 0.0.6 ein. Bist du als admin unterwegs, sieht bei dir aus den Logs so aus.</p>
]]></description><link>https://forum.iobroker.net/post/1336935</link><guid isPermaLink="true">https://forum.iobroker.net/post/1336935</guid><dc:creator><![CDATA[Pischleuder]]></dc:creator><pubDate>Tue, 28 Apr 2026 16:29:24 GMT</pubDate></item><item><title><![CDATA[Reply to Test Adapter für Blink Kameras entwickelt mit KI on Tue, 28 Apr 2026 15:21:19 GMT]]></title><description><![CDATA[<p dir="auto">Nein - beide main.js (das von 0.0.5 und auch Dein per DN geschicktes) schreiben da einfach "nichts" in Batterie_Text:<br />
Hier zurückgeswitched auf 0.0.5-main.js:</p>
<p dir="auto"><img src="/assets/uploads/files/1777389676104-8f73c234-de95-4c7a-b43d-1de810f07952-image.jpeg" alt="8f73c234-de95-4c7a-b43d-1de810f07952-image.jpeg" class=" img-fluid img-markdown" /></p>
]]></description><link>https://forum.iobroker.net/post/1336921</link><guid isPermaLink="true">https://forum.iobroker.net/post/1336921</guid><dc:creator><![CDATA[adarof]]></dc:creator><pubDate>Tue, 28 Apr 2026 15:21:19 GMT</pubDate></item><item><title><![CDATA[Reply to Test Adapter für Blink Kameras entwickelt mit KI on Mon, 27 Apr 2026 17:24:59 GMT]]></title><description><![CDATA[<p dir="auto">Na dann ist ja gut , was steht jetzt unter Batterie - im Optimalfall sollte dort "not available" stehen, wie bei der Doorbell</p>
]]></description><link>https://forum.iobroker.net/post/1336730</link><guid isPermaLink="true">https://forum.iobroker.net/post/1336730</guid><dc:creator><![CDATA[Pischleuder]]></dc:creator><pubDate>Mon, 27 Apr 2026 17:24:59 GMT</pubDate></item><item><title><![CDATA[Reply to Test Adapter für Blink Kameras entwickelt mit KI on Mon, 27 Apr 2026 17:15:40 GMT]]></title><description><![CDATA[<p dir="auto">Edit2: Okay 0.0.5 installiert und nun tut es.<br />
Vielleicht hat eine der anderen Änderungen geholfen und ich hatte nur noch die alte Version.</p>
<p dir="auto">Entschuldigung und vielen Dank!</p>
]]></description><link>https://forum.iobroker.net/post/1336726</link><guid isPermaLink="true">https://forum.iobroker.net/post/1336726</guid><dc:creator><![CDATA[adarof]]></dc:creator><pubDate>Mon, 27 Apr 2026 17:15:40 GMT</pubDate></item><item><title><![CDATA[Reply to Test Adapter für Blink Kameras entwickelt mit KI on Mon, 27 Apr 2026 17:03:02 GMT]]></title><description><![CDATA[<p dir="auto">wie gesagt der Auszug aus cat /tmp/blink_debug.log bringt mehr Klarheit</p>
]]></description><link>https://forum.iobroker.net/post/1336724</link><guid isPermaLink="true">https://forum.iobroker.net/post/1336724</guid><dc:creator><![CDATA[Pischleuder]]></dc:creator><pubDate>Mon, 27 Apr 2026 17:03:02 GMT</pubDate></item><item><title><![CDATA[Reply to Test Adapter für Blink Kameras entwickelt mit KI on Mon, 27 Apr 2026 17:02:36 GMT]]></title><description><![CDATA[<p dir="auto">Gerade mal geschaut:</p>
<pre><code>2026-04-27 19:00:25.871	warn	Befehl fehlgeschlagen (blink.0.cameras.578323.commands.motion_detect): HTTP 404: {"message":"Camera not found","error":null,"code":500}
</code></pre>
<p dir="auto">Sie wird kurz danach aber erfolgreich abgefragt:</p>
<pre><code>
blink.0
2026-04-27 19:01:22.384	silly	States user redis pmessage blink.0.cameras.*.commands.*/blink.0.cameras.578323.commands.fetch_video:{"val":false,"ack":true,"ts":1777309282382,"q":0,"from":"system.adapter.blink.0","user":"system.user.admin","lc":1777057429715}

blink.0
2026-04-27 19:01:22.339	silly	States user redis pmessage blink.0.cameras.*.commands.*/blink.0.cameras.578323.commands.motion_detect:{"val":false,"ack":true,"ts":1777309282339,"q":0,"from":"system.adapter.blink.0","user":"system.user.admin","lc":1777309282339}
</code></pre>
<p dir="auto">Wie Ihr oben seht ist <em>eigentlich</em> die Kamera-Id die richtige (ist auch an - und ich hab bild via App)</p>
<p dir="auto">Gruss -</p>
]]></description><link>https://forum.iobroker.net/post/1336723</link><guid isPermaLink="true">https://forum.iobroker.net/post/1336723</guid><dc:creator><![CDATA[adarof]]></dc:creator><pubDate>Mon, 27 Apr 2026 17:02:36 GMT</pubDate></item><item><title><![CDATA[Reply to Test Adapter für Blink Kameras entwickelt mit KI on Mon, 27 Apr 2026 17:01:21 GMT]]></title><description><![CDATA[<p dir="auto">Batterie geht nicht, weil per Strom geladen wird, man könnte das lediglich so umbauen, dass dort "extern" steht</p>
]]></description><link>https://forum.iobroker.net/post/1336722</link><guid isPermaLink="true">https://forum.iobroker.net/post/1336722</guid><dc:creator><![CDATA[Pischleuder]]></dc:creator><pubDate>Mon, 27 Apr 2026 17:01:21 GMT</pubDate></item><item><title><![CDATA[Reply to Test Adapter für Blink Kameras entwickelt mit KI on Mon, 27 Apr 2026 17:01:22 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/adarof" aria-label="Profile: adarof">@<bdi>adarof</bdi></a></p>
<p dir="auto">Okay, die habe ich nicht. Batterie war natürlich dumm von mir.</p>
<p dir="auto">Edit:<br />
Das ist die Gleiche nur in Weiß.</p>
]]></description><link>https://forum.iobroker.net/post/1336721</link><guid isPermaLink="true">https://forum.iobroker.net/post/1336721</guid><dc:creator><![CDATA[oFbEQnpoLKKl6mbY5e13]]></dc:creator><pubDate>Mon, 27 Apr 2026 17:01:22 GMT</pubDate></item><item><title><![CDATA[Reply to Test Adapter für Blink Kameras entwickelt mit KI on Mon, 27 Apr 2026 16:58:14 GMT]]></title><description><![CDATA[<blockquote>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/ofbeqnpolkkl6mby5e13" aria-label="Profile: oFbEQnpoLKKl6mbY5e13">@<bdi>oFbEQnpoLKKl6mbY5e13</bdi></a> <a href="/post/1336712">sagte</a>:</p>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/adarof" aria-label="Profile: adarof">@<bdi>adarof</bdi></a> <a class="plugin-mentions-user plugin-mentions-a" href="/user/pischleuder" aria-label="Profile: pischleuder">@<bdi>pischleuder</bdi></a></p>
<p dir="auto">Geht bei mir. Welche ist das genau?</p>
<p dir="auto">Batterie und Temperatur fehlt aber tatsächlich.</p>
<p dir="auto">Die hier?:<br />
<a href="https://amzn.eu/d/07xKybA0" rel="nofollow ugc">https://amzn.eu/d/07xKybA0</a></p>
</blockquote>
<p dir="auto">Nicht ganz - ich hab das ältere(?) (eckigere) Modell:<br />
<a href="https://www.amazon.de/dp/B09N6P1555" rel="nofollow ugc">https://www.amazon.de/dp/B09N6P1555</a>?</p>
<p dir="auto">Batterie hat das Ding nicht, wird per USB bestromt; Okay und Temp dann vermutlich auch nicht (sehe ich nicht in der App)</p>
<p dir="auto">Firmware laut App 9.105</p>
<p dir="auto">Hilft das irgendwie?</p>
<p dir="auto">Gruss -</p>
]]></description><link>https://forum.iobroker.net/post/1336720</link><guid isPermaLink="true">https://forum.iobroker.net/post/1336720</guid><dc:creator><![CDATA[adarof]]></dc:creator><pubDate>Mon, 27 Apr 2026 16:58:14 GMT</pubDate></item><item><title><![CDATA[Reply to Test Adapter für Blink Kameras entwickelt mit KI on Mon, 27 Apr 2026 16:55:25 GMT]]></title><description><![CDATA[<p dir="auto">Wie gesagt, Bewegungserkennung An/Aus geht hier.</p>
]]></description><link>https://forum.iobroker.net/post/1336716</link><guid isPermaLink="true">https://forum.iobroker.net/post/1336716</guid><dc:creator><![CDATA[oFbEQnpoLKKl6mbY5e13]]></dc:creator><pubDate>Mon, 27 Apr 2026 16:55:25 GMT</pubDate></item><item><title><![CDATA[Reply to Test Adapter für Blink Kameras entwickelt mit KI on Mon, 27 Apr 2026 16:54:22 GMT]]></title><description><![CDATA[<p dir="auto">Temperaturanzeige hat die BlinkMini nicht. Die PanTilt ist eine Mini mit motorisierter Halterung.</p>
]]></description><link>https://forum.iobroker.net/post/1336714</link><guid isPermaLink="true">https://forum.iobroker.net/post/1336714</guid><dc:creator><![CDATA[Pischleuder]]></dc:creator><pubDate>Mon, 27 Apr 2026 16:54:22 GMT</pubDate></item><item><title><![CDATA[Reply to Test Adapter für Blink Kameras entwickelt mit KI on Mon, 27 Apr 2026 16:54:11 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/adarof" aria-label="Profile: adarof">@<bdi>adarof</bdi></a> <a class="plugin-mentions-user plugin-mentions-a" href="/user/pischleuder" aria-label="Profile: pischleuder">@<bdi>pischleuder</bdi></a></p>
<p dir="auto">Geht bei mir. Welche ist das genau?</p>
<p dir="auto">Batterie und Temperatur fehlt aber tatsächlich.</p>
<p dir="auto">Die hier?:<br />
<a href="https://amzn.eu/d/07xKybA0" rel="nofollow ugc">https://amzn.eu/d/07xKybA0</a></p>
]]></description><link>https://forum.iobroker.net/post/1336712</link><guid isPermaLink="true">https://forum.iobroker.net/post/1336712</guid><dc:creator><![CDATA[oFbEQnpoLKKl6mbY5e13]]></dc:creator><pubDate>Mon, 27 Apr 2026 16:54:11 GMT</pubDate></item><item><title><![CDATA[Reply to Test Adapter für Blink Kameras entwickelt mit KI on Mon, 27 Apr 2026 16:48:40 GMT]]></title><description><![CDATA[<p dir="auto">Gut möglich, diese Kamera habe ich nicht hier. Steht dazu irgendetwas im /tmp/blink_debug.log</p>
]]></description><link>https://forum.iobroker.net/post/1336708</link><guid isPermaLink="true">https://forum.iobroker.net/post/1336708</guid><dc:creator><![CDATA[Pischleuder]]></dc:creator><pubDate>Mon, 27 Apr 2026 16:48:40 GMT</pubDate></item><item><title><![CDATA[Reply to Test Adapter für Blink Kameras entwickelt mit KI on Mon, 27 Apr 2026 16:44:06 GMT]]></title><description><![CDATA[<p dir="auto">Hallo<br />
Kann es sein, dass die PanTiltKamera ähnlich wie die Doorbell noch nicht tut?<br />
Ich hab das commands.motion_detect (ohne Bestätigung) auf true gesetzt - und es bleibt (unbestätigt) rot für viele Sekunden um dann wieder schwarz false zu werden. Gleiches auch andersrum.<br />
Im Motion_detect_enabled ändert sich auch nicht.<br />
Im gegensatz zu den normalen Kameras wird auch noch keine Temperatur angezeigt.</p>
<p dir="auto">Kann ich noch informationen beisteuern? Natürlich auch gern testen, wenn ich was ausprobieren kann!</p>
<p dir="auto">Gruss -</p>
<p dir="auto"><img src="/assets/uploads/files/1777308161185-6d9fa377-42ea-42be-84ad-2d747e2ff995-image.jpeg" alt="6d9fa377-42ea-42be-84ad-2d747e2ff995-image.jpeg" class=" img-fluid img-markdown" /></p>
]]></description><link>https://forum.iobroker.net/post/1336706</link><guid isPermaLink="true">https://forum.iobroker.net/post/1336706</guid><dc:creator><![CDATA[adarof]]></dc:creator><pubDate>Mon, 27 Apr 2026 16:44:06 GMT</pubDate></item><item><title><![CDATA[Reply to Test Adapter für Blink Kameras entwickelt mit KI on Mon, 27 Apr 2026 16:04:43 GMT]]></title><description><![CDATA[<p dir="auto">Update auf 0.0.5 - Änderungen:</p>
<ul>
<li>Admin Menü verändert</li>
<li>Log in /tmp/blink_debug.log lässt sich ein /. ausschalten</li>
</ul>
]]></description><link>https://forum.iobroker.net/post/1336695</link><guid isPermaLink="true">https://forum.iobroker.net/post/1336695</guid><dc:creator><![CDATA[Pischleuder]]></dc:creator><pubDate>Mon, 27 Apr 2026 16:04:43 GMT</pubDate></item><item><title><![CDATA[Reply to Test Adapter für Blink Kameras entwickelt mit KI on Sun, 26 Apr 2026 10:31:35 GMT]]></title><description><![CDATA[<p dir="auto">Update auf 0.0.4 - Änderungen:</p>
<ul>
<li>Test-Implementierung der Amazon Video Doorbell</li>
<li>Log-Datei wird bei einem Adapter Restart neu angelegt und nicht an das bestehende angehängt</li>
</ul>
]]></description><link>https://forum.iobroker.net/post/1336442</link><guid isPermaLink="true">https://forum.iobroker.net/post/1336442</guid><dc:creator><![CDATA[Pischleuder]]></dc:creator><pubDate>Sun, 26 Apr 2026 10:31:35 GMT</pubDate></item><item><title><![CDATA[Reply to Test Adapter für Blink Kameras entwickelt mit KI on Sun, 26 Apr 2026 04:56:19 GMT]]></title><description><![CDATA[<p dir="auto">Moin, mir ist aufgefallen, dass das Log unter /tmp/blink_debug.log immer größer wurde. Im Git habe ich das so geändert, dass bei jedem Adapter Neustart ein frisches Log angelegt wird. Also bitte noch einmal neu laden.</p>
]]></description><link>https://forum.iobroker.net/post/1336382</link><guid isPermaLink="true">https://forum.iobroker.net/post/1336382</guid><dc:creator><![CDATA[Pischleuder]]></dc:creator><pubDate>Sun, 26 Apr 2026 04:56:19 GMT</pubDate></item><item><title><![CDATA[Reply to Test Adapter für Blink Kameras entwickelt mit KI on Sat, 25 Apr 2026 21:16:09 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/sigi234" aria-label="Profile: sigi234">@<bdi>sigi234</bdi></a></p>
<p dir="auto">Wenn man bei Blink die Zweifaktor-Authentifizierung aktiviert hat, erhält man eine Zufallszahl per SMS. Das ist die PIN.</p>
]]></description><link>https://forum.iobroker.net/post/1336377</link><guid isPermaLink="true">https://forum.iobroker.net/post/1336377</guid><dc:creator><![CDATA[oFbEQnpoLKKl6mbY5e13]]></dc:creator><pubDate>Sat, 25 Apr 2026 21:16:09 GMT</pubDate></item><item><title><![CDATA[Reply to Test Adapter für Blink Kameras entwickelt mit KI on Sat, 25 Apr 2026 20:34:38 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/pischleuder" aria-label="Profile: Pischleuder">@<bdi>Pischleuder</bdi></a><br />
Was ist eigentlich der Pin?</p>
]]></description><link>https://forum.iobroker.net/post/1336375</link><guid isPermaLink="true">https://forum.iobroker.net/post/1336375</guid><dc:creator><![CDATA[sigi234]]></dc:creator><pubDate>Sat, 25 Apr 2026 20:34:38 GMT</pubDate></item></channel></rss>