Cuidados que debe prestar si tiene un patinete Xiaomi M365


A finales del 2016  apareció del  famoso fabricante   Xiami   un novedoso patinete  eléctrico :el Xiaomi Mijia, el cual como   todo  sabemos ha creado una auténtica revolución en cuanto a la micro-movilidad ,  solucion por cierto que ha sido seguida  e imitada  por muchísimos  otros fabricantes , incluso procedentes del sector automovilístico ( como Seat) o del sector tecnológico ( Coonga)

Al igual que con todos los productos de Xiomi, este modelo  de inmediato atrajo la atención de un público más amplio gracias a su diseño exitoso tal vez minimalista  y sobre todo por sus muy buenas características técnicas, destacando en su día su excelente relación calidad/precio  con unas  prestaciones excepcionales donde destaca su sistemas de frenada regenerativa y una especie de ABS.

Los datos técnicos más destacados son los siguientes:

● El motor con ruedas de 300 vatios (máx .: 600 vatios) proporciona la velocidad máxima de 25 km / h y un gradiente máximo de 15 grados. 
● Batería de ión de litio de 12.8Ah / 37V para un máximo de 45 km. 
● Tres modos de velocidad (modo de ahorro de energía, modo estándar, modo de deporte). 
● Pantalla incorporada para un monitoreo conveniente del  nivel de batería
● Ruedas inflables de goma de 8,5 pulgadas para diferentes motivos. 
● Diseño de plegado rápido para facilitar el transporte en el maletero de su automóvil. 
● Carcasa de aleación de aluminio para carga máxima de 100kg. 
● Adecuado para adultos y adolescentes por diversión.

El Mi Electric Scooter de Xiaomi es sin duda uno de los equipos más populares de la marca, por ofrecer un patinete de atractivo diseño, fácil manejo, con unas muy buenas características y, sobre todo, un precio interesante  sobre todo ahora  que ya hay disponible una nueva versión ( con mayor autonomía, display mejorado  y mayor potencia). 

 

 

Veamos   al menos tres  criterios  que deberíamos seguir  si contamos con este modelo  M365:

 

La seguridad es lo  primero 

Es obvio  que  al conducir  un patinete eléctrico al menos debemos llevar  casco ( de hecho  en algunas ciudades comienza a ser obligatorio )    y que además podemos complementar   con  ropa resistente , protecciones para rodillas y codos  ,así como guantes,etc .  

Además del casco  y las protecciones , está el tema de la seguridad del propio vehiculo que pasa por tener éste , como cualquier otro vehiculo. en buen estado  a nivel de frenos,luce,a presión y estado de los neumáticos ,  columna de dirección sin holguras, etc

Precisamente, en este último sentido Xiaomi ha informado de que un número limitado de unidades de su patinete eléctrico M365 presenta un fallo en un tornillo en el mecanismo de plegado que puede llegar a provocar que la barra vertical se separe del tronco principal del patinete durante su uso ,(lo cual como es de suponer  no es nada bueno pues puede generar un grave accidente a su conductor) , sino que también se hará cargo de su reparación sin coste para el cliente  (aunque pueda estar fuera de garantía )

En efecto  Xiami  recientemente, ha detectado un posible problema de seguridad con el Xiaomi Mi Electric Scooter (Modelo: M365),pero    está localizado  solo  en un número limitado de unidades de producción  consistente en un tornillo en el aparato de plegado que tiene el potencial de aflojarse, lo que permitiría que la barra de  dirección  pueda perder la verticalidad  y  romperse del cuerpo principal mientras está en uso, lo cual obviamente supone un peligro. Afortunadamente trabajando estrechamente con el  fabricante de Mi Scooter eléctrico, han solucionado el problema pero,  pasa porque el propio fabricante recoja el patinete , lo repare  y luego lo devuelva  con el problema solucionado

Como consejo, es esencial que el usuario no intente solucionarlo por su cuenta, ya que de hacerlo (y no resolverse), la marca podría descargar su responsabilidad, y desentenderse de su Xiaomi M365 afectado por el defecto de fabricación en el tornillo del mecanismo de plegado.

De hecho Xiami  a  través de su página web ,ha emitido un retiro proactivo de seguridad del producto para las unidades potencialmente afectadas  que comenzó el 26 de junio de 2019 para el Reino Unido y el 1 de julio de 2019 para otros mercados. Como tal, están alertando a todos los que compraron este producto a que dejen de usar de inmediato el Scooter eléctrico Xiaomi Mi (M365) hasta que hayan determinado si su scooter es parte del lote  a corregir  o no. 

 En total son  10257 unidades afectadas, que se produjeron entre el 27 de octubre de 2018 y el 5 de diciembre de 2018, y se concentran principalmente en :

  • El Reino Unido (7849 piezas).
  •  Alemania (613 piezas),
  • España (509 piezas)
  •  Dinamarca (258 piezas),
  • Kazajstán (200 piezas),
  • Myanmar (175 piezas),
  • Colombia (97 piezas),
  • Turquía (80 piezas),
  • Laos (79 piezas),
  • Italia (37 piezas),
  • Hungría (34 piezas),
  • Grecia (31 piezas),
  • Corea (30 piezas),
  • Macao (25 piezas),
  • Emiratos Árabes Unidos (22 piezas),
  • Bélgica (17 piezas),
  • Portugal (16 piezas),
  • Singapur (14 piezas),
  • Rusia (1 piezas),
  • Tailandia (1 piezas) ),
  • Y sin identificar (169 piezas).

La información anterior puede diferir debido a la libre transferencia entre diferentes regiones, lo que puede no ser precisa, pero  en todo caso , los números de serie afectados (S / N) son los comprendidos   en los siguientes intervalos desde: 21074/00000316 – 21074/00015107 y 16133/00541209 – 16133/00544518.

Cualquier poseedor de un Scooter eléctrico Xiaomi Mi (M365) puede  comprobar  fácilmente si  su pariente está sujeto a recuperación  siguiendo estos sencillos pasos:

    1. Busque  el número de serie   en la parte inferior del patinete  (cerca del conector de carga)
    2. Ingrese el número de serie en el cuadro a continuación  de la pagina que  Xiami  ha preparado.  hhttps://www.mi.com/global/support/mi-electric-scooter-recall-program/?_ga=2.103113344.1200045800.1560244120-1901302157.1559908089
    3. Introduzca la  clave  que aparece en el captcha que aparece  bajo la caja del numero de serie
    4. Pulse el botón”  “VERIFY
    5. Lo normal es que no  presente problema alguno, lo cual será mostrado en ingles con un  mensaje qeu indicara que no esta afectado
    6. Si su dispositivo es parte del programa de recuperación de seguridad del producto, recibirá inmediatamente un mensaje solicitando que ingrese su dirección de correo electrónico. Dentro de las 72 horas, recibirá información adicional sobre la reparación del Scooter eléctrico Xiaomi Mi sin costo para usted.

 

 

Firmware al dia 

Hace unos meses  el grupo de seguridad Zimperium publicaba un informe en el que demostraba que el  Xiaomi tenía un grave problema de seguridad que permitía a otra persona, con los conocimientos suficientes, controlar remotamente el patín  por medio de la conexión bluetooth. La  vulnerabilidad detectada  se debe ,a que aunque el proceso de registro de usuario es necesario en la aplicación oficial, sin embargo en una conexión directa  con una app por medio de la conexión bluetooth  el dispositivo  ya no se requiere ningún tipo de autenticación, de ahí que se puedan ejecutar comandos con total libertad   para  ejecutar comandos remotos (como acelerar, por ejemplo) en el scooter sin que el dueño del aparato pueda evitarlo. Precisamente  este agujero de seguridad  era conocido por la comunidad, ya que era empleado también como vía para instalar firmwares caseros que permitían aumentar la potencia del patín . A cambio de esta mejora momentánea  mermamos  la autonomía de la batería, pero sobre todo  impedimos  la actualización  y mejora continua  de otras posibles características como el  frenado inteligente,el sistema de carga con la frenada , gestión  de la autonomía ,  o por ejemplo el tema  de  impedir el control  por terceros.

La firma ha anunciado que ya es posible actualizar el patinete para arreglar esta vulnerabilidad. Lo que hay que hacer, simplemente, es asegurarse de contar con la última actualización de la aplicación Mi Home, a través de la cual llegará la actualización OTA del firmware versión 1.5.1 para Mi Electric Scooter. Teniendo la app al día, el paquete para su Xiaomi debería de aparecer en pantalla sin problemas. 

Hablamos de algo obvio pero que muchas personas suelen olvidar  : la app ofrecida por el propio fabricante para gestionar este modelo, la cual es casi siempre la más olvidada a pesar de sus muchísimas prestaciones.  En efecto ,aunque hay muchas  apps, basadas en el uso del GPS, para calcular la velocidad , esto  hará consumir  batería del móvil  y NO  van ofrecer la información  de la autonomía,  o batería ( la oficial si ).  Además ,   sobre todo, tampoco   va a permitir cambiar diferentes aspectos del patinete :la dureza del sistema de  frenado regenerativo , el control de crucero , el encendido de la luz trasera o la actualización del firmware entre otras  variables.  La app recomendable por tanto es   la oficial Mi home (disponible en google Play)

La aplicación funciona  fenomenal   gracias  a un enlace bluetooth que habrá que habilitar . Para que la puedan utilizar en el idioma español  tiene un truco , que es el siguiente: en el momento que instale la app pide el país y todos  debemos poner Europa ( recomendado ) , y no tienen que poner OTROS PAÍSES .Siguiendo ese sencillo paso  puede  seguir instalando la aplicación y esta ya no dará problema:se conecta con el patinete y se queda instalada con el idioma castellano.

Una vez instalada , lo primero es buscar el patinete en el apartado “Mis dispositivos” y seguir el asistente con el patinete lógicamente encendido

Screenshot_2018-08-31-07-21-13-014_com.xiaomi.smarthome[1]

El interfaz una vez conectado y vinculado el patinete a nuestro teléfono,  nos ofrece una información  justa, es decir  la velocidad actual , el porcentaje de batería restante y los km recorridos como vemos en esta imagen:

Screenshot_2018-08-31-07-18-15-955_com.xiaomi.smarthome[1]

Si deslizamos hacia la derecha podemos bloquear el patinete   y por ejemplo de este modo  no se podría apagar pulsando el botón de encendido y mandaría una alarma si se elija:

Screenshot_2018-08-31-07-18-09-865_com.xiaomi.smarthome[1].png

 

Es muy destacable en opción Más   , algunos  aspectos configurables del patinete  como son la dureza del sistema de  frenado regenerativo , el control de crucero , el encendido de la luz trasera , establecer una clave, información de la batería  o del vehículo y sobre todo  la actualización del firmware ( o la restauración de este ) entre otras  funcionalidades.

Screenshot_2018-08-31-07-19-36-479_com.xiaomi.smarthome[1]

Uno de los aspectos   cruciales,  es poder actualizar el firmware del patinete a su última versión   (por ejemplo para resolver el problema del secuestro del painete por ercerso) , para lo cual se hace fundamental que tanto el patinete como el terminal permanezcan cerca y con el bluetooth activo :en tan solo uno segundos  lograremos nuestro objetivo  y tendremos  nuestro  patinete con el ultimo firmware disponible el cual intentará exprimir al máximo las capacidades de este.

Screenshot_2018-08-31-07-22-47-966_com.xiaomi.smarthome[1]     +Screenshot_2018-08-31-07-22-24-533_com.xiaomi.smarthome[1]

 

 

 

 

 

Cambio de neumáticos

Uno de los  principales averías  que puede sufre este modelo es  que  puede  pinchar alguna de  las ruedas  ( como casi cualquier vehículo con neumáticos ).En este caso desgraciadamente , la dificultad estriba en que  las ruedas son tan pequeñas que son mas complejas de cambiar  que una bicicleta.

Los pinchazos  serán más acusados  si se sobrepasan los 100kg de peso ( por ejemplo si lleva consigo a un niño pequeño) o si se transita por vías no asfaltadas: en estos casos   existe la solución de los  neumáticos macizos

Existen  neumáticos diseñados para reemplazar la rueda delantera o trasera del scooter eléctrico Xiaomi Mijia M365 siendo muy resistentes ,y  lo mas importante:no requieren  hincharlos ,  por lo que no pueden pinchar nunca,  así  que  para aquellas personas que suelen pinchar,  esta solución es  la mas práctica y duradera.

El material usados es especial de goma con superficie ranurada ofreciendo una excelente adherencia y una buena resistencia al desgaste. También es resistente a la perforación, no esta ventilado, y es duradero y ligero

Su flexibilidad  por tanto es superior , y su capacidad de sellado también ,permitiendo al neumático permanecer estable como un neumático tradicional totalmente transpirable.

Ofrecen en resumen ciertas ventajas:

      • Mayor  fiabilidad total
      • Ya no va a pinchar  al bordear las aceras  , saltando , etc
      • El patinete puede circular por cualquier tipo de terreno
      • El mantenimiento es cero
      • No hay  que regular las presiones
      • Soportan   muchísimos mayor  pesos  que los de aire

Y como contra-prestaciones:

      • Menos autonomía
      • Mayor  peso
      • Menor aceleración
      • Menos confort  que con  los de aire (pero tampoco  tan incómodos como un skate o como las ruedas típicas de patinetes pues la goma amortigua parte de los baches  al no ser completamente rígidas  pero cuenta con numerosas  ventajas )

 

