Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Dummy-Mailserver für Kamera-Bewegungserkennung

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Dummy-Mailserver für Kamera-Bewegungserkennung

    This topic has been deleted. Only users with topic management privileges can see it.
    • N
      noox last edited by noox

      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 Reply Last reply Reply Quote 0
      • First post
        Last post

      Support us

      ioBroker
      Community Adapters
      Donate

      906
      Online

      31.9k
      Users

      80.2k
      Topics

      1.3m
      Posts

      1
      1
      119
      Loading More Posts
      • Oldest to Newest
      • Newest to Oldest
      • Most Votes
      Reply
      • Reply as topic
      Log in to reply
      Community
      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
      The ioBroker Community 2014-2023
      logo