Få offentliga IP ändra anmälan med RPi och Node.JS (4 / 5 steg)
Steg 4: Node.js ansökan (app.js)
Huvudprogramfilen kommer att vara:
Börja med att den kräver (nodemailer, nodemailer-smtp-transport, fs och de redan gjorda config.js )
Variabeldeklaration och kräver
var exec = require('child_process').exec;
var nodeMailer = require('nodemailer');
var smtpTransport = require('nodemailer-smtp-transport');
var serverOptions = require('./config.js').getServerOptions();
var mailOptions = require('./config.js').getMailOptions();
var intervalMinutes = require('./config.js').getServerInterval();
var fs = require('fs');
var sendServer = nodeMailer.createTransport(smtpTransport(serverOptions));
var logStream = fs.createWriteStream ("log.txt" {"flaggor": "a"});
var lastIP = "";
Funktionen ansvarar för att skicka mail
var sendMail = function(ipAddress) {
var msg= "---------------------------\n";
MSG += "SendMail:" + IP-adress;
mailOptions.text = IP-adress
mailOptions.html = "" + IP-adress + "";
sendServer.sendMail (mailOptions, funktion (fel, information) {
om (fel) {
MSG += "fel:" + fel;
logStream.write ("SendMail.Err:" + fel);
Console.log(Error);
} annat {
Console.log ("budskapet:" + info.response); MSG += info.response;
}
msg += "\n---------------------------\n";
logStream.write(msg);
})
};
Få den externa IP-adressen
var getExternalIp = function(errorCallback,successCallback) {
var barn = exec ("gräva + kort myip.opendns.com funktion (fel, stdout, stderr) {
om (fel! == null) {
errorCallback(error);
} annat {
var dt = nya Date();
var dtSt = dt.getFullYear() + "-" + ("0" + (dt.getMonth() + 1)).slice(-2) + "-" + ("0" + (dt.getDate() + 1)).slice(-2) + "" + ("0" + dt.getHours()).slice(-2) + ":" + ("0" + dt.getMinutes()).slice(-2) + ":" + ("0" + dt.getSeconds()).slice(-2)
logStream.write (dt + ":" + stdout);
om (stdout! = lastIP) {
var lastStream = fs.createWriteStream("last.txt");
lastStream.write(stdout);
lastIP = stdout
successCallback(stdout);
}
}
});
}
Fel motringning kallades för två
var errorFunction = function(err) {
logStream.write ("fel:" + fela);
}
Main Timer poll IP och skicka e-post om det ändrade
funktion startTimer() {
setInterval(function() {
getExternalIp (errorFunction, sendMail);
}, 60000 * intervalMinutes);
}
Varje lanseringen av programmet läser sist erhålls IP från en manual som skapade filen (last.txt)
fs.readFile ('. / last.txt', 'utf8', funktion (err, data) {
om (err) kasta fela;
annat {
var dt = nya Date();
var dtSt = dt.getFullYear() + "-" + ("0" + (dt.getMonth() + 1)).slice(-2) + "-" + ("0" + (dt.getDate())) .slice(-2) + "" + ("0" + dt.getHours()).slice(-2) + ":" + ("0" + dt.getMinutes()).slice(-2) + ":" + ("0" + dt.getSeconds()).slice(-2)
lastIP = data;
logStream.write("\n");
logStream.write("\n");
logStream.write("***\n");
logStream.write(dtSt);
logStream.write("\n");
Console.log ("startServer:lastIP:" + lastIP);
logStream.write ("START_SERVER: lastIP:" + lastIP + "\n");
getExternalIp (errorFunction, sendMail);
setTimeout (startTimer, 10000);
}
})