2016-10-25 5 views
0

J'ai un périphérique iot qui fait de la publicité dans mon réseau avec le nom iotdevice.local, je peux envoyer des requêtes http à ce domaine dans mon Windows PC après l'installation de Bonjour. Mais je développe une application ionique à partir de laquelle je communiquerai fréquemment avec cet appareil. Donc j'utilise cordova-zeroconf-plugin. (https://www.npmjs.com/package/cordova-plugin-zeroconf). Je vois les services quand j'ajoute watch pour les services .local. mais ma demande est fausse quand j'utilise iotdevice.local dans la fonction $ http. J'ai ce code app.jsImpossible de communiquer avec l'appareil avec le domaine .local en utilisant 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); 
    } 
    }); 


} 

Il fonctionne très bien et dans les journaux je vois mon appareil

{ "action": "ajoutée", "service": { "l'application ":" http "," domaine ":" local "," port ": 80," nom ":" iotdevice "," serveur ":" iotdevice.local. "," description ":" \ 00 "," protocole " ":" tcp "," qualifiedname ":" iotdevice._http._tcp.local. "," type ":" _ http._tcp.local. "," txtRecord ": {}," adresses ": [" 192.168.0.4 "]," urls ": [" http://192.168.0.4:80 "]}}

Mais quand je l'utiliser dans 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; 
     }); 
    } 

Il ne fonctionne pas. Le statut de la demande est toujours -1. quelqu'un peut-il m'aider comment je peux faire face à son. Est-ce que je fais quelque chose de fondamentalement faux?

+0

Essayez de remplacer if (action == 'added') avec if (action == 'resolved'). Cela a fonctionné pour moi. – alfredo

Répondre

1

Utilisez l'adresse IP au lieu de http://iotdevice.local. .Utilisez http://192.168.0.4:80. En espérant que cela fonctionne.

+0

Non, le problème est que je ne peux pas utiliser IP, parce que je ne connais pas toujours l'IP, c'est dynamique et peut changer quand l'état du routeur change. C'est la raison pour laquelle j'ai un domaine .local fixe, qui devrait toujours fonctionner même si IP change. –

+0

Dans 'zeroconf.watch' vous obtenez l'IP dynamique. Vous pouvez utiliser cette IP dynamique – Homen

+0

Ouais, merci pour cela, je vais l'utiliser seulement jusqu'à ce que je trouve une meilleure solution, car cela impliquera de garder le journal de tous les IPS temps pour tous les appareils. et une couche supplémentaire sur la partie communication. Merci quand même. –