Como enviar y recibir mensajes entre su dispositivo y el concentrador de IoT de Azure


Una  vez que tenemos   un   dispositivo compatible con Azure Iot  (  como por ejemplo una Raspberry pi  3 como vimos   , o  desde un ESP8266   como vimos también recientemente  ) , los hemos  configurado  y   hemos  implementado una aplicación de ejemplo para ejecutar en el dispositivo que envié envíe datos que   los sensores recogen a su hub de IoT , puede  que  queramos intentar gestionar la mensajería en la nube del  dispositivo IoT  

Precisamente  en este contexto  surge  iothub-explorer que pone a  nuestra disposición  varios  comandos para  facilitar la gestión de centro de IoT  permitiéndonos   supervisar mensajes de dispositivo a nube y enviar mensajes de dispositivo de nube.

Los mensajes de dispositivo a nube podrían ser datos de sensores de  un dispositivo  que recolecta y envía a su hub de IoT (   como por ejemplo una Raspberry pi  3 como vimos  en este post , o  desde un ESP8266   como vimos recientemente  en este post )   o   bien los mensajes hacia ese  dispositivo de nube  que  podría ser comandos que IoT hub envía al dispositivo como por ejemplo hacer  parpadear un LED conectado a ese dispositivo.

Resumidamente  hay pues dos usos  muy diferentes del explorador de iothub :

  • Para supervisar mensajes de dispositivo a nube.
  • Para enviar mensajes de dispositivo de nube.

Para ello necesitamos haber completado dos fases:

  1. Haber  configurado el dispositivo , configuración completa que cubre los siguientes requisitos:
    • Haber registrado una cuenta de suscripción a Azure ( la gratuita nos sirve) .
    • Haber registrado un centro de Azure IoT ( una vez mas  también existe una modalidad gratuita para probar el  servicio).
    • Una aplicación de cliente que envíe mensajes a su hub de IoT de Azure.
  2. Haber instalado el  explorador de iothub. (Instalar explorer iothub)

Instalación de iothub-explorer

Iothub Explorer es pues una herramienta CLI para administrar las identidades de los dispositivos en su registro de IoT hub, enviar y recibir mensajes y archivos desde sus dispositivos, y monitorear sus operaciones de centros de IoT. Ademas iothub-explorer también permite simular un dispositivo conectado a su hub de IoT.

En post  anteriores  vimos  como con  una Raspberry pi  3 , o  desde un ESP8266    los   configurábamos   e  implementamos sendas aplicaciones para ejecutar en esos dispositivos procesos para enviar datos de telemetria  procedente de sus  sensores a un  hub de IoT en la nube de Azure Iot Edge

Bien, tenemos nuestra aplicación corriendo en el dispositivo de Iot , por lo que necesitamos ahora instalar el  explorador de iothub. Desgraciadamente no esta disponible para ambiente windows , es decir solo lo podemos ejecutar por el momento en equipos con Linux instalado. Ademas esta herramienta requiere la versión 4.x o superior de Node.js para que funcionen todas las características.

Para instalar la última versión de la herramienta iothub-explorer, ejecute el siguiente comando en su entorno de línea de comandos:

npm install -g iothub-explorer

En caso de querer instalar esta utilidad en una Raspberry pi  desde Raspbian, al no estar disponible el comando npm  instalarlo siguiendo estos pasos:

cd ~
git clone https://github.com/azure/iothub-explorer

gitclone

Manejo de iothub-explorer

Una vez isntalada esta utilidad ,puede usar el siguiente comando para obtener ayuda adicional sobre todos los comandos de ihotub-explorer:

$ iothub-explorer help
Usage: iothub-explorer [options] <command> [command-options] [command-args]


  Commands:

    login                           start a session on your IoT hub
    logout                          terminate the current session on your IoT hub
    list                            list the device identities currently in your IoT hub device registry
    create <device-id|device-json>  create a device identity in your IoT hub device registry
    delete <device-id>              delete a device identity from your IoT hub device registry
    get <device-id>                 get a device identity from your IoT hub device registry
    import-devices                  import device identities in bulk: local file -> Azure blob storage -> IoT hub
    export-devices                  export device identities in bulk: IoT hub -> Azure blob storage -> local file
    send <device-id> <message>      send a message to the device (cloud-to-device/C2D)
    monitor-feedback                monitor feedback sent by devices to acknowledge cloud-to-device (C2D) messages
    monitor-events [device-id]      listen to events coming from devices (or one in particular)
    monitor-uploads                 monitor the file upload notifications endpoint
    monitor-ops                     listen to the operations monitoring endpoint of your IoT hub instance
    sas-token <device-id>           generate a SAS Token for the given device
    simulate-device <device-id>     simulate a device with the specified id
    help [cmd]                      display help for [cmd]

  Options:

    -h, --help     output usage information
    -V, --version  output the version number

Cada comando iothub-explorer tiene su propia ayuda ,la cual  se puede ver pasanDdo el argumento -help (ayuda)  al nombre del comando:

$ iothub-explorer help create

  Usage: iothub-explorer create [options] [device-id|device-json]
  
  Create a device identity in your IoT hub device registry, either using the specified device id or JSON description.

  Options:

    -h, --help                       output usage information
    -a, --auto                       create a device with an auto-generated device id
    -cs, --connection-string         show the connection string for the newly created device
    -d, --display <property-filter>  comma-separated list of device properties that should be displayed
    -l, --login <connection-string>  connection string to use to authenticate with your IoT Hub instance
    -k1, --key1 <key>                specify the primary key for newly created device
    -k2, --key2 <key>                specify the secondary key for newly created device
    -r, --raw                        use this flag to return raw JSON instead of pretty-printed output
    -x, --x509                       generate an x509 certificate to authenticate the device
    -dv, --daysValid                 number of days the x509 certificate should be valid for
    -t1, --thumbprint1 <thumbprint>  specify the primary thumbprint of the x509 certificate
    -t2, --thumbprint2 <thumbprint>  specify the secondary thumbprint of the x509 certificate

 

Puede obtener mas  información en  https://github.com/azure/iothub-explorer

Monitor dispositivo a nube mensajes

Para supervisar los mensajes que se envían desde el dispositivo a su hub de IoT, siga estos pasos:

  1. Abra una ventana de consola.
  2. Ejecute el siguiente comando:iothub-explorer monitor-events <device-id> --login "<IoTHubConnectionString>"
  3. Obtener y de su hub de IoT. Asegúrese de que haya terminado el tutorial anterior. O puedes probar a utilizar si tienes, y.<device-id><IoTHubConnectionString>iothub-explorer monitor-events <device-id> --login "HostName=<my-hub>.azure-devices.net;SharedAccessKeyName=<my-policy>;SharedAccessKey=<my-policy-key>"HostNameSharedAccessKeyNameSharedAccessKey

Enviar mensajes de dispositivo de nube

Para enviar un mensaje desde su hub de IoT en el dispositivo, siga estos pasos:

  1. Abra una ventana de consola.
  2. Iniciar una sesión en su hub de IoT ejecutando el siguiente comando:
    Bash Copia
    iothub-explorer login `<IoTHubConnectionString>`
    
  3. Enviar un mensaje a su dispositivo ejecutando el siguiente comando:
    Bash Copia
    iothub-explorer send <device-id> <message>
    

El comando hace parpadear el LED que está conectado a su dispositivo y envía el mensaje al dispositivo.

Nota:No es necesario para el dispositivo envie un comando ack separado a su hub de IoT al recibir el mensaje.

 

Anuncios

Edge computing con Azure IoT Edge


La computación en nube (o Cloud Computing) ha dominado las discusiones de TI durante las últimas dos décadas, particularmente desde que Amazon popularizó el término en 2006 con el lanzamiento de Elastic Compute Cloud (ECC) . En su forma más simple, la computación en la nube es la centralización de los servicios informáticos para aprovechar una infraestructura de centro de datos compartida y gracias a la economía de escala para reducir los costos.

Sin embargo, la latencia, influenciada por el número de saltos de enrutadores,los  retrasos en los paquetes introducidos por la virtualización o la ubicación del servidor dentro de un centro de datos, siempre ha sido una cuestión clave de la migración en la nube y es aquí es donde entra en juego el Edge Computing (computación al borde) donde esencialmente se descentralizan los servicios de TI y acercándolos a la fuente de datos, lo cual puede tener un impacto significativo en la latencia, ya que puede reducir drásticamente el volumen de datos movidos y la distancia que recorre.

La naturaleza distribuida de la informática de borde significa que, junto con la reducción de la latencia  también mejora la resiliencia, reduce la carga de la red y es más fácil de escalar .

El procesamiento de los datos comienza en su origen  y una vez que se completa el procesamiento inicial, solo se deben enviar los datos que necesitan un análisis posterior o que requieren otros servicios lo cual  reduce los requisitos de red y la posibilidad de cuellos de botella en cualquier servicio centralizado.

Además, con otras ubicaciones de borde cercanas,  la posibilidad de almacenar datos en caché en el dispositivo, puede enmascarar interrupciones y mejorar la resistencia de su sistema lo cual  reduce la necesidad de escalar sus servicios centralizados ya que manejan menos tráfico. Ademas de la reducción del trafico  con el consiguiente mejora   también pueden reducir los costos, la complejidad de la arquitectura y la administración.

 

Azure IoT Edge

Las soluciones de nube híbrida e Internet de las cosas (IoT) son una realidad con Azure IoT Edge  un servicio completamente administrado que entrega inteligencia en la nube localmente implementando y ejecutando sin problemas inteligencia artificial, servicios Azure y lógica personalizada directamente en dispositivos IoT multiplataforma, desde una pequeña Raspberry Pi hasta grandes máquinas industriales administrando todo de manera centralizada en la nube  de Microsoft.

Algunas de las facilidades  que puede proporcionar esta   plataforma:

  • Habilitar inteligencia artificial y análisis avanzados en el borde:permite crear análisis avanzados, usar aprendizaje automático e inteligencia artificial en la nube y desplegarlo en dispositivos físicos utilizando IoT Edge. Un ecosistema de servicios de Azure y de terceros  ayudará a habilitar nuevas aplicaciones de IoT en sus dispositivos de borde. Se puede usar  Azure Machine Learning, Azure Stream Analytics, Azure Functions para crear soluciones de IoT más avanzadas con menos tiempo y esfuerzo.Cree fácilmente AI en el borde con AI Toolkit for Azure IoT Edge.
  • Reducir los costos de la solución IoT:Decida qué datos de IoT debe capturar y enviar a la nube programando su dispositivo de borde para procesar los datos localmente. Luego, envíe solo los datos que necesita almacenar y analizar en la nube. Al reducir la cantidad de datos que transmite de un dispositivo a la nube, reducirá los costos de ancho de banda y los costos asociados con el almacenamiento y análisis de datos en otras aplicaciones de negocios, pero aún así se beneficiará de las perspectivas mejoradas.
  • Simplificar el desarrollo:Facilite los esfuerzos de desarrollo para soluciones avanzadas de IoT aprovechando las habilidades y los recursos que ya tiene. Utilice herramientas de programación conocidas como Visual Studio y múltiples lenguajes de programación, incluidos C, Node.js, Java, Microsoft .NET y Python para optimizar y monitorear su solución de IoT, y aplique correcciones cuando sea necesario. Utilice los mismos modelos de programación que usa en la nube para crear y probar sus aplicaciones de IoT y luego empújelas a sus dispositivos de borde.
  • Operar fuera de línea o con conectividad intermitente:Con IoT Edge, sus dispositivos periféricos pueden operar de manera confiable y segura incluso cuando están desconectados o solo tienen conectividad intermitente a la nube. Una vez reconectados, los dispositivos periféricos sincronizan automáticamente su estado más reciente y continúan funcionando sin problemas, independientemente de la conectividad en curso.

 

Ejemplo de Azure IoT Edge

Podemos  probar gratuitamente  la interfaz en la nube Azure IoT Edge para implementar el código preconstruido de forma remota en un dispositivo IoT Edge.  Para realizar esta tarea, primero se necesita usar un dispositivo Windows para simular un dispositivo IoT Edge y  luego puede implementar un módulo en él.

Vamos a describir los pasos  a seguir pero antes si no tiene una cuenta activa a Azure, cree una cuenta gratuita antes de comenzar.

Requisitos previos

Asumims que está usando un ordenador  o máquina virtual que ejecuta Windows para simular un dispositivo de Internet de las cosas.  Si está ejecutando Windows en una máquina virtual, habilite la virtualización anidada y asigne al menos 2GB de memoria.

  1. Asegúres de estar usando una versión compatible con Windows:
    • Windows 10 Windows 10
    • Windows Server Servidor de windows
  2. Instale Docker para Windows y asegúrate de que esté ejecutándose.
  3. Instale Python 2.7 en Windows y asegúrese de que puede usar el comando pip.
  4. Ejecute el siguiente comando para descargar el script de control IoT Edge.
    cmdCopy
    pip install -U azure-iot-edge-runtime-ctl

Nota: Azure IoT Edge puede ejecutar contenedores de Windows o Linux.  Para usar contenedores de Windows, debe ejecutar:

  • Windows 10 Fall Creators Update, , o
  • Windows Server 1709 (Build 16299) o
  • Windows IoT Core (Build 16299) on a x64-based device Windows IoT Core (compilación 16299) en un dispositivo basado en x64

 Para Windows IoT Core, siga las instrucciones en Instalar el tiempo de ejecución de IoT Edge en Windows IoT Core . De lo contrario, simplemente configure Docker para usar contenedores de Windows y, opcionalmente, valide sus requisitos previos con el siguiente comando de PowerShell:

PowerShellCopy
Invoke-Expression (Invoke-WebRequest -useb https://aka.ms/iotedgewin)

Crear un concentrador de IoT con Azure CLI

Cree un concentrador de IoT en su suscripción de Azure.  El nivel gratuito de IoT Hub funciona para este inicio rápido. . Si ya usó IoT Hub y ya tiene un hub gratuito creado, puede omitir esta sección y pasar a Registrar un dispositivo IoT Edge  (en cada suscripción solo puede tener un centro IoT gratuito).

  1.  Inicie sesión en el portal de Azure .
  2.  Seleccione el botón Cloud Shell .Botón Cloud Shell
  3.  Cree un grupo de recursos. : El siguiente código crea un grupo de recursos llamado IoTEdge en la región oeste de EE. UU . :
    Azure CLICopy
    az group create --name IoTEdge --location westus
  4. . Cree un concentrador de IoT en su nuevo grupo de recursos. : El siguiente código crea un concentrador F1 gratuito llamado MyIotHub en el grupo de recursos IoTEdge :
    Azure CLICopy
    az iot hub create --resource-group IoTEdge --name MyIotHub --sku F1

 Registrar un dispositivo IoT Edge

Cree una identidad de dispositivo para su dispositivo simulado para que pueda comunicarse con su centro de IoT. Dado que los dispositivos IoT Edge se comportan y pueden administrarse de forma diferente a los dispositivos IoT típicos, usted declara que se trata de un dispositivo IoT Edge desde el principio.

  1. . En el portal de Azure, vaya a su centro de IdC.
  2.  Seleccione IoT Edge (vista previa) luego seleccione Agregar IoT Edge Device .Agregar dispositivo Edge IoT
  3. . Dele a su dispositivo simulado una ID de dispositivo única.
  4.  Seleccione Guardar para agregar su dispositivo.
  5. Seleccione su nuevo dispositivo de la lista de dispositivos.
  6. Copie el valor de la cadena de conexión-clave principal y guárdelo.  Utilizará este valor para configurar el tiempo de ejecución IoT Edge en la siguiente sección.

Configurar  IoT Edge runtime 

En tiempo de ejecución de IoT Edge se implementa en todos los dispositivos IoT Edge, el cual  comprende dos módulos:

  •   El agente IoT Edge que facilita la implementación y la supervisión de módulos en el dispositivo IoT Edge.  
  • El concentrador IoT Edge que gestiona las comunicaciones entre los módulos en el dispositivo IoT Edge y entre el dispositivo y el IoT Hub.

Configure el tiempo de ejecución con su cadena de conexión del dispositivo IoT Edge de la sección anterior.

cmdCopy
iotedgectl setup --connection-string "{device connection string}" --auto-cert-gen-force-no-passwords

Comience el tiempo de ejecución.

cmdCopy
iotedgectl start

 Compruebe Docker para ver que el agente IoT Edge se está ejecutando como un módulo.

cmdCopy
docker ps

Ver edgeAgent en Docker

 Implementar un módulo

 Una de las capacidades clave de Azure IoT Edge es la posibilidad de implementar módulos en sus dispositivos IoT Edge desde la nube.  Un módulo IoT Edge es un paquete ejecutable implementado como un contenedor.

En este ejemplo desplegaremos un módulo que genera telemetría para su dispositivo simulado.

  1. En el portal de Azure, vaya a su centro de IdC.
  2. Vaya a IoT Edge (vista previa) y seleccione su dispositivo IoT Edge.
  3. Seleccione Establecer módulos .
  4. . Seleccione Agregar IoT Edge Module .
  5. . En el campo Nombre , ingrese tempSensor .
  6. . En el campo URI de la imagen , ingrese microsoft/azureiotedge-simulated-temperature-sensor:1.0-preview .
  7. Deje las otras configuraciones sin cambios, y seleccione Guardar .Guarde el módulo IoT Edge después de ingresar el URI de nombre e imagen
  8. . De vuelta en el paso Agregar módulos , seleccione Siguiente .
  9.  En el paso Especificar rutas , seleccione Siguiente .
  10. . En el paso de la plantilla Revisar , seleccione Enviar .
  11.  Regrese a la página de detalles del dispositivo y seleccione Actualizar . Debería ver el nuevo módulo tempSensor ejecutándose a lo largo del tiempo de ejecución de IoT Edge.Ver tempSensor en la lista de módulos implementados

 Ver datos generados

 En este ejemplo rápido, creó un nuevo dispositivo IoT Edge e instaló en tiempo de ejecución IoT Edge en él.  Luego, utilizó el portal de Azure para impulsar un módulo IoT Edge para que se ejecute en el dispositivo sin tener que realizar cambios en el dispositivo.

En este ejemplo el módulo que creo  transmite  datos ambientales que puede usar para los tutoriales,pero en una instalacion habitual manejaria muchos mas datos de telemetria,sensores, etc.

Para  ver si todo esta funcionando ,abra el símbolo del sistema en su ordenador  que ejecuta su dispositivo simulado de nuevo.  Confirme que el módulo implementado desde la nube se está ejecutando en su dispositivo IoT Edge.

cmdCopy
docker ps

Ver tres módulos en su dispositivo

 Vea los mensajes que se envían desde el módulo tempSensor a la nube.

cmdCopy
docker logs -f tempSensor

Ver los datos de tu módulo

También puede ver la telemetría que está enviando el dispositivo utilizando la herramienta de explorador IoT Hub .

 Limpiar recursos

Si desea eliminar el dispositivo simulado que creó, junto con los contenedores Docker que se iniciaron para cada módulo, use el siguiente comando:

cmdCopy
iotedgectl uninstall

Cuando ya no necesite el IoT Hub que ha creado, puede usar el comando az iot hub delete para eliminar el recurso y los dispositivos asociados con él:

Azure CLICopy
az iot hub delete --name {your iot hub name} --resource-group {your resource group name}

Obviamente esto es solo el primer paso para comprender la potencia de esta tecnología pues el  paso obvio es usar hardware dedicado de bajo consumo como puede ser ene fecto uan Raspberry Pi   para usarlo como dispositivo Iot Edge

 

Fuente : https://docs.microsoft.com/en-us/azure/iot-edge/quickstart

Concurso Casa inteligente con Arduino y Alexa


Alexa es el servicio de voz de Amazon y el “cerebro” que hay detrás de millones de dispositivos como el Amazon Echo. La gente usa Alexa para controlar dispositivos domésticos inteligentes millones de veces al día.

De Arduino , hemos hablado muchas veces  es este blog , es una plataforma de electrónica de código abierto basada en hardware y software fácil de usar destinada a cualquier persona que realice proyectos interactivos.

La comunidad de fabricantes de Arduino (estudiantes, aficionados, artistas, programadores y profesionales) se ha reunido en torno a esta plataforma de código abierto, sus contribuciones se han añadido a una cantidad increíble de conocimiento accesible que puede ser de gran ayuda para principiantes y expertos por igual.

En este concurso  invitan a cualquier aficionado o profesional  a trabajar  con estos líderes de la industria para visualizar y construir el futuro de los hogares inteligentes.

 

En el vídeo nos explican en que consiste el reto

En este concurso, Hackster ha reunido a Alexa y Arduino, un líder en hardware de código abierto.

Invitan  a crear un proyecto que visualice el futuro de los hogares inteligentes. Aquí hay algunas ideas potenciales para comenzar:

  • Automatización de la temperatura ambiente
  • Control de iluminación personalizado
  • Sistemas de seguridad y timbre
  • Entretenimiento y comida para mascotas
  • Control y gestión de jardines
  • Transmisión multimedia en dispositivos
  • Monitoreando casi todo

Si no tiene un dispositivo Amazon Alexa, puede usar Echosim.io para probar virtualmente sus habilidades de Alexa. Use la API Alexa Smart Home para crear fácilmente capacidades, toque las API de autoservicio, la documentación, las plantillas y las muestras de códigos que lo guiarán rápidamente hacia la publicación de Habilidades. Use el Servicio de voz de Alexa para integrar Alexa en su producto usando el SDK y las API.

Aquí tiene los premios que puede ganar:

  • Mejor ganador general de habilidades de Smart Home en Alexa: $ 14,000 en efectivo, paquete de Kickstarter: Fondo promocional de videos y marketing, certificación Dragon Innovation, una sesión de entrenamiento en Kickstarter de 60 minutos (lleve su proyecto al producto)
  • La mejor habilidad y artefacto para interiores Smart Home de Alexa: $ 8,000 en efectivo + 60 minutos de entrenamiento en Kickstarter
  • Mejor habilidad al aire libre de Alexa Smart Home Skad & Gadget: $ 8,000 en efectivo + 60 minutos de entrenamiento en Kickstarter
  • Comodines y aditamentos caseros de Smartcard de Alexa: $ 6,000 en efectivo + 60 minutos de entrenamiento en Kickstarter
  • Mejor integración y gadget de servicio de voz de Alexa: $ 8,000 + 60 minutos de entrenamiento de Kickstarter
  • NOTA: Hackster solo realiza premios en efectivo a través de PayPal.

Calendario del concurso :

  • La presentación del proyecto se abrió  el 21 de noviembre de 2017 a las 8:01 a.m. PT
  • Fecha límite para envío de proyectos 24 de febrero de 2018 a las 11:59 p.m. PT
  • Los ganadores se anunciaran el 12 de marzo de 2018 a las 11:59 p.m. PT

 

Incripcion en  el concurso 

  1.  Registro para el concurso en https://www.hackster.io/contests/alexasmarthome 
  2. Comience por crear una cuenta gratuita en Hackster.io (o inicie sesión si ya es miembro)
  3. Regístrese para el concurso haciendo clic en “Registrarse como participante”
  4. Ingrese para ganar los premios mayores al crear y enviar su proyecto
  5. Cree su proyecto usando la API de Amazon Smart Home, y / o Amazon Voice Service y cualquier producto Arduino
  6. Envíe su proyecto antes del 24 de febrero de 2018 a las 11:59 p.m. PT

 

 

Algunos recursos:

 

 

 

 

 

 

Los ganadores serán anunciados en esta página antes del 12 de marzo de 2018 a las 11:59 p.m. PT. ¡Buena suerte!

Servicios gratuitos sobre informacion del tiempo


OpenWeatherMap es un servicio en línea que proporciona datos meteorológicos , incluyendo datos meteorológicos actuales,pronósticos y datos históricos a los desarrolladores de servicios web y aplicaciones móviles.

Para fuentes de datos, utiliza servicios de radiodifusión meteorológica, datos en bruto de estaciones meteorológicas de aeropuertos , datos brutos de estaciones de radar y datos en bruto de otras estaciones meteorológicas oficiales.

OpenWeatherMap procesa todos los datos de forma que intente proporcionar datos precisos de pronóstico del tiempo en línea y mapas meteorológicos, como los de las nubes o la precipitación .Más allá de eso, el servicio se centra en el aspecto social mediante la participación de los propietarios de estaciones meteorológicas en la conexión con el servicio y con ello aumentar la precisión de los datos meteorológicos.

Como vemos la filosofía que hay detrás de este servicio   está inspirada en OpenStreetMap y Wikipedia que hacen que la información sea gratuita y disponible para todos,tanto es así que uiliza OpenStreetMap para la visualización de mapas meteorológicos .

Veamos algunos usos e este interesante  servicio:

El tiempo actual y los pronósticos en tu ciudad

 A través de  este servicio podemos ver  el  estado actual del tiempo en cualquier ciudad importante del mundo como  por ejemplo Londres :

Weather London , GB15 °C

Few clouds

00:40 Sep 7Wrong data?

Wind Light breeze, 2.6 m/s, West-northwest ( 290 )
Cloudiness Few clouds
Pressure 1019 hpa
Humidity 55 %
Sunrise 07:22
Sunset 20:33
Geo coords [51.51-0.13]

Los datos actuales se actualizan cada diez minutos; se puede buscar por ciudad o por coordenadas geográficas en la Tierra.

Previsión del Tiempo

También permite obtener no solo  el tiempo actual sino el  pronóstico diario de 16 días y pronóstico de 3 horas cada 5 días para su ciudad. Estadísticas útiles, gráficos y este día en las cartas de la historia están disponibles para su referencia. Mapas interactivos muestran precipitaciones, nubes, presión, viento alrededor de su ubicación.

Las previsiones meteorológicas se pueden buscar por ciudad o por coordenadas. Los pronósticos de tres horas están disponibles por hasta 5 días, mientras que los pronósticos diarios están disponibles por hasta 16 días.

Mapas del tiempo

Nos permite ver el tiempo actual  en áreas del planeta que deseemos

...

Clima actual

Podemos observar la temperatura actual y las condiciones meteorológicas en su ciudad o cualquier otra ubicación en el mapa global interactivo.

...

Capas meteorológicas

Hay una variedad de mapas están disponibles incluyendo precipitación, nubes, presión, temperatura, viento, y muchos más.

...

Mapa de satélite diario

Proporciona en tiempo real el  mapa diario global ,mientras que los datos del satélite están disponibles para darle la descripción entera de fenómenos del tiempo.

El servicio OpenWeatherMap ofrece un montón de mapas meteorológicos incluyendo precipitaciones, nubes, presión, temperatura, viento y muchos otros. Los mapas se pueden conectar a aplicaciones móviles y sitios web. Los mapas meteorológicos se pueden conectar como capas a la amplia gama de mapas, incluyendo azulejos Directos, WMS ,OpenLayers , folletos , mapas de Google y mapas de Yandex .

Gestión de campañas basadas en el clima de Google con OpenWeatherMap API

También permite ejecutar campañas publicitarias con API de tiempo OpenWeatherMap a través de Google AdWords.

APIs meteorológicas para desarrolladores

Hay un montón de entrenamiento con las API de tiempo en PHP, Java, Python, Go y muchos otros en la página de Partners junto con más de 1500 repositorios en GitHub

OpenWeatherMap proporciona una API con terminales JSON , XML y HTML y un nivel limitado de uso libre. Realizar más de 60 llamadas por minuto requiere una suscripción pagada a partir de USD 40 por mes. El acceso a datos históricos requiere una suscripción a partir de 150 USD al mes.  Los usuarios pueden solicitar información meteorológica actual, pronósticos extendidos y mapas gráficos (que muestran la cobertura de nubes, la velocidad del viento, la presión y la precipitación).

Las APIs como vamos a ver en el ejemplo , son sencillas y rápidas permitiendo el acceso al tiempo actual, a pronósticos, mapas y datos históricos en formatos JSON, XML y HTML. Además  una variedad de capas del mapa está disponible incluyendo precipitación, nubes, presión, temperatura, viento, y muchos más.

Conectar  una estación meteorológica a OpenWeatherMap

Cuenta  con una  red de estaciones meteorológicas privadas (más de 40.000 estaciones meteorológicas en todo el mundo)  peor también puede conectar su estación meteorológica a OpenWeatherMap y obtener una interfaz conveniente para recopilar y supervisar los datos de su estación meteorológica. También puede integrar los datos de su estación meteorológica en su página principal

Ejemplo

 

Como ejemplo vamos  a ver  como usar el servicio gratuito OpenWeatherMap para recuperar las condiciones meteorológicas de una ubicación.

Antes de poder utilizar el servicio, debe configurar una cuenta y solicitar una clave de API para su API Condiciones actuales.

Apunte su navegador a OpenWeatherMap y configure una cuenta.

 

weather.PNG

 

La  url  de acceso es  la siguiente  https://openweathermap.org

El sistema de geocodificación OpenWeatherMap permite a los usuarios seleccionar ciudades por nombre, país, código postal o coordenadas geográficas. Es posible buscar por parte del nombre de la ciudad. Para que el resultado de la búsqueda sea más preciso, el nombre de la ciudad y el país se deben dividir por comas

La url  anterior  admite el parametro city  para  que nos de el tiempo actual y la previsión de 13 días de tras directamente desde la url , por ejemplo para Almeria  es 2521886   y esta es la url completa :https://openweathermap.org/city/2521886

Para registrarnos nos  iremos  a https://home.openweathermap.org/users/sign_up

 

signin

 

Ingresaremos   un login ( normalmente el nombre de usuario ), un email así como  la clave inicial , y con esto ya nos daría acceso a la herramienta

 

 

Una vez que tenga un inicio de sesión válido, vaya a la página API del servicio y suscríbase al servicio de datos Tiempo actual y, a continuación, genere una clave de API.

 

Obviamente  anote la clave de la API  pues lo necesitara  para usarla en su aplicación ( por ejemplo si usa node.js e  Ionic en el código TypeScript de la aplicación)

El futuro del IoT


Estamos empezando a ver es un mundo donde todo está conectado y todo es accesible  impulsado por la gran revolución propiciada por el  Iot  (Internet de las Cosas ) , es decir la tecnología que permite a  cualquier dispositivo simple o complejo,  gracias a la conectividad a internet ,ser capaz  no solo de enviar de información en tiempo real de su estado  y de ingentes diferentes variables físicas,   sino también interactuar con el medio .

En este breve vídeo podemos vemos  prototipos de  tecnología ya existente  como la maleta que nos sigue , el coche autónomo.   o las notificaciones complejas en  nuestro smartwatch , todas ellas en fase muy avanzada de diseño y   que sin duda   inundaran nuestras vidas en un futuro muy próximo,

Ya no hablamos del “Internet de las Cosas”, sino del IoE (Internet of Everywhere), de una nueva economía donde convivan más de 100.000 billones de dispositivos conectados   (aproximadamente allá en el horizonte de  2025)  donde, no solo  nuestro hogar sera accesible por nuestro propio smartphone  sino cualquier cosa que nos rodee como wereables , medios de transporte ,  etc.

Según analistas en unos años  asistiremos  a que cerca del  10% de la población mundial contara  con algún tipo de prenda de vestir comunicada con Internet, ( incluso incluyendo gafas graduadas)  así que la hipótesis   del smartphone   en el centro de nuestra vida digital incluso cambie , porque las cosas aun pueden cambiar mas , por ejemplo sustituyéndo  nuestro compañero inseparable  por  implantes, algún nuevo wereable   o cualquier otra nueva tecnología  que aparezca,

 

Sin duda  ,la carrera  solo acaba de empezar y ya se deslumbran sus enormes  posibilidades  , así que  la carrera  no acaba mas que empezar   y sin duda  veremos cada  vez mas  como el   IoT conectará a personas de todo el mundo para ayudarnos a concentrarnos en las cosas que más importan: familia, amigos, salud y felicidad.

Desarrollo de una app hibrida movil con Ionic 2 y Visual Studio


Ionic es un popular framework front-end JavaScript para desarrollar aplicaciones móviles multiplataforma usando Apache Cordova . El Marco Iónico da a las aplicaciones Cordova una apariencia nativa y ajusta automáticamente esa apariencia a través de las plataformas. Puede utilizar Visual Studio 2017 y Visual Studio Tools para Apache Cordova (TACO) para crear y depurar fácilmente aplicaciones multiplataforma Ionic.

En este artículo, vermos como configurar un entorno de desarrollo de Visual Studio 2017 para Ionic 2 y crear una versión Ionic 2 de la aplicación Weather que se muestra a continuación:

Aplicación de Tiempo Acabado

Requisitos

Para administrar, codificar, ejecutar y depurar aplicaciones Ionic 2 utilizando Visual Studio, debe instalar lo siguiente:

  • Visual Studio 2017
  • Herramientas de Visual Studio para Apache Cordova
  • Plantillas de Visual Studio Ionic 2
  • Dependencias de plantillas Ionic 2 (descritas a continuación)

Instalación de las plantillas de Ionic 2

  1. Si aún no lo ha hecho, instale Visual Studio 2017 y TACO.Bajo las portadas, las aplicaciones de Ionic son aplicaciones de Apache Cordova, necesitará un entorno de desarrollo de Cordova funcional antes de poder desarrollar aplicaciones usando Ionic.Compruebe que puede crear y ejecutar la aplicación predeterminada Cordova Blank . En Visual Studio, abra el menú Archivo , seleccione Nuevo y, a continuación, Proyecto . En el cuadro de diálogo del nuevo proyecto, expanda la sección de plantillas de JavaScript , seleccione Aplicaciones móviles y , a continuación, elija la plantilla de aplicación en blanco (Apache Cordova) . Dé al nuevo proyecto un Nombre y Ubicación y luego haga clic en el botón Aceptar . Presione F5 para crear y ejecutar el nuevo proyecto utilizando la nueva opción Simular en explorador . El navegador Chrome debe abrir y mostrar el contenido de la aplicación.
  2. Instale la plantilla de Ionic en Visual Studio seleccionando el menú Herramientas , luego Extensiones y actualizaciones …. En el cuadro de diálogo Extensiones y actualizaciones, seleccione Online . En el cuadro de búsqueda situado en la esquina superior derecha del cuadro de diálogo, escriba Ionic 2 . Seleccione la opción Ionic 2 Templates en la lista. Haga clic en el botón Descargar para iniciar la instalación.              De Como Obtener las Plantillas jónico                                 Los archivos de plantilla se descargarán, a continuación, Visual Studio iniciará automáticamente el proceso de instalación. Cuando se le solicite, haga clic en el botón Instalar para comenzar la instalación.                     Instalación de las Plantillas de Ionic
Nota:Las plantillas Ionic no pueden aparecer en Visual Studio hasta que se reinicie. Cierre y vuelva a abrir Visual Studio antes de continuar.

Creación de un proyecto Ionic en Visual Studio

  1. Crear un nuevo proyecto Ionic. Abra el menú Archivo , seleccione Nuevo y luego Proyecto . En el cuadro de diálogo del nuevo proyecto, expanda la sección de plantillas de TypeScript y, a continuación, seleccione Apache Cordova Apps . Ionic ofrece tres estilos de aplicación por defecto (otras plantillas están disponibles en línea): Blank , Sidemenu y Tabs ; Esto es un proyecto simple, así que selecciona la plantilla en blanco .Asigne al nuevo proyecto un nombre y una ubicación y, a continuación, haga clic en el botón Aceptar . Esta aplicación se convertirá más tarde en nuestro proyecto de aplicación meteorológica, por lo que probablemente debería llamarla aplicación meteorológica o aplicación meteorológica Ionic 2 para guardar el trabajo más tarde.Cuadro de Diálogo Nuevo Proyecto
  2. Compruebe el archivo Readme del nuevo proyecto de Ionic para cualquier herramienta adicional que se debe instalar para utilizar la plantilla.Nodo de dependencias                                                           En el momento de escribir este post, solo necesitará instalar la extensión NPM Task Runner .Los requisitos pueden cambiar a medida que se realizan actualizaciones a las plantillas. Para instalar las extensiones necesarias, abra el menú Herramientasy seleccione Extensiones y actualizaciones . Utilice la búsqueda para localizar e instalar las extensiones requeridas.
  3. Ionic es un marco pesado, que requiere una gran cantidad de herramientas y bibliotecas para operar. Una vez que Visual Studio crea el nuevo proyecto, inicia un proceso para descargar e instalar los componentes necesarios mediante Node Package Manager (npm). Espere unos minutos mientras se instalan los paquetes ncm de Ionic.
    Nota :Este proceso tomará varios minutos dependiendo del sistema y las velocidades de conexión a Internet.

    Para comprobar el progreso, abra el Explorador de soluciones y busque el nodo Dependencias . Debería ver Restaurar … si no lo hace, expanda el nodo Dependencias en el Administrador de soluciones y, a continuación, haga clic con el botón derecho en la carpeta npm y seleccione Restaurar paquetes .

    Nodo de dependencias del Explorador de soluciones

    Puede supervisar el proceso de instalación del paquete a través de la ventana de resultados de Visual Studio. Abra el menú Ver , luego seleccione Salida o utilice el método abreviado de teclado Ctrl-W + O :

    Corredor de tareas

  4. En este punto, usted tiene un proyecto de aplicación Ionic completo listo para funcionar. Para probar y depurar la aplicación en Visual Studio, seleccione una plataforma de destino en la Barra de herramientas estándar, seleccione un dispositivo de destino y pres F5 para ejecutar la aplicación en el destino seleccionado. El desarrollo de aplicaciones iOS requiere alguna configuración adicional                                                                                Aplicación JONICA Que se ejecuta en Android

Creación de la aplicación de tiempo

Ahora, vamos a hacer algo con esta aplicación que creaste. Usted tomará el proyecto de aplicación en blanco y lo convertirá en la aplicación de tiempo mostrada anteriormente. En las siguientes secciones, comenzará agregando una página de Condiciones actuales , luego conectará en un cuadro de búsqueda y, finalmente, agregará un área para mostrar los datos de pronóstico . Empecemos.

La aplicación utiliza el servicio gratuito OpenWeatherMap para recuperar las condiciones meteorológicas de una ubicación. Antes de poder utilizar el servicio, debe configurar una cuenta y solicitar una clave de API para su API Condiciones actuales.Apunte su navegador a OpenWeatherMap y configure una cuenta. Una vez que tenga un inicio de sesión válido, vaya a la página API del servicio y suscríbase al servicio de datos Tiempo actual y, a continuación, genere una clave de API.

Nota :Anote la clave de la API como lo necesitará más adelante en el código TypeScript de la aplicación.

Configuración del proyecto de aplicación

  1. Comience configurando algunas opciones de configuración para la aplicación.En Visual Studio Solution Explorer, haga doble clic en el archivo config.xmldel proyecto. Visual Studio abrirá un editor personalizado como el que se muestra en la siguiente figura:Modificación del archivo Config.xml de la Aplicación                          Como mínimo, establezca los valores de nombre de pantalla y nombre de paquete del proyecto; Puede que también desee actualizar los campos AutorDescripción .
  2. De forma predeterminada, la aplicación muestra datos meteorológicos basados ​​en la ubicación actual del dispositivo, por lo que necesitaremos utilizar el complemento Cordova Geolocation para añadir esta capacidad a nuestra aplicación. Puede utilizar las capacidades de geolocalización incorporadas del navegador, pero Cordova y Ionic proporcionan capacidades especiales que hacen que el uso de la geolocalización en una aplicación de Ionic sea un poco más fácil.Cambie a la pestaña Plugins del editor y seleccione el complemento Geolocation en la lista. Haga clic en el botón Agregar para agregar el complemento al proyecto.Añadiendo el plugin de Geolocalización de Córdova                 Presione la tecla Ctrl + S del teclado para guardar sus cambios, luego cierre el archivo del editor.
  3. Abra el archivo src\index.html del proyecto y cambie el título de la aplicación. Esto no es un paso obligatorio, pero si más tarde prueba la aplicación en el navegador, el título de la aplicación será correcto.
    <title>Weather App Ionic</title>

Generación de un proveedor de tiempo

Ahora, vamos a empezar a trabajar en el código de la aplicación. Por convención, las aplicaciones iónicas segregan fuentes de datos de otros tipos de código de aplicación utilizando un tipo de componente Proveedores especial. Dado que los datos meteorológicos provienen de una fuente externa y no queremos que el código de la aplicación llame directamente al servicio, haremos un proveedor de tiempo y pondremos allí todo el código de acceso a la aplicación.

  1. En el Explorador de soluciones, haga clic con el botón secundario en la carpeta src del proyecto y seleccione Agregar -> Nueva carpeta . Asigne un nombre a los providers carpetas y presione la tecla Intro . Esto crea una carpeta para todos los proveedores que usará la aplicación (solo tendremos una, pero muchas aplicaciones de Ionic tendrán varias).
  2. Haga clic con el botón derecho en la nueva carpeta de providers y seleccione Agregar -> Nuevo elemento . En el cuadro de diálogo que aparece, seleccione Ionic 2 Provider y, en el campo Name , escriba Weather.De Como para contactar el Proveedor de Servicios meteorológicos                                   La CLI de Ionic creará el proveedor en src\providers\Weather.ts
  3. Ahora que usted tiene el proveedor de Weather , usted tiene que decir Ionic sobre él. Abra el archivo src\app\app.module.ts del proyecto y agregue la línea siguiente a la sección de importaciones en la parte superior del archivo:
    import { WeatherProvider } from '../providers/weather';
  4. A continuación, agregue una referencia al proveedor de clima en la matriz de providers del archivo:
    providers: [WeatherProvider, {provide: ErrorHandler, useClass: IonicErrorHandler}]

    Guarde los cambios antes de continuar.

Codificación del proveedor de tiempo

En esta sección, agregaremos código al Proveedor de tiempo para conectarse con la API meteorológica externa y entregar datos a la aplicación.

  1. Abra el archivo src\providers\Weather.ts recién creado y modifique la importación @angular/http en la parte superior del archivo para que se vea como sigue:
    import { Http, Response } from '@angular/http';

    El componente HTTP se carga por defecto en cualquier proveedor, lo que está haciendo aquí es añadir el componente de respuesta que usaremos en el código del proveedor más adelante.

  2. Aún en la parte superior del archivo, agregue una importación que cargue el módulo toPromise :
    import 'rxjs/add/operator/toPromise';

    Cuando haya terminado, la sección de importaciones en la parte superior del archivo se verá así:

    import { Injectable } from '@angular/core'; import { Http, Response } from '@angular/http'; import 'rxjs/add/operator/map'; import 'rxjs/add/operator/toPromise';
  3. En la parte superior de la clase Weather , agregue las siguientes declaraciones de variables:
    private weatherEndpoint = 'http://api.openweathermap.org/data/2.5/'; private weatherKey = '';

    weatherKey variable weatherKey con la clave API que obtuvo anteriormente del servicio meteorológico.

  4. Después del constructor de la clase de weather , agregue el código siguiente:
    getCurrent(loc: any): Promise<any> { let url: string = this.makeDataURL(loc, 'weather'); return this.http.get(url) .toPromise() .then(this.extractData) .catch(this.handleError); } private makeDataURL(loc: any, command: string): string { //Build a weather service URL using the command string and //location data that we have. let uri = this.weatherEndpoint + command; //Do we have a location? if (loc.long) { //then use the 'grographical coordinates' version of the API uri += '?lat=' + loc.lat + '&lon=' + loc.long; } else { //Otherwise, use the zip code uri += '?zip=' + loc.zip; } //Configure output for imperial (English) measurements uri += '&units=imperial'; //Use the following instead for metric //uri += '&units=metric'; //Append the API Key to the end of the URI uri += '&APPID=' + this.weatherKey; //Return the value return uri; } //'Borrowed' from //https://angular.io/docs/ts/latest/guide/server-communication.html private extractData(res: Response) { //Convert the response to JSON format let body = res.json(); //Return the data (or nothing) return body || {}; } //'Borrowed' from //https://angular.io/docs/ts/latest/guide/server-communication.html private handleError(res: Response | any) { console.error('Entering handleError'); console.dir(res); return Promise.reject(res.message || res); }

    Al iniciar, la aplicación pasa la ubicación actual (longitud y latitud) a la función getCurrent . Al buscar una ubicación utilizando un código postal de Estados Unidos, se pasa el código postal en su lugar. getCurrent llama a la API apropiada para obtener los datos meteorológicos actuales, pero usa makeDataURL para dar formato a la URL de la solicitud correctamente dependiendo de si tiene una ubicación o un valor de código postal.

    La función extractData formatea los datos devueltos por la llamada API como JSON. Este código podría ser fácilmente incluido directamente en el método getCurrent , pero como verás más adelante, este código se utiliza más de una vez por la aplicación, por lo que tenía sentido para mover una función separada.

Crear la página Condiciones actuales

  1. Abra el archivo src\pages\home\home.html y reemplace el contenido del archivo por lo siguiente:
    <ion-header> <ion-toolbar> <ion-buttons right> <button ion-button (click)="refreshPage()"> <ion-icon name="refresh"></ion-icon> </button> </ion-buttons> <ion-title> Weather App (Ionic 2) </ion-title> </ion-toolbar> </ion-header> <ion-content padding> <ion-list no-lines> <!--show this if there are no items in the list--> <ion-item [hidden]="c_items.length > 0"> <p><strong>Weather data is not available</strong></p> </ion-item> <!--Display the current conditions data we have --> <ion-item *ngFor="let c_item of c_items"> <p><strong>{{c_item.name}}:</strong> {{c_item.value}}</p> </ion-item> </ion-list> </ion-content> <ion-footer> <ion-toolbar> <ion-title>Visual Studio Tools for Apache Cordova</ion-title> </ion-toolbar> </ion-footer>

    Lo que se ve en el archivo es referencias a componentes iónicos, así como algunos códigos Angulares también. Este marcado es un subconjunto del HTML de la página, el resto se encuentra en los archivos src\index.html y src\app\app.html . En la puesta en marcha, el marco iónico reemplaza el contenido de la etiqueta <ion-app></ion-app> del archivo src\index.htmlarchivo src\app\app.html <ion-nav [root]="rootPage"></ion-nav>continuación, pasa contenido HTML dentro y fuera de esa etiqueta como el usuario utiliza la aplicación. En este caso, cuando la aplicación se inicia, el contenido de la página src\pages\home\home.html se analiza y procesa.

    El encabezado contiene una barra de herramientas que muestra el título de la aplicación y un botón de actualización que el usuario puede tocar para actualizar los datos meteorológicos que se muestran en la página.

    La etiqueta de ion-content define la parte del contenido que comprende el contenido dinámico de la página. En este ejemplo, muestra una <ion-list>de elementos; Básicamente un listview. En este caso, procesa el contenido de la matriz c_items como una lista usando una directiva Angular: *ngFor="let c_item of c_items" que se *ngFor="let c_item of c_items"través de cada elemento de la matriz. A medida que el código loops, asigna cada elemento de la matriz a c_item , entonces el código de plantilla que sigue muestra las propiedades de name y value del objeto c_item . Verá cómo la matriz c_items se rellenará pronto.

  2. Abra el archivo src\pages\home\home.ts del proyecto. En la parte superior del archivo, añada las importaciones para el complemento Geolocalización y el proveedor de clima:
    import { Geolocation, Keyboard } from 'ionic-native'; import { WeatherProvider } from '../../providers/weather';
  3. También en la parte superior del archivo, modifique la importación ionic-angular por lo que se ve así:
    import { AlertController, LoadingController, NavController, Platform } from 'ionic-angular';

    Esto carga algunos componentes adicionales usados ​​por el código de la página:

    • AlertController gestiona la visualización de diálogos de alerta.
    • LoadingController gestiona la visualización de una hiladora de carga.
    • NavController gestiona la navegación entre las páginas.
    • Platform proporciona utilidades relacionadas con la plataforma.
  4. Dentro de la clase HomePage , agregue las siguientes declaraciones de variables:
    degreeStr: string = ' degrees (F)'; //an empty object (for now) to store our location data passed to the API currentLoc: any = {}; //current weather items array c_items: Array<any> = [];
  5. Agregue los siguientes parámetros al constructor de clase HomePage :
    public alertController: AlertController, public loadingCtrl: LoadingController, public platform: Platform, public weather: WeatherProvider,

    Cuando haya terminado, debería verse así:

    constructor( public alertController: AlertController, public loadingCtrl: LoadingController, public nav: NavController, public platform: Platform, public weather: WeatherProvider ) { }
  6. Reemplace la función openLink en el cuerpo de la clase HomePage con lo siguiente (la función openLink es parte de la plantilla en blanco iónica y no es utilizada por la aplicación Weather):
    ionViewDidLoad() { //Once the main view loads //and after the platform is ready... this.platform.ready().then(() => { //Setup a resume event listener document.addEventListener('resume', () => { //Get the local weather when the app resumes this.getLocalWeather(); }); //Populate the form with the current location data this.getLocalWeather(); }); } refreshPage() { this.showCurrent(); } getLocalWeather() { let locOptions = { 'maximumAge': 3000, 'timeout': 5000, 'enableHighAccuracy': true }; Geolocation.getCurrentPosition(locOptions).then(pos => { //Store our location object for later use this.currentLoc = { 'lat': pos.coords.latitude, 'long': pos.coords.longitude }; //and ask for the weather for the current location this.showCurrent(); }).catch(e => { console.error('Unable to determine current location'); if (e) { console.log('%s: %s', e.code, e.message); console.dir(e); } }) } showCurrent() { //clear out the previous array contents this.c_items = []; //Create the loading indicator let loader = this.loadingCtrl.create({ content: "Retrieving current conditions..." }); //Show the loading indicator loader.present(); this.weather.getCurrent(this.currentLoc).then( data => { //Hide the loading indicator loader.dismiss(); //Now, populate the array with data from the weather service if (data) { //We have data, so lets do something with it this.c_items = this.formatWeatherData(data); } else { //This really should never happen console.error('Error retrieving weather data: Data object is empty'); } }, error => { //Hide the loading indicator loader.dismiss(); console.error('Error retrieving weather data'); console.dir(error); this.showAlert(error); } ); } private formatWeatherData(data): any { //create a blank array to hold our results let tmpArray = []; //Add the weather data values to the array if (data.name) { //Location name will only be available for current conditions tmpArray.push({ 'name': 'Location', 'value': data.name }); } tmpArray.push({ 'name': 'Temperature', 'value': data.main.temp + this.degreeStr }); tmpArray.push({ 'name': 'Low', 'value': data.main.temp_min + this.degreeStr }); tmpArray.push({ 'name': 'High', 'value': data.main.temp_max + this.degreeStr }); tmpArray.push({ 'name': 'Humidity', 'value': data.main.humidity + '%' }); tmpArray.push({ 'name': 'Pressure', 'value': data.main.pressure + ' hPa' }); tmpArray.push({ 'name': 'Wind', 'value': data.wind.speed + ' mph' }); //Do we have visibility data? if (data.visibility) { tmpArray.push({ 'name': 'Visibility', 'value': data.visibility + ' meters' }); } //do we have sunrise/sunset data? if (data.sys.sunrise) { var sunriseDate = new Date(data.sys.sunrise * 1000); tmpArray.push({ 'name': 'Sunrise', 'value': sunriseDate.toLocaleTimeString() }); } if (data.sys.sunset) { var sunsetDate = new Date(data.sys.sunset * 1000); tmpArray.push({ 'name': 'Sunset', 'value': sunsetDate.toLocaleTimeString() }); } //Do we have a coordinates object? only if we passed it in on startup if (data.coord) { //Then grab long and lat tmpArray.push({ 'name': 'Latitude', 'value': data.coord.lat }); tmpArray.push({ 'name': 'Longitude', 'value': data.coord.lon }); } //Return the new array to the calling function return tmpArray; } showAlert(message: string) { let alert = this.alertController.create({ title: 'Error', subTitle: 'Source: Weather Service', message: message, buttons: [{ text: 'Sorry' }] }); alert.present(); }

    Hay un montón de código allí; Tomar unos minutos y estudiarlo. Esto es lo que hace:

    • ionViewDidLoad : ionViewDidLoad un evento que se ionViewDidLoad cuando la página finaliza la carga. En este caso, la función llama a la función getLocalWeather para iniciar el proceso de obtención de datos meteorológicos para la ubicación actual del dispositivo. Utiliza las capacidades del componente Platform para asegurarse de que no hace nada hasta que es seguro que el contenedor de aplicación nativo y el marco Ionic han finalizado la inicialización.
    • refreshPage : se ejecuta cuando el usuario de la aplicación hace clic en el botón Actualizar de la barra de herramientas. Aquí, actualiza los datos meteorológicos actuales en la página. Esta función obtiene más responsabilidades más adelante.
    • getLocalWeather – Determina la ubicación actual del dispositivo (usando el complemento Cordova Geolocation), luego llama a showCurrent para obtener los datos meteorológicos actuales.
    • showCurrent – Muestra el indicador de carga y luego llama al proveedor de tiempo para obtener datos meteorológicos para la ubicación especificada (ya sea una geolocalización o, posteriormente, un código postal).
    • formatWeatherData – Los resultados que obtiene la aplicación de la API meteorológica dependen de si la aplicación solicita las condiciones actuales o la previsión. No estamos pidiendo datos de pronóstico (todavía) pero, pero más tarde. Esta función construye un objeto de datos meteorológicos a partir de los resultados y tiene un código especial que construye el objeto apropiado en función de si se trata de condiciones actuales o de un pronóstico.
    • showAlert : muestra un cuadro de diálogo de error si se rompe algo.

Ejecute la aplicación en el navegador, un emulador, un simulador o un dispositivo físico conectado al ordenador. Si ejecuta la aplicación en el navegador, utilizando las capacidades de Cordova Simulate de Visual Studio 2017, puede ajustar las coordenadas del dispositivo simulado mediante el panel Geolocation;  Cuando se cargue la aplicación, se le solicitará que autorice el acceso de la aplicación a la ubicación actual del dispositivo, como se muestra a continuación:

Autorización de Geolocalización de Android

Cuando permite el acceso (no toque negar , ya que no podrá hacer mucho con la aplicación si lo hace), debería ver los datos meteorológicos actuales de la ubicación actual como se muestra en la siguiente figura:

Aplicación del tiempo: las Condiciones Actuales del tiempo

No es la aplicación completa de interfaz de usuario, pero al menos se pueden ver los resultados del tiempo. En la siguiente sección, agregamos el cuadro de búsqueda de código postal para que pueda obtener datos meteorológicos para una ubicación específica.

Nota :Si obtienes una pantalla en blanco cuando se inicia la aplicación, asegúrate de haber agregado el complemento Corolle Geolocation al proyecto.

Es útil disponer de datos meteorológicos para la ubicación actual, pero ¿qué pasa si viajas a algún lugar y quieres saber cómo será el tiempo cuando llegues? En esta sección, agregará un cuadro de búsqueda que los usuarios pueden utilizar para obtener datos meteorológicos para un código postal específico de los Estados Unidos.

Nota:El uso del código postal como criterio de búsqueda no funcionará fuera de los Estados Unidos; Si desea utilizar el nombre de la ciudad en su lugar, puede realizar pequeños ajustes a la llamada API del clima para cambiar la forma en que busca la API. Echa un vistazo a los documentos de la API para obtener más información.
  1. Abra el archivo src\pages\home\home.html del proyecto. Dentro del comienzo de la sección <ion-content> , justo antes de la etiqueta <ion-list> , añada la siguiente marca:
     <form (ngSubmit)="setZipCode()"> <ion-item> <ion-label>Type your zip code:</ion-label> <ion-input type="text" [(ngModel)]="searchInput" name="ZipCode"></ion-input> </ion-item> <button ion-button icon-left block> <ion-icon name="search"></ion-icon> Find Weather </button> </form>

    Esto agrega el campo de búsqueda en la parte superior de la página y dirige que la función setZipCode se ejecute cuando el usuario hace clic en el botón Buscar tiempo . La referencia a ngModel indica a Ionic (en realidad Angular) que asigna el valor en el campo de búsqueda a la variable searchInput la aplicación que verá en un segundo.

  2. Abra el archivo src\pages\home\home.ts del proyecto y agregue la siguiente declaración de variable a la parte superior de la clase HomePage (antes del constructor ):
    //Mapped to the search field searchInput: string = '';

    Esto define la variable que se rellenará automáticamente con cualquier cadena que el usuario agregue al campo de búsqueda.

  3. Finalmente, aún en el archivo src\pages\home\home.ts del proyecto, agregue la siguiente función a la clase HomePage :
    setZipCode() { //whenever the user enters a zip code, replace the current location //with the entered value, then show current weather for the selected //location. //Hide the keyboard if it's open, just in case Keyboard.close(); //Populate the currentLoc variable with the city name this.currentLoc = { 'zip': this.searchInput }; //Clear the Zip Code input field this.searchInput = ''; //get the weather for the specified city this.showCurrent(); }

    Esta función responde al usuario pulsando el botón Buscar tiempo y crea un objeto de ubicación y luego llama a la función showCurrent para recuperar los datos meteorológicos del código postal especificado. El código Keyboard.close() utiliza el complemento Ionic Keyboard para ocultar el teclado antes de iniciar la búsqueda. Si el código no lo hace, es posible que el teclado permanezca abierto, bloqueando parte de la página, a medida que la página se actualiza con los nuevos datos meteorológicos.

Cuando ejecute la aplicación, debería ver un campo de búsqueda en la parte superior de la página. Introduzca un código postal de los Estados Unidos y toque el botón para obtener datos meteorológicos para la ubicación especificada.

Aplicación del tiempo: las Condiciones Actuales del tiempo

Agregar una página de previsión meteorológica

La API de tiempo que la aplicación utiliza tiene una API para recuperar datos de pronóstico, así que permite mostrarlo también en la aplicación. Puede agregar otra página a la aplicación, a continuación, utilice un menú u otro método de navegación para cambiar entre vistas, pero el campo de búsqueda complica ese enfoque. En su lugar, utilizaremos un componente de segmento ionic  para dividir la página existente en dos partes: una para las condiciones actuales y otra para el pronóstico.

  1. Comience por actualizar el proveedor de clima para apoyar la obtención del pronóstico del servicio meteorológico. Abra el archivo src\providers\weather.ts del proyecto y agregue el código siguiente a la clase Weather .
    getForecast(loc: any): Promise<any> { let url: string = this.makeDataURL(loc, 'forecast'); return this.http.get(url) .toPromise() .then(this.extractData) .catch(this.handleError); }

    Para obtener el pronóstico, todo lo que el proveedor tiene que hacer es reemplazar el weather con la forecast en la URL de la API, de lo contrario el código es exactamente el mismo.

  2. A continuación, abra el archivo src\pages\home\home.html del proyecto.Eliminar la implementación actual <ion-list> :
    <ion-list no-lines> <!--show this if there are no items in the list--> <ion-item [hidden]="c_items.length > 0"> <p><strong>Weather data is not available</strong></p> </ion-item> <!--Display the current conditions data we have --> <ion-item *ngFor="let c_item of c_items"> <p><strong>{{c_item.name}}:</strong> {{c_item.value}}</p> </ion-item> </ion-list>

    Y reemplácelas por las siguientes:

    <ion-segment [(ngModel)]="displayMode"> <ion-segment-button value="current" (ionSelect)="showCurrent()"> Current </ion-segment-button> <ion-segment-button value="forecast" (ionSelect)="showForecast()"> Forecast </ion-segment-button> </ion-segment>

    0″>Weather data is not available

    {{c_item.name}}: {{c_item.value}}

    {{ f_items.length ? ‘Tap an item to view the forecast for the selected period.’: ‘Forecast data is not available at this time.’ }} {{item.period}}

     

    Esto agrega un segmento a la página usando el componente <ion-segment>y define dos segmentos: current y forecast . El atributo <div> con el [ngSwitch]="displayMode" intercambia en componentes separados <ion-list> basados ​​en el valor asignado a la variable displayMode la página.

  3. Ahora vamos a añadir el código TypeScript que hacen que todo esto funcione. Abra el archivo src\pages\home\home.ts del proyecto y agregue las siguientes declaraciones de variables a la parte superior de la clase HomePage.
    //This is used to set the Ionic Segment to the first segment currentMode: string = 'current'; // used to control which segment is displayed displayMode: string = this.currentMode; //holds forecast data, a separate row for each period f_items: Array<any> = []; //array of day strings used when displaying forecast data days: Array<string> = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
  4. Cuando la página se cargue, queremos que la aplicación muestre las condiciones actuales de forma predeterminada, por lo que agregue el siguiente código a la función onViewDidLoad :
    //Switch to the Current segment this.displayMode = this.currentMode

    Esto establece this.displayMode a current . Agregue el código al oyente de sucesos de resume , el código resultante debería tener este aspecto:

    document.addEventListener('resume', () => { //Get the local weather when the app resumes //Switch to the Current segment this.displayMode = this.currentMode //then update it with local weather conditions this.getLocalWeather(); });
  5. Ahora que la página muestra dos segmentos, la función refreshPagenecesita saber qué parte de la página debe actualizarse. Reemplace la función actual refreshPage con el código siguiente:
    refreshPage() { //Which page are we looking at now? if (this.displayMode === this.currentMode) { this.showCurrent(); } else { this.showForecast(); } }
  6. La función setZipCode carga por defecto a las condiciones actuales de carga cuando se introduce un código postal, por lo que debe cambiar a la pestaña Actual antes de obtener resultados. Agregue las siguientes líneas a la función antes de la llamada a this.showCurrent() :
    //Switch to the 'current' tab this.displayMode = this.currentMode;

    La función completa debería tener este aspecto:

    setZipCode() { //whenever the user enters a zip code, replace the current location //with the entered value, then show current weather for the selected //location. //Hide the keyboard if it's open, just in case Keyboard.close(); //Populate the currentLoc variable with the city name this.currentLoc = { 'zip': this.searchInput }; //Clear the Zip Code input field this.searchInput = ''; //Switch to the 'current' tab this.displayMode = this.currentMode; //get the weather for the specified city this.showCurrent(); }
  7. Por último, agregue la función showForecast a la clase HomePage :
    showForecast() { //clear out the previous array contents this.f_items = []; //Create the loading indicator let loader = this.loadingCtrl.create({ content: "Retrieving forecast..." }); //Show the loading indicator loader.present(); this.weather.getForecast(this.currentLoc).then( data => { //Hide the loading indicator loader.dismiss(); //Now, populate the array with data from the weather service //Do we have some data? if (data) { //Then lets build the results array we need //Process each forecast period in the array for (let period of data.list) { //Create a 'record' consisting of a time period's results let weatherValues: any = this.formatWeatherData(period); //Append this, along with the time period information, into the forecast //items array. //Get the forecast date as a date object let d = new Date(period.dt_txt); //Determe the day of the week let day = this.days[d.getDay()]; //And the time let tm = d.toLocaleTimeString(); //Create a new object in the results array for this period this.f_items.push({ 'period': day + ' at ' + tm, 'values': weatherValues }); } } else { //This really should never happen console.error('Error displaying weather data: Data object is empty'); } }, error => { //Hide the loading indicator loader.dismiss(); console.error("Error retrieving weather data"); console.dir(error); this.showAlert(error); } ); }

    Esta función obtiene los datos de pronóstico, luego los formatea para mostrarlo en dos páginas. En primer lugar, se construye una serie de períodos de tiempo que representan los diferentes períodos de pronóstico. Luego, para cada período, agrega un objeto que contiene los datos de pronóstico para ese período. El segmento de pronóstico de la página muestra la lista de períodos de pronóstico y, al pulsar en una entrada, la aplicación eventualmente (verá cómo en la siguiente sección) abre una página separada para mostrar los detalles.

En este punto, si ejecuta la aplicación, debería ver lo siguiente:

Aplicación de Tiempo Acabado

Toque la pestaña de pronóstico y verá la lista de períodos de previsión que se muestra en la siguiente figura:

Aplicación de Tiempo Acabado

Cuando pulsa en un elemento de pronóstico, no pasa nada (por ahora); Que es porque necesitamos una página para mostrar los datos, y no ha agregado uno todavía.

Cómo añadir una página de detalles del tiempo

  1. Para agregar una nueva página a la aplicación, en el Explorador de soluciones, haga clic con el botón secundario en la carpeta src\pages , seleccione Agregar -> Nuevo elemento …. En la lista de opciones que aparece, seleccione Ionic 2 Page , dale un nombre de WeatherDetail y WeatherDetail clic en el botón Add .Una Página para contactar a la Aplicación                                                                 Visual Studio creará una nueva carpeta denominada WeatherDetail en src\pages\ y la rellenará con los archivos de origen de la nueva página: weather-detail.ts , weather-detail.html y weather-detail.scss .Explorador de soluciones con La Página WeatherDetail
  2. Como cuando agregó un proveedor de la aplicación, cuando se agrega una página, es necesario actualizar la configuración de la aplicación para utilizarlo. Abra el proyecto de src\app\app.module.tsarchivo y agregue la siguiente importinstrucción al principio del archivo:
    import { WeatherDetailPage } from '../pages/weatherdetail/weatherdetail';
  3. A continuación, agregue una referencia al WeatherDetailPagecomponente al declarationsentryComponentsmatrices como se muestra a continuación:
    @NgModule({ declarations: [ MyApp, HomePage, WeatherDetailPage ], imports: [ IonicModule.forRoot(MyApp) ], bootstrap: [IonicApp], entryComponents: [ MyApp, HomePage, WeatherDetailPage ], providers: [Weather, { provide: ErrorHandler, useClass: IonicErrorHandler }] }) export class AppModule { }
  4. Abrir el proyecto de src\pages\weatherdetail\weatherdetail.htmly reemplazar su contenido con el siguiente marcado:
    <ion-header> <ion-navbar> <ion-title>Forecast</ion-title> </ion-navbar> </ion-header> <ion-content padding> <ion-list> <!--show this if there are no items in the list--> <ion-item [hidden]="forecast.values.length > 0"> <p><strong>Weather data is not available</strong></p> </ion-item> <ion-item [hidden]="forecast.values.length < 1"> Period: {{forecast.period}} </ion-item> <ion-item *ngFor="let item of forecast.values"> <p><strong>{{item.name}}:</strong> {{item.value}}</p> </ion-item> </ion-list> </ion-content> <ion-footer> <ion-toolbar> <ion-title>Visual Studio Tools for Apache Cordova</ion-title> </ion-toolbar> </ion-footer>

    Esto crea una página que muestra el elemento de predicción seleccionado como una lista de namevaluelos valores.

  5. Abra el proyecto de src\pages\weatherdetail\weatherdetail.tsarchivo y reemplazar su contenido con el siguiente código:
    import { Component } from '@angular/core'; import { NavController, NavParams } from 'ionic-angular'; @Component({ selector: 'page-weather-detail', templateUrl: 'weatherdetail.html' }) export class WeatherDetailPage { forecast: any; constructor(public navCtrl: NavController, public navParams: NavParams) { //Pull the selected forecast off of navParams this.forecast = this.navParams.get('forecast'); } ionViewDidLoad() { console.log('Weather Detail page loaded'); } }

    Observe que no hay ningún código real en la página, que se debe a la plantilla HTML se encarga de hacer que el Ionic de datos y se encarga de la página de navegación automáticamente. Los tres cambios importantes son:

    • La adición de un NavParamscomponente a la página, que es responsable de transmitir datos entre páginas.
    • La adición de una forecastvariable:
      forecast: any;

      Esta variable es el almacenamiento para el objeto de previsión pasa a la página cuando se abre. Contiene los datos correspondientes al período de predicción actual. La página HTML referencias esta variable como la fuente de los datos que hace que en la página.

    • La adición de una sola línea de código al constructor:
      this.forecast = this.navParams.get('forecast');

      Esto asigna el local de this.forecastobjeto para los datos pasados en el forecastobjeto envía a través del NavParamscomponente

  6. Ahora tenemos que decirle al forecastsegmento de la forma de abrir la página de detalles de pronóstico cuando el usuario pulsa sobre un elemento de la lista. Abrir el proyecto de src\pages\home\home.tsy agregue la siguiente importinstrucción al principio del archivo:
    import { WeatherDetailPage } from '../weatherdetail/weatherdetail';
  7. Todavía en src\pages\home\home.ts, agregue la viewForecastfunción para la clase:
    viewForecast(item) { //When the user selects one of the Forecast periods, //open up the details page for the selected period. this.nav.push(WeatherDetailPage, { 'forecast': item }); }

    HTML de la página ya tiene una referencia a esta función:

    <button detail-push ion-item *ngFor="let item of f_items" (click)="viewForecast(item)"> <ion-icon name="time" item-left></ion-icon> {{item.period}} </button>

Al ejecutar la aplicación ahora, usted debería ser capaz de abrir la previsión de un toque en uno de los períodos de predicción de la lista:

Aplicación página del tiempo Pronóstico

La navegación de la página es manejada por  Ionic y angular, estos  se encargan de añadir la flecha hacia atrás en la esquina izquierda de la barra de herramientas y el cierre de la página cuando se ha intervenido.

¡Eso es! Usted ha completado la Aplicación.

 

Fuente ;https://docs.microsoft.com/en-us/visualstudio/cross-platform/tools-for-cordova/first-steps/get-started-with-ionic2

 

 

 

Desarrollo de aplicaciones nativas multiplataforma en Windows


Microsoft  ha demostrado  un  compromiso con el código abierto  ayudando a navegar por herramientas de código abierto, marcos y plataformas, por ejemplo   desarrollando Apache Cordova ,creando y realizando el mantenimiento de complementos de diferentes plataformas,colaborando con Google para ofrecer la herramienta Angular JS 2.0,etc.

Como ejemplo vamos a ver en este post como es posible desarrollar para diferentes entornos moviles usando una de las herramientas mas famosas de desarrollo de Microsoft ,la cual  por cierto esta  disponible para ambientes de educación o formación de forma gratuita

Tipos de aplicaciones móviles

A la hora de crear aplicaciones móviles para plataformas como Android o iOS contamos con varias alternativas:

  • Aplicaciones nativas :muy buen rendimiento y se pueden distribuir desde las tiendas de aplicaciones. Hay que desarrollar las apps para cada entorno  usando herramientas especificas como por ejemplo:

En Android:  Android Studio o Eclipse

En IoS: Swift, Objetive-c  o Xcode

                       En Windows Phone: Visual  Studio

  • Aplicaciones web móviles: un único desarrollo con tecnologías web (js, hrml5 y css).No se distribuyen desde las apps  stores y no permiten acceder a todas las capacidades del hw del móvil. También se está desarrollando las llamadas apps  progresivas
  • Aplicaciones móviles hibridas:se mezclan ambas tecnologías sobre una carcasa  nativa que incrusta una web view. A diferencia de las aplicaciones web móviles pueden distribuirse en las diferentes apps stores incluso permitiendo magnetización de estas. Si bien el rendimiento no es tan bueno como las nativas permiten acceder a diferentes terminales  mediante un   desarrollo web  incluso pudiendo acceder a elementos  hardware . Entre las herramientas mas famosas destacan Phonegapp o Ionic, basadas ambas  en Apache-Cordoba

Creación de  aplicaciones para móviles mediante HTML, CSS y JS

Las aplicaciones móviles híbridas son una combinación de tecnologías web como HTML, CSS y JavaScript, que no son ni aplicaciones móviles verdaderamente nativas, porque consisten en un WebView ejecutado dentro de un contenedor nativo, ni tampoco están basadas en Web, porque se empaquetan como aplicaciones para distribución y tienen acceso a las APIs nativas del dispositivo.

Si sabe cómo crear aplicaciones web, rápidamente se sentirá cómodo creando aplicaciones móviles para iOS, Android y Windows mediante Apache Cordova.

La mayoría de desarrolladores obtiene cerca de un 100 % de reutilización del código aprovechando la API de JavaScript compartida de Cordova para acceder a las funcionalidades de dispositivo nativo, como la cámara, el calendario y los contactos.

Además, debido a que las aplicaciones híbridas utilizan vistas web nativas, puede llevarse su marco JavaScript favorito consigo (marcos como Angular, React e Ionic).

Y hablando de Ionic, es un SDK de código abierto que provee herramientas y servicios para desarrollar aplicaciones móviles híbridas. Está construido por encima de AngularJS y Apache Cordova y se centra principalmente en el look and feel y la interacción con la interfaz de usuario de la aplicación, con la finalidad de simplificar el front-end.

Ionic    es  pues  :

  • Un framework CSS con multitud de elementos de front-end reutilizables y personalizables, que permiten desarrollar una interfaz de usuario relativamente rápido, como por ejemplo encabezados, pies de página, botones de diferentes tamaños y estilos, listas, avatares, tarjetas, formularios, entradas, casillas de verificación, pestañas y,etc .
  • Una biblioteca JavaScript de interfaz de usuario con componentes JS que dan vida a los elementos del front-end y se utilizan como elementos HTML en la aplicación. Uno de los componentes JS de Ionic más utilizados es el componente pestañas,  el cual permite que un determinado contenido se muestre u oculte en función de la pestaña seleccionada por el usuario.

 

 

Visual Studio con Córdova

Debido al aumento de la complejidad de las aplicaciones, necesita más que un editor de texto por lo que el IDE Visual Studio 2017 es una buena  opción  pues integra un editor de código optimizado para la refactorización, el completado automático y la comprensión del código

 

Resumidamente   Visual Studio 2017 ofrece las siguientes  funcionalidades  :

  • Resaltado de sintaxis para ayudarle a identificar los errores visualmente
  • IntelliSense para ayudarle a comprender y codificar mejor las nuevas API
  • Inspección de código para revisar la referencia en línea
  • Si  su aplicación funciona y tiene el aspecto exacto diseñado por usted Tanto si trabaja para iOS, Android o Windows, Visual Studio ofrece compatibilidad de vista previa para una amplia variedad de emuladores y dispositivos anclados a red.Incluso puede implementar y depurar emuladores hospedados en una máquina remota o virtual (por ejemplo, paralelos).
  • Depuración y análisis .Independientemente de dónde se ejecute su código, Visual Studio puede depurarlo (tanto si su código se está ejecutando en un dispositivo iOS, Android o Windows, un emulador o simulador o en un destino de depuración basado en explorador como Ripple). No es necesario cambiar de herramientas cuando crea para otra plataforma. Visual Studio se conecta con casi cualquier destino de implementación.El depurador de Visual Studio le permite revisar el código con puntos de interrupción y notificaciones de excepción automática que exponen el estado del tiempo de ejecución de objetos y variables.Las funcionalidades avanzadas, como editar y continuar, los puntos de interrupción condicionales, los puntos de seguimiento y los números de llamadas ofrecen el tipo de análisis detallado que necesita para que el código resulte divertido y no un juego despiadado de “localización del error”.
  • Acceso a capacidades de dispositivo nativo.Con tecnología de Apache Cordova, sus aplicaciones escritas en HTML, CSS y JavaScript pueden acceder fácilmente a las API de dispositivo nativo que todavía no se encuentran disponibles para los exploradores (por ejemplo, la cámara, el calendario, los contactos, el escáner de códigos de barras, etc.).Lo mejor de todo es que puede acceder a capacidades de dispositivo nativo a través de una API de JavaScript común para obtener la máxima reutilización de código en su aplicación.
  • Conexion  a datos ( a la plataforma de Azure ):con tan solo unas cuantas líneas de código, puede Usar notificaciones de inserción para conectarse con usuarios específicos o audiencias completas,Habilitar la mensajería en tiempo real para provocar conversaciones y el uso compartido entre sus usuarios,Admitir capacidades sin conexión para aquellas ocasiones en las que no haya disponible una conexión de red,Administrar datos de Exchange mediante las API de servicio de Office 365 para compartir y editar calendarios, contactos, archivos, etc.

 

 

 

 

Instalación Visual Studio  para apps moviles

Todo lo que usted necesita para poder comenzar  con Visual Studio es descargar alguna de las siguientes versiones:

El  instalador realiza todo el trabajo pesado necesario para poner en marcha el equipo con los SDK, bibliotecas, herramientas, etc. necesarios para crear aplicaciones multiplataforma.

Para Instalar las herramientas de Cordova con una instalación inicial de Visual Studio siga lso siguientes pasos:

  1. Para instalar Visual Studio Tools para Apache Cordova junto con una instalación limpia de Visual Studio, descargue e inicie el instalador de Visual Studio ( en de algunos de los tres links de arriba o directamente si necesita el  la versión  sin coste en el link  siguiente: Visual Studio Community  :)
  2. El instalador mostrará la lista de componentes instalables mostrada en la siguiente figura.Al instalar  Visual Studio, deberua  asegúrarse  de incluir los componentes opcionales, HTML / JavaScript (Apache Cordova) bajo Desarrollo móvil multiplataforma como vamos a ver.Inicio de instalación de Visual Studio Tools para Apache Cordova
  3. Desplácese por la lista de cargas de trabajo disponibles y localice un grupo denominado Mobile & Gaming .
  4. Marque la casilla de verificación junto a Desarrollo móvil con JavaScript como se muestra en la siguiente figura. Esto permitirá la instalación de los componentes necesarios para las herramientas de Córdoba.  Selección de la instalación de Cordova Tools
  5. Dependiendo de sus necesidades específicas de desarrollo, es posible que deba instalar componentes opcionales adicionales. Por ejemplo, para apoyar el desarrollo de aplicaciones para Android, necesitará agregar soporte para el SDK de Android . Para probar las aplicaciones de Android en los emuladores, debe agregar soporte para Google Android Emulator , como se muestra en la siguiente figura.Si su entorno de desarrollo de Cordova ya incluye estas herramientas, puede omitir la instalación de nuevo aquí y modificar la configuración de Visual Studio Tools para Apache Cordova para apuntar a la instalación existente más adelante.Personalización de la instalación de herramientas de Cordova
  6. Compruebe rápidamente que puede cargar y crear la plantilla de aplicación en blanco predeterminada. En Visual Studio, elija Archivo , Nuevo , Proyecto , JavaScript ,Aplicaciones de Apache Cordova , Aplicación en blanco y nombre el nuevo proyecto “en blanco” y construya con F5. Si tiene algún problema, consulte estos pasos de solución de problemas .
  7. Ionic es un popular framework front-end JavaScript para desarrollar aplicaciones móviles multiplataforma usando Cordova. Puede utilizar Visual Studio 2015 para crear y depurar fácilmente aplicaciones multiplataforma Ionic.http://www.youtube.com/watch?v=4fNmTkYGVeUPuede instalar las plantillas de inicio de Ionic en Visual Studio y utilizarlas para comenzar a crear una aplicación.
    1. Agregue directamente a Visual Studio descargando y haciendo doble clic en VS Extension for IonicO bien, hágalo en Visual Studio, seleccionando Archivo , Nuevo y luego Proyecto .
    2.  En el cuadro de diálogo Nuevo proyecto, seleccione en línea .
    3.  En el cuadro de búsqueda, escriba Ionic .                                                Cómo obtener las plantillas
    4.   Escriba cualquier nombre y elija Aceptar para instalarlos. Cuando se le solicite permiso para instalar las plantillas, dé su permiso.
    5. Cierre y vuelva a abrir Visual Studio.
    6. De nuevo, elija Archivo , Nuevo y , a continuación, Proyecto.
    7. Ahora, elija  Instalar y , a continuación, Plantillas , las plantillas de inicio nuevas aparecerán en JavaScript , Apache Cordova AppsElegir una plantilla
    8. Elija una de las siguientes plantillas de inicio para su nuevo proyecto:
      • Aplicación en blanco iónico
      • Plantilla Iónica de SideMenu
      • Plantilla de Tabulaciones Iónicas
    9. Elija Aceptar .Visual Studio crea el proyecto Ionic.
    10. Agregue IntelliSense para Ionic a su proyecto.

    Haga que su aplicación funcione en Android

    1. Añada la plataforma Android de Android como destino de depuración (lista de plataformas de soluciones) y , a continuación, seleccione Generar y , a continuación, Crear solución .
    2. Elija Android como destino de depuración (lista de plataformas de solución) y para que la aplicación funcione seleccione un destino como el VS Emulator 5 “KitKat (4.4) (se requiere Hyper-V) o Google Android Emulator (lento para cargar inicialmente).  Ejecutar la aplicación
    3. Puede configurar un emulador de Google Android en AVD Manager .También puede ejecutar en el simulador de Ripple en su lugar, pero tendrá que utilizar la solución descrita más adelante en este artículo .
    4. Presione F5 y la aplicación debería cargarse correctamente.                     Aplicación que se ejecuta en el emulador

    Haga que su aplicación funcione en iOS

    Puede ejecutar inicialmente en el Emulador de Ripple después de seleccionar iOS como destino de depuración, pero para obtener información detallada sobre cómo configurar el agente de remoción remota para iOS, consulte este tema .

    Las plantillas de inicio de Ionic deben ejecutarse correctamente en iOS cuando el agente de remotebuild se ejecuta en un Mac (o un servicio como MacInCloud) y cuando Visual Studio está configurado para conectarse a él.