NEWS
Вопросы по написанию скриптов
- 
					
					
					
					
 var request = require('request'); var room = 'Heat_control'; var tbid = getIdByName(room + '.temp_base'); var shaid = getIdByName(room + '.temp_in_stair_hall_avr_30min'); var ctid = getIdByName(room + '.cur_temp'); function printDebug() { var circ_title = 'Дом'; var temp_base = getState(tbid).val; var temp_in = getState(shaid).val; var cur_temp = getState(ctid).val; log(circ_title + ': Расчет: ' + temp_base + ', Сред: ' + temp_in + ', Тек: ' + cur_temp); } function startt() { var count = 0; count++; request('http://192.168.1.11/cur_temp.php', function (error, response, body) { if (!error && response.statusCode == 200) { setState(ctid, body); log('Текущая ' + body); } count--; if (!count) printDebug(); }); // Средняя температура в помещении за 30 минут count++; request('http://192.168.1.11/avr_temp_in_stair_hall.php', function (error, response, body) { if (!error && response.statusCode == 200) { setState(shaid, body); log('Средняя ' + body); } count--; if (!count) printDebug(); }); } setInterval(function() { startt(); },30000);А надо ли вызывать скрипт каждые 30 секунд? 
- 
					
					
					
					
 var request = require('request'); var room = 'Heat_control'; var tbid = getIdByName(room + '.temp_base'); var shaid = getIdByName(room + '.temp_in_stair_hall_avr_30min'); var ctid = getIdByName(room + '.cur_temp'); function printDebug() { var circ_title = 'Дом'; var temp_base = getState(tbid).val; var temp_in = getState(shaid).val; var cur_temp = getState(ctid).val; log(circ_title + ': Расчет: ' + temp_base + ', Сред: ' + temp_in + ', Тек: ' + cur_temp); } function startt() { var count = 0; count++; request('http://192.168.1.11/cur_temp.php', function (error, response, body) { if (!error && response.statusCode == 200) { setState(ctid, body); log('Текущая ' + body); } count--; if (!count) printDebug(); }); // Средняя температура в помещении за 30 минут count++; request('http://192.168.1.11/avr_temp_in_stair_hall.php', function (error, response, body) { if (!error && response.statusCode == 200) { setState(shaid, body); log('Средняя ' + body); } count--; if (!count) printDebug(); }); } setInterval(function() { startt(); },30000);А надо ли вызывать скрипт каждые 30 секунд? ` Не, вызывается каждые 5 минут это я для отладки 30 сек поставил 
- 
					
					
					
					
 var request = require('request'); var room = 'Heat_control'; var tbid = getIdByName(room + '.temp_base'); var shaid = getIdByName(room + '.temp_in_stair_hall_avr_30min'); var ctid = getIdByName(room + '.cur_temp'); function printDebug() { var circ_title = 'Дом'; var temp_base = getState(tbid).val; var temp_in = getState(shaid).val; var cur_temp = getState(ctid).val; log(circ_title + ': Расчет: ' + temp_base + ', Сред: ' + temp_in + ', Тек: ' + cur_temp); } function startt() { var count = 0; count++; request('http://192.168.1.11/cur_temp.php', function (error, response, body) { if (!error && response.statusCode == 200) { setState(ctid, body); log('Текущая ' + body); } count--; if (!count) printDebug(); }); // Средняя температура в помещении за 30 минут count++; request('http://192.168.1.11/avr_temp_in_stair_hall.php', function (error, response, body) { if (!error && response.statusCode == 200) { setState(shaid, body); log('Средняя ' + body); } count--; if (!count) printDebug(); }); } setInterval(function() { startt(); },30000);А надо ли вызывать скрипт каждые 30 секунд? ` 
 Спасибо за помощь, но я так и не смог прикрутить это в свой скрипт Закинул весь скрипт, может будет понятней вопрос взгляни если сможешь http://forum.iobroker.net/viewtopic.php?f=26&t=2646 
- 
					
					
					
					
 Спасибо за помощь, но я так и не смог прикрутить это в свой скрипт  Закинул весь скрипт, может будет понятней вопрос взгляни если сможешь ` ! ```` 
 var request = require('request');
 var room = 'Heat_control';
 var tbid = getIdByName(room + '.temp_base');
 var shaid = getIdByName(room + '.temp_in_stair_hall_avr_30min');
 var ctid = getIdByName(room + '.cur_temp');
 ! function printDebug() {
 var circ_title = 'Дом';
 var temp_base = getState(tbid).val;
 var temp_in = getState(shaid).val;
 var cur_temp = getState(ctid).val;
 log(circ_title + ': Расчет: ' + temp_base + ', Сред: ' + temp_in + ', Тек: ' + cur_temp);
 }
 ! function startt() {
 // var count = 0;//count++; 
 request('http://192.168.1.11/cur_temp.php', function (error, response, body) {
 if (!error && response.statusCode == 200) {
 setState(ctid, body);
 log('Текущая ' + body);
 // Средняя температура в помещении за 30 минут
 // count++;
 request('http://192.168.1.11/avr_temp_in_stair_hall.php', function (error, response, body) {
 if (!error && response.statusCode == 200) {
 setState(shaid, body);
 log('Средняя ' + body);
 printDebug();
 }
 // count--;
 // if (!count) printDebug();
 });
 }
 // count--;
 // if (!count) printDebug();
 });} 
 setInterval(function() {
 startt();
 },30000);
- 
					
					
					
					
 Спасибо за помощь, но я так и не смог прикрутить это в свой скрипт  Закинул весь скрипт, может будет понятней вопрос взгляни если сможешь ` ! ```` 
 var request = require('request');
 var room = 'Heat_control';
 var tbid = getIdByName(room + '.temp_base');
 var shaid = getIdByName(room + '.temp_in_stair_hall_avr_30min');
 var ctid = getIdByName(room + '.cur_temp');
 ! function printDebug() {
 var circ_title = 'Дом';
 var temp_base = getState(tbid).val;
 var temp_in = getState(shaid).val;
 var cur_temp = getState(ctid).val;
 log(circ_title + ': Расчет: ' + temp_base + ', Сред: ' + temp_in + ', Тек: ' + cur_temp);
 }
 ! function startt() {
 // var count = 0;//count++; 
 request('http://192.168.1.11/cur_temp.php', function (error, response, body) {
 if (!error && response.statusCode == 200) {
 setState(ctid, body);
 log('Текущая ' + body);
 // Средняя температура в помещении за 30 минут
 // count++;
 request('http://192.168.1.11/avr_temp_in_stair_hall.php', function (error, response, body) {
 if (!error && response.statusCode == 200) {
 setState(shaid, body);
 log('Средняя ' + body);
 printDebug();
 }
 // count--;
 // if (!count) printDebug();
 });
 }
 // count--;
 // if (!count) printDebug();
 });} 
 setInterval(function() {
 startt();
 },30000);
 ```` `
 Спасибо дружище, забыл дать ссылку http://forum.iobroker.net/viewtopic.php?f=26&t=2646 кусками чего то не выходит.
- 
					
					
					
					
 Возможно ли средствами JavaScript, или отдельно установленным модулем npm загружать типа такого https://github.com/matthewdfuller/fast-image-downloader Своих заний не хватает..Есть url - http://192.168.0.222:10000/Streaming/ch … 46MTIzNDU= это поток с камер..Хочется их грабить по событию и кидать картинку в Telegram. Кто-нибудь подскажет, возможно это реализовать или нет? 
- 
					
					
					
					
 Возможно ли средствами JavaScript, или отдельно установленным модулем npm загружать типа такого https://github.com/matthewdfuller/fast-image-downloader Своих заний не хватает..Есть url - http://192.168.0.222:10000/Streaming/ch … 46MTIzNDU= это поток с камер..Хочется их грабить по событию и кидать картинку в Telegram. Кто-нибудь подскажет, возможно это реализовать или нет? ` 
 А что за камеры? Может они умеют по тревоге складывать файлы на ftp или сетевой хранилище? Тогда можно скриптом мониторить каталог и при появлении новых файлов отсылать их. Если напрямую с камеры брать видео поток, тогда вопрос каким приложением собираетесь реализовывать тревогу? Если просто забирать с камеры картинку и слать, то можно через exec wget забирать картинку и потом слать в telegramm
- 
					
					
					
					
 Спасибо за ответ! Пока интересует статическая картинка по указанному адресу по моему запросу через Telegram. Можно ли по подробней, хотя бы, фрагмент скрипта привести при помощи exec wget? 
- 
					
					
					
					
 Кстати, совсем забыл, у меня Windows, поэтому wget не подойдёт.. 
- 
					
					
					
					
 Кстати, совсем забыл, у меня Windows, поэтому wget не подойдёт.. ` 
 Почему не пойдёт, есть wget и под форточки. как-то так http://stproject.info/blog/?p=2569
- 
					
					
					
					
 Установил wget, вручную работает wget -O c:\cameras\camera1.jpg http://192.168.0.222:10000/Streaming/ch … 46MTIzNDU= Скрипт - одна строка: exec ('wget -O c:\cameras\camera1.jpg "http://192.168.0.222:10000/Streaming/ch ... 46MTIzNDU=" '); 13:37:58.458 [info] javascript.0 Start javascript script.js.send_foto 13:37:58.458 [info] javascript.0 script.js.send_foto: registered 0 subscriptions and 0 schedules Тишина… Куда копать? 
- 
					
					
					
					
 Ну а файл то появился? Дальше через телеграм передаете эту фотографию. 
- 
					
					
					
					
 Установил wget, вручную работает wget -O c:\cameras\camera1.jpg http://192.168.0.222:10000/Streaming/ch … 46MTIzNDU= Скрипт - одна строка: exec ('wget -O c:\cameras\camera1.jpg "http://192.168.0.222:10000/Streaming/ch ... 46MTIzNDU=" '); 13:37:58.458 [info] javascript.0 Start javascript script.js.send_foto 13:37:58.458 [info] javascript.0 script.js.send_foto: registered 0 subscriptions and 0 schedules Тишина… Куда копать? ` 
 Зачем wget. node.js обладает отличными возможностями скачать что угодно.google => node.js http get image http://stackoverflow.com/questions/1274 … th-node-js Отсюда видно: var fs = require('fs'); var request = require('request'); function download (uri, filename, callback){ request.head(uri, function(err, res, body){ request(uri).pipe(fs.createWriteStream(filename)).on('close', callback); }); } if (!fs.existsSync('c:/cameras')) { console.error('Directory does not exist'); } else { download('http://192.168.0.222:10000/Streaming/channels/1/picture?snapShotImageType=JPEG?auth=YWRtaW46MTIzNDU=', 'c:/cameras/camera1.jpg', function(){ console.log('done'); }); }
- 
					
					
					
					
 И в приведенном выше примере после console.log('done');вставляем````
 sendTo('telegram', 'c:/cameras/camera1.jpg')
- 
					
					
					
					
 Да, спасибо большое, заработало!  
- 
					
					
					
					
 Почему эта строчка отрабатывает else if ( temp_in < temp_base - circ_hyst && cur_temp < temp_base - circ_hyst )temp_base - circ_hyst получается 19.85 а эта нет ? else if ( temp_in > temp_base + circ_hyst && cur_temp > temp_base + circ_hyst )temp_base + circ_hyst получается 20.000.15 
- 
					
					
					
					
 Потому что их обрабатывает как текстовые, делайте через```` 
 parseFloat(temp_base) + ParseFloat(circle_hyst)
- 
					
					
					
					
 Потому что их обрабатывает как текстовые, делайте через```` 
 parseFloat(temp_base) + ParseFloat(circle_hyst)```` ` 
 Спасибо spectrekr, с parseFloat конечно работает но это костыль. Проблема заключается в том что я экспериментируя с скриптом заметил странную особенность что иногда всё работает как надо а иногда неправильно. Так как эти переменные часто меняю для всевозможных экспериментов с скриптом по старой привычке менял значение в вкладке "состояние" и всё было хорошо. Когда появилась возможность менять значение переменной в вкладке объекты тут и началось. Bluefox наверно так не должно быть ?
- 
					
					
					
					
 Потому что их обрабатывает как текстовые, делайте через```` 
 parseFloat(temp_base) + ParseFloat(circle_hyst)```` Спасибо spectrekr, с parseFloat конечно работает но это костыль. Проблема заключается в том что я экспериментируя с скриптом заметил странную особенность что иногда всё работает как надо а иногда неправильно. Так как эти переменные часто меняю для всевозможных экспериментов с скриптом по старой привычке менял значение в вкладке "состояние" и всё было хорошо. Когда появилась возможность менять значение переменной в вкладке объекты тут и началось. Bluefox наверно так не должно быть ?
 Такая же история. Когда меняю значение переменной через Telegram через Text2Command, по логу Text2Command отрабатывает чётко, а вот в скрипте, в котором подписка на изменение переменной - он то сразу сработает, то ровно через 5 мин, то вообще не работает…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'); }); } });Хотя есть код - on({id: "mqtt.0.flat129.PIR1", "change": "any"}, function (obj) { pir1 = getState("mqtt.0.flat129.PIR1").val; log('Информацию с дачтка 1 увидели...'); var date = new Date(); log('OK'); sendTo("telegram.0", "Датчик 1!"); log('Датчик 1 отправили!'); });отрабатывает чётко и всегда! В этих случаях вижу лишь одну разницу (в первом скрипте переменная не подтверждена (false), a во втором подтверждена всегда (true). Может в этом причина? Может как-то зависит от версии Node.JS? 
- 
					
					
					
					
 Я с проблемой текст в цифры столкнулся при подключении счётчика через mqtt клиент, счётчик числа передавал, а скрипт их как слова складывал, вот и пришлось искать решение как явно указать что там числа. По поводу подписки на переменную, тоже имею проблему. Явно меняю переменную, процедура отрабатывает, переменная меняется скриптом - процедура в тишине. Отправлено с моего C6603 через Tapatalk 
 
		
	 
		
	