NEWS
Вопросы по написанию скриптов
-
Потому что их обрабатывает как текстовые, делайте через````
parseFloat(temp_base) + ParseFloat(circle_hyst)````
Спасибо spectrekr, с parseFloat конечно работает но это костыль. Проблема заключается в том что я экспериментируя с скриптом заметил странную особенность что иногда всё работает как надо а иногда неправильно. Так как эти переменные часто меняю для всевозможных экспериментов с скриптом по старой привычке менял значение в вкладке "состояние" и всё было хорошо. Когда появилась возможность менять значение переменной в вкладке объекты тут и началось. Bluefox наверно так не должно быть ?
Это не костыль, это JS `
Костыль я имел виду в else if ( temp_in > (parseFloat(temp_base) + parseFloat(circ_hyst)) && cur_temp > (parseFloat(temp_base) + parseFloat(circ_hyst)) ) , проблема оказалось в возможности менять значение переменной в вкладке объекты. Тут скорей всего недоработка какая та. :?:PS. Вот и немцы пишут
paul53 писал (а): Как вы проверить? Надеюсь , не изменять значения в закладке "Объекты", потому что он работает (пока) не должным образом.
-
А что ты пытаешся этим скриптом сделать? сколько времени у тебя отрабатывает функция download ?
А если так?
!
function download (uri, filename, callback){ request.head(uri, function(err, res, body){ request(uri).pipe(fs.createWriteStream(filename)).on('close', callback); }); } var fs = require('fs'); var request = require('request'); ! on({id:'javascript.0.send_cameras', change: 'any'}, function (obj) { if (!fs.existsSync('C:/cameras/')) { console.error('Directory for cameras does not exist'); } else { download('http://192.168.0.222:10000/Streaming/channels/1/picture?snapShotImageType=JPEG?auth=YWRtaW46MTIzNDU=', 'C:/Users/User/Pictures/camera1.jpg', function(){ console.log('Camera 1 copying done!'); sendTo("telegram.0", 'C:/Users/User/Pictures/camera1.jpg'); download('http://192.168.0.222:11000/Streaming/channels/1/picture?snapShotImageType=JPEG?auth=YWRtaW46MTIzNDU=', 'C:/Users/User/Pictures/camera2.jpg', function(){ console.log('Camera 2 copying done!'); sendTo("telegram.0", 'C:/Users/User/Pictures/camera2.jpg'); download('http://192.168.0.222:13000/Streaming/channels/1/picture?snapShotImageType=JPEG?auth=YWRtaW46MTIzNDU=', 'C:/Users/User/Pictures/camera3.jpg', function(){ console.log('Camera 3 copying done!'); sendTo("telegram.0", 'C:/Users/User/Pictures/camera3.jpg'); download('http://192.168.0.222:14000/Streaming/channels/1/picture?snapShotImageType=JPEG?auth=YWRtaW46MTIzNDU=', 'C:/Users/User/Pictures/camera4.jpg', function(){ console.log('Camera 4 copying done!'); sendTo("telegram.0", 'C:/Users/User/Pictures/camera4.jpg'); }); }); }); }); ! } });
`
Этот скрипт загружает статические картинки с видеокамер, каждая размером 110-250 кб (сек 20-30 всего).Потом кидаю в Telegram.
Твой скрипт работает стабильнее ), но всё равно через 2-3 раза…
! javascript-0 2016-04-21 19:27:24 info sendTo "send" to system.adapter.telegram.0 from system.adapter.javascript.0: "C:/Users/User/Pictures/camera1.jpg"
! javascript-0 2016-04-21 19:27:24 info script.js.cameras: Camera 1 copying done!
! javascript-0 2016-04-21 19:27:23 info sendTo "send" to system.adapter.telegram.0 from system.adapter.javascript.0: "C:/Users/User/Pictures/camera2.jpg"
! javascript-0 2016-04-21 19:27:23 info script.js.cameras: Camera 2 copying done!
! javascript-0 2016-04-21 19:27:17 info sendTo "send" to system.adapter.telegram.0 from system.adapter.javascript.0: "C:/Users/User/Pictures/camera3.jpg"
! javascript-0 2016-04-21 19:27:17 info script.js.cameras: Camera 3 copying done!
! javascript-0 2016-04-21 19:27:10 info sendTo "send" to system.adapter.telegram.0 from system.adapter.javascript.0: "C:/Users/User/Pictures/camera4.jpg"
! javascript-0 2016-04-21 19:27:10 info script.js.cameras: Camera 4 copying done!
! mqtt-0 2016-04-21 19:27:02 info send2Server admin.1.send_cameras[admin/1/send_cameras]
! text2command-0 2016-04-21 19:27:02 info sendTo "send" to system.adapter.telegram.0 from system.adapter.text2command.0: {"text":"стройка","id":60629447,"user":"ссс","response":""}
! text2command-0 2016-04-21 19:27:02 info Say ID admin.1.send_cameras: true
! text2command-0 2016-04-21 19:27:02 info processText: "камеры"
C одной камерой такая же ерунда..! ````
function download (uri, filename, callback){
request.head(uri, function(err, res, body){
request(uri).pipe(fs.createWriteStream(filename)).on('close', callback);
});
}
var fs = require('fs');
var request = require('request');
! on({id:"admin.1.send_cameras", change: 'any'}, function (obj) {
if (!fs.existsSync('C:/cameras/')) {
console.error('Directory for cameras does not exist');
} else {
download('http://192.168.0.222:10000/Streaming/channels/1/picture?snapShotImageType=JPEG?auth=YWRtaW46MTIzNDU=', 'C:/Users/User/Pictures/camera1.jpg', function(){
console.log('Camera 1 copying done!');
sendTo("telegram.0", 'C:/Users/User/Pictures/camera1.jpg');});
! }
});
```` ` что значит через два три раза? Может у тебя ошибкой завершается копирование? Ты не ловиш в скрипте ошибки а отрабатываешь код дальше -
Дело в скрипте, это работает чётко:
var fs = require('fs'), request = require('request'); var download = function(uri, filename, callback){ var r = request({ url: uri, headers: { 'accept': 'image/*', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36', } }).pipe(fs.createWriteStream(filename)); r.on('error', function(err) {console.log(err)}) r.on('close', callback); }; on({id:"admin.1.send_cameras", change: 'any'}, function (obj) { download('http://192.168.0.222:10000/Streaming/channels/1/picture?snapShotImageType=JPEG?auth=YWRtaW46MTIzNDU=', 'C:/Users/User/Pictures/camera1.jpg', function(){ console.log('Сamera 1 copying done'); sendTo("telegram.0", 'C:/Users/User/Pictures/camera1.jpg'); }); download('http://192.168.0.222:11000/Streaming/channels/1/picture?snapShotImageType=JPEG?auth=YWRtaW46MTIzNDU=', 'C:/Users/User/Pictures/camera2.jpg', function(){ console.log('Camera 2 copying done!'); sendTo("telegram.0", 'C:/Users/User/Pictures/camera2.jpg'); }); download('http://192.168.0.222:13000/Streaming/channels/1/picture?snapShotImageType=JPEG?auth=YWRtaW46MTIzNDU=', 'C:/Users/User/Pictures/camera3.jpg', function(){ console.log('Camera 3 copying done!'); sendTo("telegram.0", 'C:/Users/User/Pictures/camera3.jpg'); }); download('http://192.168.0.222:14000/Streaming/channels/1/picture?snapShotImageType=JPEG?auth=YWRtaW46MTIzNDU=', 'C:/Users/User/Pictures/camera4.jpg', function(){ console.log('Camera 4 copying done!'); sendTo("telegram.0", 'C:/Users/User/Pictures/camera4.jpg'); }); });
-
Записываю в log_heat.txt "log_heat", может как то по другому надо ? ( log_heat может быть много, в зависимости от условий по скрипту)
function getTimeAsString(d) { var date = d || new Date(); return ('0' + (date.getMonth() + 1)).slice(-2) + '/' + ('0' + date.getDate()).slice(-2) + ' '+ ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2) + ':' + ('0' + date.getSeconds()).slice(-2); } function script (addTimestamp) { var fs = require('fs'); var log_heat; log_heat = ( getTimeAsString() + ' ' + 'Температура бака'); fs.appendFileSync('//opt//log_heat.txt', log_heat + "\n"); log_heat = ( getTimeAsString() + ' ' + 'Температура бакаaaaaaaaaaaaaa'); fs.appendFileSync('//opt//log_heat.txt', log_heat + "\n"); } function start () { var request = require ( 'request' ); request ( 'http://192.168.1.11/avr_temp_out.php', function ( error, response, body ) { if ( !error && response.statusCode == 200 ) { //setState ( toaid, body ); log('1 avr_temp_out: ' + body); } setTimeout ( function () { script (); }, 1000 ); }); } setInterval ( function () { start (); }, 30000 );
-
Хочу заставить бота слать информацию об обновлении, подписываюсь на драйвер, а он либо undefined присылает, либо вообще молчит.
on({id: 'admin.0.info.updatesList', change: 'any'}, function (obj) { if (getState('admin.0.info.updatesNumber').val > 0){ sendTo('telegram', obj.val); log(obj.val); } });
-
Хочу заставить бота слать информацию об обновлении, подписываюсь на драйвер, а он либо undefined присылает, либо вообще молчит.
on({id: 'admin.0.info.updatesList', change: 'any'}, function (obj) { if (getState('admin.0.info.updatesNumber').val > 0){ sendTo('telegram', obj.val); log(obj.val); } }); ```` `
Вроде id: лишние
Пишу с пульта….
-
Так везде и всегда так подписываюсь на изменения, и в примерах так описано. Да и он отслеживает изменения и запускает на выполнение, только вот, насколько я понял, значение объекта в текст не может перевести.
-
Так везде и всегда так подписываюсь на изменения, и в примерах так описано. Да и он отслеживает изменения и запускает на выполнение, только вот, насколько я понял, значение объекта в текст не может перевести. `
Obj.val.toString() -
Хочу заставить бота слать информацию об обновлении, подписываюсь на драйвер, а он либо undefined присылает, либо вообще молчит.
on({id: 'admin.0.info.updatesList', change: 'any'}, function (obj) { if (getState('admin.0.info.updatesNumber').val > 0){ sendTo('telegram', obj.val); log(obj.val); } }); ```` `
on({id: 'admin.0.info.updatesNumber', change: 'any'}, function (obj) { if (obj.newState.val > 0){ sendTo('telegram', (obj.newState.val).toString()); log(obj.newState.val); } });
А если так?
-
Сейчас поставил по-первому способу, если не пойдет, буду пробовать вторым способом. Осталось дождаться какого нибудь обновления
-
Сейчас поставил по-первому способу, если не пойдет, буду пробовать вторым способом. Осталось дождаться какого нибудь обновления `
Как instalator написал: obj.newState.val правильноТакже работает obj.state.val
-
Блин, уже мозг взрывается. Пытаюсь выполнить команду через exec
var cmd = "'/usr/src/git/git_upd.sh "+ obn + ' ' + date_obn + "'"; log(cmd); child = exec (cmd, function (error, stdout, stderr){ if (error !== null) { log(error); }
В логе получаю
! 11:14:16.421 [info] javascript.0 script.js.Скрипт1: '/usr/src/git/git_upd.sh sayit 2016.5.16'
! 11:14:16.422 [info] javascript.0 script.js.Скрипт1: Error: Command failed: /bin/sh -c '/usr/src/git/git_upd.sh sayit 2016.5.16' /bin/sh: 1: /usr/src/git/git_upd.sh sayit 2016.5.16: not found
В консоле от этого же юзера, под которым работает сервер, эта команда без проблем выполняется.! cubie@Cubian:/usr/src/git$ /bin/sh -c '/usr/src/git/git_upd.sh sayit 2016.5.12'
! GermanBluefox, Sat May 14 15:39:12 2016 +0200 : ### 1.0.0 (2016-05-14) * (bluefox) Make the type of mp3 as fileupd: Разобрался, сделал обходным путем.
-
делаю функцию.
! ````
var get_ver_upd = function (drv){
var path_upd = 'iobroker\node_modules\iobroker.js-controller\conf\sources-dist.json';
if (fs.existsSync(path_upd)) {
fs.readFile(path_upd, function (error, data) {
if (!error) {
var result;
try {
result = JSON.parse(data);
} catch (err) {
log("Не парсится!");
result = null;
}
// log(result[drv].meta);
request(result[drv].meta, function (error, response, body) {
if (!error && response.statusCode == 200) {
var result_ver;
try {
result_ver = JSON.parse(body)
} catch (err) {
log("Не парсится!");
result_ver = null;
}
// log(result_ver.common.version);
return result_ver.common.version;
}
});
}
});
}
}и пытаюсь вернуть в основную программу
ver_n = get_ver_upd(obn);
log(ver_n);ver_n объявлена глобально.
-
делаю функцию.
! ````
var get_ver_upd = function (drv){
var path_upd = 'iobroker\node_modules\iobroker.js-controller\conf\sources-dist.json';
if (fs.existsSync(path_upd)) {
fs.readFile(path_upd, function (error, data) {
if (!error) {
var result;
try {
result = JSON.parse(data);
} catch (err) {
log("Не парсится!");
result = null;
}
// log(result[drv].meta);
request(result[drv].meta, function (error, response, body) {
if (!error && response.statusCode == 200) {
var result_ver;
try {
result_ver = JSON.parse(body)
} catch (err) {
log("Не парсится!");
result_ver = null;
}
// log(result_ver.common.version);
return result_ver.common.version;
}
});
}
});
}
}и пытаюсь вернуть в основную программу
ver_n = get_ver_upd(obn);
log(ver_n);ver_n объявлена глобально. `
! ````
function get_ver_upd (drv){
var path_upd = 'iobroker\node_modules\iobroker.js-controller\conf\sources-dist.json';
if (fs.existsSync(path_upd)) {
fs.readFile(path_upd, function (error, data) {
if (!error) {
var result;
try {
result = JSON.parse(data);
} catch (err) {
log("Не парсится!");
result = null;
}
// log(result[drv].meta);
request(result[drv].meta, function (error, response, body) {
if (!error && response.statusCode == 200) {
var result_ver;
try {
result_ver = JSON.parse(body)
} catch (err) {
log("Не парсится!");
result_ver = null;
}
// log(result_ver.common.version);
return result_ver.common.version;
}
});
}
});
}
} -
!
function get_ver_upd (drv, callback){ var path_upd = 'iobroker\\node_modules\\iobroker.js-controller\\conf\\sources-dist.json'; if (fs.existsSync(path_upd)) { fs.readFile(path_upd, function (error, data) { if (!error) { var result; try { result = JSON.parse(data); } catch (err) { log("Не парсится!"); result = null; } // log(result[drv].meta); request(result[drv].meta, function (error, response, body) { if (!error && response.statusCode == 200) { var result_ver; try { result_ver = JSON.parse(body) } catch (err) { log("Не парсится!"); result_ver = null; } // log(result_ver.common.version); callback (result_ver.common.version); } }); } }); } } ! get_ver_upd(obn, function(n){ log(n); }); !
-
Возник другой вопрос, а как заставить цикл ждать отработки всех функций внутри цикла?
! ```
for (var i = 0; i < obn.length; i++) { get_info(obn[i], function(readme, ver_c){ log(readme); log(ver_c); }); get_ver_upd(obn[i], function(ver_n){ log(ver_n); });
а выводит как попало
! >! ~~[spoiler]~~16:35:56.441 [info] javascript.0 script.js.update: https://github.com/ioBroker/ioBroker.mq ... /README.md
! 16:35:56.442 [info] javascript.0 script.js.update: 1.0.3
! 16:35:56.442 [info] javascript.0 script.js.update: https://github.com/iobroker/ioBroker.ja ... /README.md
! 16:35:56.442 [info] javascript.0 script.js.update: 2.0.6
! 16:35:56.705 [info] javascript.0 script.js.update: 2.1.0
! 16:35:56.713 [info] javascript.0 script.js.update: 1.0.3[/spoiler]
И еще попутно, почему не присваивает значение?
~~[code]~~get_ver_upd(obn, function(n){ ver_n = n; }); [/code]
[/i][/i] -
`var ready = 0; for (var i = 0; i < obn.length; i++) { ready++; get_info(obn[i], function(readme, ver_c){ log(readme); log(ver_c); if (!--ready) { log('finished'); } }); ready++; get_ver_upd(obn[i], function(ver_n){ log(ver_n); if (!--ready) { log('finished'); } }); }`[/i][/i]
-
Странно отрабатывает, да еще и 1 раз только finished пишет.
! 17:35:17.349 [info] javascript.0 script.js.update: https://github.com/ioBroker/ioBroker.mq … /README.md
! 17:35:17.349 [info] javascript.0 script.js.update: 1.0.3
! 17:35:17.349 [info] javascript.0 script.js.update: https://github.com/iobroker/ioBroker.ja … /README.md
! 17:35:17.349 [info] javascript.0 script.js.update: 2.0.6
! 17:35:17.612 [info] javascript.0 script.js.update: 2.1.0
! 17:35:17.613 [info] javascript.0 script.js.update: 1.0.3
! 17:35:17.613 [info] javascript.0 script.js.update: finished
А по поводу передать значение не подскажешь? -
Давай весь скрипт. Хватит кусками выдавать.
Там функции get_ver_upd и get_info надо менять
-
Давай весь скрипт. Хватит кусками выдавать.
Там функции get_ver_upd и get_info надо менять `
! ```
`var request = require('request');
var fs = require('fs');
var path, obn, readme, ver_c, ver_n;
! function get_info(obn){
path = 'iobroker\node_modules\iobroker.' + obn;
if (fs.existsSync(path)) {
fs.readFile(path + "\io-package.json", function (error, data) {
if (!error) {
var result;
try {
result = JSON.parse(data);
} catch (err) {
log("Не парсится!");
result = null;
}
return result.common.readme, result.common.version;
}
});
}
}
! function get_ver_upd (drv){
var path_upd = 'iobroker\node_modules\iobroker.js-controller\conf\sources-dist.json';
if (fs.existsSync(path_upd)) {
fs.readFile(path_upd, function (error, data) {
if (!error) {
var result;
try {
result = JSON.parse(data);
} catch (err) {
log("Не парсится!");
result = null;
}
request(result[drv].meta, function (error, response, body) {
if (!error && response.statusCode == 200) {
var result_ver;
try {
result_ver = JSON.parse(body);
} catch (err) {
log("Не парсится!");
result_ver = null;
}
return result_ver.common.version;
}
});
}
});
}
}
! function get_chang(readme, ver_c, ver_n, callback){
log(readme);
log(ver_c);
log(ver_n);}
! on({id: 'admin.0.info.updatesList', change: 'any'}, function (obj) {
var str = 'Доступно обновления для:\n';
if (getState('admin.0.info.updatesNumber').val > 1){
obn = obj.state.val.split(',');
/* for (var i = 0; i < obn.length; i++) {
get_info(obn[i], function(readme, ver_c){
log(readme);
log(ver_c);
});
get_ver_upd(obn[i], function(ver_n){
log(ver_n);
});
*/
var ready = 0;
for (var i = 0; i < obn.length; i++) {
ready++;
get_info(obn[i], function(r, v){
// log(r);
readme = r;
// log(v);
ver_c = v;
if (!--ready) {
log('finished');
}
});
ready++;
get_ver_upd(obn[i], function(v){
log(ver_n);
ver_n = v;
if (!--ready) {
log('finished');
}
});
}
}
if (getState('admin.0.info.updatesNumber').val == 1){
obn = obj.state.val;
get_info(obn, function(r, v){
// log(r);
readme = r;
// log(v);
ver_c = v;
});
get_ver_upd(obn, function(v){
// log(v);
ver_n = v;
});
get_chang(readme, ver_c, ver_n);
}
});`
Это то что на данный момент. Соответственно в function get_chang будет дальнейшая обработка.[/i][/i][/i][/i]