Por cierto, si opta por cambiarlas usted mismo no  olvide calentar estas ( por ejemplo metiéndotelas en un microondas un corto tiempo)    para colocarlas   en las ruedas originales pues de otro modo sera  una tarea casi imposible.

Por cierto  este tipo de rueda maciza  se pueden comprar en Amazon  por unos 30€ 

Una solución parcial es  usar neumáticos hinchables de  doble cámara   algo más gruesas (1,8 mm) que las originales (0,9 mm) lo  cual  evitará pinchazos repetidos

 

 

 

 

 

    Anuncios

    Construya una alarma de proximidad a partir de un económico foco


     

    En efecto  hoy en día hay soluciones muy económicas  debido a su gran escala comercial  que son   susceptibles de ser mejoradas para complementar con notoriedad  sus prestaciones y lo mas interesante !sin coste alguno!.

    En el ejemplo de hoy  vamos  a  ver como de hecho una modesta  lámpara con sensor de movimiento para uso en exteriores  ideal (almacén, garaje, clóset, etc …,con un bajo consumo de sólo 10 vatios ( aunque existen  de muchas  potencias  más elevadas ) ,y  900 lúmenes de luz  garantizados   puede usarse   además de su cometido principal de encenderse  cuando el sensor detecta movimiento  en el exterior , que  también envíe   una alarma hacia el interior, para  que tengamos constancia  si no nos  hemos percatados por la activación de la luminara   de que puede que haya personas , animales o cosas merodeando por el exterior   .

    Además  hay un aspecto interesante, en esta simple  modificación  pues mantendremos el  diseño moderno y compacto de la luminaria ,  ya que vamos a hacer una sencilla modificación   que apenas ocupa más espacio ( únicamente necesitaremos  añadir una regleta )  y que además no inhabilita su protección  impermeable (IP66), una característica fundamental para aquellos que desean montar esta luminaria en el exterior.

    Respecto al interior de  la luminaria , esta se aleja de las convencionales halógenas al   incorporar uno de los últimos 30 chips súper brillantes de LED  que reemplazan a los  anteriores, ofreciendo una iluminación más brillante (900 LM, blanco frío de 6000 Kelvin ) ,  con un gran ahorro en la factura de la luz y una gran durabilidad (los LED tienen una vida media de 50000 horas).

    El foco integra un sensor PIR   y la electronica necesaria para activar la luminaria  , la cual por cierto va integrada en el propio receptor del PIR

    En est emodelos , se puede ajustar la iluminación utilizando los 3 botones de configuración de la parte de atrás del propio modulo del PIR 

    Los ajuste son los siguientes:

    • HORA ;sirve  para establecer la duración de la iluminación (6-360 s);
    • SENS; sirve para ajustar el rango de detección (1-12m);
    • LUX :ajuste la fotosensibilidad (día y noche)

     

    Aparte de ajustar  el sensor de movimiento ajustable hasta 10 metros, un ajuste especialmente interesante es el ajuste LUX pues no puede permitir que el foco  ( y  por tanto la alarma ) no se active de día ,pudiéndose accionar automáticamente solo de noche  , que es cuando la mayoría de las ocasiones los dueños de lo ajeno merodean por los exteriores de los inmuebles

    Con la doble función de iluminación sorpresiva ( que el producto  ya lo contempla ) y la alarma sonora ( que vamos añadir tanto interior como exterior ) la idea   que se  busca con esta mejora es   una  detección anticipada que localizar los intentos de intrusión y antes de que el intruso haya conseguido entrar : así, decidimos antes a los intrusos y, ademas  tenemos un señal audible de que ha sucedido , señal que por cierto podemos contemplar con otros sistemas como camaras, alarmas remotas , etc

    Bien veamos la mejora  de este foco con sensor que podemos comprar por unos 15€

     

     

    La idea  de este post  es mejorar  un asequible  foco del fabricante  CLY  para poder usarlo para activar otras cargas ( no solo la de la propia luminaria) , para lo cual tendremos que abrirlo con cuidad  para capturar la señal de salida y devolverlo al exterior . Desgraciadamente  manipulaciones del producto nos  hará  perderas la garantia , pero por el precio que tiene creemos merece la pena puesto que nos puede ser muy útil desde el interur  saber si se ha activado el foco  o por ejemplo para enviar a una central de alarma

     

    Empieza la acción: Paso a paso

    Empezaremos  antes de desmontar el producto  probando la luminaria pues cualquier cambio de esta en su configuración nos hará perder la garantia, asi que  es nuestra última oportunidad para  probar de que funciona perfectamente este.

    Bien si funciona ok , desmontamos  los 4 tornillos de la parte posterior  y sacaremos con cuidado el cristal protector  y luego con cuidado de no toca los leds  los otros dos tornillos  del reflector 

    Como se observa en la imagen de más abajo  hay dos bloques  ,   diferentes : el chip compuesto por leds( en el centro )    y el convertidor ac/dc para este ( a la derecha)

    Además  se observan claramente  tres conexiones que van al módulo PIR : 

    • Cable marrón; uno de los polos de la red para dar alimentación permanente al módulo PIR
    • Cable azul : otro de los polos de la red  para dar alimentación permanente al módulo PIR
    • Cable rojo ; el cable de detección del PIR   que permite alimentar al convertidor ac/dc 

     

    Hemos visto que nuestro objetivo es cable rojo  de salida del módulo de  PIR   que permite alimentar al convertidor ac/dc de la luminaria , y que por tanto nos permite obtener la salida del rele interno del modulo PIR ,así que intentaremos capturar este hilo  para lo cual descubriremos el protector plástico del empalme 

     

    Es muy poco ortodoxo , pero como no queremos que el módulo pierda la estanqueidad , y normalmente  para luces exteriores las instalación no suelen contar con este cableado, utilizaremos el cable amarillo de masa del cable de salida ( más adelante si nos interesa podemos exteriormente fijarle un tornillo al chasis y volverlo a conectar)

     

     

     

    Ahora solo nos queda  usar una ficha de empalme para conectar el cable amarillo de la manguera exterior con  en emplame rojo-blanco procedente de la salida del modulo PIR hacia el convertidor ac/dc

     

     

     

    Ahora ya cerraremos con cuidado la luminaria  : primero el reflector  y luego la junta de estanqueidad  , el cristal  y finalmente la tapa . Ahora ya podemos conectar la c. a.  al extremo de la manguera del foco  , pero con la  importante diferencia que en el  cable amarillo ya no conectaremos la masa  sino por ejemplo un zumbador o  un testigo  que  alojaremos  en el interior de la vivienda para tener constancia  visual    o sonora   de que el foco luz se ha encendido por movimiento de objetos extraños próximos al PIR . Por cierto si se pregunta  donde conectar el otro extremos del zumbador o luz auxiliar este irá conectado al cable marrón de la manguera .

    En el esquema anterior, como se puede apreciar ,se complementa con un interruptor para anular el zumbador en caso de que sea demasiado molesto  .Asimismo se recomienda otro interruptor a la entrada de ca si este va estar conectado permanentemente  a la red de ca.

     

     

    Hay muchas opciones de uso para esta salida de CA , el cual por cierto no debemos cargar con mucha potencia pues corremos el riesgo de estropear lso contactos del relé interno del modulo PIR

    Algunos ejemplos de lo que podemos hacer con esta salida “extra”;

    • Un  relé  de potencia con bobinado de  220v de CA para conectar cargas mayores
    • Un segundo relé de 220V pero para utilizar los contactos para alarmas
    • Un  zumbador de 220V ( los hay por 2€ en Amazon)
    • Un timbre convencional
    • etc

    Bueno ,como hemos visto   quizás sean una idea un tanto atrevida , que no todo el mundo esté dispuesto a realizar,  pero desde luego !la posibilidad está ahí   ! y eso sin casi ningún coste adicional !¿se le ocurre  alguna mejora adicional ? si es así no dude en compartirla con toda la comunidad ..!!GRACIAS!!

     

    NOTA;Como hemos recibido consultas , en este nueva imagen creemos que se describe mejor la modificación que pasa por soltar el cable amarillo de masa y unirlo con una regleta o un empalme con la conexión marcada como salida del relé 

    Como acceder desde Java a contenidos de celdas en Excel


    Lo cierto es puede que  en  ocasiones necesitemos procesar ficheros excel u otro tipo de hojas de cálculo de   forma automatizada, por ejemplo  para extraer  información  de determinadas celdas, manipular estas , generar ficheros de metadatos que  sigan ciertas reglas , etc

    En este caso nos vamos a centrar en los documentos OLE 2 de Microsoft, que manipularemos  usando la libreria  Apache POI – the Java API for Microsoft Documents, que nos proporciona acceso a los diferentes tipos de ficheros de Microsoft que utilizan esta estructura como:  Excel Word o  Powerpoint, también hay otros proyectos dentro de esta API para Visio y Publisher por ejemplo

    Como se  puede   imaginar de todos estos el más desarrollado es Excel Workbooks y es precisamente el tipo de fichero elegido para este ejemplo.

    Antes de empezar  usaremos  la librería POI-HSSF and POI-XSSF – Java API To Access Microsoft, donde HSSF es el proyecto POI de implementación total en Java para ficheros excel.Esta libreria usa cuatro componentes fundamentalmente:

    • HSSFWorkbook: Representación de alto nivel de un libro (Workbook) que será nuestra documento excel. Es el primer objeto que construiremos si vamos a leer o escribir una hoja excel.
    • HSSFSheet: representación de alto nivel de una hoja excel, podemos elegir la hoja de la excel usando el HSSFWorkBook.
    • HSSFRow: representación de celda de una fila de la hoja excel, solo las filas que tienen filas se pueden añadir a la hoja.
    • HSSFCell: representación de una celda en una fila de la un hoja de la excel, la utilizaremos para manejar el contenido de la celda.

    Bien, sin más  dilaciones,  empezamos  a  ver como podemos procesar ficheros de Tipo Excel  

    Paso 1: Descargar librería Apache Poi Java API

    Antes de nada, tenemos que descargar la librería API Apache Poi Java, para añadirla a nuestro proyecto, voy a explicar cómo hacerlo en el IDE que estoy usando para este ejemplo: Netbeans, en otros IDES será similar la forma de integración de las librerías.

    En nuestro proyecto buscamos la carpeta Libraries nos colocamos encima y seleccionamos Add Library, no tiene mucho que explicar así que te lo mostraré en imágenes:

    La librería es  https://www.apache.org/dyn/closer.lua/poi/release/bin/poi-bin-4.1.0-20190412.zip

     

     

     

     

    Paso 2-Registro de la librería en nuestro proyecto

    Una vez  descargada y descomprimida, nos iremos a Properties del proyecto , después a   Java Build Path y   pincharemos en la pestaña  Libraries

    Aquí  pulsaremos Add External JARs  seleccionando “poi-4.01.jar” desde al ruta donde la hayamos dejado esta librería.

     

     

    Paso 3-Incluir las librerías

    Ahora toca pasarse  a  programar, pero antes , no debemos olvidar importar las  cuatro librerias  que comentaabamos al principio

    • HSSFRow: representación de celda de una fila de la hoja excel, solo las filas que tienen filas se pueden añadir a la hoja.
    • HSSFWorkbook: Representación de alto nivel de un libro (Workbook) que será nuestra documento excel. Es el primer objeto que construiremos si vamos a leer o escribir una hoja excel.
    • HSSFSheet: representación de alto nivel de una hoja excel, podemos elegir la hoja de la excel usando el HSSFWorkBook.
    • HSSFCell: representación de una celda en una fila de la un hoja de la excel, la utilizaremos para manejar el contenido de la celda

    Visto asi , adjuntando otras librerias utiles , la cabecera de importaciones de librerias quedaria  asi: 

    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;


    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.Iterator;
    import java.util.ArrayList;
    import java.util.List;

    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.hssf.usermodel.HSSFSheet;

    import java.io.FileDescriptor;

    import org.apache.poi.ss.usermodel.Cell;

     

    Paso 4-Convertir al menos a  formato excel97  o superior

    Antes de proseguir , en caso de tener ficheros excel en formato muy antiguos( por ejemplo Excel 95) .  deberemos  convertir estos   al menos al  formato excel 97,  para ello, en caso de que el formato sea de excel 95 deberemos abrir dicho fichero e irnos  a la opción   Guardar como seleccionamos   “libro de Excel 97-2003(*.xls)”

     

     

     

    5-Pasemos al código

    Una vez salvada  la hoja en formato excel 97 o superior  veamos un simple ejemplo de cómo capturar  los valores contenidos en las celdas

     

                          ——

          FileInputStream file = new FileInputStream(new File("C:\\prueba.xls"));

        // Crear el objeto que tendrá el libro de Excel

          XSSFWorkbook workbook = new XSSFWorkbook(file);

          /** Obtenemos la primera pestaña a la que se quiera procesar indicando el indice.

         * Una vez obtenida la hoja excel con las filas que se quieren leer obtenemos el iterator

          * que nos permite recorrer cada una de las filas que contiene.

          */



          XSSFSheet sheet = workbook.getSheetAt(0);

          Iterator<Row> rowIterator = sheet.iterator();

          Row row;

        // Recorremos todas las filas para mostrar el contenido de cada celda

          while (rowIterator.hasNext()){

              row = rowIterator.next();

             // Obtenemos el iterator que permite recorres todas las celdas de una fila

              Iterator<Cell> cellIterator = row.cellIterator();

              Cell celda;

              while (cellIterator.hasNext()){

                celda = cellIterator.next();

                // Dependiendo del formato de la celda el valor se debe mostrar como String, Fecha, boolean, entero...

                switch(celda.getCellType()) {

                case Cell.CELL_TYPE_NUMERIC:

                    if( DateUtil.isCellDateFormatted(celda) ){

                       System.out.println(celda.getDateCellValue());

                    }else{

                       System.out.println(celda.getNumericCellValue());

                    }

                    break;

                case Cell.CELL_TYPE_STRING:

                    System.out.println(celda.getStringCellValue());

                    break;

                case Cell.CELL_TYPE_BOOLEAN:

                    System.out.println(celda.getBooleanCellValue());

                    break;

                }

              }

          }


       // cerramos el libro excel

          workbook.close();


    Como vemos en el ejemplo anterior , crearemos el objeto que tendrá el libro de Excel(FileInputStream file = new FileInputStream(new File(“xxx..) y obtenemos la primera pestaña a la que se quiera procesar indicando el indice 0 (  XSSFSheet sheet = workbook.getSheetAt(0);

    Una vez obtenida la hoja excel con las filas que se quieren leer ,obtenemos el iterator que nos permite recorrer cada una de las filas que contiene. (  Iterator<Row> rowIterator = sheet.iterator()😉

    Y  ya bastaría ir recorriendo todas las filas con un bucle  while ( while (cellIterator.hasNext()))  ,  lo cual nos  va  a permitir  procesar  el contenido de cada celda

    Obtenemos el iterator(  row = rowIterator.next(); ) que permite recorrer todas las celdas de una fila y salvar el objeto en la variable row

    Ahora ya dependiendo del formato de la celda de la variable   row  ,  el valor se debe mostrar como String, Fecha, boolean, entero

    El programa tras recorrer todas las filas acaba cerrando el libro excel

     

     

    Como ejemplo más elaborado , vamos a ver como procesar  una hoja excel s donde cada fila representa los diferentes metadatos , por lo que con el programa  iremos capturando dicha información diferente  celda a celda para cada fila , para ir componiendo una fila de texto con los diferentes metadatos  capturados   y  que separaremos por el carácter almohadilla ( #) .

    Finalmente veamos  pues el ejemplo cuya finalidad es extraer de un excel un fichero csv de un modo automático via el siguiente programa en java;

     

    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;


    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.Iterator;
    import java.util.ArrayList;
    import java.util.List;

    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.hssf.usermodel.HSSFSheet;

    import java.io.FileDescriptor;

    import org.apache.poi.ss.usermodel.Cell;

     

     

    public class Main {

    //private static String nombre;

    public static void main(final String[] args) throws IOException {

    String lineaslog=””;
    String lineaslog2=”\r\n”;

    //fichero de log
    File filelog = new File(“d://ficherolog.txt”);
    FileOutputStream fos2log = new FileOutputStream(filelog);

     


    //añadimos 4 ceros la contador y generamos nuevo nombre
    nfichero= “salida.txt”;
    System.out.println(“Nuevo nombre fichero salida:” + nfichero);
    lineaslog=”Nuevo nombre fichero salida:” + nfichero;
    fos2log.write(lineaslog.getBytes());
    fos2log.write(lineaslog2.getBytes());
    //Procesar el excel a txt


    //Creamos nuevo fichero de metadatos del tipo texto
    File file = new File(nfichero);
    FileOutputStream fos1 = new FileOutputStream(file);
    FileDescriptor fd = fos1.getFD();


    FileOutputStream fos2 = new FileOutputStream(fd);

    String rutaArchivo=files22[ i ] ; //directorio3;
    System.out.println (“Leyendo archivo :” + rutaArchivo );
    lineaslog=”Leyendo archivo :” + rutaArchivo ;
    fos2log.write(lineaslog.getBytes());
    fos2log.write(lineaslog2.getBytes());

    System.out.println (“NOMBRE HOJA :”+ hoja);
    lineaslog=”NOMBRE HOJA :”+ hoja;
    fos2log.write(lineaslog.getBytes());
    fos2log.write(lineaslog2.getBytes());



    try (FileInputStream fileexcel = new FileInputStream(new File(rutaArchivo)))

    {
    System.out.println(“Leer archivo Excel “);
    lineaslog=”Leer archivo Excel “;
    fos2log.write(lineaslog.getBytes());
    fos2log.write(lineaslog2.getBytes());

    // leer archivo excel97
    HSSFWorkbook worbook = new HSSFWorkbook(fileexcel);

    System.out.println(“Leyendo la hoja del fichero excel”);
    lineaslog=”Leyendo la hoja del fichero excel”;
    fos2log.write(lineaslog.getBytes());
    fos2log.write(lineaslog2.getBytes());

    //obtener la hoja que se va leer
    HSSFSheet sheet = worbook.getSheetAt(0);

    System.out.println(“Obtener las hojas del fichero excel”);
    lineaslog=”Obtener las hojas del fichero excel”;
    fos2log.write(lineaslog.getBytes());
    fos2log.write(lineaslog2.getBytes());
    //obtener todas las filas de la hoja excel
    Iterator<Row> rowIterator = sheet.iterator();

    Row row;

    System.out.println(“La ruta del fichero excel es rutaarchivo :”+rutaArchivo);
    lineaslog=”La ruta del fichero excel es rutaarchiv:”+rutaArchivo;
    fos2log.write(lineaslog.getBytes());
    fos2log.write(lineaslog2.getBytes());


    Integer nm3=0;

    while (rowIterator.hasNext()) // se recorre cada fila hasta el final

    {

    //System.out.println(“linea1”);

    row = rowIterator.next();
    nm3=nm3+1;

    //se obtiene las celdas por fila
    Iterator<Cell> cellIterator = row.cellIterator();
    Cell cell;

    //se recorre cada celda
    int indice=0;
    while (cellIterator.hasNext()) {

    // se obtiene la celda en específico y se la imprime
    cell = cellIterator.next();

    //System.out.print(“(i”+i +”)=”+ cell.getStringCellValue()+” | “);

    switch (indice) //tomaremos diferentes columnas del fichero excel
    {

    case 0:
    {
    nombre_fichero=cell.getStringCellValue();
    }
    case 1:
    {
    boletin=cell.getStringCellValue();
    }
    case 2:
    {
    telefono=cell.getStringCellValue();
    }

    case 3: // cif o nif
    {
    ncif=cell.getStringCellValue();
    }

    case 4: //valor del cif
    {
    cif=cell.getStringCellValue();
    }

    case 8:
    {
    fecha=cell.getStringCellValue();
    }
    case 9:
    {
    hora=cell.getStringCellValue();
    }
    }



    linea= linea + cell.getStringCellValue() +”#”;

    indice=indice+1;

    }


    lineas=boletin +”#” +telefono +”#”+ncif+”#” + cif+”#”+tipo +”#” +fecha+” “+hora+”#” +”#” +”#” +”#”+ nombre_fichero+ “#”+ nombre_fichero+”#”;


    fos2.write(lineas.getBytes());

    //System.out.println();

    lineas=”\r\n”;

    fos2.write(lineas.getBytes());

    }

    worbook.close();


    linearesumen= directorio+”;”+ hoja +”;”+directorio22+ “P5_”+ fechaok+String.format(“%05d”, contador) +”;”+nm3;

    fos3.write(linearesumen.getBytes());

    linearesumen=”\r\n”;

    fos3.write(linearesumen.getBytes());

    nm3=0;

    }
    catch (Exception e)

    {

    e.getMessage();
    System.out.println(e.getMessage());
    lineaslog=e.getMessage();
    fos2log.write(lineaslog.getBytes());
    fos2log.write(lineaslog2.getBytes());

    }

    fos1.close();
    fos2.close();

    System.out.println(“Fin de generacion del txt de metadatos desde excel a txt”);
    lineaslog=”Fin de generacion del txt de metadatos desde excel a txt”;
    fos2log.write(lineaslog.getBytes());
    fos2log.write(lineaslog2.getBytes());

    }

    Cómo montar una alarma casera y no morir en el intento


    En la actualidad  en la misma media que ha habido un gran boom en empresas que ofrecen  servicios de seguridad a particulares y empresas , también  ha habido un movimiento  en la dirección opuesta: es decir, en la dirección de  crear sistemas de alarmas sin cuotas  autoinstalables  y a precios ínfimos comparados con los precios que se barajan tan solo hace unos años

     La gran ventaja de estos nuevos sistemas es que el control del funcionamiento siempre lo realizaremos nosotros y no vamos a depender de ninguna empresa de seguridad que nos cobre mensualidades por ello. A cambio ,si el sistema detecta una intrusión, en el  caso de que tengamos contratada una empresa de seguridad,ésta  dará el aviso a la Central Receptora de Alarmas y ésta, si lo considera oportuno, se lo hará saber a la policía (lógicamente en el caso de una alarma es sin cuotas, cuando suene recibiremos la notificación en nuestro Smartphone , si corresponde, seremos nosotros mismos quienes avisaremos a las fuerzas de seguridad).

    No obstante pese a que la cuestión de llamar a las fuerzas de seguridad nos pueda o no hacer gracia, un sistema  autoinstalable tiene al menos dos puntos claramente a su favor:

     

    • No tendremos costes fijos de ningún tipo
    • Un sistema autoinstalado es más seguro intrínsecamente  que uno instalado por un externo pues al fin al cabo si lo instalamos nosotros, solo nosotros conocemos la ubicacion , la tecnologia empleada, la ubicacion de los sensores, ect
    • El coste real de nuestro nuevo kit de seguridad casero  sólo se corresponderá   con el precio que vamos a desembolsar por su adquisición pues normalmente gracias a la evolución de la tecnologia , la instalación la realizaremos nosotros mismos  ( incluso sin conocimientos  de electrónica  al haberse simplificado muchísimo gracias a la introducción de los sensores inalámbricos) .

    Modernamente  existen alarmas basadas en wifi  destacando por presentar diseños simples y minimalistas que resultan muy atractivos para nuestras viviendas, oficinas o establecimientos. Además  estas alarmas  las podemos manejar con  la App del fabricante (normalmente es compatible con Andriod e IOS)   desde fuera del entorno en el que se instale por lo que si se produce algún indicio de allanamiento, recibiremos notificaciones en nuestro terminal móvil asociado e igualmente sonará como cualquier alarma de seguridad convencional. Además al ser aparatos domóticos  es posible conectarlos a los altavoces inteligentes   y de esta manera, operaremos con el kit de alarma wifi por medio de nuestra propia voz a través de asistentes como Google Home o Amazon Alexa

    Como inconveniente   de este tipo de alarmas destacar que estas   dependen de la conectividad wifi por lo que si falla  ( por ejemplo porque se va la red  de suministro de c.a.) no podremos recibir avisos por la falta de conectividad. Precisamente por este motivo surgieron las alarmas que  incorporan una tarjeta SIM 3G/4G para enviar y recibir señales, de modo que nos alertan de cualquier suceso vía SMS ( normalmente se suele pagar algún pequeño coste por el envío de cada SMS). A esta opción claramente se le puede sacar mucho partido si no disponemos de wifi en casa o en nuestro negocio (por ejemplo en una nave) o, como hemos comentado en caso de que falle el WiFi pues  en ese preciso instante  el sistema  trabajara siempre  sin problemas  inlcuso con caídas de c.a. pues todos estos sistemas suelen llevar una batería de respaldo que alimente la alarma en caso de fallo de suministro.

     

    Comentar además que hay kits “mixtos”  que incluyen tanto wifi como con  GSM como funcionalidad adicional , y siguen siendo   sin cuotas,pero en todo caso , el que incluya SIM  no es fundamental  pues en la mayoría de los caso  podemos prescindir de ella (pero lógicamente perderemos prestaciones de envío de SMS o control de esta vía mensajes)

    Entre las alarmas más vendidas en España destaca el modelo de Thustar QXC500 GSm , una alama con soporte  GSM   , que que por un precio muy contenido( 99€)  destaca la  una gran cantidad de accesorios que incluye :

    • 2 sensores de movimiento PIR inalámbrico (batería incluida) 
    • 10  sensores magnéticos de puerta o ventanas inalámbricos (batería incluida) 
    • 4  controles remotos inalámbricos 
    • 1  sirena cableada (110db)

    Este modelo de Thustar QXC500 GSm ,  dispone de un módulo GSM, que soporta una tarjeta SIM standard( puede ser de Movistar o  Vodafone ) que habrá que instalar en la parte posterior de la Alarma, lo cual permite a los usuarios  que incluso puedan hacer llamadas usando el teclado numérico de panel alarma, al igual que con un teléfono. Este sistema de alarma puede ser utilizado en cualquier sitio  pudiendo funcionar sin cuotas mensuales con compañías de seguridad gracias a dicha tarjeta SIM GSM que permitirá  enviar  mensajes de alerta  o recibir comandos de control  pudiendo elegir 1 de los 2 modos de uso o todos ellos

    Thustar QXC500 GSm  soporta  99 zonas de defensa inalámbricas y 8 zonas cableadas,  se pueden registrar hasta  5 grupos de llaves RFID para la función de armar o desarmar la alarma y además podemos instalar hasta  2 sirenas cableadas para distintos tamaños de viviendas según el que se necesite . Cuando el sensor de puerta o el PIR se disparan, la sirena emitirá una alarma de 110db para alertar a los vecinos y evitar a los intrusos.

    El dispositivo asimismo puede almacenar 6 grupo de números de teléfono ,2 grupo de números SMS y puede  puede almacenar  hasta 10 segundos de grabación de voz  que puede reproducirse incluso desde el propio altavoz incorporados.

    Otra función interesante es   la función de SOS para  que los niños , enfermos  y ancianos de la casa que tengan una emergencia, presionaran el botón de alarma de emergencia del control remoto, el cual, disparará la alarma  enviando llamadas y mensajes de emergencia a otros familiares para que la ayuda pueda llegar a tiempo

    El panel de alerta incluye una batería recargable Li-ion de 7.4V 800mA 3.7Wh que dura unas 8h (sólo se utilizará  en situaciones de emergencia como un corte de suministro eléctrico siendo la fuente de energía principal s el adaptador de corriente). 

    La instalación física de cualquier  sistema de alarma suele depender  de la complejidad que supone el hecho de que nuestra nueva adquisición precise de cables o no. Hoy en día es muy común prescindir del cableado por cuestiones de espacio y comodidad ( de  hecho la mayoría de las alarmas  sin cuotas suelen prescindir de cables a diferencia de las tradicionales) . La gran ventaja que nos brindan precisamente estas instalación sin cables es que ofrecen una colocación más sencilla y que será posible cambiar todos los elementos de lugar fácilmente  y además, son menos costosas que las cableadas.Como inconvenientes podemos resaltar que no son tan inmunes a los inhibidores de frecuencia en comparación a un sistema cableado y por otro lado, será necesario que prestemos más atención a las baterías o a la conexión de estos sistemas.

    Este modelo de Thustar QXC500 GSm   incluye 2 sensores de movimiento PIR inalámbrico  y 10  sensores magnéticos de puerta o ventanas inalámbricos (batería incluida), lo que no impide que también se puedan conectar hasta 99 dispositivos inalámbricos en total

      

     

     

    Veamos el interior de estos sensores para comprender un poco  su funcionamiento.

    En  primer lugar veamos el interior de un sensor magnético, los cuales están alimentadas por una batería alcalina de 12V del tipo 23R

    Es muy visible el chip de RF compuesto por  un R433X que en realidad es un resonador  SAW  de 433.92MHZ  para controladores inalámbricos  (One-port SAW Resonator For Wireless Remote Controller) en formato TO39

    Aparte de la antena claramente visible ( que únicamente  habría que desplegar si no llega la señal de RF a la centralita de alarmas) , se ve claramente la ampolla reed  la cual   como vemos está centrada respecto a uno de los laterales de la caja contenedora ,lo cual es muy importante pues justo en ese lado deberemos conectar el imán  cercano para que actúe precisamente sobre el relé de laminas

     

    En segundo lugar vemos el  sensor de movimiento inalámbrico  alimentado esta vez por una pila de 9v.

    Es diferenciable  el chip  R433X que como comentábamos es es un resonador  SAW  de 433.92MHZ  para controladores inalámbricos  (One-port SAW Resonator For Wireless Remote Controller) en formato TO39

    Aparte de la antena claramente visible ( que únicamente  habría que desplegar si no llega la señal de RF a la centralita de alarmas) , se ve claramente el sensor PIR en el centro   que es en realidad la parte más importante del circuito.

    Dado el consumo mayor de este sensor , se ve claramente el interruptor de encendido en un lateral por si queremos ahorrarle vida a la batería  

     

     

    Por último en referencia a los sensores cableados, que responden  hasta 8  zonas diferentes , es de destacar que tanto para configuración de sensores normalmente abiertos o normalmente cerrados  se necesita una resistencia de 10k de 1/4 W por zona ( ojo si va a cablear las 8 zonas pues en el kit solo se incluyen 4 resistencias)

    Normalmente los sensores cableados  trabajan en configuración abierta ( es decir cerrando el circuito en caso de detección de alarma)  por  lo que conectaremos una resistencia entre los terminales Z1,Z2…Z8   con las  masa  común  y llevaremos ambos hilos hasta donde  vaya el sensor .También podemos   conectar todos   los  sensores que necesitemos en paralelo  o grupo de sensores  ,  pero  en ese caso la alarma no diferenciaría  sub-zonas  por lo que lo ideal sería aprovechar todas las zonas .

     

     

    En caso de usar sensores con conexiones cerradas ( por ejemplo los sensores magnéticos) entonces las conexiones se harán con resistencias de 10k en serie  con cada zona. En caso de necesitar usar varios en la misma zona , las conexiones de todos los  sensores también serán en serie (junto con una única resistencia de 10k)  , pero  en ese caso la alarma no diferenciaría  subzonas  por lo que lo ideal sería aprovechar todas las zonas .

    Aunque pueda parecer   complejo , en realidad  usar esta alarma  es casi un juego de niños pues el fabricante  entrega la alarma  con todos los sensores ( inalámbrico  y cableados) ya registrados por lo que nosotros solo nos limitaremos a conectar la ca, la sirena   y ubicar los sensores en las zonas que nos interesen proteger.

     Estos son los valores ya configurados de fábrica  para los sensores cableados:

    • Z1= 81 alarma perimetral
    • Z2= 82 alarma perimetral
    • Z3= 83 alarma perimetral
    • Z4= 84 alarma perimetral
    • Z5= 85 alarma perimetral
    • Z1= 86 alarma perimetral
    • Z1= 87 alarma perimetral
    • Z1= 88 alarma perimetral

     Y estos son los valores ya configurados de fabrica  para los sensores inalambricos

    • 2  alarma de sistema
    • 3  alarma de sistema
    • 4  alarma de sistema
    • 5  alarma de sistema
    • 6  alarma de sistema
    • 7  alarma de sistema
    • 8  alarma de sistema
    • 9  alarma de sistema
    • 10  alarma de sistema
    • 11  alarma de sistema
    • 12  alarma de sistema
    • 13  alarma de sistema

     

    Al  ser auto-instalable (la instalación y ensamblaje se hace prácticamente sin herramientas bastando  conectar y listo)  esto tiene una gran ventaja: solo nosotros sabremos que tenemos instalada dicha alarma y solo nosotros deberíamos   podemos desactivarla

     

    Veamos a continuación   como se autoinstala esta interesante alarma  en unos sencillisimos pasos:

     

    1-Colocar la tarjeta SIM en la central de alarma Thustar

    La ranura para insertar la tarjeta SIM se encuentra en la parte posterior de la central.  Las compañías habilitadas para trabajar con éste sistema de alarmas son TELCEL , MOVISTAR , IUSACEL y UNEFON( lo que no impide que funcione con otros operadores ),   siendo lo ideal usar una  tarjeta sea de prepago  pues toda la información que envía es por SMS  y no necesita datos.

    No debemos olvidar que el formato de la tarjeta sim es de formato standard ( es decir el más grande) y debemos desactivar previamente en esta la petición de número PIN ( por ejemplo insertandola en un teléfono y yendo a la sección de ajustes –>seguridad–>desactivar PIN

    Obviamente para operar  esta alarma , el número de  teléfono asociado a la  SIM debe de tener saldo para que el panel puede hacer todas las opciones indicadas.

    Una vez preparada la tarjeta insertamos esta  en el zócalo porta-sim de la parte de atrás de la centralita

    Se recomienda Revisar la tarjeta SIM :
    1. Revisar el uso de la tarjeta SIM,si usted no pone saldo a su saldo  cada 1 o 2 meses su compañía puede dar de baja su numero SIM
    2. Por favor mantenga la clave de su SIM card en secreto, para evitar que otras personas puedan controlar remotamente la alarma ilegalmente.
    3. Procure siempre tener Saldo en su SIM para que el panel de Alarma puede hacer todas las funciones mencionadas

     

    2-Conectar la sirena de alarma Thustar

    Conectaremos la sirena incluida en el kit en los pines 14 (cable color negro) y 15 (cable color rojo). Recuerde que si lo desea puede extender el largo del cable con una prolongación  rojo-negro para diferenciar claramente diferentes. La sirena  Alambica incluida en el Kit de Alarma, se conectara en la parte trasera del panel en sección de entrada conexión de: en la entrada 14 y 15
    donde 14 es – y 15 +

     

     

    3-Ubicar la central de alarma 

    Ubique la central de alarma en un lugar fuera del alcance de los niños así como la proximidad  a un enchufe de ca. ,Una vez decidida  la ubicación de la alarma ,use la plantilla incluida  para  realizar dos taladros  donde colocar dos tacos   para fijar la centralita con dos tornillos

    3-Conexión del adaptador de ca

    Asimismo  conectaremos en el lateral superior de la parte trasera la  salida del adaptador ( de 12V 1Amp)  al orificio de la parte posterior marcado por  POWER , y luego conectaremos  el sistema mediante el interruptor lateral  que se encuentra en la esquina superior derecha de la parte posterior de la alarma( al otro extremos del lector de SIM )  de OFF a ON  para habilitar la carga de la batería,  para que en caso de un corte de tensión suministre la  batería interna energía a la alarmas,  

     

     Conectamos el adaptador   a una una toma de corriente  de c,a  y debería encender la alarma aunque si se desconecta  o se va la luz el Panel de Alarma se apagará, 

    El panel de Alarma tardará aproximadamente 1 minuto para buscar la señal GSM. Durante este tempo el panel de su alarma GSM555 estará congelado hasta mostrar en la pantalla el simbolo típico de la cobertura (con la rayitas)  así como el icono de la presencia de la señal GSM .

    Asimismo debería  de destellar el led rojo superior derecho marcado como “signal” 

     

     

    Programar el fecha y hora del reloj de alarma

    Para poder programar la fecha y la hora de la central deberá ingresar 8888#32 seguido de la fecha ([AA]=año [BB]=mes [CC]=dí a) y hora deseada ([DD]=hora [EE]=min [FF]=segundo.)

    Es decir tendría este formato : [32]+[AA]+[BB]+[CC]+[DD]+[EE]+[FF]+[#] donde [AA]=año [BB]=mes [CC]=día [DD]=hora [EE]=min [FF]=segundo

    Por ejemplo para configurar la alarma con fecha 19 de Mayo de 2019 y la hora 23:38:29 am, el código sería el siguiente: 8888#32    19 05 30    23 38 29 #

    Recuerde, para salir de cualquier menú al menú principal puede realizarlo presionando * y después #

     

    Dar de alta los números telefónicos para llamada

    Tenemos 6 espacios disponibles del 51 al 56. Los números telefónicos a grabar serán los indicados a donde la central avisará en caso de activación de la alarma. Para eso hay 6 espacios disponibles (del 51 al 56). Grabe el primer número introduciendo 8888#51 + el número telefónico de 10 dígitos y al finalizar escriba otro #.

    Para grabar el primer número telefónico para que el sistema de alarma realice las llamadas cuando se active la alarma, llamada de auxilio seria:

    • Presionamos 8888#51 más el número telefónico de 10 dígitos y cerramos la operación con #.Por ejemplo si queremos dar de alta el número 3312320589 el método de operación sería el siguiente: 8888#513312320589#
    • Para dar de alta otro numero seguimos el mismo método cambiando el 51  por 52,53,54,55 y el 56.
    • Para borrar un número por ejemplo el primero, presionamos en el panel de control el numero 8888 mas # con esto entramos en el modo de programación.Enseguida presionamos 51#, Para borrar el segundo dado de alta seria 52# y o cualquiera de los 6 números dados de alta, etc

     

    Dar de alta los números telefónicos para SMS

    Tenemos 3 espacios del 57 al 59. En éste caso daremos de alta los número que recibirán mensajes de texto cada vez que la alarma se active. Para grabar el primer número telefónico para que el sistema mande los mensajes seria:

    • Presionamos 8888#57 más el número móvil ( 10 dígitos ) y cerramos la operación con #.Por ejemplo si queremos dar de alta el número 3312320589 el método de operación sería el siguiente:8888#573312320589#
    • Para dar de alta otro numero móvil seguimos el mismo método cambiando el 57 por 58 y el 59.
    • Para borrar un numero presionamos en el panel de .control el número 8888 más # con esto entramos en el modo de programación.Enseguida presionamos 57#,(Para borrar un teléfono r seria 8888#57#) Para borrar el segundo seria 58# etc.

     

    Contestar una llamada de Emergencia.

    Cuando el sistema es alertado, empezará a marcar a los números previamente grabados, si no le contestan el primero se pasara a el otro y así sucesivamente,

    Si usted contesta escuchara la grabación del sistema, enseguida usted puede:

    • Presione ( * ) Escuchara que tipo de sensor fue violado.
    • Presione ( 1 ) El sistema dejará de marcar a los demás números y quedará armado el sistema.
    • Presione ( 2 ) El sistema dejará de marcar a los demás números y quedará desarmado.
    • Presione ( 3 ) La sirena se apagará y podrá monitorear el sitio por 30 segundos., presione otra vez 3 para otros 30 segundos de monitoreo
    • Presione ( 4 ) El sistema empezará una comunicación de 2 vías durante 30 segundos. Dentro de este tiempo usted no podrá controlar el sistema.

     

     


    LLamar al numero de la centralita

    Marque al número móvil asociado a su sistema de alarma y usted podrá controlar todas las funciones de su Alarma en cualquier parte que este.
    Al marcar escuchara “por favor inserte la clave ” presione su clave de control(1234 es la clave de fabrica. )

    Si la clave es incorrecta usted escuchará  “clave incorrecta” y si es correcta escuchará:

    • Presione para armar :si presiona el número 1 escuchara “sistema armado”.Esta opción Quedará ACTIVADA LA ALARMA
    • Presione 2 para desarmar: si presiona el número  2 escuchara “sistema desarmado”.Esta Opción Quedará DESACTIVADA.
    • Presione 3 para monitorear; si presiona para monitorear el sitio por 30 segundos, de modo que si quiere continuar presione otra vez 3 para otros 30 segundos de monitoreo.
    • Presione 4 para iniciar comunicación de 2 vías: Si presiona el numero 4 correcto, el sistema empezara una comunicación de 2 vías durante 30 segundos. Dentro de este tiempo usted no podrá controlar el sistema.

    Mantenimiento de la alarma

    Es interesante revisar el panel de control cada 3 meses siguiendo la siguiente rutina de mantenimiento:

    1.  Probar de que se puede activar/desactivar normalmente.
    2.  Probar de que se puede marcar el número de la alarma normalmente.
    3.  Probar de que recibe la señal de los detectores inalámbricos normalmente.
    4.  Probar si la batería de la alarma está funcionando acordemente.
    5.  Asegurarse que el adaptador de 12v esté conectado a un toma corriente en buen estado.

     También debería revisar los detectores inalámbricos  periódicamente ( por ejemplo una vez al mes) siguiendo la siguiente rutina de mantenimiento:

    1.  Probar y activar los detectores inalámbricos para ver si están mandando señal normalmente.
    2.  Revisar si los detectores inalámbricos tienen batería y hagan su función.
    3. Probar y revisar si los detectores inalámbricos se activan sin problemas.

     

    Realmente  gracias a  que viene preconfigurados los mando y los sensores ,  y no necesitamos cableado alguno ,    como acabamos de ver  en realidad instalar una alarma de este tipo no es una tarea  difícil ¿verdad?

     

     

    Estas son las especificaciones técnicas del  modelo de Thustar QXC500 GSm 

    • Adaptador de alimentación: DC12V 0.5A 
    • Consumo estática: 55mA
    • Corriente de la alarma: 450 mA
    • Corriente de salida: DC12V 150mA
    • Batería de respaldo: Li-ion de 7.4V 800mA 3.7Wh
    • Frecuencia inalámbrica: 433MHz
    • Codificada Modo: 2262/4.7MΩ
    • GSM Frecuencia: 850/900/1800/1900MHz
    • Volumen de sirena: 110 dB
    • Temperatura: -20 ℃ – 55 ℃
    • Humedad: 40% -80%HR
    • Número máximo de sensores inalámbricos: Máximo 99 sensores inalámbricos Sensor con cable max: apoyo máximo 8 sensores cableados
    • Número máximo de controladores remotos: máximo 5 controladores remotos 

     

     

    Otras opciones de configuración

    8888# COMANDO PARA ENTRAR A PROGRAMACION  y  después hay que introducir EL NUMERO de cada función que queramos configurar.Estando dentro de programación, podrá usted salir de esta opción solo presionamos * después # en el teclado y automático saldrá del este menú.

    701#Grabar mensaje de ayuda para las llamadas:Presione en el panel 8888#701# escuchara un beep, empiece a hablar 30cm de retirado del panel, cuenta con 10 segundos al termino de este
    tiempo el mensaje le será repetido por el sistema 

    20# Dar de alta mas  controles remotos:Para dar de alta los mandos remotos con los que activará y desactivará la alarma deberá primero ingresar al modo programación pulsando 8888#. Luego ingrese 20 y seguido del número de memoria donde quiera grabar el control, teniendo disponibles hasta 8 espacios (del 1 al 8). El sistema emitirá un beep y luego escuchará “codificación de control remoto indicando que está listo para grabar, entonces presione cualquier tecla del control a grabar. El sistema confirmará con un beep y “codificación completada“. Ahora puede grabar el siguiente control pulsando el número de memoria que desee establecer (del 2 al 8 en caso de que hubiera grabado el anterior en el 1).

    21#Como borrar los controles remotos:Presionamos en el panel de control el numero 8888 mas # .Con esto entramos en el modo de programación. Enseguida presionamos el numero 21, Presionamos del 1- 8 dependiendo del control que queramos borrar el panel emitirá un largo bip y usted escuchara ”borrado completado” El control a quedado borrado  

    2401#Borrar un sensor:seria la operación siguiente:8888#2401# A si borramos en sensor numero 01.

    23# Dar de alta nuevos  sensores inalámbricos: Para dar de alta los sensores inalámbricos deberá primero asegurarse que todos estén apagados e ingresar al modo programación pulsando 8888#. Luego ingrese 23 y seguido del número de memoria donde quiera grabar el control, teniendo disponibles hasta 99 espacios (del 01 al 99). En el panel de la alarma se escuchará “sensor agregado“, inmediatamente después puede encender solo el sensor a agregar. Cuando el sistema detecte el sensor usted escuchará “agregado completo” y ya podrá apagar el sensor y configurar el siguiente detector inalámbrico. Logicamente esta operación es la misma para agregar un sensor magnético de puerta, sensor de humo, sensor de gas y cualquier otro que sea inalámbrico.

    60# Agregar sensores a zonas de la alarma: En éste paso asignaremos los sensores grabados anteriormente a un tipo de zona específica por lo que adoptarán comportamientos diferentes.Para ello entramos al modo de programación ingresando 8888#, luego presionamos 60, después el número de sensor a configurar, por ejemplo 12,  y seguidamente la zona (zonas que van del 1 al 4 según se requiera su funcionamiento).

    1 Defensa en tiempo real – se activa al instante que se active el sensor.
    2 Defensa 40 segundos de retardo – Se activa después de este tiempo.
    3 Defensa las 24 Horas – Siempre estará activo el sensor 24/7
    4 Defensa inactiva – Siempre estará inactivo.

    Posteriormente vamos a ingresar un número del 1 al 8 indicando en que zona se agregará dicho sensor. A saber:

    1 Alarma SOS.
    2 Alarma de incendio.
    3 Alarma de fuga de gas.
    4 Alarma de puerta.
    5 Alarma de salón.
    6 Alarma de ventana.
    7 Alarma de balcón.
    8 Alarma de perímetro / límite.

    Finalmente vamos a ingresar un número donde indicaremos si queremos que dicho sensor active o no la alarma. Por obviedad se entiende que queremos que la active, sin embargo, hay que configurarlo ingresando 0 o 1.

    0 Sirena apagada.
    1 Alarma encendida.

    Listo! Por ejemplo si queremos que el sensor numero 12 sea Defensa tiempo real, alarma de puerta y que la sirena se active ingresaríamos todo junto: 8888#6012141#

     

    #39 Control de Armado/Desarmado automático  Presionamos en el panel de control el número 8888 más # con esto entramos en el modo de programación. Ahora para la activación/desactivación presionamos 39 mas 1 mas #para activar o bien 39 más 0 más # para desactivar.Nota :el sistema de fabrica viene desactivado.


    #61 Armado en casa :Si usted quiere que unos sensores funcionen y otros no, usted puede usar la función de armado en casa. Presionamos en el panel de control el numero 8888 mas # con esto entramos en el modo de programación. Ahora presionamos la clave 61 mas el numero del sensor que seria del (01 al 99) y después presione 0 para armado en casa y que no se dispare la alarma.
    Ahora presionamos la clave 61 mas el numero del sensor que seria del (01 al 99) y después presione 1 para armado en casa y se  dispare la alarma.

    #75 Que suene la sirena al Armar/Desarmar con controles remotos :Presionamos en el panel de control el número 8888 más # con esto  entramos en el modo de programación.
    Ahora presionamos 75 más 1 para activar la sirena cada vez que armemos/desarmemos con los controles remotos. Luego presionamos 75 más 0 para desactivar la sirena cada vez que armemos/desarmemos con los controles remotos.Al activar esta opción, cada vez que Armemos ( Activemos ) la Alarma sonará un Beep Beep , como señal de armado.

    #76: Activación de la sirena cuando presionamos el botón de pánico:Presionamos en el panel de control el número 8888 más # con esto entramos en el modo de programación.
    Ahora presionamos 76 mas 1 Con esto la sirena sonará cuando presionemos el botón de pánico del control. ( forma de Rayo ) Ahora presionamos 76 más 0,con esto la sirena NO sonará cuando presionemos el botón de pánico

     

    #30Cambio de clave de operación: esta clave es usada para desarmar y control remoto del sistema Presione 8888#30 mas su nueva clave de 4 dígitos más # .Por ejemplo poner la clave 1012 como clave de operación, el método seria el siguiente:  ejemplo: 8888#301012#

    #31:cambio de Clave de programación: esta clave es usada para poner el sistema en modo de programación  Presione 8888#31 más su nueva clave de 4 dígitos más # Por ejemplo poner la clave 2846 como clave de programación, el método seria el siguiente: ejemplo: 8888#302846#

     

    Algunos consejos utiles 

    • La clave de programacion  y operacion no pueden ser las mismas.
    • Tenga cuidado en no perder o olvidar las claves  pues no se puede resetear la electronica sin esta
    • Cuando la alarma está activa  y hay falta de red, el panel enviar un mensaje de texto informando de esto a los números registrados para ello
    • Al activarse cada sensor se envía un mensaje de texto  a los números registrados para ello
    • La batería de respaldo puede indicar 1/4 de crga o 50% , lo cual se hace para no dañar la batería debido a que como siempre esta conectada corre el peligro de calentarse perdiendo con ello durabilidad 
    • NO olvide revisar el panel de control cada 3 meses 
    •  Tambien deberia revisar los detectores inalámbricos  periódicamente ( por ejemplo una vez al mes):

     

     

     

     

    RESUMEN DE COMANDOS DE CONFIGURACIÓN 

    [password de ajuste]+# Entrar a ajuste de sistema Password: 8888
    [*]+[#] Salir de ajuste del sistema *#
    [20]+[1-8]+[#] Programar control remoto1-8 (son los números libres),Máximo 8 controles
    [21]+[1-8]+[#] Borrar control remoto
    [23]+[01-99]+[#] Programar zonas de defensa ,1-99 ( son los números libres ),Hasta 99 zonas
    [24]+[01-99]+[#] Borrar zonas de defensa
    [30]+[password]+[#] Cambiar pass de operación Password: 1234
    [31]+[password]+[#] Cambiar pass ajuste sistema Password:8888
    [32]+[AA]+[BB]+[CC]+[DD]+[EE]+[FF]+[#] Cambiar fecha del sistema [AA]=año [BB]=mes [CC]=día [DD]=hora [EE]=min [FF]=segundo
    [33-35]+[AA]+[BB]+[#] Activación automática por horario Puede programarse hasta 3 horarios.[AA]=hora [BB]=min  [36-38]+[AA]+[BB]+[#] Desactivación automática por horario
    Puede programarse hasta 3 horarios [AA]=hora [BB]=min
    [39]+[0/1]+[#] Activar modo horario en la alarma 0=activar modo ,1=desactivar modo
    [44]+[01-99]+[#] Retardo de Activado de alarma exterior .Predeterminado: 60 segundos
    [44]+[01-99]+[#] Retardo de armado de alarma Predeterminado: sin retardo
    [51-56]+número de teléfono+[#]   Agregar número de teléfono a lista de llamado.Hasta 6 números de teléfono
    [51-56]+[#] Borrar número de teléfono de lista de llamado
    [57-59]+número de teléfono+[#] Agregar número de teléfono a lista de mensaje
    [57-59]+[#] Borrar número de teléfono de lista de mensajes
    [77]+[1/0]+[#] Activar o desactivar notificación por mensajes
    [60]+[AA]+[B]+[C]+[D]+[#] programar zona de defensa AA: número de la zona-[01-99] B:tipo de zona
    -[1]tiempo real -[2]40 segundos de retardo;
    -[3]24 horas;
    -[4]bypass
    C:descripción de la zona
    [1]alarma de pánico;
    [2]alarma contra-incendios
    ;[3]alarma de gas;
    [4]alarma de puerta;
    [5]alarma de sala;
    [6]alarma de ventana;
    [7]alarma de balcón;
    [8]alarma de límites
    D: sirena
    [1]encendido
    [0]apagado.
    [70]+[1]+[#] Grabar mensaje de voz
    [75]+[0/1]+[#] Ajuste de sirena [0]:apagado; [1]:encendido
    [76]+[0/1]+[#] Ajuste de sirena en modo emergencia  [0]:apagado; [1]:encendido
    [81]+[#] Activar modo “medidor de  señal GSM”.La intensidad preferible debería estar entre 07-31, si esta por debajo de 7 debe cambiar la posición
    ( esto depende de su compañía celular )
    [*]+[0]+[#] Salir del Menú Configuración. numero de teléfono + botón de llamado  Llamar al número marcado
    [95175308246]+[#] Resetear sistema a configuración de fabrica
    Utilice el panel numérico.

     

     

    Interaccionar con FireBase desde Arduino


    Como  podemos ver en este blog en numerosas  entradas que hablamos de dispositivos de IoT, es  relativamente sencillo construir nuestros  propios dispositivos de IoT con algunos sensores y microcontroladores  como Arduino, NodeMCU, Raspberry  Pi, etcétera , lo cual le permitirán automatizar su hogar apoyándose en estos dispositivos como por ejemplo usando el servicio de Cayenne .

    De hecho ,como ejemplo de lo  sencillo  y económico  que puede ser  la construcción de dispositivos   IoT desde un punto de vista más empírico , lo ideal es usar un o NodeMCU ESP-12E para   acceder a Firebase  

     

    Picture of Bill of Materials

     NodeMCU ESP-12E  es muy barato (unos 6€)   ,  y al tener  wifi incorporado para conectarse a internet,  ya tenemos los elementos suficientes  para conectarnos a  bases de datos avanzada  en l anube como puede ser Firevase y   gracias a un hardware tan eficiente  (y por supuesto los servicios cloud de Firebase).

    Precisamente  FirebaseArduino (abstracción completa de la API REST de Firebase expuesta a través de las llamadas de C ++ de una manera amigable con el cableado.)   es una biblioteca muy útil usada   para simplificar la conexión a la base de datos Firebase desde cualquier cliente Arduino .Esta biblioteca  como podemos imaginar  se encarga de todo el análisis de Json y puede realizar transacciones en tipos C / Arduino puros.

    En un post anterior “Primeros pasos con NodeMCU y Firebase”  ya vimos un sencillo ejemplo de como ambos componentes pueden funcionar, Veamos a  a continuación  que podemos hacer c muchas mas cosas con esta famosa librería

     

    class FirebaseArduino

    Esta es la clase principal para que los clientes de Arduino interactúen con Firebase. Como es habitual con arduino  para referenciarla  y poderla usar necesitamos  introducir  esta libreria con un include  al principio del programa , como por ejemplo

     #include <FirebaseArduino.h>”

    Esta implementación está diseñada para seguir las mejores prácticas de Arduino y favorecer la simplicidad sobre todo lo demás. Para casos de uso más complicados y más control, podemos usar la clase Firebase en Firebase.h.

    Esta libreria debe ser llamada primero con void begin ( const String y host , const String y auth = “” )  , lo cual inicializa el cliente con el host y las credenciales de base de fuego dados.

    Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);  //intentamos conectarnos a la base de datos Firebase con nuestras credenciales

    Los parámetros son :

    • host : es decir el  host de base de datos de base de datos de Fierbase , normalmente X.firebaseio.com.
    • auth : credenciales  para la db  que pueden ser  una palabra  secreta o token.

     

    Lo más sencillo  precisamente para pasar las credenciales de Firebase   a esta clase es usando  variables que  definiremos al principio del programa:

    • #define FIREBASE_HOST “xxxxxxxxxxxxxxx.firebaseio.com”
    • #define FIREBASE_AUTH “xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”

     

    Veamos algunas funciones que podemos usar con esta clase:  pushInt,pushFloat, pushBool,pushString,push,setInt, setFloat,setBool,setString,set ,getInt, getFloat,getBool,getString,get,   las relacionadas con Firebaseobject(get,readevent)  .   asi como remove,stream, available,read ,success, failed,error

     

     

    String pushInt ( const String & path , int value )

    Anexa el valor entero al nodo en la ruta.Equivalente al POST de la API REST. Debe comprobar  success()  después de llamar. Devuelve la clave única del nuevo nodo hijo.

    Los parámetros que usa:

    • path : La ruta del nodo padre.
    • value : valor entero que desea agregar al nodo.

     

    String pushFloat(const String &path, float value)

    Esta función anexa el valor flotante al nodo en la ruta.  Es equivalente al POST de la API REST. Debe comprobar   success()   después de llamar. Devuelve la clave única del nuevo nodo hijo.

    Los parámetros que usa:

    • path : La ruta del nodo padre.
    • value : valor flotante que desea agregar al nodo.

    String pushBool(const String &path, bool value)

    Esta función anexa el valor booleano al nodo en la ruta.  Es equivalente al POST de la API REST. Debe comprobar el resultado de salida con  success()  después de llamar a a funcion . Devuelve la clave única del nuevo nodo hijo.

    Los parámetros que usa:

    • path : La ruta del nodo padre.
    • value : valor Booleano que desea agregar al nodo.

    String pushString(const String &pathconst String &value)

    Esta función anexa el valor de cadena al nodo en la ruta.Es equivalente al POST de la API REST. Debe comprobar el resultado de salida con  success()  después de llamar a a funcion. Devuelve la clave única del nuevo nodo hijo.

    Los parámetros que usa:

    • path : La ruta del nodo padre.
    • value : valor de la  cadena que desea agregar al nodo.

     

    String push(const String &pathconst JsonVariant &value)

    Esta función anexa los datos JSON al nodo en la ruta.Equivalente al POST de la API REST.   Devuelve la clave única del nuevo nodo hijo.

    Parámetros

    • path : La ruta del nodo padre.
    • value : los datos JSON que desea agregar al nodo.

     

    void setInt(const String &path, int value)

    Escribe el valor entero en el nodo ubicado en la ruta equivalente al PUT de la API REST. Debe comprobar el resultado de salida con  success()  después de llamar a a función

    Parámetros que usa

    • path : la ruta dentro de su base de datos al nodo que desea actualizar.
    • value : valor entero que desea escribir.

    void setFloat(const String &path, float value

    Escribe un  valor en coma flotante en el nodo ubicado en la ruta equivalente al PUT de la API REST.Debe comprobar el resultado de salida con  success()  después de llamar a a función

    Parámetros necesarios:

    • path : la ruta dentro de su base de datos al nodo que desea actualizar.
    • value : el valor flotante que desea escribir.

    void setBool(const String &path, bool value)

    Escribe el valor booleano  en el nodo ubicado en la ruta equivalente al PUT de la API REST.  Debe comprobar el resultado de salida con  success()  después de llamar a a función  

    Parámetros que usa

    • path : la ruta dentro de su base de datos al nodo que desea actualizar.
    • value :  valor booleano  que desea escribir.

    void setString(const String &pathconst String &value)

    Escribe el valor de la cadena en el nodo ubicado en la ruta equivalente a la PUT de la API REST. Debe comprobar el resultado de salida con  success()  después de llamar a a función

    Parámetros que requiere:

    • path : la ruta dentro de su base de datos al nodo que desea actualizar.
    • value : valor de la cadena que desea escribir.

     

    void set(const String &pathconst JsonVariant &value)

    Escribe los datos JSON en el nodo ubicado en la ruta.  Equivalente al PUT de la API REST.  Debe comprobar el resultado de salida con  success()  después de llamar a a función

    Parámetros necesarios:

    • path : la ruta dentro de su base de datos al nodo que desea actualizar.
    • value : datos JSON que desea escribir.

     

    int getInt(const String &path)

    Obtiene el valor entero ubicado en la ruta. Debe comprobar el resultado de salida con  success()  después de llamar a a función   Devuelve el valor entero ubicado en esa ruta. Solo será poblado si  success()   es verdadero. Requiere un único  parámetro path : la ruta al nodo que desea recuperar.

     

    float getFloat(const String &path)

    Obtiene el valor flotante ubicado en la ruta. Debe comprobar el resultado de salida con  success()  después de llamar a a función. Devuelve  un valor flotante ubicado en ese camino. Solo será poblado si un success()  ) es verdadero.

    Requiere un único  parámetropath : la ruta al nodo que desea recuperar.

     

    String getString(const String &path)

    Obtiene el valor de cadena ubicado en la ruta.Debe comprobar el resultado de salida con  success()  después de llamar a a función.   Devuelve el valor de cadena ubicado en esa ruta. Solo será poblado si el   success()   es verdadero.

    Requiere un único  parámetropath : la ruta al nodo que desea recuperar.

     

    bool getBool(const String &path)

    Obtiene el valor booleano ubicado en la ruta.Debe comprobar el resultado de salida con  success()  después de llamar a a función. Devuelve el  valor booleano ubicado en esa ruta. Solo será poblado si el éxito () es verdadero. Requiere un único  parámetro  path : la ruta al nodo que desea recuperar.

    Es muy usado para  activar o desactivar un  nivel  lógico  en los pines binarios  en la placa ,por ejemplo para activar una salida a nivel alto  o bajo 

    Ejemplo

          bool isLedOn = Firebase.getBool(“led”); // recuperamos el valor del objeto led de la sesión firebase

     

     

    FirebaseObjectget(const String &path)

    Obtiene el valor del objeto json ubicado en la ruta.Debe comprobar el resultado de salida con  success()  después de llamar a a función. Devuelve el valor FirebaseObject ubicado en esa ruta. Solo será poblado si el éxito () es verdadero.Requiere un único  parámetro path : la ruta al nodo que desea recuperar.

    FirebaseObjectreadEvent()

    Lee el siguiente evento en una stream ( secuencia).Esto solo tiene sentido una vez que se ha llamado a  stream() 

    A la salida FirebaseObject tendrá [“type”] que describe el tipo de evento, [“path”] que describe la ruta efectuada y [“data”] que se actualizaron.

     

     

     

    void remove(const String &path)

    Elimina el nodo, y posiblemente el árbol completo, ubicado en la ruta.Debe comprobar el resultado de salida con  success()  después de llamar a a funcion.Requiere un único  parámetro path : la ruta al nodo que desea eliminar, incluidos todos sus hijos.

    void stream(const String &path)

    Inicia la transmisión de los cambios realizados en el nodo ubicado en la ruta, incluido cualquiera de sus elementos secundarios.

    Debe comprobar el resultado de salida con  success()  después de llamar a a funcion Esto cambia el estado de este objeto. Una vez que se llama a esto, puede comenzar a monitorear available () y llamar a readEvent () para obtener nuevos eventos.

    Requiere un único  parámetro path : la ruta dentro de su db al nodo que desea monitorear.

    bool available()

    Comprueba si hay nuevos eventos disponibles.Esto solo tiene sentido una vez que se ha llamado a  stream()  .Devuelve si un nuevo evento está listo.

    bool success ( ) 

    Devuelve   si el último comando fue exitoso.

    bool failed ( ) 

    Devuelve si el último comando falló.

     

    const String &error()

     Devuelve el  mensaje de error del último comando si  failed() es verdadero.

     

     

     

     

     

    class FirebaseObject

     

    Representa el valor almacenado en Firebase , puede ser un valor singular (nodo de tipo leaf) o una estructura de árbol.

    Las  funciones publicas  definidas para esa clase son las siguientes:

     

    FirebaseObject ( const char * data ) 

    Construir a partir de json.  Requiere un único  parámetro data : cadena formateada JSON.

     

    bool getBool ( const String & path = “” ) const

    Devuelve el valor como un booleano. .Requiere un único  parámetro optional : ruta en el objeto JSON.

     

    int getInt ( const String & path = “” ) const

     Devuelve el  resultado como un entero.Requiere un único  parámetro optional : ruta en el objeto JSON.

     

    float getFloat ( const String & path = “” ) const

    Devuelve el valor como un flotador..Requiere un único  parámetro optional : ruta en el objeto JSON.

     

    String getString ( const String & path = “” ) const

    Devuelve el valor como una cadena.Requiere un único  parámetro optional : ruta en el objeto JSON.

     

    JsonVariant getJsonVariant ( const String & path = “” ) const

    Devuelve el valor como JsonVariant.Requiere un único  parámetro optional : ruta en el objeto JSON.

    bool success ( ) const

    Devuelve si hubo un error en la descodificación o el acceso al objeto JSON.bool 

     

    failed ( ) const

    Devuelve si  hubo un error en la descodificación o el acceso al objeto JSON.const 

     

    String & error ( ) const

     Devuelve un mensaje de error si  failed()  es verdadero.

     

     

    Mas informacion en  https://firebase-arduino.readthedocs.io/en/latest/

    Extracción de datos de un pdf desde Java


    A veces  necesitamos  extraer información de texto procedente de  ficheros  en formato pdf   por ejemplo  para automatizar la extracción de determinada información  relevante que contengan o simplemente porque deseamos guardar la información editable  en  otro formato mas amigable. En realidad es realmente interesante    intentar   automatizar esta  tarea  pues así nos   evitamos  manipulaciones manuales   y tediosas lo cual seguramente nos hagan perder mucho tiempo  con la gran escasez de este elemento de la vida moderna del que  tampoco disponemos

    Vamos  a ver dos métodos  para hacerlo  usando el IDE  de  Eclipse y el lenguaje Java

    Método 1; mediante un paso intermedio con conversión previa de los ficheros pdf a ficheros de texto

    PDF to TXT Converter es una aplicación de Windows para convertir archivos pdf a archivos de formato de texto sin formato en modo batch. Este programa también admite la conversión de rango de páginas específicas a archivos txt  de modo que después de la conversión, obtendrá el texto editable del documento PDF original

    PDF to TXT Converter

    Esta  utilidad la podemos descargar   desde  aqui

    Hay una pequeña pega con este programa, pues dado que es shareware en la versión gratuita   tiene  bastantes limitaciones ,entre ellas que no se procesaran más de 200 documentos de un sola vez  ( si se intenta con más de esa cantidad   el programa pierde el control)

    Un punto a su favor es que permite convertir automáticamente directorios enteros  con contenido de ficheros pdf y de este modo no necesitamos seleccionar  uno a uno cuál de ellos queremos convertir ( pero no olvide que, a no ser que compre la version completa, solo debería contener como máximo 200  ficheros)

    Como vemos ,lo interesante de este programa  es que permite convertir los  ficheros pdf a texto  lo cual nos facilitara  procesar estos  muy fácilmente desde   java

    Ahora    vamos a   ver un ejemplo    cómo extraer  los metadatos de un documento  de tipo texto obtenido usando el programa anterior

    La idea es que a partir de los pdf convertidos previamente a txt , es que iremos  leyendo el contenidos de cada fichero txt e  interpretando las cadenas extraidas de los pdf para buscar  por ejemplo cuatro  meta-datos que necesitamos , haciendo  cuenta del orden en el que aparecen asi como las palabras justo anteriors:
    -meta1,
    -meta2
    -meta3
    -meta4:

    En esta búsqueda tiene sentido el número de orden en el que aparecen las cadenas anteriores a  la busqueda  pues según el orden en que aparezca corresponderá a un meta-dato u otro.

    En este caso meta2 hay que buscarlo dos veces , pero según este orden la cadena siguiente es meta2 o meta4

    Veamos el ejemplo;

    //*******************************************************
    //BLOQUE PRINCIPAL PARA EXTRAER  4 METADATOS de un fichero
    //*******************************************************

    //abre el fichero
    Scanner in =null;
    DecimalFormat formateador = new DecimalFormat(“####################”);
    Integer contador=0;

    //solo procesaremos los ficheros con la extrension txt
    if (sub.matches(tipofichero)) try{

    in = new Scanner(new FileReader(nombreFichero));
    in.useLocale(Locale.ENGLISH);

    //lee el fichero palabra a palabra

    while (in.hasNext())
    {
    //lee primera palabra
    String palabra = in.next();
    caa=palabra;

    if (procesa==true)
    {
    //System.out.println(“Palabra:”+palabra+ “contador=”+contador);

    if (contador==1)
    {instalacion=palabra;
    }
    if (contador==5)
    {nif=palabra;
    }

    procesa=false;
    contador++;

    }

    if (caa.matches(“pedido:”))
    {
    // System.out.println(“<<<Palabra pedido: ENCONTRADA:>>>”);
    procesan=true;
    contador++;
    }

    if (caa.matches(“instalación:”))
    {
    //System.out.println(“<<<<Palabra instalación: ENCONTRADA:>>>>”);//fecha
    procesa=true;
    contador++;
    }

    if (caa.matches(“NIF/NIE/Pasaporte:”))
    {
    // System.out.println(“<<<<Palabra NIF/NIE/Pasaporte: ENCONTRADA>>>>”);
    procesa=true;
    contador++;
    }

    //lee números
    while (in.hasNextDouble())
    {
    // lee un double

    double d = in.nextDouble();

    if (procesan==true)
    {
    //System.out.println(“Número:”+formateador.format(d)+”contador=”+contador);
    if (contador==3)
    {pedido=d;
    }
    if (contador==7)
    {linea=d;
    }
    procesan=false;
    contador++;
    }

    }

    } // while (in.hasNext())

    //resumen de datos capturados del pdf convertidos en txt y capturada en 4 campos que necesitamos

    System.out.println(“Instalacion:”+instalacion); //fecha
    System.out.println(“Pedido:”+formateador.format(pedido));
    System.out.println(“NIF:”+nif);
    System.out.println(“Telefono:”+formateador.format(linea));

    ….

     

    Método 2  directo usando la Liberia ItextPDF

    iText es una biblioteca Open Source para crear y manipular archivos PDFRTF, y HTML en Java. Fue escrita por Bruno LowagiePaulo Soares, y otros; está distribuida bajo la Affero General Public License.

    El mismo documento puede ser exportado en múltiples formatos, o múltiples instancias del mismo formato. Los datos pueden ser escritos a un fichero o, por ejemplo, desde un servlet a un navegador web.

    Más recientemente, ha sido extendida a una biblioteca PDF de propósito general, capaz de rellenar formularios, mover páginas de un PDF a otro, y otras cosas. Estas extensiones son a menudo mutuamente excluyentes. Una clase te permite rellenar en formularios, mientras una clase diferente e incompatible hace posible copiar páginas de un PDF a otro.

    El soporte de PDF de iText es, sin embargo, bastante extensivo. Esto soporta firmas basadas en PKI de PDF, cifrado de 40-bit y 128-bit, corrección de colores, PDF/X, gestión de colores por perfiles ICC, y es anfitriona de otras característica

    Podemos descargar el fichero itextpdf-5.1.0.jar  desde el respositorio de Maven   o de esta web  http://www.java2s.com/Code/Jar/i/Downloaditextpdf510jar.htm

    No debemos olvidar importar el jar desde el Ide  del  Eclipse   en propiedades del proyecto-->Java Build Path–>libraries –>Add External   JARs

    Este es un ejemplo  de captura sencilla   de como procesar un pdf directaeente

    import java.io.IOException;

    import com.itextpdf.text.pdf.PdfReader;
    import com.itextpdf.text.pdf.parser.PdfTextExtractor;

    public class prueba {

    /**
    * @param args
    */
    public static void main(String[] args) {
    try {

    PdfReader reader = new PdfReader(“d:/ttttt.pdf”);

    System.out.println(“This PDF has “+reader.getNumberOfPages()+” pages.”);
    String page = PdfTextExtractor.getTextFromPage(reader, 1);
    System.out.println(“Page Content:\n\n”+page+”\n\n”);
    System.out.println(“Is this document tampered: “+reader.isTampered());
    System.out.println(“Is this document encrypted: “+reader.isEncrypted());

    reader.close();
    } catch (IOException e) {
    e.printStackTrace();
    }

    }

    }

    Es importante la sentencia String page = PdfTextExtractor.getTextFromPage(reader, 1);  porque si ponemos 0 o un valor superior daría error

    Como   gracias  a la librería podemos capturar la informacion del   fichero pdf y aplicar la clase Sacanne para analizar las cadenas     para buscar determinada  informacion  que queremos catalogar vamos a  ver   el ejemplo anterior  usando los mismos campos  y con la misma casuitica:

    Este seria el mismo ejemplo de la  primer parte  , pero usando directamente los fichero pdf sin convertir a pdf:

    import java.awt.Rectangle;
    import java.awt.print.PageFormat;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.PrintStream;
    import java.io.PrintWriter;
    import java.text.DecimalFormat;
    import java.util.List;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.io.FileReader;
    import java.io.OutputStreamWriter;
    import java.io.Writer;
    import java.util.Scanner;
    import java.util.Locale;
    import java.io.FileNotFoundException;
    import java.nio.charset.StandardCharsets;
    import java.text.DecimalFormat;

    import java.io.StringReader;

    import java.util.Locale;
    import java.util.Scanner;

    import com.itextpdf.text.pdf.PdfReader;
    import com.itextpdf.text.pdf.parser.PdfTextExtractor;

    public class Main {

    /**
    * @param args
    */

    public static void main(final String[] args) throws IOException {

    String instalacion=””;
    String nif=””;
    double pedido=0;
    double linea=0;
    boolean procesa=false;
    boolean procesan=false;
    String tipofichero=”pdf”; // solo tomaremos ficheros con esta extension
    String caa = substring(20);

    String ruta = “D:\temp\ficheros\”;
    String ficherox=”28348758018_20181201000002.pdf”;
    String fichero=ruta+ ficherox;
    System.out.println(“Fichero a analizar =” +ficherox);

    int numero=ficherox.length()-3; //calcula donde empieza la extension del fichero
    // System.out.println(“numero=”+numero);
    String sub =ficherox.substring( numero); //calcula la extension del fichero
    System.out.println(“Extension del fichero :”+sub);

    //abrimos el PDF
    PdfReader reader = new PdfReader(fichero);
    int pages = reader.getNumberOfPages();
    System.out.println(“Este PDF tiene “+pages+” paginas.”);

    //empezamos la coversion a pdf
    String page = PdfTextExtractor.getTextFromPage(reader, 1); ////<———————————————–aqui da errror
    System.out.println(“Contenido del documento de la pagina “+pages);
    System.out.println(“\n\n”+page+”\n\n”);

    /////////////////////////////////////////////////////////////////////
    //solo procesaremos los ficheros con la extrension pdf
    ////////////////////////////////////////////////////////////////////

    if (sub.matches(tipofichero))

    /// try

    {

    //para procesar el texto lo copiamos a una cadena
    String nombreFichero = page ; //Fichero;

    System.out.println(“Convertido salida del conversor a un String “);

    //borra el scanner
    // Scanner in =null;

    //formatos de numeros
    DecimalFormat formateador = new DecimalFormat(“####################”);

    //inicializa conatdor
    int contador=0;

    //in = new Scanner(new FileReader(nombreFichero));///AQUI ESTA EL PROBLEMA PUES SCANNER NO EST ACEPTADNO EL STRING

    Scanner in = new Scanner(nombreFichero);

    in.useLocale(Locale.ENGLISH);
    System.out.println(“Es correcto el pdfl Convertido salida del conversor a un String “);
    //lee el fichero palabra a palabra

    while (in.hasNext()) //leemos toda la cadena
    {
    //lee primera palabra
    String palabra = in.next();
    caa=palabra;

    if (procesa==true)
    {
    //System.out.println(“Palabra:”+palabra+ “contador=”+contador);

    if (contador==1)
    {instalacion=palabra;
    }
    if (contador==5)
    {nif=palabra;
    }

    procesa=false;
    contador++;

    }

    if (caa.matches(“pedido:”))
    {
    // System.out.println(“<<<Palabra pedido: ENCONTRADA:>>>”);
    procesan=true;
    contador++;
    }

    if (caa.matches(“instalación:”))
    {
    //System.out.println(“<<<<Palabra instalación: ENCONTRADA:>>>>”);//fecha
    procesa=true;
    contador++;
    }

    if (caa.matches(“NIF/NIE/Pasaporte:”))
    {
    // System.out.println(“<<<<Palabra NIF/NIE/Pasaporte: ENCONTRADA>>>>”);
    procesa=true;
    contador++;
    }

    //lee números
    while (in.hasNextDouble())
    {
    // lee un double

    double d = in.nextDouble();

    if (procesan==true)
    {
    //System.out.println(“Número:”+formateador.format(d)+”contador=”+contador);
    if (contador==3)
    {pedido=d;
    }
    if (contador==7)
    {linea=d;
    }
    procesan=false;
    contador++;
    }

    }

    } // while (in.hasNext())
    in.close();

    //resumen de datos capturados del pdf convertido en txt

    System.out.println(“Instalacion:”+instalacion); //fecha
    System.out.println(“Pedido:”+formateador.format(pedido));
    System.out.println(“NIF:”+nif);
    System.out.println(“Telefono:”+formateador.format(linea));

    //fin de metatados de un documento INDIVIDUAL en el xml

    }

    }

    private static String substring(int i) {
    // TODO Auto-generated method stub
    return null;
    }//CLASS
    }

     

     

    Con esta librería como vemos  podemos procesar  de un modo relativamente sencilllo   cualquier contenido de un fichero  pdf    de un modo muy potente  como acabamos de ver .

    Cómo enviar correos de forma masiva gratis y sin limite


    Si alguna vez  se  ha preguntado cómo enviar correos electrónicos de forma masiva  y prácticamente  sin límite  sin caer en spam , o lo que es lo mismo,  mandar emails,  newsletter o boletines a  destinatarios que haya recopilado con el consentimiento de esas personas, así como  a listas de correos, sin necesidad de ir enviándolos uno a uno,   en  este post   vamos  a ver como gracias al veterano servicio de calidad de  Mailrelay con más de 15 años online, usado  tanto de forma personal como profesional ,  es en realidad una  tarea bastante sencilla  hacerlo y todo ello sin coste alguno   usando este servicio web    que además  cuenta   prácticamente  una capacidad ilimitada (es decir 75.000 emails al mes, y gestión de hasta 15.000 suscriptores).  

    Quizás  lo más  interesante de destacar es que el servicio de Mailrelay al contrario de otros servicios , es   gratuito  sin publicidad en las newsletters  pues  otros servicios  similares   ponen muchas trabas, y se aprovechan insertando publicidad , incluso en cuentas de pago básicas en algunos casos,   y además no tiene  límite de envío diario, no tiene  limitaciones de funcionalidades y ofrecen  soporte gratuito  ¿Por qué gastar esfuerzos de marketing en publicitar o r anunciar otra empresa?

    En efecto   gracias a Mailrelay es posible  crear newsletter, enviar mailings, gestionar listas de suscriptores y analizar  campañas de email de   una forma  gratuita  y más ahora  que    ha sido actualizada  y mejorada  en  nueva version 3 que como vamos    ver en este video  hace  que sea realmente sencillo lanzar este tipo de e-mails

     

    Como vemos  en el video esta nueva version V3  de Mailrelay cuenta  nuevo dashboard principal con menú superior y resumen de las últimas campañas,nuevo y potente editor drag & drop (que facilita la creación de newsletters, con bloques para redes sociales, vídeo, texto, grupos de imágenes, columnas, etc)  ,estadísticas mejoradas con más información y en tiempo real,posibilidad de segmentación por grupos de forma tradicional o utilizando los nuevos segmentos dinámicos ,automatismos mejorados y ampliados en base a registros, click o apertura de boletín , etc

    De hecho  más de 200.000 clientes en todo el mundo incluyendo grandes empresas   lo están usando como  puede apreciarse  en el gráfico de abajo

     

    Veamos  a continuación cómo realizar una  sencilla campaña con  Mailrelay   ,donde como  vamos a ver,  no es demasiado  difícil  pues la operativa se  reduce a la importación de   los contactos, crear una newsletter, enviarlas   y `por supuesto realizar   un seguimiento estadístico de todo,

    Bien  veamos  como hacerlo  usando esta  veterana herramienta.

     

     

    1- Importación de  contactos y creación de  lista de suscriptores

    Suponiendo que tengamos cuenta gratuita con  Mailrelay , lo primero que tenemos que hacer es crear la «ubicación» donde vamos a incluir » nuestros contactos.Tenemos dos opciones bien diferenciadas: Grupos  y Segmentos .( los segmentos se diferencia porque los contactos que hay en ellos deben cumplir una condición y son dinámicos, por lo que su número de suscriptores es variable.)  Nos  iremos al menú «suscriptores» -> «grupos» y en esta pantalla haremos clic en el botón «añadir», para crear un nuevo grupo.

    Crear un grupo es muy sencillo pues solo tenemos dos valores posibles para darle: Nombre  y Descripción ( !ojo pues esta es  solo un valor interno,  para que podamos organizar nuestra lista de contactos”) .Añadiremos  un nombre al grupo y haremos click en «crear grupo».

    Una vez hemos hecho clic en crear grupo veremos esta pantalla:

    mailrelay email marketing tutorial v3

    Ahora realizaremos una nueva importación, haciendo click en el botón «nueva importación» que podemos ver a continuación:

    mailrelay email marketing tutorial v3

    En la siguiente pantalla, vamos a ver las opciones de importación de las que disponemos actualmente Veamos las opciones:

    1.  Copiar y pegar
    2.  Subir Archivos > importar de un txt o CSV esta es la que usaremos ahora
    3.  Importar desde Mailchimp >

    Al  marcar la opción, aparece un recuadro donde podemos arrastrar el fichero a subir. Puede importar un fichero CSV o TXT (también ha de estar separado por comas).En realidad no importa demasiado cuántos valores tengamos, pero debemos respetar que solo tengamos un contacto por línea, y que los campos estén separados por comas.

    Bien, una vez tengamos ese fichero, lo que haremos será arrastrarlo a la casilla donde pone «arrastra el archivo». Una vez se haya subido el fichero, vamos a ver una pantalla bastante similar a la siguiente:

    Como vemos en la imagen hay tres  puntos clave:

    1.  Campos y columnas: iremos usando  los desplegables y nos ayudaremos de la vista previa de los datos. En los desplegables de campo  hay campos de tipo «incorporado», campos que existen por defecto en el sistema, como nombre, dirección, ciudad, etc. No es necesario que los cree, simplemente importe los datos en ellos.
    2.  Importar en los grupos. Aquí elegiremos el grupo al que queremos importar los contactos (, solo tenemos que hacer click y seleccionarlo) 
    3.  Opciones adicionales. Por último podemos elegir qué hacer con los contactos existentes, si bien ignorarlos (los saltamos y no hacemos nada) o los sobreescribimos

    Ahora solo queda hacer click en «importar» y se realizará la importación  del contenido del fichero  csv a la bbdd del servicio de Mailrelay .Una vez finaliza la importación de contactos veremos un pequeño resumen,con  el listado de emails importados, y el resultado, por si hubiera habido algún error o problema con el email en cuestión..

     

    2· Crear una newsletter con el editor drag & drop de Mailrelay

    Esta  nueva versión de Mailrelay incluye varias opciones para crear nuestros boletines, opción que  podemos ver en el menú «Boletines» –>«Boletines».

    Aquí, si hacemos click en el botón «Añadir» como en los menús anteriores, veremos una pantalla  con cuatro opciones de edición de boletines:

    1.  Crear boletín. Con esta opción haremos uso del editor drag & drop para crear nuestro diseño de newsletter de forma fácil y rápida
    2.  Pegar código. Si disponemos de un diseño de boletín en html, podemos importarlo pegándolo directamente en un editor clásico
    3.  Subir archivo zip. Funciona igual que la opción anterior, pero importando directamente
    4.  Importar desde una URL. Otra función similar, en esta ocasión importaremos desde una URL. Importante: las páginas web hacen uso de CSS, Javascript externos, menús, etc. Por lo que no se importarán bien, o no se enviarán bien como un email. No importes la URL de una web
    Elegimos la opción «crear boletín», y lo primero que tendremos que hacer será rellenar    la típica información que enviaríamos en un e-mail:
    1.  Asunto. El asunto de nuestro email, el subject o título, es lo que verán los contactos al recibir en su cliente de correo.
    2.  Previsualizar texto. Es el texto de la precabecera, un pequeño texto que aparece después del asunto en algunos clientes de correo.
    3.  Remitente. Aquí pondremos el email de remitente que vamos a emplear, por defecto podemos elegir el email con el que hemos creado la cuenta.
    4.  Grupos. Y el grupo que hemos creado lo seleccionaremos aquí.

    Cuando ya lo tenemos todo listo, haremos click en el botón «Siguiente» de la esquina inferior derecha y  pasaremos a una pantalla donde podremos seleccionar una plantilla de base . Podemos elegir la que queramos y haremos  click de nuevo en «siguiente».

    ► El editor drag & drop para crear newsletters

    Este editor es muy sencillo de utilizar pues tenemos dos espacios bien diferenciados, a la izquierda la visualización de la plantilla.Lo  destacado es que si pasa sobre cualquier elemento verá que se superpone un menú flotante que nos permite: Mover el elemento, Editarlo,Duplicarlo o eliminarlo. Asimismo en las imágenes verá también la opción de «buscar imagen» para sustituir la imagen por defecto por una de las que tenga en su equipo.

    Bien,  en la parte  derecha veremos esto:

    opciones del editor de Mailrelay

    Como vemos ,los elementos que tenemos disponibles son:

    1.  Texto. Para insertar un cuadro de texto, donde poder escribir, insertar enlaces, y en general darle el formato que queramos.Los bloques de texto funcionan igual que las imágenes, solo tiene que arrastrar el bloque en cuestión a la zona donde quieras ubicarlo.Recuerde, una vez arrastrado el bloque de texto, hacemos clic en «editar»:Tenemos tres opciones:
      1.  Contenido. Este será el contenido de texto del bloque
      2.  Diseño. Valores como tipo de fuente, tamaño, alineación, etc
      3.  Configuración. Número de columnas
    2.  Imagen. Nos permite insertar una imagen.Si ya tenemos un elemento de imagen solo tenemos que hacer click en el botón «buscar imagen», y si no, primero arrastraremos un elemento de tipo «imagen»a la zona de edición.Al hacer click en «buscar imagen» y en la caja donde pone «Drop files here to upload»?Aquí podremos pinchar y elegir la imagen de nuestro equipo, o arrastrar la imagen, con lo cual la veremos aparecer.Una vez hecho eso, solo tenemos que hacer click en la imagen que queremos utilizar, se situará en la parte izquierda, y podremos hacer click en el botón «usar archivo», lo que hará que la imagen aparezca en el editor de esta forma:
    3.  Imagen con leyenda. Si tenemos que poner una imagen que incluya una leyenda.Para empezar solo tenemos que arrastrar este bloque a donde queramos posicionarlo.Elegiremos
      1. Número de imágenes. Elegiremos  las imágenes que deseemos incorporar
      2.  Posición de las columnas. Podemos tenerlas una al lado de otra, o una encima de la otra
      3.  Posición de la leyenda. Esto hace referencia a la posición del texto, arriba de la imagen, o debajo
    4.  Grupo de imágenes. Para insertar más de una imagen en nuestra newsletter
    5.  Botones de redes sociales
    6.  Divisor
    7. Vídeo

    Con estas opciones tendremos más que suficiente para crear un buen diseño para nuestro email.

    Estos elementos los podemos arrastrar a la parte izquierda para crear elementos de forma fácil, como vemos en la siguiente imagen:

     

    ► Añadir el nombre del contacto

    Antes hemos subido nuestra lista de contactos incluyendo el nombre, así que quizás  se pregunte ¿cómo incluimos el nombre en la newsletter? Pues editaremos el bloque de texto donde queremos incluir el nombre, posicionamos el cursor del ratón donde queremos añadir el nombre y utilizamos el desplegable «Variables» , En el mismo bajamos hasta encontrar la sección «Suscriptor» y elegimos la opción «Nombre» y ya cuando envíe la newsletter esta variable se sustituirá por el nombre del contacto en cuestión.

    ► Añadir  el enlace de baja

    Al igual que en el caso anterior, vamos a utilizar el editor, pero en este caso, la variable que seleccionaremos será una de las opciones de «URLs de baja»:

    editor de newsletter mailrelay enlace de baja

    Tenemos varias opciones aquí:

    1.  URL de baja normal. Cuando el suscriptor hace click, se da de baja inmediatamente
    2.  URL de baja con confirmación por email. Cuando el suscriptor hace click recibe un email de baja en el que ha de hacer click para confirmar
    3.  URL de baja de grupo. Solo da de baja al suscriptor en el grupo en el que ha realizado el envío

    Si hace click en esta opción, verá que inserta en el editor algo como esto:{{ unsubscribe_url }}

    Y ya está. Ahora que tenemos la newsletter lista y preparada, la guardamos utilizando el botón de la esquina inferior derecha:

    guardar plantilla de newsletter

     

    3· Enviar una newsletter 

    Vamos a entrar en la última parte  realizando el envío del boletín, así que lo  primero que tenemos que hacer es volver al menú «Boletines»– «Boletines», y ahi veremos un listado de los boletines ,.

    Ahora miremos un poco más a la derecha:verás por cada línea, una serie de iconos como estos:

    enviar newsletter gratis con Mailrelay

    De izquierda a derecha esos enlaces  tienen esta  funcionalidad:

    1.  Enviar newsletter ( no esta por casualidad en primer lugar) ,Al hacer click en el mismo veremos una pantalla de errores posibles.Lo bueno, es que si hace click en los enlaces, puede ver cómo se deben realizar estas configuraciones.
    2.  Duplicar
    3.  Mostrar (visualizar el boletín)
    4.  Editar
    5.  Borrar

     

    enviar newsletter gratis con mailrelay

     

    Si seguimos un  poco más abajo tenemos otras dos opciones más:

    1.  Enviar boletín a un grupo o segmento. Opción con la que podríamos enviar el boletín al grupo donde hemos importado los suscriptores.
    2.  Enviar un boletín de prueba. De esta forma nos podemos enviar una prueba de boletín, para ver cómo queda la newsletter en nuestro cliente de correo
    3. Y para terminar  como tercer punto podemos ver que es posible programar el envío para una fecha determinada o enviar la newsletter en ese momento

    Bueno, en todo caso  pulsando el primer botón de enviar newsletter , ya tendremos nuestro mailing enviado por lo que sólo nos queda comprobar que efectivamente ya se ha enviado  asi como lo datos estadisticos.

     

    4- Las estadísticas del envío 

    Es interesante cerciorarse que en efecto el envío de la newsletter se ja realizado con éxito , así que nos  iremos al menú «informes» – «boletines enviados». Aquí vemos una lista de los boletines enviados:

    listado de mailings enviados

    Es importante fijarse  que el estado indique  «completado», ya que en otro caso indicaría si está en proceso o cualquier posible error.

    También en esta pantalla de boletines enviados podemos ver un pequeño resumen, de emails enviados, visualizaciones y clicks, aunque de todas formas si queremos ver el detalle del envío podemos hacer click en el asunto de la newsletter e iremos a una pantalla con más detalle:

    estadísticas de mailing

    Como  podemos ver en esta pantalla a modo de  resumen rápido y general podemos  ver información rápida de: Emails entregados, cantidad y porcentaje, Emails rebotados, Visualizaciones y porcentaje (es posible que un mismo suscriptor abra varias veces el email) y  Clicks y porcentaje

    Pero ademas fíjese que tenemos más menús, al lado de la flecha: Emails enviados, Visualizaciones, Clicks, Baja y  Reenviado. En estos menús tenemos mucha más información, como los contactos que han abierto, los que han hecho click, el mapa de click,geolocalización, etc .

    Si le interesa en su blog  puede ampliar mas información al respecto .

     

     

     

    Creemos  que para una primera toma de contacto, ya hemos visto los aspectos más importantes de lo que se puede hacer con una nueva cuenta de Mailrelay en su nueva version  V3  ,  que como decíamos en la introducción, es uno de  las pocas servicios gratuitos ,·que no tiene límite diario de envío, y  que  como hemos visto , incluye  una ingente  número de funcionalidades  extra  .

    Además  un aspecto que no debemos  desdeñar de la  funcionalidad de Mailrelay ,  es que  no incluyen publicidad en sus newsletters, pues la verdad suena un poco anacrónico que para  intentar informar de algún producto nuevo , una novedad  o lo  que sea que queramos enviar a nuestra  base de clientes  o usuarios   tengamos  que incluir publicidad  de terceros ¿a  que sonaría bastante raro verdad?