Bienvenido, Invitado
Tienes que registrarte para poder participar en nuestro foro.

Nombre de usuario/Email:
  

Contraseña
  





Buscar en los foros

(Búsqueda avanzada)

Estadísticas del foro
» Miembros: 6
» Último miembro: sergiotas73
» Temas del foro: 39
» Mensajes del foro: 45

Estadísticas totales

Usuarios en línea
Actualmente hay 4 usuarios en línea.
» 0 miembro(s) | 4 invitado(s)

Últimos temas
Saber nuestra IP publica....
Foro: PHP
Último mensaje por: chujalt
03-05-2017, 21:40
» Respuestas: 2
» Vistas: 162
Trabajar con archivos exc...
Foro: PHP
Último mensaje por: chujalt
29-03-2017, 21:23
» Respuestas: 0
» Vistas: 102
Instalar Ubuntu 16.4 junt...
Foro: Linux
Último mensaje por: chujalt
12-02-2017, 19:54
» Respuestas: 0
» Vistas: 239
Evitar descarga página we...
Foro: Linux
Último mensaje por: chujalt
06-01-2017, 22:02
» Respuestas: 2
» Vistas: 490
Puesta en marcha de elect...
Foro: Proyectos
Último mensaje por: chujalt
10-11-2016, 21:06
» Respuestas: 0
» Vistas: 249
Nodemcu, alarma nivel agu...
Foro: Nodemcu
Último mensaje por: chujalt
28-10-2016, 19:39
» Respuestas: 0
» Vistas: 397
Wemos mini, controlar ser...
Foro: Wemos
Último mensaje por: chujalt
24-10-2016, 18:22
» Respuestas: 0
» Vistas: 377
Nodemcu, controlar encend...
Foro: Nodemcu
Último mensaje por: chujalt
23-10-2016, 19:23
» Respuestas: 0
» Vistas: 398
Optimizador build.prop
Foro: Android
Último mensaje por: chujalt
22-10-2016, 19:31
» Respuestas: 0
» Vistas: 469
Desempaquetar y empaqueta...
Foro: Android
Último mensaje por: chujalt
22-10-2016, 19:27
» Respuestas: 0
» Vistas: 260

 
  Saber nuestra IP publica. Servicio tipo no-ip o DynDNS
Enviado por: chujalt - 29-04-2017, 20:10 - Foro: PHP - Respuestas (2)

Saludos amigos.

Si tenemos un servidor montado en casa y nuestro proveedor de internet no nos facilita una IP fija tendremos la necesidad de saber en todo momento nuestra IP pública. Vamos a montar un servicio tipo no-ip o DynDNS.

El servicio consta de dos partes, una en nuestro ordenador y por otra parte necesitaremos un servidor de internet, por ejemplo, si no tenemos un servicio de hosting, https://www.hostinger.es/ , nos ofrece de forma gratuita todo lo que necesitamos, 2 GB de almacenamiento, php y bases de datos MySQL. 



EN NUESTRO ORDENADOR

Tengo que aclarar que lo que explico a continuación lo he hecho bajo un sistema linux.

En  primer lugar crearemos un directorio en el servidor de nuestro pc, yo lo he llamado curl, la ruta sería /var/www/html/curl.

Abrimos nuestro editor de texto favorito y escribimos

#!/bin/bash
curl -d "value1=pepico" http://midominio.com/curl/index.php


Lo guardamos con el nombre 1.sh, por ejemplo, y le damos permisos de ejecución. En la última linea cambiar midominio.com por el de nuestro servidor de hosting, también, donde vemos value1=pepico. cambiamos el nombre por el que queramos.

Este script lo que hace es enviar el nombre de usuario a nuestra página index.php del servidor de hosting mediante el método post.

Ahora vamos a editar crontab para que nuestro script se ejecute cada dos horas. Abrimos un terminal y escribimos 

sudo gedit /etc/crontab


y en crontab añadimos esta línea

0 */2    * * *    root    /var/www/html/curl/1.sh


guardamos y cerramos. Como hemos dicho, ésto hará que nuestro script se ejecute cada dos horas.

Ya hemos terminado en nuestro PC, ahora iremos a nuestro servidor de hosting.



EN NUESTRO SERVIDOR DE HOSTING 

Deberemos crear una base de datos MySQL con nombre curl, con una tabla llamada datos y 4 columnas, id (int, primary key, auto_increment), nombre (varchar 50), ip (varchar 50) y fecha (timestamp, CURRENT_TIMESTAMP)

Ahora vamos a crear la página index que recogerá los datos que le hemos enviado antes por el script bash y los introducirá en nuestra base de datos. Paso previo es crear también una página conex.

conex.php

Código PHP: (Seleccionar todo)
<?php
// hostname o ip del servidor de Base Datos
$bd_host='localhost';
 
// nombre de usuario 
$bd_usuario='usuario';
 
// la contraseña para la BBDD  
$bd_password='contraseña';
 
// nombre del BBDD
$bd_base='curl';
$conexion = new mysqli($bd_host$bd_usuario$bd_password$bd_base);
 
