Domótica en RaspberryPi (parte 2)
Domótica en RaspberryPi (parte 2)
... con interfaz web
Llevo unos días un poco liado y no podido actualizar el blog, sorry. Hoy os voy a enseñar que no tengo ni idea de programación web, pero me he fabricado un engendro para controlar la domótica de mi casa, via web. Por favor, no me critiquéis mucho, ya os he dicho que no se programar webs.En este ejemplo, la idea es ver un mapa de la casa con las bombillas a controlar, así que lo primero que necesitamos es un poco de paciencia y Sweet Home 3D, es software libre y muy sencillo de usar. Luego con un poco de Gimp + InkScape, le pintamos las bombillas. Mi resultado es:
Precioso, en mi caso he pintado también el termo. Si os fijais he pintado tambien un + y un - en aquellas bombillas que puedo regular la intensidad. Continuamos ahora en nuestro RaspberryPi:
1
| apt-get install apache2 php5 |
Ahora toca un poco de código, la idea es tener un index.html con el siguiente aspecto:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| <div style= "text-align:center; width:1293px; margin-left:auto; margin-right:auto;" > <img id = "Image-Maps_4201104201142424" src= "a4.jpg" usemap= "#Image-Maps_4201104201142424" border= "0" width= "800" height= "793" alt= "" > <map id = "_Image-Maps_4201104201142424" name= "Image-Maps_4201104201142424" > <area shape= "rect" coords= "397,123,475,243" href= "acciones.php?acc=encender&app=A1" alt= "" title= "" > <area shape= "rect" coords= "307,125,385,245" href= "acciones.php?acc=apagar&app=A1" alt= "" title= "" > <area shape= "rect" coords= "540,208,618,293" href= "acciones.php?acc=apagar&app=A4" alt= "" title= "" > <area shape= "rect" coords= "631,207,709,296" href= "acciones.php?acc=encender&app=A4" alt= "" title= "" > <area shape= "rect" coords= "563,415,641,500" href= "acciones.php?acc=apagar&app=A3" alt= "" title= "" > <area shape= "rect" coords= "650,416,728,501" href= "acciones.php?acc=encender&app=A3" alt= "" title= "" > <area shape= "rect" coords= "539,177,617,209" href= "acciones.php?acc=menos&app=A4" alt= "" title= "" > <area shape= "rect" coords= "632,179,710,211" href= "acciones.php?acc=mas&app=A4" alt= "" title= "" > <area shape= "rect" coords= "563,385,641,417" href= "acciones.php?acc=menos&app=A3" alt= "" title= "" > <area shape= "rect" coords= "649,381,727,413" href= "acciones.php?acc=mas&app=A3" alt= "" title= "" > <area shape= "rect" coords= "473,433,526,492" href= "acciones.php?acc=encender&app=A2" alt= "" title= "" > <area shape= "rect" coords= "408,433,461,492" href= "acciones.php?acc=apagar&app=A2" alt= "" title= "" > <area shape= "rect" coords= "408,407,461,432" href= "acciones.php?acc=menos&app=A2" alt= "" title= "" > <area shape= "rect" coords= "473,408,526,433" href= "acciones.php?acc=mas&app=A2" alt= "" title= "" > <area shape= "rect" coords= "353,640,404,724" href= "acciones.php?acc=apagar&app=A5" alt= "" title= "" > <area shape= "rect" coords= "297,640,348,724" href= "acciones.php?acc=encender&app=A5" alt= "" title= "" > < /map > <!-- Image map text links - Start - If you do not wish to have text links under your image map, you can move or delete this DIV --> <div style= "text-align:center; font-size:12px; font-family:verdana; margin-left:auto; margin-right:auto; width:800px;" > <!-- Image map text links - End - --> < /div > < /div > |
1
| <area shape= "rect" coords= "408,433,461,492" href= "acciones.php?acc=apagar&app=A2" alt= "" title= "" > |
1
| acc=apagar y app=A2 |
1
| vim /var/www/acciones .php |
1
2
3
4
5
6
| <!--?php exec ( "sudo /usr/bin/perl /var/www/domo.pl {$_GET[" acc "]} {$_GET[" app "]}" ); ?--> |
Básicamente ejecuta como root el script domo.pl y le añade los parámetros de acción y aparato. Asi que toca añadir al archivo:
1
| /etc/sudoers |
1
| www-data ALL=(ALL) NOPASSWD: /usr/bin/perl /var/www/domo .pl |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
| #!/usr/bin/perl -w use Fcntl; foreach $argnum (0 .. $ #ARGV) { if ($ARGV[$argnum] eq "encender" ) { $accion = 0x62; } if ($ARGV[$argnum] eq "on" ) { $accion = 0x62; } if ($ARGV[$argnum] eq "apagar" ) { $accion = 0x63; } if ($ARGV[$argnum] eq "off" ) { $accion = 0x63; } if ($ARGV[$argnum] eq "mas" ) { $accion = 0x65; } if ($ARGV[$argnum] eq "menos" ) { $accion = 0x64; } if ($ARGV[$argnum] eq "bright" ) { $accion = 0x65; } if ($ARGV[$argnum] eq "dim" ) { $accion = 0x64; } if ($ARGV[$argnum] eq "A1" ) { $aparato = 0x66; } if ($ARGV[$argnum] eq "a1" ) { $aparato = 0x66; } if ($ARGV[$argnum] eq "A2" ) { $aparato = 0x6E; } if ($ARGV[$argnum] eq "aseo" ) { $aparato = 0x6E; } if ($ARGV[$argnum] eq "a2" ) { $aparato = 0x6E; } if ($ARGV[$argnum] eq "A3" ) { $aparato = 0x62; } if ($ARGV[$argnum] eq "comedor" ) { $aparato = 0x62; } if ($ARGV[$argnum] eq "A4" ) { $aparato = 0x6A; } if ($ARGV[$argnum] eq "salon" ) { $aparato = 0x6A; } if ($ARGV[$argnum] eq "a3" ) { $aparato = 0x62; } if ($ARGV[$argnum] eq "a4" ) { $aparato = 0x6A; } if ($ARGV[$argnum] eq "A5" ) { $aparato = 0x61; } if ($ARGV[$argnum] eq "A6" ) { $aparato = 0x69; } if ($ARGV[$argnum] eq "A7" ) { $aparato = 0x65; } if ($ARGV[$argnum] eq "A8" ) { $aparato = 0x6D; } if ($ARGV[$argnum] eq "A9" ) { $aparato = 0x67; } if ($ARGV[$argnum] eq "A10" ) { $aparato = 0x6F; } if ($ARGV[$argnum] eq "A11" ) { $aparato = 0x63; } if ($ARGV[$argnum] eq "A12" ) { $aparato = 0x6B; } if ($ARGV[$argnum] eq "A13" ) { $aparato = 0x60; } if ($ARGV[$argnum] eq "A14" ) { $aparato = 0x68; } if ($ARGV[$argnum] eq "A15" ) { $aparato = 0x64; } if ($ARGV[$argnum] eq "A16" ) { $aparato = 0x6C; } } #print "se va a $accion el cacharro $aparato\n"; sysopen( CM15A, "/dev/cm15a0" , O_RDWR |O_NOCTTY | O_NONBLOCK ) || die "Cannot open device $!" ; syswrite CM15A, pack( "CC" , 4, $aparato ), 2; sleep 1; syswrite CM15A, pack( "CC" , 6, $accion ), 2; close( CM15A ); |
1
| /etc/init .d /sudo reload |
1
| http: //ip_raspberrypi |