Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Dummy-Mailserver für Kamera-Bewegungserkennung

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.5k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    993

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

Dummy-Mailserver für Kamera-Bewegungserkennung

Geplant Angeheftet Gesperrt Verschoben JavaScript
1 Beiträge 1 Kommentatoren 189 Aufrufe 2 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • N Offline
    N Offline
    noox
    schrieb am zuletzt editiert von noox
    #1

    In der Facebook-Gruppe ist eine Frage aufgetaucht, wie man die die Bewegungserkennung von Reolink-Kameras nach ioBroker bringt. Ich hab dazu einen Dummy-Mailserver im Einsatz. Die Reolink Kameras können nämlich bei Bewegungserkennung eine Mail versenden.

    Achtung: Es ist TypeScript!

    In meinem originalen Scripts ist noch etwas mehr drinnen - ich hab das rausgelöscht und die Einstellungen geändert.

    // Doku über smtp-server:
    // https://nodemailer.com/extras/smtp-server/
    
    const logOn = true;
    const smtpPort = 26;
    const emailUserName = 'mail@myhome.com';
    const emailPassword = 'abc123';
    const sessionUserName = 'myname';
    
    const smptServer = require("smtp-server").SMTPServer;
    
    const server = new smptServer({
        size: 4096, // allow messages up to 4 kb
        onConnect(session: any, callback: any) {
            if(logOn) log(`onConnect Remote Address: ${session.remoteAddress}`);
            // keine externen Connections erlauben:
            //if (!session.remoteAddress.startsWith("192.168.1.")) {
            //    return callback(new Error("No remote connections allowed!"));
            //}
            return callback(); // Accept the connection
        },    
        onAuth(auth: any, session: any, callback: any) {
            if(logOn) log(`onAuth username: ${auth.username}, password: ${auth.password}`);
            if (auth.username !== emailUserName || auth.password !== emailPassword) {
                return callback(new Error("Invalid username or password"));
            }
            callback(null, { user: sessionUserName}); 
        }, 
        maxClients: 5,
        closeTimeout: 0,
        onData: receiveMail
    });
    
    server.on("error", (err: any) => {
      log(`on Error: ${err.message}`, 'error');
    });
    
    server.listen(smtpPort, null, () => {
        if(logOn) log(`Started listening on port ${smtpPort}.`);
    });
    
    
    onStop ((callback: any) => {
        server.close(() => {
            if(logOn) log(`SMTP server closed`);
        });
        callback();
    });
    
    async function receiveMail(stream: any, session: any, callback: any) {
        //stream.pipe(process.stdout); // print message to console
    
        if(logOn) log(`Received: ${JSON.stringify(session)}`);
        const mailFrom = session?.envelope?.mailFrom?.address;
        const mailTo = session?.envelope?.rcptTo[0]?.address;
        const remoteAddress = session.remoteAddress;
    
        // z.B. State setzen:
        if(mailTo == 'kamera1@myhome.com' || mailTo == 'kamera2@myhome.com') {
            setState('0_userdata.0.kamera.bewegung', 1, true);
        }
    
        // oder abhängig von Kamera:
        if(mailTo == 'kamera1@myhome.com') {
            setState('0_userdata.0.kamera.bewegung', 'kamera1', true);
        }  else if (mailTo == 'kamera2@myhome.com') {
            setState('0_userdata.0.kamera.bewegung', 'kamera2', true);
        }
    
    
    
        //var chunks = [];
        stream.on('data', (chunk: any) => {
            // const chungJson = JSON.stringify(chunk);
            // if(logOn) log(`Received: ${chungJson}`);
            // chunks.push(chunk);
        });    
        // stream.on('end', () => {
        //     if(logOn) log(`Stream End`);
        //     let buffer = Buffer.concat(chunks);
        //     if(logOn) log(buffer.toString());
        // });
        stream.on('end', callback)
        //callback(null, "Message queued");
    }
    
    if(logOn) log('Started');
    

    Reolink Settings:
    8a3090ef-1632-497b-88c4-652e7f763a89-image.png

    192.168.1.10 ist bei mir die IP der ioBroker-Installation wo also auch der Dummy-Mailserver läufgt.

    Dort wo // z.B. State setzen: steht, gelangt das Script, wenn eine Bewegung erkannt wird. Hier kann man also z.B. einen State setzten etc.

    1 Antwort Letzte Antwort
    0
    Antworten
    • In einem neuen Thema antworten
    Anmelden zum Antworten
    • Älteste zuerst
    • Neuste zuerst
    • Meiste Stimmen


    Support us

    ioBroker
    Community Adapters
    Donate

    699

    Online

    32.6k

    Benutzer

    82.3k

    Themen

    1.3m

    Beiträge
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
    ioBroker Community 2014-2025
    logo
    • Anmelden

    • Du hast noch kein Konto? Registrieren

    • Anmelden oder registrieren, um zu suchen
    • Erster Beitrag
      Letzter Beitrag
    0
    • Home
    • Aktuell
    • Tags
    • Ungelesen 0
    • Kategorien
    • Unreplied
    • Beliebt
    • GitHub
    • Docu
    • Hilfe