if (
$conexion->connect_errno
{
 
   echo "No se pudo conectar a la Base Datos: (" $mysqli->connect_errno ") " $mysqli->connect_error;
}
?>


index.php 

Código PHP: (Seleccionar todo)
<?php

include("conex.php");
if(
$_POST)
 
     {
 
        $queryInsert "INSERT INTO datos (nombre, ip) VALUES ('".$_POST['value1']."', '".$_SERVER['REMOTE_ADDR']."');";
 
 
        $resultInsert mysqli_query($conexion$queryInsert); 
 
 
        if($resultInsert)
 
        {
 
           echo "<strong>Se ingresaron los registros con exito</strong>. <br>";
 
        }
 
        else
 
        {
 
           echo "No se ingresaron los registros. <br>";
 
        }
 
 
     }
?>


Con esto ya tenemos nuestra última ip metida en la base de datos.

Ahora vamos a crear dos sencillas páginas para saber cual es nuestra actual ip pública de nuestro PC, buscar.php y encontrado.php.

buscar.php

Código PHP: (Seleccionar todo)
<html>
<
head>
<
title>Entrada de enlaces</title>
<
meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
</
head>

<
body>
<
form action="encontrado.php" method="post">
 
 Nombre:<br>
 
 <input type="text" name="nombre"><br><br>
 
 <input type="submit" value="Submit">
</
form>
</
body>
</
html


Nos mostrará un sencillo formulario donde debemos poner nuestro nombre de usuario que está en el script bash.

encontrado.php 

Código PHP: (Seleccionar todo)
<html>
<
head>
<
title>Entrada de enlaces</title>
<
meta charset="UTF-8">
</
head>
<
body>
<?
php
include("conex.php");
$consulta "SELECT nombre, ip, DATE_FORMAT(fecha, 'Con fecha: %d/%m/%y y hora: %H:%i:%s') AS fecha FROM datos WHERE nombre = '" $_POST["nombre"] . "' ORDER BY id  DESC LIMIT 1";
$resultado $conexion -> query($consulta);
echo 
"<span style='color: blue;'>Extracción de último dato ...</span> <br><br>";
while(
$fila $resultado -> fetch_array())
{
echo 
"Usuario: " $fila["nombre"] . "<br>";
echo 
"Última IP asignada: " $fila["ip"] . "<br>";
echo 
"" $fila["fecha"] . "<br><hr>";
}
mysqli_free_result($resultado);
mysqli_close($conexion);
?>
</body>
</html> 


Nos mostrará la última ip pública que tenemos asignada y a que fecha y hora se captó.

Cita:Extracción de último dato ... 

Usuario: pepico
Última IP asignada: 11.111.11.111
Con fecha: 29/04/17 y hora: 18:00:02



Todo esto está bien, pero queremos algo mas, no tener que ir a un formulario para saber nuestra ip, lo que queremos es poner en el navegador una dirección y que nos redireccione a nuestro servidor local, una dirección tipo "midominio.com/pepico". Recordad que pepico era nuestro usuario con el que se guardaban las ip de nuestro servidor local.

Bien, como al poner esa dirección en el navegador, el directorio pepico no existe, el servidor nos enviará un error 404, página no encontrada. Vamos a crear una página de error 404 tuneada por nosotros.

Antes de nada vamos a tener que tocar el archivo .htaccess para que cuando se de el error 404 nos muestre nuestra página 404. Abrimos el archivo .htaccess y añadimos la linea

ErrorDocument 404 /404.php
 
Con esto le decimos que cuando se produzca el error 404 nos muestre la página 404.php.

Ahora vamos a crear la página 404.php, que a continuación diré lo que hace.

404.php

Código PHP: (Seleccionar todo)
<html>
<
head>
<
title>Entrada de enlaces</title>
<
meta charset="UTF-8">
<
script language="JavaScript">
function 
enviar()
{
document.form.submit();
}
</script>
</head>
<body onload="enviar()">
<?php
$url 
 "{$_SERVER['REQUEST_URI']}";
$resultado str_replace("/"""$url);
?>
<form method="POST" action="curl/redireccionar.php" name="form">
<p><input type="text" value="<?php echo $resultado?>" name="nombre"></p>
<p><input type="submit" value="Enviar" name="B1"></p>
</form>
</body>
</html> 


Esta página lo que hace es eliminar de la dirección web todo lo que vaya antes de la barra "/", en nuestro caso quedaría pepico y lo envía directamente a otra página que luego vamos a crear, redireccionar.php, la cual estará dentro del directorio curl.

redireccionar.php

Código PHP: (Seleccionar todo)
<html>
<
head>
<
title>Entrada de enlaces</title>
<
meta charset="ISO-8859-1" />
</
head>
<
body>
<?
php
include("conex.php");
$consulta "SELECT nombre, ip, DATE_FORMAT(fecha, 'Con fecha: %d/%m/%y y hora: %H:%i:%s') AS fecha FROM datos WHERE nombre = '" $_POST["nombre"] . "' ORDER BY id  DESC LIMIT 1";
$resultado $conexion -> query($consulta);
 
if (
$fila $resultado -> fetch_array())

echo 
"<script language=\"javascript\">window.location.href=\"http://" $fila["ip"] . "\";</script>";
}
else {
echo 
"NO encontrado";
}
mysqli_free_result($resultado);
mysqli_close($conexion);


?>
</body>
</html> 


Esta página lo que hace es buscar en la base de datos la última ip registrada del usuario que queremos, en este caso pepico , y nos redirecciona directamente a esa ip. Si ese usuario no existe o nos equivocamos al escribir la dirección, la página actuará como una página 404 y nos mostrará un mensaje de "no encontrada".

Todo el proceso, desde que pones la dirección en el navegador hasta que te redirecciona a la ip de tu servidor local es limpio y automático.


Bueno, espero que le sirva a alguien de ayuda.

Saludos.

Imprimir

  Trabajar con archivos excel desde php
Enviado por: chujalt - 29-03-2017, 21:23 - Foro: PHP - Sin respuestas

Saludos.

En este post vamos a trabajar con un archivo excel desde php. Para este ejemplo vamos a trabajar con uno con dos columnas y 24 filas, Una de las columnas son horas (de 1 a 24) y en cada hora un precio, Si lo queréis bajar AQUI.

También necesitaremos un archivo para leer el archivo excel , se trata de excel_reader2.php, merito a su autor, te lo puedes bajar de AQUI.

Bien, manos a la obra, en primer lugar tendremos que cargar excel_reader2.php y el propio archivo excel, por lo que al principio de la página pondremos:

Código PHP: (Seleccionar todo)
<?php
require_once 'excel_reader2.php';
$data = new Spreadsheet_Excel_Reader("excel.xls");
?>

Ahora vamos a crear un array con los valores de las filas y columnas con las que queremos trabajar, pondremos:

Código PHP: (Seleccionar todo)
$pepe[1] = $data->raw(12);
$pepe[2] = $data->raw(22);
$pepe[3] = $data->raw(32);
$pepe[4] = $data->raw(42);
$pepe[5] = $data->raw(52);
$pepe[6] = $data->raw(62);
$pepe[7] = $data->raw(72);
$pepe[8] = $data->raw(82);
$pepe[9] = $data->raw(92);
$pepe[10] = $data->raw(102);
$pepe[11] = $data->raw(112);
$pepe[12] = $data->raw(122);
$pepe[13] = $data->raw(132);
$pepe[14] = $data->raw(142);
$pepe[15] = $data->raw(152);
$pepe[16] = $data->raw(162);
$pepe[17] = $data->raw(172);
$pepe[18] = $data->raw(182);
$pepe[19] = $data->raw(192);
$pepe[20] = $data->raw(202);
$pepe[21] = $data->raw(212);
$pepe[22] = $data->raw(222);
$pepe[23] = $data->raw(232);
$pepe[24] = $data->raw(242); 

Con esto tendremos un array con las 24 horas y el precio de cada una de ellas.
Vamos a ver el array, escribimos:

Código PHP: (Seleccionar todo)
print_r($pepe); 

y obtendremos:

Array ( [1] => 121,13838673 [2] => 119,52911591 [3] => 116,56370045 [4] => 113,88535263 [5] => 113,5654684 [6] => 114,06312135 [7] => 116,70671779 [8] => 117,69285692 [9] => 115,08610616 [10] => 114,66693383 [11] => 113,06913537 [12] => 110,99255973 [13] => 110,92340009 [14] => 111,20173737 [15] => 110,60698288 [16] => 110,49370675 [17] => 108,41762924 [18] => 108,57877114 [19] => 110,6906715 [20] => 112,97520268 [21] => 119,26980347 [22] => 121,53522841 [23] => 119,32600748 [24] => 117,68262512 )

Otra manera de ver los valores del array:

Código PHP: (Seleccionar todo)
var_dump($pepe); 

Y obtendremos:

array(24) { [1]=> float(121,13838673) [2]=> float(119,52911591) [3]=> float(116,56370045) [4]=> float(113,88535263) [5]=> float(113,5654684) [6]=> float(114,06312135) [7]=> float(116,70671779) [8]=> float(117,69285692) [9]=> float(115,08610616) [10]=> float(114,66693383) [11]=> float(113,06913537) [12]=> float(110,99255973) [13]=> float(110,92340009) [14]=> float(111,20173737) [15]=> float(110,60698288) [16]=> float(110,49370675) [17]=> float(108,41762924) [18]=> float(108,57877114) [19]=> float(110,6906715) [20]=> float(112,97520268) [21]=> float(119,26980347) [22]=> float(121,53522841) [23]=> float(119,32600748) [24]=> float(117,68262512) }

Ahora vamos a mostrar los valores ordenados de menor a mayor precio:

Código PHP: (Seleccionar todo)
asort($pepe);
var_export($pepe); 

Obtenermos:

array ( 17 => 108.41762924, 18 => 108.57877114, 16 => 110.49370675, 15 => 110.60698288, 19 => 110.69067149999999, 13 => 110.92340009, 12 => 110.99255973, 14 => 111.20173737, 20 => 112.97520268, 11 => 113.06913537, 5 => 113.5654684, 4 => 113.88535263, 6 => 114.06312135, 10 => 114.66693383, 9 => 115.08610616, 3 => 116.56370045, 7 => 116.70671779, 24 => 117.68262512, 8 => 117.69285692, 21 => 119.26980347, 23 => 119.32600748, 2 => 119.52911591, 1 => 121.13838672999999, 22 => 121.53522841, )

Vamos a Mostrar el precio mas bajo:

Código PHP: (Seleccionar todo)
echo min($pepe); 

Obtenemos:

108,41762924

Vamos a mostrar la hora en la que está el precio mas bajo:

Código PHP: (Seleccionar todo)
$min_keys = array(); 
foreach(
$pepe as $pepo => $pepi
 
   if($pepi == min($pepe)) array_push($min_keys$pepo); 

echo 
$min_keys[0]; 

y obtenemos:

17

En esta ocasión vamos a mostrar los precios de menor a mayor:

Código PHP: (Seleccionar todo)
foreach($pepe as $pepito){
 
   echo $pepito."<br>";


Con lo que obtendremos:

108,41762924
108,57877114
110,49370675
110,60698288
110,6906715
110,92340009
110,99255973
111,20173737
112,97520268
113,06913537
113,5654684
113,88535263
114,06312135
114,66693383
115,08610616
116,56370045
116,70671779
117,68262512
117,69285692
119,26980347
119,32600748
119,52911591
121,13838673
121,53522841

Vamos a mostrar los horarios de menor a mayor precio:

Código PHP: (Seleccionar todo)
$juan array_keys($pepe);
foreach(
$juan as $juanito){
 
   echo $juanito."<br>";


Y obtendremos:

17
18
16
15
19
13
12
14
20
11
5
4
6
10
9
3
7
24
8
21
23
2
1
22

Vamos a mostrar los horarios con el precio ordenados de menor a mayo:

Código PHP: (Seleccionar todo)
foreach ($pepe as $hora => $precio) {
 
   echo " A las $hora horas el precio será $precio.\n";
 
   echo "</p>";


Obtenemos:

A las 17 horas el precio será 108,41762924.
A las 18 horas el precio será 108,57877114.
A las 16 horas el precio será 110,49370675.
A las 15 horas el precio será 110,60698288.
A las 19 horas el precio será 110,6906715.
A las 13 horas el precio será 110,92340009.
A las 12 horas el precio será 110,99255973.
A las 14 horas el precio será 111,20173737.
A las 20 horas el precio será 112,97520268.
A las 11 horas el precio será 113,06913537.
A las 5 horas el precio será 113,5654684.
A las 4 horas el precio será 113,88535263.
A las 6 horas el precio será 114,06312135.
A las 10 horas el precio será 114,66693383.
A las 9 horas el precio será 115,08610616.
A las 3 horas el precio será 116,56370045.
A las 7 horas el precio será 116,70671779.
A las 24 horas el precio será 117,68262512.
A las 8 horas el precio será 117,69285692.
A las 21 horas el precio será 119,26980347.
A las 23 horas el precio será 119,32600748.
A las 2 horas el precio será 119,52911591.
A las 1 horas el precio será 121,13838673.
A las 22 horas el precio será 121,53522841.

Ahora vamos a mostrar el precio mas bajos que yo quiero, en esta ocasión el precio mas bajo y el cuarto mas bajo:

Código PHP: (Seleccionar todo)
echo $juan[0]."<br>";
echo 
$juan[3]; 

La salida será:

17
15

Vamos a calcular el valor medio del precio:

Código PHP: (Seleccionar todo)
$promedio=array_sum($pepe)/count($pepe); 
echo 
"El valor medio de hoy es: $promedio €"

Nos mostrará:

El valor medio de hoy es: 114,52755089167 €

Vamos a mostrar el precio de la hora actual de nuestro sistema y lo compara con la media:

Código PHP: (Seleccionar todo)
$tiempo getdate(time());
$hora $tiempo["hours"];
$valor_hora_actual $pepe[$hora];
echo 
"la hora actual es $hora horas<br>";
echo 
"el valor medio del día de hoy es $promedio <br>";
echo 
"el precio de esta hora es $valor_hora_actual <br>";
if (
$valor_hora_actual >= $promedio)
{
    echo 
"Esta hora es mas cara que la media";
}
else
{
    echo 
"Esta hora es mas barata que la media";
    } 

Y obtenemos:

la hora actual es 20 horas
el valor medio del día de hoy es 114,52755089167
el precio de esta hora es 112,97520268
Esta hora es mas barata que la media


Bueno, ya está, espero que le sirva a alguien de ayuda.

Saludos.

Imprimir

  Instalar Ubuntu 16.4 junto a Windows 10 con particiones GTP y con UEFI
Enviado por: chujalt - 12-02-2017, 19:54 - Foro: Linux - Sin respuestas

Saludos amigos...
 
Después de muchos apuros, leer bastante y meter muchas veces la pata, voy a explicar en esta guía como conseguí instalar Ubuntu 16.4 junto a Windows 10 en un pc UEFI con particiones tipo GTP.
 
En primer lugar debemos descargarnos la ISO de Ubuntu 16.4.1 LTS de la página oficial.
 
Para preparar el USB de instalación, desde Windows Instalamos el programa Rufus en su última versión.



[Imagen: rufus_es.png]




Una cosa muy importante es la opción Tipo de la partición y del sistema de destino, que debe estar en Tipo de partición GTP para computadora UEFI (intenté ponerle una ISO Debian, pero al poner esta opción me decía que no es posible). El sistema de archivos FAT32 y todo lo demás lo dejamos lo que nos pone por defecto. Buscamos la ISO a instalar y le damos al botón de comenzar.

 
Una vez terminada la instalación, vamos a nuestro PC, pinchamos nuestro USB, lo encendemos y entramos en la BIOS, debemos desactivar la opción de SECURE BOOT y en la orden de arranque poner en primer lugar nuestro USB de instalación.

 
Durante la instalación, cuando te pregunta donde instalarlo, yo le puse personalizada, creando tres particiones /, /home y swap. En el sitio donde instalar el gestor de arranque seleccioné la raiz del disco duro.

 
Termina la instalación y cuando reiniciamos vemos que no sale el Grub y que se inicia Windows directamente. No pasa nada.

 
Volvemos a poner nuestro USB y reiniciamos el PC, pero esta vez en modo live. Una vez abierto necesitamos instalar el programa boot-repair disk, para ello, en una ventana de terminal introducimos

sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install -y boot-repair


Con esto se nos instalará y se nos abrirá


[Imagen: boot_repair.png]




Debemos ir a las opciones avanzadas y abrir la pestaña "opciones de GRUB". Una vez ahí, lo que debemos hacer es desactivar la opción "SecureBoot" y asegurarnos que la opción "purgar GRUB antes de reinstalarlo" está activada. Le damos a aceptar y se pondrá a trabajar.

 
Cuando haya terminado nos pedirá que en una ventana de terminal pongamos unas ordenes bash que el mismo nos proporciona. Hay que ponerlas una a una. Después nos saldrá una ventana donde nos informará de lo que ha hecho y nos dará una linea para introducir en un terminal Windows si sigue sin salir el GRUB.

 
Reinicié y seguía arrancando Windows directamente. Se ejecuta un terminal de Windows, pero ojo, como administrador y se pone esa línea antes proporcionada por Boot-repair. Reinicié y ya sale el GRUB con los dos sistemas instalados, a parte de otras opciones.

 
Esto es lo que he hecho yo tras mucho pelear y es lo que me ha funcionado, espero que a alguien le sirva.

  
Saludos.

Imprimir

  Puesta en marcha de electrodomesticos segun precio tramo horario.
Enviado por: chujalt - 10-11-2016, 21:06 - Foro: Proyectos - Sin respuestas

Saludos.

Con la instalación de los contadores inteligentes de consumo eléctrico nos facturan según el precio que tenga determinado tramo horario. Todos los días publican un listado con el precio de esos tramos, que son 24, de 00'00 a 00'59, de 01'00 a 01'59, etc.

El proyecto consiste en que, con ayuda de Arduino conectado vía wifi a internet podamos decidir cuando se ponen en marcha nuestros electrodomésticos, por ejemplo secadoras, lavadoras, etc. Le podremos indicar que se conecten cuando el tramo horario sea mas barato o esté por debajo de la media.

De momento he preparado la página web donde nos da esta información, por si a alguien le sirve de ayuda o quiere informarse del precio de la electricidad en los distintos tramos horarios.

OPTIELEC

Los horarios que muestra son para España.


Saludos.

Imprimir

  Nodemcu, alarma nivel agua via wifi
Enviado por: chujalt - 28-10-2016, 19:39 - Foro: Nodemcu - Sin respuestas

Saludos.

En esta ocasión vamos a crear una alarma de nivel de agua. Una página web creada al efecto nos informará si el agua no ha llegado al nivel o, si por el contrario, si que ha llegado.

Para ello necesitamos 2 tipos de código, el de la página web (con php) y el del Nodemcu, al cual le cargaremos el programa con la Arduino ID.


Materiales utilizados:

  • Una placa Nodemcu (yo he utilizado la V2).
  • Un módulo sensor de agua para Arduino.
  • 3 cables Dupont.

[Imagen: nodemcu.jpg]


[Imagen: sensoragua.jpg]




Conexiones:
  • Pin S del sensor de líquidos al pin A0 del Nodemcu.
  • Pin + del sensor de líquidos al pin 3.3V del Nodemcu.
  • Pin - del sensor de líquidos al pin GND del Nodemcu.


Código página web:
Código PHP: (Seleccionar todo)
<?php
    
// this refreshes current page after 5 seconds.
 
   header"refresh:5;" );
?>
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Sensor agua</title>
<style>
.normal
    {
        background: green;
        color: yellow;
        border-radius: 1em;
        padding: 1em;
        position: absolute;
        top: 50%;
        left: 50%;
        margin-right: -50%;
        transform: translate(-50%, -50%);
        text-align:center
    }
.anormal
    {
        background: red;
        color: yellow;
        border-radius: 1em;
        padding: 1em;
        position: absolute;
        top: 50%;
        left: 50%;
        margin-right: -50%;
        transform: translate(-50%, -50%);
        text-align:center
    }
</style>
</head>
<body>
<?
$url 
'http://192.168.1.222';
$content file_get_contents($url);
$doc = new DOMDocument();
$doc->loadHtml($content);
$contenido explode("\n"trim($doc->getElementById('nivel')->nodeValue))[0];
if (
$contenido 200)
{
echo
"<div class='normal'>";
echo
"En estos momentos no ocurre nada.<br/>TODO CORRECTO";
echo
"</div>";
}
else
{
echo
"<div class='anormal'>";
echo
"ATENCION.... ATENCION.... ALARMA..... ALARMA<br/>La cosa no va bien";
echo
"</div>";

?>
</body>
</html> 


La página lo que realiza es conectar cada 5 segundos con la dirección ip del Nodemcu y leer las lecturas del sensor, en nuestro caso le hemos dado un límite de 200, si no llega a ese límite nos dará una información, si llega o lo sobrepasa nos dará otra.


Si no llega a la lectura límite:

[Imagen: aguabien.png]



Si llega a la lectura límite:

[Imagen: aguamal.png]




Código Nodemcu:
#include <ESP8266WiFi.h>
const char* ssid = "Tu_ssid";
const char* password = "Tu_contraseña";
IPAddress ip(192,168,1,222);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);
const int analogInPin = A0;
int sensorValue = 0;
WiFiServer server(80);
void setup() {
WiFi.begin(ssid, password);
 WiFi.config(ip, gateway, subnet);
 server.begin();
}
void loop() {
WiFiClient client = server.available();
 if (!client) {
   return;
 }
 while(!client.available()){
   delay(1);
 }
 String request = client.readStringUntil('\r');
 client.flush();
client.println("HTTP/1.1 200 OK");
 client.println("Content-Type: text/html");
 client.println("");
 client.println("<!DOCTYPE HTML>");
 client.println("<html>");
 client.print("<body>");  
  client.print("<div id='nivel'>");
 client.print(analogRead(analogInPin));
  client.print("</div>");
 client.println("</body>");
 client.println("</html>");

 delay(1);

}


Explicación del código:
  • Cargamos las librerías necesarias.
  • Le damos los parámetros de nuestra red wifi y le asignamos una dirección ip, en este caso la 192.168.1.222
  • Asignamos el pin de lectura del sensor.
  • Iniciamos el sensor y la comunicación wifi.
  • Creamos una página web que contiene la lectura del sensor de líquidos.

Bueno, ya está, espero que le sirva a alguien.

Saludos.

Imprimir

  Wemos mini, controlar servo via wifi
Enviado por: chujalt - 24-10-2016, 18:22 - Foro: Wemos - Sin respuestas

Saludos.

Recientemente he adquirido una placa Wemos mini D1 y me parece increíble que con lo pequeña que es, lo funcional que resulta, con wifi integrado y todo (ESP8266). Fijaros en la foto de mas abajo su tamaño, el cable conectado a ella es un micro-usb. El precio también es muy atractivo, por unos 3 € la podéis encontrar.

Con ella vamos a controlar el giro de un servo vía wifi desde una página web.


Material necesario:

  • Una placa Wemos mini D1.
  • Un Micro Servo 9G

[Imagen: wemosmini.jpg]


[Imagen: servo.jpg]




Conexiones:

  • Pin cable amarillo del servo al pin D7 de la Wemos mini.
  • Pin cable rojo del servo al pin 5v de la Wemos mini.
  • Pin cable marrón del servo al pin GND de la Wemos mini.


Página web para controlar el servo:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//ES" "http://www.w3.org/TR/html4/strict.dtd">
<html>
 <head>
   <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
   <title>Control servo</title>
<style type="text/css">
#juan {
   position: absolute;
   left: 50%;
   top: 50%;
   transform: translate(-50%, -50%);
   -webkit-transform: translate(-50%, -50%);
}
</style>
 </head>
 <body>
<div id="juan">
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=000';" value="000" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=005';" value="005" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=010';" value="010" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=015';" value="015" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=020';" value="020" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=025';" value="025" /></br>
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=030';" value="030" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=035';" value="035" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=040';" value="040" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=045';" value="045" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=050';" value="050" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=055';" value="055" /></br>
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=060';" value="060" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=065';" value="065" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=070';" value="070" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=075';" value="075" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=080';" value="080" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=085';" value="085" /></br>
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=090';" value="090" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=095';" value="095" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=100';" value="100" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=105';" value="105" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=110';" value="110" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=115';" value="115" /></br>
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=120';" value="120" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=125';" value="125" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=130';" value="130" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=135';" value="135" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=140';" value="140" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=145';" value="145" /></br>
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=150';" value="150" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=155';" value="155" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=160';" value="160" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=165';" value="165" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=170';" value="170" />
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=175';" value="175" /></br>
  <input type="button" onclick="location.href='http://192.168.1.111/angulo=180';" value="180" />
</div>

</body>
</html>



Imagen de la página web:

[Imagen: grados.png]



Código Wemos mini:
//Conexiones
//Amarillo: D7
//Rojo: 3V
//Marrón: GND
#include <Servo.h>
#include <ESP8266WiFi.h>
const int servo_pin = D7;
Servo myservo;  
unsigned int old_value;
const char* ssid = "Tu_ssid";
const char* password = "Tu_contraseña";
IPAddress ip(192,168,1,111);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);
WiFiServer server(80);

void setup()
{
 Serial.begin(115200);
 delay(10);
myservo.attach(servo_pin);
  old_value = 90;
WiFi.begin(ssid, password);
 WiFi.config(ip, gateway, subnet);
 
 server.begin();
}

String f = "";
void loop() {

 WiFiClient client = server.available();
 if (!client) {
   return;
 }


 Serial.println("new client");
 while(!client.available()){
   delay(1);
 }

 String request = client.readStringUntil('\r');
 client.flush();


  char i1 = request.indexOf("GET /angulo="), i2;
  if (i1 != -1)
    i2 = request.indexOf(" ", i1+12);
    f = request.substring(i1+12, i2);
int g = f.toInt();

   
  if ((0 <= g) && (g <= 180)) {
       
     if (g < old_value)
      {  
     for(int i = old_value ; i > g ; i -= 1)
        {
        myservo.write(i);
        delay(15);
        }
        old_value = g;
      }
     
    if (g > old_value)
      {
      for(int i = old_value ; i < g ; i += 1)
        {
        myservo.write(i);
        delay(15);
        }
        old_value = g;
     }

  }  


delay(100);
client.println("HTTP/1.1 200 OK");
 client.println("Content-Type: text/html");
 client.println("");
 client.println("<!DOCTYPE HTML>");
 client.println("<html>");
 client.print("<body onload='history.back();'>\n");
 client.println("</body>");
 client.println("</html>");

 delay(1);
}



Comentario del código:
  • Se incluyen las librerías necesarias.
  • Se indica el pin del servo.
  • Se dan todos los parámetros para la conexión wifi. En este caso a la placa le hemos asignado la dirección IP 192.168.1.111.
  • Se inicia el servo y la conexión wifi.
  • Se recibe mediante el método GET los parámetros enviados desde la página web y se desecha todo menos lo que nos interesa, que es el número de grados.
  • Una vez captado ese número, se envía al servo para que gire esos grados.
  • La placa envía al navegador una pequeña página web con un "history.back()" para que nos vuelva a mostrar el teclado de manera inmediata.

Bueno, ya está, espero que a alguien le sirva.


Saludos

Imprimir

  Nodemcu, controlar encendido / apagado de led via wifi
Enviado por: chujalt - 23-10-2016, 19:23 - Foro: Nodemcu - Sin respuestas

Saludos.

Vamos a controlar el encendido / apagado  de un led vía wifi con Nodemcu. La página web que nos proporcionará el Nodemcu nos dirá si en led está encendido o apagado y nos mostrará un botón para realizar una acción según sea el caso. 
El programa lo cargaremos al Nodemcu con el Arduino IDE.


Materiales necesarios:

  • Una placa Nodemcu (yo he utilizado la V2).
  • 2 cables dupont.
  • Un led.

[Imagen: nodemcu.jpg]

[Imagen: led.gif]




Conexiones:
  • Pin D7 del Nodemcu al polo positivo del led
  • Pin GND del Nodemcu al polo negativo del led


Código para Nodemcu:

#include <ESP8266WiFi.h>

const char* ssid = "Tu_ssid";
const char* password = "Tu_contraseña";
IPAddress ip(192,168,1,222);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);
int ledPin = 13; //Lo conectamos a D7
WiFiServer server(80);

void setup() {
 Serial.begin(115200);
 delay(10);

 pinMode(ledPin, OUTPUT);
 digitalWrite(ledPin, LOW);

 WiFi.begin(ssid, password);
 WiFi.config(ip, gateway, subnet);
 
 server.begin();
}

void loop() {

 WiFiClient client = server.available();
 if (!client) {
   return;
 }


 Serial.println("new client");
 while(!client.available()){
   delay(1);
 }

 String request = client.readStringUntil('\r');
 client.flush();


 int value = digitalRead(ledPin);
 if (request.indexOf("/LED=ON") != -1)  {
   digitalWrite(ledPin, HIGH);
   value = HIGH;
 }
 if (request.indexOf("/LED=OFF") != -1)  {
   digitalWrite(ledPin, LOW);
   value = LOW;
 }


 client.println("HTTP/1.1 200 OK");
 client.println("Content-Type: text/html");
 client.println("");
 client.println("<!DOCTYPE HTML>");
 client.println("<html>");

 client.print("El led esta ahora: ");

 if(value == HIGH) {
   client.print("Encendido");
   client.println("<br><br>");
   client.println("<a href=\"/LED=OFF\"\"><button>Apagar</button></a><br />");  
 } else {
   client.print("Apagado");
client.println("<br><br>");
 client.println("<a href=\"/LED=ON\"\"><button>Encender</button></a>");
 }
 client.println("</html>");

 delay(1);

}




Comentario del código:

En primer lugar está la configuración de la red wifi. Deberás cambiar la sidd y la contraseña por la de tu router. En este script le asignamos la dirección IP 192.168.1.222, la puedes cambiar a tu gusto siempre que esté en el rango de ips de tu router.

Le asignamos el pin 13 al led, que en la placa Nodemcu es el D7, le indicamos que es de salida y lo iniciamos en LOW (apagado).

Comenzamos la comunicación Wifi.

Recién encendida la placa Nodemcu, el led estará apagado, al pone en el navegador la dirección IP 192.168.1.222 nos mostrará lo siguiente:

[Imagen: nodemculed1.png]


Si le damos al botón de encender, el led se encenderá y el navegador nos mostrará:

[Imagen: nodemculed2.png]


Si le damos al botón de apagar, el led se apagará y nos mostrará el navegador:


[Imagen: nodemculed3.png]



Y ya está. Como habéis visto la página que muestra es muy sencilla, pero era para que vierais como funciona.

Bueno, espero que le sirva a alguien.

Saludos.

Imprimir

  Optimizador build.prop
Enviado por: chujalt - 22-10-2016, 19:31 - Foro: Android - Sin respuestas

Saludos.
He creado un script que optimiza el build.prop de forma automática. Funciona bajo linux. Hay que darle permisos de ejecución.

Bajar script AQUI

Mirror: https://mega.co.nz/#!R88DRbyL!f4GqmdONz_...pfxS3FJfSA

Metemos el script y el build.prop en una carpeta y tecleamos

./obp.sh

Primero hace una copia del build.prop, que es sobre la que trabajará.
Nos pregunta si queremos configurarlo para idioma español.
Nos pregunta si queremos cambiar la zona horaria a España.
Nos pregunta si queremos cambiar el formato de fecha.
Nos da la opción de cambiar la densidad de pantalla, dpi.
Luego lista las lineas que tiene con los tweaks que vamos a meter por si ya hay alguno no duplicarlos.
Luego ya introduce un gran número de tweaks, que son estos:
persist.sys.purgeable_assets=1
ro.media.enc.hprof.vid.bps=8000000
windowsmgr.support_rotation_270=true;
dalvik.vm.heapsize=xx-large4m
debug.sf.hw=1
video.accelerate.hw=1
debug.performance.tuning=1
ro.config.nocheckin=1
ro.telephony.call_ring.delay=0
ro.kernel.android.checkjni=0
media.stagefright.enable-meta=true
media.stagefright.enable-scan=true
media.stagefright.enable-http=true
media.stagefright.enable-record=false
debug.sf.nobootanimation=1
ro.HOME_APP_ADJ=1
ro.config.hwfeature_wakeupkey=0
mot.proximity.delay=25
ro.lge.proximity.delay=25
ro.ril.hsxpa=2
ro.ril.gprsclass=10
ro.ril.hep=1
ro.ril.enable.dtm=1
ro.ril.hsdpa.category=10
ro.ril.enable.a53=1
ro.ril.enable.3g.prefix=1
ro.ril.htcmaskw1.bitmask=4294967295
ro.ril.htcmaskw1=14449
ro.ril.hsupa.category=5
net.tcp.buffersize.default=4096,87380,256960,4096, 16384,256960
net.tcp.buffersize.wifi=4096,87380,256960,4096,163 84,256960
net.tcp.buffersize.umts=4096,87380,256960,4096,163 84,256960
net.tcp.buffersize.gprs=4096,87380,256960,4096,163 84,256960
net.tcp.buffersize.edge=4096,87380,256960,4096,163 84,256960
net.rmnet0.dns1=8.8.8.8
net.rmnet0.dns2=8.8.4.4
net.dns1=8.8.8.8
net.dns2=8.8.4.4
ro.media.dec.jpeg.memcap=8000000
ro.media.enc.hprof.vid.bps=8000000
ro.media.enc.hprof.vid.fps=30
ro.media.enc.jpeg.quality=100
debug.performance.tuning=1
windowsmgr.max_events_per_sec=60
ro.ril.disable.power.collapse=1
pm.sleep_mode=1
persist.adb.notify=0
ro.max.fling_velocity=12000
ro.min.fling_velocity=8000
wifi.supplicant_scan_interval=180
ro.mot.eri.losalert.delay=1000
dalvik.vm.dexopt-flags=m=v,o=y
ro.lge.proximity.delay=25
mot.proximity.delay=25
persist.sys.composition.type=gpu
debug.composition.type=gpu
debug.composition.type=cpu
power.saving.mode=1
ro.ril.hsdpa.category=14
ro.ril.enable.3g.prefix=1
ro.ril.def.agps.mode=1
ro.ril.def.agps.feature=1
ro.ril.enable.sdr=1
ro.ril.enable.gea3=1
ro.ril.enable.fd.plmn.prefix=23402,23410,23411
ro.ril.enable.a52=1
ro.ril.set.mtu1472=1

Y ya está... si alguno cree que sobra o falta alguno que me lo diga y se modifica el script.

Saludos

Imprimir