NEWS
Вопросы по написанию скриптов
-
Возможно ли средствами 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
-
Такая же история. Когда меняю значение переменной через 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'); }); } }); ```` `
А что ты пытаешся этим скриптом сделать? сколько времени у тебя отрабатывает функция 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');
});
});
});
});
! }
}); -
Потому что их обрабатывает как текстовые, делайте через````
parseFloat(temp_base) + ParseFloat(circle_hyst)````
Спасибо spectrekr, с parseFloat конечно работает но это костыль. Проблема заключается в том что я экспериментируя с скриптом заметил странную особенность что иногда всё работает как надо а иногда неправильно. Так как эти переменные часто меняю для всевозможных экспериментов с скриптом по старой привычке менял значение в вкладке "состояние" и всё было хорошо. Когда появилась возможность менять значение переменной в вкладке объекты тут и началось. Bluefox наверно так не должно быть ?
Это не костыль, это JS -
А что ты пытаешся этим скриптом сделать? сколько времени у тебя отрабатывает функция 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');});
! }
}); -
Потому что их обрабатывает как текстовые, делайте через````
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'); }); });