Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var request = require("request");
- var settings = require(__dirname+'/../../settings.js');
- if (!settings.adapters.sprit || !settings.adapters.sprit.enabled) {
- process.exit();
- }
- var logger = require(__dirname+'/../../logger.js'),
- io = require('socket.io-client');
- logger.info("adapter sprit connecting to ccu.io");
- if (settings.ioListenPort) {
- var socket = io.connect("127.0.0.1", {
- port: settings.ioListenPort
- });
- } else if (settings.ioListenPortSsl) {
- var socket = io.connect("127.0.0.1", {
- port: settings.ioListenPortSsl,
- secure: true
- });
- } else {
- process.exit();
- }
- var adapterSettings = settings.adapters.sprit.settings;
- var firstId = settings.adapters.sprit.firstId;
- var id = firstId;
- logger.info("adapter sprit inserting objects");
- socket.emit("setObject", id, {
- _persistent: true,
- Name: "Spritpreise Super E5",
- TypeName: "DEVICE",
- Interface: "SPRIT",
- Address: "SPRIT.SUPERE5",
- HssType: "SPRIT",
- Channels: [
- id + 1,
- id + 8,
- id + 15
- ]
- });
- id += 1;
- socket.emit("setObject", id, {
- _persistent: true,
- Name: "Super E5 Platz 1",
- TypeName: "CHANNEL",
- Address: "SPRIT.SUPERE5:1",
- HssType: "SPRIT",
- Parent: firstId,
- ChnLabel: "SPRIT",
- DPs: {
- NAME: id + 1,
- PRICE: id + 2,
- ADDRESS1: id + 3,
- ADDRESS2: id + 4,
- LONGITUDE: id + 5,
- LATITUDE: id + 6
- }
- });
- socket.emit("setObject", id + 1, {
- _persistent: true,
- Name: "SPRIT.SUPERE5:1.NAME",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 2, {
- _persistent: true,
- Name: "SPRIT.SUPERE5:1.PRICE",
- ValueUnit: "€",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 3, {
- _persistent: true,
- Name: "SPRIT.SUPERE5:1.ADDRESS1",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 4, {
- _persistent: true,
- Name: "SPRIT.SUPERE5:1.ADDRESS2",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 5, {
- _persistent: true,
- Name: "SPRIT.SUPERE5:1.LONGITUDE",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 6, {
- _persistent: true,
- Name: "SPRIT.SUPERE5:1.LATITUDE",
- TypeName: "HSSDP",
- Parent: id
- });
- id += 7;
- socket.emit("setObject", id, {
- _persistent: true,
- Name: "Super E5 Platz 2",
- TypeName: "CHANNEL",
- Address: "SPRIT.SUPERE5:2",
- HssType: "SPRIT",
- Parent: firstId,
- ChnLabel: "SPRIT",
- DPs: {
- NAME: id + 1,
- PRICE: id + 2,
- ADDRESS1: id + 3,
- ADDRESS2: id + 4,
- LONGITUDE: id + 5,
- LATITUDE: id + 6
- }
- });
- socket.emit("setObject", id + 1, {
- _persistent: true,
- Name: "SPRIT.SUPERE5:2.NAME",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 2, {
- _persistent: true,
- Name: "SPRIT.SUPERE5:2.PRICE",
- ValueUnit: "€",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 3, {
- _persistent: true,
- Name: "SPRIT.SUPERE5:2.ADDRESS1",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 4, {
- _persistent: true,
- Name: "SPRIT.SUPERE5:2.ADDRESS2",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 5, {
- _persistent: true,
- Name: "SPRIT.SUPERE5:2.LONGITUDE",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 6, {
- _persistent: true,
- Name: "SPRIT.SUPERE5:2.LATITUDE",
- TypeName: "HSSDP",
- Parent: id
- });
- id += 7;
- socket.emit("setObject", id, {
- _persistent: true,
- Name: "Super E5 Platz 3",
- TypeName: "CHANNEL",
- Address: "SPRIT.SUPERE5:3",
- HssType: "SPRIT",
- Parent: firstId,
- ChnLabel: "SPRIT",
- DPs: {
- NAME: id + 1,
- PRICE: id + 2,
- ADDRESS1: id + 3,
- ADDRESS2: id + 4,
- LONGITUDE: id + 5,
- LATITUDE: id + 6
- }
- });
- socket.emit("setObject", id + 1, {
- _persistent: true,
- Name: "SPRIT.SUPERE5:3.NAME",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 2, {
- _persistent: true,
- Name: "SPRIT.SUPERE5:3.PRICE",
- ValueUnit: "€",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 3, {
- _persistent: true,
- Name: "SPRIT.SUPERE5:3.ADDRESS1",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 4, {
- _persistent: true,
- Name: "SPRIT.SUPERE5:3.ADDRESS2",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 5, {
- _persistent: true,
- Name: "SPRIT.SUPERE5:3.LONGITUDE",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 6, {
- _persistent: true,
- Name: "SPRIT.SUPERE5:3.LATITUDE",
- TypeName: "HSSDP",
- Parent: id
- });
- id += 7;
- // ----------------- ENDE E5
- socket.emit("setObject", id, {
- _persistent: true,
- Name: "Spritpreise Super E10",
- TypeName: "DEVICE",
- Interface: "SPRIT",
- Address: "SPRIT.SUPERE10",
- HssType: "SPRIT",
- Channels: [
- id + 1,
- id + 8,
- id + 15
- ]
- });
- id += 1;
- socket.emit("setObject", id, {
- _persistent: true,
- Name: "Super E10 Platz 1",
- TypeName: "CHANNEL",
- Address: "SPRIT.SUPERE10:1",
- HssType: "SPRIT",
- Parent: firstId + 22,
- ChnLabel: "SPRIT",
- DPs: {
- NAME: id + 1,
- PRICE: id + 2,
- ADDRESS1: id + 3,
- ADDRESS2: id + 4,
- LONGITUDE: id + 5,
- LATITUDE: id + 6
- }
- });
- socket.emit("setObject", id + 1, {
- _persistent: true,
- Name: "SPRIT.SUPERE10:1.NAME",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 2, {
- _persistent: true,
- Name: "SPRIT.SUPERE10:1.PRICE",
- ValueUnit: "€",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 3, {
- _persistent: true,
- Name: "SPRIT.SUPERE10:1.ADDRESS1",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 4, {
- _persistent: true,
- Name: "SPRIT.SUPERE10:1.ADDRESS2",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 5, {
- _persistent: true,
- Name: "SPRIT.SUPERE10:1.LONGITUDE",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 6, {
- _persistent: true,
- Name: "SPRIT.SUPERE10:1.LATITUDE",
- TypeName: "HSSDP",
- Parent: id
- });
- id += 7;
- socket.emit("setObject", id, {
- _persistent: true,
- Name: "Super E10 Platz 2",
- TypeName: "CHANNEL",
- Address: "SPRIT.SUPERE10:2",
- HssType: "SPRIT",
- Parent: firstId + 22,
- ChnLabel: "SPRIT",
- DPs: {
- NAME: id + 1,
- PRICE: id + 2,
- ADDRESS1: id + 3,
- ADDRESS2: id + 4,
- LONGITUDE: id + 5,
- LATITUDE: id + 6
- }
- });
- socket.emit("setObject", id + 1, {
- _persistent: true,
- Name: "SPRIT.SUPERE10:2.NAME",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 2, {
- _persistent: true,
- Name: "SPRIT.SUPERE10:2.PRICE",
- ValueUnit: "€",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 3, {
- _persistent: true,
- Name: "SPRIT.SUPERE10:2.ADDRESS1",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 4, {
- _persistent: true,
- Name: "SPRIT.SUPERE10:2.ADDRESS2",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 5, {
- _persistent: true,
- Name: "SPRIT.SUPERE10:2.LONGITUDE",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 6, {
- _persistent: true,
- Name: "SPRIT.SUPERE10:2.LATITUDE",
- TypeName: "HSSDP",
- Parent: id
- });
- id += 7;
- socket.emit("setObject", id, {
- _persistent: true,
- Name: "Super E10 Platz 3",
- TypeName: "CHANNEL",
- Address: "SPRIT.SUPERE10:3",
- HssType: "SPRIT",
- Parent: firstId + 22,
- ChnLabel: "SPRIT",
- DPs: {
- NAME: id + 1,
- PRICE: id + 2,
- ADDRESS1: id + 3,
- ADDRESS2: id + 4,
- LONGITUDE: id + 5,
- LATITUDE: id + 6
- }
- });
- socket.emit("setObject", id + 1, {
- _persistent: true,
- Name: "SPRIT.SUPERE10:3.NAME",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 2, {
- _persistent: true,
- Name: "SPRIT.SUPERE10:3.PRICE",
- ValueUnit: "€",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 3, {
- _persistent: true,
- Name: "SPRIT.SUPERE10:3.ADDRESS1",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 4, {
- _persistent: true,
- Name: "SPRIT.SUPERE10:3.ADDRESS2",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 5, {
- _persistent: true,
- Name: "SPRIT.SUPERE10:3.LONGITUDE",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 6, {
- _persistent: true,
- Name: "SPRIT.SUPERE10:3.LATITUDE",
- TypeName: "HSSDP",
- Parent: id
- });
- id += 7;
- // -------- ENDE E10
- socket.emit("setObject", id, {
- _persistent: true,
- Name: "Spritpreise Diesel",
- TypeName: "DEVICE",
- Interface: "SPRIT",
- Address: "SPRIT.DIESEL",
- HssType: "SPRIT",
- Channels: [
- id + 1,
- id + 8,
- id + 15
- ]
- });
- id += 1;
- socket.emit("setObject", id, {
- _persistent: true,
- Name: "Diesel Platz 1",
- TypeName: "CHANNEL",
- Address: "SPRIT.DIESEL:1",
- HssType: "SPRIT",
- Parent: firstId + 44,
- ChnLabel: "SPRIT",
- DPs: {
- NAME: id + 1,
- PRICE: id + 2,
- ADDRESS1: id + 3,
- ADDRESS2: id + 4,
- LONGITUDE: id + 5,
- LATITUDE: id + 6
- }
- });
- socket.emit("setObject", id + 1, {
- _persistent: true,
- Name: "SPRIT.DIESEL:1.NAME",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 2, {
- _persistent: true,
- Name: "SPRIT.DIESEL:1.PRICE",
- ValueUnit: "€",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 3, {
- _persistent: true,
- Name: "SPRIT.DIESEL:1.ADDRESS1",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 4, {
- _persistent: true,
- Name: "SPRIT.DIESEL:1.ADDRESS2",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 5, {
- _persistent: true,
- Name: "SPRIT.DIESEL:1.LONGITUDE",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 6, {
- _persistent: true,
- Name: "SPRIT.DIESEL:1.LATITUDE",
- TypeName: "HSSDP",
- Parent: id
- });
- id += 7;
- socket.emit("setObject", id, {
- _persistent: true,
- Name: "Diesel Platz 2",
- TypeName: "CHANNEL",
- Address: "SPRIT.DIESEL:2",
- HssType: "SPRIT",
- Parent: firstId + 44,
- ChnLabel: "SPRIT",
- DPs: {
- NAME: id + 1,
- PRICE: id + 2,
- ADDRESS1: id + 3,
- ADDRESS2: id + 4,
- LONGITUDE: id + 5,
- LATITUDE: id + 6
- }
- });
- socket.emit("setObject", id + 1, {
- _persistent: true,
- Name: "SPRIT.DIESEL:2.NAME",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 2, {
- _persistent: true,
- Name: "SPRIT.DIESEL:2.PRICE",
- ValueUnit: "€",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 3, {
- _persistent: true,
- Name: "SPRIT.DIESEL:2.ADDRESS1",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 4, {
- _persistent: true,
- Name: "SPRIT.DIESEL:2.ADDRESS2",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 5, {
- _persistent: true,
- Name: "SPRIT.DIESEL:2.LONGITUDE",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 6, {
- _persistent: true,
- Name: "SPRIT.DIESEL:2.LATITUDE",
- TypeName: "HSSDP",
- Parent: id
- });
- id += 7;
- socket.emit("setObject", id, {
- _persistent: true,
- Name: "Diesel Platz 3",
- TypeName: "CHANNEL",
- Address: "SPRIT.DIESEL:3",
- HssType: "SPRIT",
- Parent: firstId + 44,
- ChnLabel: "SPRIT",
- DPs: {
- NAME: id + 1,
- PRICE: id + 2,
- ADDRESS1: id + 3,
- ADDRESS2: id + 4,
- LONGITUDE: id + 5,
- LATITUDE: id + 6
- }
- });
- socket.emit("setObject", id + 1, {
- _persistent: true,
- Name: "SPRIT.DIESEL:3.NAME",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 2, {
- _persistent: true,
- Name: "SPRIT.DIESEL:3.PRICE",
- ValueUnit: "€",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 3, {
- _persistent: true,
- Name: "SPRIT.DIESEL:3.ADDRESS1",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 4, {
- _persistent: true,
- Name: "SPRIT.DIESEL:3.ADDRESS2",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 5, {
- _persistent: true,
- Name: "SPRIT.DIESEL:3.LONGITUDE",
- TypeName: "HSSDP",
- Parent: id
- });
- socket.emit("setObject", id + 6, {
- _persistent: true,
- Name: "SPRIT.DIESEL:3.LATITUDE",
- TypeName: "HSSDP",
- Parent: id
- });
- var zip = adapterSettings.zip;
- var radius = adapterSettings.radius;
- var e5 = adapterSettings.e5;
- var e10 = adapterSettings.e10;
- var diesel = adapterSettings.diesel;
- function insertData(id, data) {
- id = parseInt(id, 10);
- for (var i = 0; i < data.length; i++) {
- var price = data[i];
- socket.emit("setState", [id + (i * 7) + 2, price.name]);
- socket.emit("setState", [id + (i * 7) + 3, price.price]);
- socket.emit("setState", [id + (i * 7) + 4, price.address1]);
- socket.emit("setState", [id + (i * 7) + 5, price.address2]);
- socket.emit("setState", [id + (i * 7) + 6, price.longitude]);
- socket.emit("setState", [id + (i * 7) + 7, price.latitude]);
- }
- }
- function processData(data) {
- //console.log(data);
- if (data.e5) {
- insertData(firstId, data.e5.slice(0, 3));
- }
- if (data.e10) {
- insertData(firstId + 22, data.e10.slice(0, 3));
- }
- if (data.diesel) {
- insertData(firstId + 44, data.diesel.slice(0, 3));
- }
- setTimeout(function () {
- logger.info("adapter sprit terminating");
- process.exit();
- }, 60000);
- }
- var priceObj = {};
- if (e5) {
- getPrices(zip, radius, 1, function (arr) {
- priceObj.e5 = arr;
- if (e10) {
- getPrices(zip, radius, 2, function (arr) {
- priceObj.e10 = arr;
- if (diesel) {
- getPrices(zip, radius, 3, function (arr) {
- priceObj.diesel = arr;
- processData(priceObj);
- });
- } else {
- processData(priceObj);
- }
- });
- } else if (diesel) {
- getPrices(zip, radius, 3, function (arr) {
- priceObj.diesel = arr;
- processData(priceObj);
- });
- } else {
- processData(priceObj);
- }
- });
- } else if (e10) {
- getPrices(zip, radius, 2, function (arr) {
- priceObj.e10 = arr;
- if (diesel) {
- getPrices(zip, radius, 3, function (arr) {
- priceObj.diesel = arr;
- processData(priceObj);
- });
- } else {
- processData(priceObj);
- }
- });
- } else if (diesel) {
- getPrices(zip, radius, 3, function (arr) {
- priceObj.diesel = arr;
- processData(priceObj);
- });
- }
- function getPrices(zip, radius, type, callback) {
- var userAgents = [
- "Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10",
- "Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2",
- "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; en-us) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/5",
- "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; CIBA; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)",
- "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36"
- ];
- logger.info("adapter sprit getPrices zip="+zip+" radius="+radius+" type="+type);
- var options = {
- "url": "http://www.sparsamtanken.de/guenstigster-spritpreis?plz=" + zip + "&umkreis=" + radius + "&sorte=" + type,
- "headers": {
- "User-Agent": userAgents[4]
- }
- };
- //console.log(options);
- request(options, function (err, res) {
- //console.log(res.body);
- var prices = [];
- var lines = res.body.split("\n");
- var descCount = 0;
- var priceCount = 0;
- for (var i = 0; i < lines.length; i++) {
- var line = lines[i];
- var desc;
- if (desc = line.match(/tankstellen-details\?[a-zA-Z0-9-_=\&%.]+">([^<]+)/)) {
- //console.log(desc);
- prices[descCount++] = {
- name: desc[1]
- };
- }
- if (line.match(/marker\.push/)) {
- var positionLine = lines[i + 1];
- var titleLine = lines[i + 4];
- var latLng = positionLine.match(/LatLng\(([0-9.]+), ([0-9.]+)\)/);
- prices[priceCount].latitude = parseFloat(latLng[1]);
- prices[priceCount].longitude = parseFloat(latLng[2]);
- var tmpArr = titleLine.split("'");
- tmpArr = tmpArr[1].split(",");
- var priceArr = tmpArr[0].split(" ");
- var price = priceArr[priceArr.length - 2];
- var street = tmpArr[tmpArr.length - 2] || "";
- var city = tmpArr[tmpArr.length - 1] || "";
- prices[priceCount].price = parseFloat(price);
- prices[priceCount].address1 = street.trim();
- prices[priceCount].address2 = city.trim();
- priceCount += 1;
- i += 4;
- }
- }
- setTimeout(function (_prices) {
- callback(_prices);
- }, 3000, prices);
- });
- }
- setTimeout(function () {
- logger.info("adapter sprit force terminating");
- process.exit();
- }, 600000);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement