Advertisement
Guest User

Untitled

a guest
May 7th, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.78 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5. #include <postgresql/libpq-fe.h>
  6. #include <unistd.h>
  7.  
  8. #define NSENSORS 5
  9.  
  10. #define OUTDOOR 2
  11. #define HOME 3
  12. #define GARDEN 1
  13.  
  14. const char *conn = "host='db.fe.up.pt' user='sinfe32' password='UgeVMoBA'";
  15. static PGconn *dbconn;
  16.  
  17. long GATE=0,IRRSYS=0,FLOOR=0,LUZ_HOME=0,TEMP_HOME=0;
  18.  
  19. float temperatureSensors[NSENSORS];
  20. float humiditySensors[NSENSORS];
  21. float lightSensors[NSENSORS];
  22. float irlightSensors[NSENSORS];
  23.  
  24. double voltage(int pos1, int pos2)
  25. {
  26. double v;
  27. v = pos1*16*16+pos2;
  28. v = (v/4096)*1.5;
  29. return v;
  30. }
  31.  
  32. double vlight(int pos1, int pos2)
  33. {
  34. double v;
  35. v = pos1*16*16+pos2;
  36. v = (0.625*pow(10,6)*(v/4096)*1.5)/100;
  37. return v;
  38. }
  39.  
  40. double infra(int pos1, int pos2)
  41. {
  42. double i;
  43. i = pos1*16*16+pos2;
  44. i = (0.769*pow(10,5)*(i/4096)*1.5)/100;
  45. return i;
  46. }
  47.  
  48. double temperature(int pos1, int pos2)
  49. {
  50. double t;
  51. t = pos1*16*16+pos2;
  52. t = -39.6+0.01*t;
  53. return t;
  54. }
  55.  
  56. double relhumi(int pos1, int pos2)
  57. {
  58. double r;
  59. r = pos1*16*16+pos2;
  60. r = -2.0468+.0367*r-1.5955*pow(10,-6)*r*r;
  61. return r;
  62. }
  63.  
  64. double comphumi(int pos1, int pos2, int temptfunc, int relahumifunc)
  65. {
  66. double h;
  67. h = pos1*16*16+pos2;
  68. h = (temptfunc-25)*(0.01+0.00008*h)+relahumifunc;
  69. return h;
  70. }
  71.  
  72. void sql_init(){
  73.  
  74. dbconn = PQconnectdb(conn);
  75.  
  76. if (PQstatus(dbconn) == CONNECTION_BAD){
  77. printf("Unable to connect\n");
  78. exit(-1);
  79. }
  80. else{
  81. printf("Able to connect!\n");
  82. }
  83. }
  84.  
  85. //void print_db(){
  86. // char
  87.  
  88.  
  89. //}
  90.  
  91. void update_state(int id){
  92. char q[500];
  93. int value;
  94. sprintf(q,"SELECT sensor,sinal,valor,atuador,estado FROM has.regras WHERE divisoes_id = %d", id);
  95. PGresult *query = PQexec(dbconn,q);
  96. for(int i = 0; i < PQntuples(query);i++){
  97. sprintf(q,"SELECT estado FROM has.atuadores WHERE nome=\'%s\'", PQgetvalue(query,i,3));
  98. value = atoi(PQgetvalue(PQexec(dbconn,q),0,0));
  99. sprintf(q,"UPDATE has.atuadores SET estado = CASE WHEN (SELECT medicao FROM has.sensores WHERE nome=\'%s\') %s %s THEN %s ELSE %d END WHERE nome = \'%s\'", PQgetvalue(query,i,0),PQgetvalue(query,i,1),PQgetvalue(query,i,2),PQgetvalue(query,i,4),value,PQgetvalue(query,i,3));
  100. printf("%s\n",q);
  101. PQexec(dbconn,q);
  102. }
  103.  
  104.  
  105. }
  106.  
  107. void sql_update(int id){
  108. char q[500];
  109.  
  110. sprintf(q,"UPDATE has.sensores SET medicao= %5f, timestamp = now() WHERE mote_id=%d AND nome=\'temp1\' OR nome=\'temp3\'",temperatureSensors[id],id);
  111. PQexec(dbconn,q);
  112. sprintf(q,"UPDATE has.sensores SET medicao= %5f, timestamp = now() WHERE mote_id=%d AND nome=\'luz\'",lightSensors[id],id);
  113. PQexec(dbconn,q);
  114. sprintf(q,"UPDATE has.sensores SET medicao= %5f, timestamp = now() WHERE mote_id=%d AND nome=\'hum\'",humiditySensors[id],id);
  115. PQexec(dbconn,q);
  116. sprintf(q,"UPDATE has.sensores SET medicao= %5f, timestamp = now() WHERE mote_id=%d AND nome=\'irr\'",irlightSensors[id],id);
  117. PQexec(dbconn,q);
  118.  
  119. }
  120.  
  121. int main(){
  122.  
  123. int str[23] = {0};
  124. char *token;
  125. char message[255];
  126. double volt;
  127. unsigned long id;
  128.  
  129. sql_init();
  130.  
  131. while(1){
  132.  
  133. int i = 0;
  134.  
  135. fgets(message, 255, stdin);
  136. printf("%s\n", message);
  137. token = strtok(message, " ");
  138.  
  139. while(token != NULL)
  140. {
  141. str[i] = strtol(token,NULL,16);
  142. printf("%d ",str[i]);
  143. token = strtok(NULL, " ");
  144. i++;
  145. }
  146.  
  147. id = str[5]<<8 | str[6];
  148.  
  149. temperatureSensors[id] = temperature(str[16],str[17]);
  150. humiditySensors[id] = relhumi(str[18],str[19]);
  151.  
  152. lightSensors[id] = vlight(str[12],str[13]);
  153. irlightSensors[id] = infra(str[14],str[15]);
  154.  
  155. printf("\n Temperatura: %fºC\n Humidade rel: %f%% \n Voltage: %fV\n Visible light: %flux \n Infrared light: %flux \n\n", temperatureSensors[id], humiditySensors[id], volt, lightSensors[id],irlightSensors[id]);
  156.  
  157. sql_update(id);
  158. update_state(id);
  159. }
  160.  
  161. return 0;
  162.  
  163. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement