Advertisement
Guest User

main.cpp

a guest
Dec 17th, 2014
1,915
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.72 KB | None | 0 0
  1. //verander de volgende informatie naar de informatie voor jouw database
  2.  
  3. #define dserver "oege.ie.hva.nl"
  4. #define duser "username"
  5. #define dpassword "password"
  6. #define ddatabase "database"
  7.  
  8. const int homeid 1234
  9.  
  10. //-----------------------------------------------------------------------------
  11. //
  12. //  Main.cpp
  13. //
  14. //  Copyright (c) 2010 Mal Lansell <mal@openzwave.com>
  15. //
  16. //
  17. //  SOFTWARE NOTICE AND LICENSE
  18. //
  19. //  This file is part of OpenZWave.
  20. //
  21. //  OpenZWave is free software: you can redistribute it and/or modify
  22. //  it under the terms of the GNU Lesser General Public License as published
  23. //  by the Free Software Foundation, either version 3 of the License,
  24. //  or (at your option) any later version.
  25. //
  26. //  OpenZWave is distributed in the hope that it will be useful,
  27. //  but WITHOUT ANY WARRANTY; without even the implied warranty of
  28. //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  29. //  GNU Lesser General Public License for more details.
  30. //
  31. //  You should have received a copy of the GNU Lesser General Public License
  32. //  along with OpenZWave.  If not, see <http://www.gnu.org/licenses/>.
  33. //
  34. //-----------------------------------------------------------------------------
  35. #include <phidget21.h> // voor phidgetfucties
  36. #include <unistd.h>
  37. #include <pthread.h>
  38. #include <inttypes.h>
  39. #include <string.h>
  40. #include <iostream>
  41. #include <stdio.h>
  42. #include <vector>
  43. #include <stdlib.h>
  44. #include <sstream>
  45. #include <iostream>
  46. #include <list>
  47. #include <stdio.h>
  48.  
  49. #include <mysql/mysql.h>
  50. #include <unistd.h>
  51.  
  52.  
  53.  
  54. using namespace std;
  55.  
  56. static uint32_t g_homeId = homeid;
  57.  
  58. // Een struct met node informatie.
  59.  
  60. typedef struct {
  61.     uint32_t m_homeId;
  62.     uint8_t m_nodeId;
  63.     bool m_polled;
  64.     uint8_t m_event;
  65. } NodeInfo;
  66.  
  67. //Een struct met activiteiten informatie.
  68.  
  69. typedef struct {
  70.     int id;
  71.     string name;
  72.     int sensorId;
  73.     string valuename;
  74.     int value;
  75.     int nodeId;
  76.     string sendvalue;
  77.     int activated;
  78.     int minvalue;
  79.     string homeid;
  80.     string sensorhomeid;
  81. } Activities;
  82.  
  83. // Value-Defintions of the different String values
  84.  
  85. static int maxAInputs = 7;
  86. static int maxDoutputs = 7;
  87. static list<NodeInfo*> g_nodes;
  88. static list<Activities*> activitylist;
  89.  
  90. /*
  91.  database connectie en methodes
  92.  */
  93.  
  94. MYSQL* createDatabaseCon() {
  95.     MYSQL *conn;
  96.     const char *server = "oege.ie.hva.nl";
  97.     const char *user = "faouzi001";
  98.     const char *password = "@Nicolaas12";
  99.     const char *database = "zfaouzio001";
  100.  
  101.     conn = mysql_init(NULL);
  102.     if (!mysql_real_connect(conn, server,
  103.             user, password, database, 0, NULL, 0)) {
  104.         fprintf(stderr, "%s\n", mysql_error(conn));
  105.         exit(1);
  106.     }
  107.     return conn;
  108. }
  109.  
  110. void perform_query(MYSQL *connection, string sql_query) {
  111.     if (mysql_query(connection, sql_query.c_str())) {
  112.         printf("MySQL query error : %s\n", mysql_error(connection));
  113.         exit(1);
  114.     }
  115. }
  116.  
  117. MYSQL_RES* perform_read_query(MYSQL *connection, string sql_query) {
  118.     MYSQL_RES *result;
  119.     if (mysql_query(connection, sql_query.c_str())) {
  120.         exit(1);
  121.     } else {
  122.         result = mysql_store_result(connection);
  123.         return result;
  124.     }
  125. }
  126.  
  127. /*
  128.  *Set value veranderd de waarde van elke electriciteits schakelaar of licht schakelaar naar de meegestuurde waarde.
  129.  *
  130.  *Deze functie word nog aangepast om de waarde van een bepaalde node te veranderen.
  131.  *
  132.  *
  133.  */
  134.  
  135. void checkHome() {
  136.     MYSQL *conn;
  137.     MYSQL_RES *result;
  138.     MYSQL_ROW row;
  139.     bool flag = false;
  140.     conn = createDatabaseCon();
  141.     result = perform_read_query(conn, "SELECT homeid FROM home");
  142.     while ((row = mysql_fetch_row(result))) {
  143.         string input(row[0]);
  144.         stringstream SS(input);
  145.         uint32_t n;
  146.         SS >> n;
  147.         if (n == g_homeId) {
  148.             flag = true;
  149.             break;
  150.         }
  151.     }
  152.     if (flag == false) {
  153.         string String = static_cast<ostringstream*> (&(ostringstream() << g_homeId))->str();
  154.         perform_query(conn, "INSERT INTO home (homeid) VALUES('" + String + "')");
  155.         for (int i = 0; i <= maxDoutputs; i++) {
  156.             stringstream SS2;
  157.             SS2 << "INSERT INTO sensor (nodeid,homeid,type,manname,manprodname,state) VALUES('" << i << "','" << String << "','Digital Output" << i << "','Phidget','Phidget','0')";
  158.             perform_query(conn, SS2.str());
  159.         }
  160.     }
  161.  
  162.     mysql_close(conn);
  163. }
  164.  
  165. void fillActivities() {
  166.     MYSQL *conn;
  167.     MYSQL_RES *result;
  168.     MYSQL_ROW row;
  169.     conn = createDatabaseCon();
  170.     result = perform_read_query(conn, "SELECT * FROM activities");
  171.  
  172.     bool flag = false;
  173.     while ((row = mysql_fetch_row(result))) {
  174.         flag = false;
  175.         if (atoi(row[10]) == 1) {
  176.             stringstream SS;
  177.             flag=true;
  178.             for (list<Activities*>::iterator it = activitylist.begin(); it != activitylist.end(); ++it) {
  179.                 if (*it != 0) {
  180.                     Activities* activity = *it;
  181.                     if (activity->id == atoi(row[0])) {
  182.                         activitylist.erase(it);
  183.                         break;
  184.                     }
  185.                 }
  186.             }
  187.  
  188.         } else {
  189.             for (list<Activities*>::iterator it = activitylist.begin(); it != activitylist.end(); ++it) {
  190.                 Activities* activity = *it;
  191.                 if (activity->id == atoi(row[0])) {
  192.                     flag = true;
  193.                     if (strcmp(activity->name.c_str(), row[1]) != 0)activity->name = row[1];
  194.                     if (activity->sensorId != atoi(row[2]))activity->sensorId = atoi(row[2]);
  195.                     if (strcmp(activity->valuename.c_str(), row[3]) != 0)activity->valuename = row[3];
  196.                     if (activity->value != atoi(row[4]))activity->value = atoi(row[4]);
  197.                     if (activity->nodeId != atoi(row[5]))activity->nodeId = atoi(row[5]);
  198.                     if (strcmp(activity->sendvalue.c_str(), row[6]) != 0)activity->sendvalue = row[6];
  199.                     if (activity->activated != atoi(row[7]))activity->activated = atoi(row[7]);
  200.                     if (strcmp(activity->homeid.c_str(), row[8]) != 0)activity->homeid = row[8];
  201.                     if (activity->minvalue != atoi(row[9]))activity->minvalue = atoi(row[9]);
  202.                     if (strcmp(activity->sensorhomeid.c_str(), row[8]) != 0)activity->sensorhomeid = row[11];
  203.                 }
  204.             }
  205.             if (flag == false) {
  206.                 Activities *new_activity2 = new Activities();
  207.                 new_activity2->id = atoi(row[0]);
  208.                 new_activity2->name = row[1];
  209.                 new_activity2->sensorId = atoi(row[2]);
  210.                 new_activity2->valuename = row[3];
  211.                 new_activity2->value = atoi(row[4]);
  212.                 new_activity2->nodeId = atoi(row[5]);
  213.                 new_activity2->sendvalue = row[6];
  214.                 new_activity2->activated = atoi(row[7]);
  215.                 new_activity2->homeid = row[8];
  216.                 new_activity2->minvalue = atoi(row[9]);
  217.                 new_activity2->sensorhomeid = row[11];
  218.                 activitylist.push_back(new_activity2);
  219.             }
  220.         }
  221.     }
  222.     mysql_close(conn);
  223. }
  224.  
  225. void checkSensorState(CPhidgetInterfaceKitHandle ifKit) {
  226.     MYSQL *conn;
  227.     MYSQL_RES *result;
  228.     MYSQL_ROW row;
  229.     conn = createDatabaseCon();
  230.     stringstream SS;
  231.     SS << "SELECT nodeid,homeid,type,state FROM sensor WHERE homeid = "<<g_homeId;
  232.     result = perform_read_query(conn, SS.str());
  233.     while ((row = mysql_fetch_row(result))) {
  234.         if (strcmp(row[3], "1") == 0) {
  235.             CPhidgetInterfaceKit_setOutputState(ifKit, atoi(row[0]), 1);
  236.         } else if ((strcmp(row[3], "0") == 0)) {
  237.  
  238.             CPhidgetInterfaceKit_setOutputState(ifKit, atoi(row[0]), 0);
  239.         }
  240.     }
  241.  
  242.     mysql_close(conn);
  243. }
  244.  
  245. void checkSensor(int sensorId) {
  246.     MYSQL *conn;
  247.     MYSQL_RES *result;
  248.     MYSQL_ROW row;
  249.     bool flag = false;
  250.     conn = createDatabaseCon();
  251.     result = perform_read_query(conn, "SELECT nodeid,homeid FROM sensor");
  252.  
  253.     while ((row = mysql_fetch_row(result))) {
  254.         if (((unsigned)atoi(row[0]) == sensorId) && ((unsigned)atoi(row[1]) == g_homeId))flag = true;
  255.     }
  256.     if (flag == false) {
  257.         stringstream SS;
  258.         SS << "INSERT INTO sensor (nodeid, homeid, type, manname, manprodname) VALUES('" << sensorId << "','" << g_homeId << "','Analog Input " << sensorId << "','Phidget','Phidget')";
  259.         perform_query(conn, SS.str());
  260.     }
  261.     mysql_close(conn);
  262. }
  263.  
  264. void checkActivities(int node, int value, string label) {
  265.     for (list<Activities*>::iterator it = activitylist.begin(); it != activitylist.end(); ++it) {
  266.         Activities* activity = *it;
  267.         if ((activity->sensorId == node)&&((unsigned)atoi(activity->homeid.c_str()) == g_homeId)&&(strcmp(label.c_str(), activity->valuename.c_str()) == 0)&&(activity->value >= value && activity->minvalue <= value)&&(activity->activated == 1)) {
  268.             MYSQL *conn;
  269.             conn = createDatabaseCon();
  270.             stringstream SS;
  271.             SS << "UPDATE sensor SET state='" << activity->sendvalue << "'WHERE nodeid='" << activity->nodeId << "' AND homeid= '"<<activity->sensorhomeid<<"'";
  272.             perform_query(conn, SS.str());
  273.         }
  274.     }
  275. }
  276.  
  277. //-----------------------------------------------------------------------------
  278. // <main>
  279. // Create the driver and then wait
  280. //-----------------------------------------------------------------------------
  281.  
  282. int main(int argc, char* argv[]) {
  283.     CPhidgetInterfaceKitHandle ifKit = 0;
  284.     CPhidgetInterfaceKit_create(&ifKit);
  285.  
  286.  
  287.     CPhidget_open((CPhidgetHandle) ifKit, -1);
  288.  
  289.     CPhidget_waitForAttachment((CPhidgetHandle) ifKit, 1000);
  290.     //Wacht maximaal 1000 ms tot dat de phidgetkit is aangesloten.      
  291.  
  292.  
  293.  
  294.     fillActivities();
  295.     checkHome();
  296.     int i = 0;
  297.  
  298.     while (true) {
  299.         checkSensorState(ifKit);
  300.         fillActivities();
  301.        
  302.         i++;
  303.        
  304.         if(i % 10)fillActivities();
  305.         if (i >= 300) {
  306.             i = 0;
  307.             for (int y = 0; y <= maxAInputs; y++) {
  308.                 int val = 0;
  309.                 CPhidgetInterfaceKit_getSensorValue(ifKit, y, &val);
  310.                 if (val > 2) {
  311.                     checkSensor(y + 10);
  312.                     MYSQL *conn;
  313.                     conn = createDatabaseCon();
  314.                     stringstream SS;
  315.                     SS << "INSERT INTO waarden (value, sensorid, name, homeid) VALUES('"<<val<<"','"<<y + 10<<"','value','"<<g_homeId<<"')";
  316.                     perform_query(conn, SS.str());
  317.                     mysql_close(conn);
  318.                 }
  319.             }
  320.  
  321.         }
  322.         sleep(1);
  323.     }
  324.     CPhidget_close((CPhidgetHandle) ifKit);
  325.     CPhidget_delete((CPhidgetHandle) ifKit);
  326.     return 0;
  327. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement