2016-10-25 8 views
0

У меня есть устройство iot, которое рекламируется в моей сети с именем iotdevice.local, я могу отправлять http-запросы в этот домен в моем windows pc после установки Bonjour. Но я разрабатываю ионное приложение, из которого я буду часто общаться с этим устройством. Так что я использую cordova-zeroconf-plugin. (https://www.npmjs.com/package/cordova-plugin-zeroconf). Я вижу услуги, когда добавляю часы для .local услуг. но моя requestis faield, когда я использую iotdevice.local в функции $ http. У меня есть этот код App.jsНе удается связаться с устройством с .local доменом с помощью android, corova-zeroconf-plugin

if (window.cordova && window.cordova.plugins && window.cordova.plugins.Keyboard) { 
    cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true); 
    cordova.plugins.Keyboard.disableScroll(true); 
    console.log("device ready"); 
    var zeroconf = cordova.plugins.zeroconf; 
    zeroconf.watch('_http._tcp.local.', function(result) { 
    var action = result.action; 
    var service = result.service; 
    console.log(JSON.stringify(result)); 
    if (action == 'added') { 
     console.log('service added', service); 
    } else { 
     console.log('service removed', service); 
    } 
    }); 


} 

Он отлично работает и в журналах я вижу мое устройство

{ "действие": "добавил", "сервис": { "приложений протокол \ 00 " " ":" HTTP", "домен": "местный", "порт": 80, "имя": "iotdevice", "сервер":: "iotdevice.local", "описание"." ":" TCP " "QualifiedName": " iotdevice._http._tcp.local", "тип": "_ http._tcp.local", "txtRecord.": {}, "адрес": [" 192.168.0.4 "]," URL-адреса ": [" http://192.168.0.4:80 "]}}

Но когда я использую это в controller.js -

$scope.sendRequest2 = function(){ 
    $http({ 
     method: 'GET', 
     url: 'http://iotdevice.local/events?id=600194067eba&action=socket1off' 
    }).then(function successCallback(response) { 
     $scope.req2succes=true; 
     console.log("Sent"); 
     }, function errorCallback(response) { 
     console.log(JSON.stringify(response)); 
     console.log("Could not Sent"); 
     $scope.req2succes=false; 
     }); 
    } 

Это не работает. Статус запроса всегда равен -1. может кто-нибудь помочь мне, как я могу справиться с ним. Я делаю что-то принципиально неправильно?

+0

Попробуйте заменить if (action == 'added') с if (action == 'resolved'). Это сработало для меня. – alfredo

ответ

1

Используйте IP-адрес вместо http://iotdevice.local.. Используйте http://192.168.0.4:80. Надейтесь, что это сработает.

+0

Noh, проблема в том, что я не могу использовать IP, потому что я не всегда знаю IP, он динамический и может меняться при изменении состояния маршрутизатора. вот почему у меня есть фиксированный локальный домен, который всегда должен работать, даже если IP изменяется. –

+0

В 'zeroconf.watch' вы получаете динамический IP-адрес. Вы можете использовать этот динамический IP-адрес – Homen

+0

Да, спасибо за это, я буду использовать это только до тех пор, пока не найду лучшее решение, потому что это будет включать в себя ведение журнала ips всех время для всех устройств. и еще один слой над коммуникационной частью. Спасибо, в любом случае. –