public AlgorithmsCalculator() { DataSet TempSet; MyDb = new MySQLClass("DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;DATABASE=senseless;UID=root;PASSWORD=admin;OPTION=3;"); TempSet = FetchData(); ExecuteAlgorithms(TempSet); Console.WriteLine("Done! Press ENTER to exit"); Console.ReadLine(); }
/// <summary> /// Constructor /// Initializes the log file /// Contains the loop which calls all the required functions for simulation /// </summary> CalibrationRunner() { MyDb = new MySQLClass("DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;DATABASE=senseless;UID=root;PASSWORD=admin;OPTION=3;"); string response; do { Console.WriteLine("Using a new batch of data!"); DataSet TempSet = FetchData(); ExecuteCalibrationBlindNode(TempSet); Console.Write("Process another batch of data? (Y/N) "); response = Console.ReadLine(); } while (response == "Yes" || response == "Y"); Console.WriteLine("Press ENTER to exit"); Console.ReadLine(); }
public void ClusteredTriLaterationTest() { MySQLClass MyDB = new MySQLClass("DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;DATABASE=senseless;UID=root;PASSWORD=admin;OPTION=3;"); Node BlindNode = new Node("Test", MyDB); BlindNode.NewAnchor("1", 50.00, 0.00, 0.00, 1); BlindNode.NewAnchor("2", 50.00, 2.00, 0.00, 1); BlindNode.NewAnchor("3", 50.00, 2.00, 2.00, 1); Node.FilterMethod filterMethod = RangeBasedPositioning.AverageFilter; Point expected = new Point(1,1); Point actual; actual = ClusterTrilateration.CalculatePosition(BlindNode, filterMethod, false); //Assert.AreEqual(expected, actual); Assert.Inconclusive("Verify the correctness of this test method."); }
/// <summary> /// Constructor /// Initializes the log file /// Contains the loop which calls all the required functions for simulation /// </summary> public AlgorithmsCalculator() { //connection string for the database MyDb = new MySQLClass("DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;DATABASE=senseless;UID=root;PASSWORD=admin;OPTION=3;"); string response, fileName; //add the blind node BlindNodes.Add(new Node("11", MyDb)); Console.Write("Enter the file which you wish to write to: "); fileName = Console.ReadLine(); logger = new StreamWriter(fileName, true); //writing the csv header logger.WriteLine("idLocalization, time, WsnID, #anchors, CL X, CL X, CL AbsErr, CL RelErr," + "WCL X, WCL X, WCL AbsErr, WCL RelErr, MinMax R X, MinMax R Y, MinMax R AbsErr, MinMax R RelErr," + "MinMax DR X, MinMax DR Y, MinMax DR AbsErr, MinMax DR RelErr," + "TriLat R X, TriLat R Y, TriLat R AbsErr, TriLat R RelErr," + "TriLat DR X, TriLat DR Y, TriLat DR AbsErr, TriLat DR RelErr," + "LSTriLat R X, LSTriLat R Y, LSTriLat R AbsErr, LSTriLat R RelErr," + "LSTriLat DR X, LSTriLat DR Y, LSTriLat DR AbsErr, LSTriLat DR RelErr\n\n"); do { //anchors can change of position over time, therefore it is smart to update this as well UpdateAnhors(); //blind can change of position over time, therefore it is smart to update this as well UpdateBlind(); //fetches the RSS data from the database Console.WriteLine("Using a new batch of data!"); DataSet TempSet = FetchData(); Console.Write("Enter the number of anchor nodes that should be in this dataset: "); int numberAnchors = Convert.ToInt32(Console.ReadLine()); ExecuteAlgorithms(TempSet, numberAnchors); Console.Write("Process another batch of data? (Y/N) "); response = Console.ReadLine(); } while (response == "Yes" || response == "Y"); logger.Close(); Console.WriteLine("Done! Press ENTER to exit"); Console.ReadLine(); }
/// <summary> /// Read the config.txt in the base-directory of the executable and prepare the database-linkers. /// Peter: Loads the database info /// </summary> private void LoadOptions() { Options.ReadXml("config.txt"); //Read the options try { //Try to set up the MySQL-database linker MySQLConn = new MySQLClass(Options.Tables["ConnectionString"].Select("ID = 'MySQL'")[0]["ConnString"].ToString()); MySQLAllowedConn = true; } catch (Exception ex) { MySQLAllowedConn = false; //MySQL connection not available... radioButtonMySQL.Enabled = false; radioButtonDB2.Checked = true; Console.WriteLine(ex.Message); Console.WriteLine(ex.TargetSite); } try { //Try to set up the DB2-database linker DB2Conn = new DB2Class(Options.Tables["ConnectionString"].Select("ID = 'DB2'")[0]["ConnString"].ToString()); DB2AllowedConn = true; if (!MySQLAllowedConn) UseMySQLForInfo = false; } catch (Exception ex) { DB2AllowedConn = false; //DB2 connection not available... radioButtonDB2.Enabled = false; radioButtonMySQL.Checked = true; Console.WriteLine(ex.Message); Console.WriteLine(ex.TargetSite); } //Should there be no database in the config-file, don't allow the user to start the controller. if ((!DB2AllowedConn) && (!MySQLAllowedConn)) { StartSocketServerButton.Enabled = false; radioButtonDB2.Checked = false; radioButtonMySQL.Checked = false; } }
public Node(string WsnId, MySQLClass MyDb, string AnchorWsnId, double RSS) { this.MyDb = MyDb; this.WsnId = WsnId; AddAnchor(AnchorWsnId, RSS); }
public Node(string WsnId, MySQLClass MyDb) { this.MyDb = MyDb; this.WsnId = WsnId; }
/// <summary> /// Constructor /// </summary> /// <param name="MySQLConn"></param> public Positioning(MySQLClass MySQLConn) { this.MySQLConn = MySQLConn; }
/// <summary> /// Constructor /// </summary> /// <param name="MySQLConn"></param> public ConnectivityBasedPositioning(MySQLClass MySQLConn) : base(MySQLConn) { }
public CentroidLocalization(string WSNid, MySQLClass MySQLConn) : base(MySQLConn) { this.WSNid = WSNid; }
/// <summary> /// Read the config.txt in the base-directory of the executable and prepare the database-linkers. /// Peter: Loads the database info /// </summary> private void LoadOptions() { Options.ReadXml("config.txt"); //Read the options try { //Try to set up the MySQL-database linker MySQLConn = new MySQLClass(Options.Tables["ConnectionString"].Select("ID = 'MySQL'")[0]["ConnString"].ToString()); MySQLAllowedConn = true; } catch (Exception ex) { MySQLAllowedConn = false; //MySQL connection not available... Console.WriteLine(ex.Message); Console.WriteLine(ex.TargetSite); } }
/// <summary> /// Read the config.txt in the base-directory of the executable and prepare the database-linkers. /// Peter: Loads the database info /// No use putting this into a try catch, the controller can not run withouth the database or connecction parameters /// </summary> private void LoadOptions() { Options.ReadXml("config.txt"); MySQLConn = new MySQLClass(Options.Tables["ConnectionString"].Select("ID = 'MySQL'")[0]["ConnString"].ToString()); }
/// <summary> /// Constructor /// </summary> /// <param name="WsnId">WsnId of this node</param> /// <param name="MyDb">Connectionstring to use for the connection to the database (MySQL!)</param> public Node(string WsnId, MySQLClass MyDb) { this.MyDb = MyDb; this.WsnId = WsnId; this.position = new Point(0.00, 0.00); }
/// <summary> /// Processes the Query /// Retreives the data from database /// For use in IQueryable /// </summary> /// <param name="query">Query</param> /// <returns>QueryResult</returns> public static QueryResponse Query(Query query, MySQLClass MyDB) { //decode the Query and perform the SQL queries accordingly StringBuilder QueryCmd = new StringBuilder("", 3000); DataSet ReturnSet; //Query consists of 4 elements: //QueryName: this is always the same in the API and can be ignored for now //Ignore the fields in the SQL request, just request them all for now... //Fields QueryCmd.Append("select idnode, sensor, name, button1, temperature, X, Y, Z from (select idnode, sensor, name from node) as nd inner join (select * from (select button1, temperature, max(time) as senstime, node as sensnode from sensormeasurements group by node) as sens left outer join (select X, Y, Z, max(time) as loctime, node as locnode from localization group by node) as loc on sens.sensnode = loc.locnode union select * from (select button1, temperature, max(time) as senstime, node as sensnode from sensormeasurements group by node) as sens right outer join (select X, Y, Z, max(time) as loctime, node as locnode from localization group by node) as loc on sens.sensnode = loc.locnode) as sq on nd.idnode = sq.sensnode"); //Filter //Olivier: only ANDs and = //New filter format is for the next Sprint //which filters??? //use TagID, Mac only rest is for later ... //use a where in the SQL query QueryCmd.Append(" where "); //there is a better way to do this but just lazy atm. int max = query.Filters.Count, i = 1; foreach (string filter in query.Filters.Keys) { switch (filter) { case "Serial": QueryCmd.Append("sensor = " + query.Filters["Serial"]); break; case "TagID": QueryCmd.Append("idnode = " + query.Filters["TagID"]); break; case "Name": QueryCmd.Append("name = " + query.Filters["Name"]); break; default: throw new FaultException("The filter" + filter.ToString() + "is not implemented yet"); } if (i < max) QueryCmd.Append(" AND "); i++; } //Sortby if (query.SortBy != null) QueryCmd.Append(" order by " + query.SortBy + ";"); //assemble the SQL results into TagBlinks //parse them into the correct type TagBlinks tagBlinks = new TagBlinks(); try { //Execute the Query ReturnSet = MyDB.Query(QueryCmd.ToString()); //determine the UTC offset int hours = TimeZoneInfo.Local.BaseUtcOffset.Hours; string timezone = hours >= 0 ? " +" + hours : " " + hours; //one for each TagBlink foreach (DataRow Row in ReturnSet.Tables[0].Rows) { //declare a single tagblink TagBlink tagBlink = new TagBlink(); foreach (string field in query.QueryFields) { switch (field) { //convert to the correct formats //add the fields to the Query (select) case "TagID": tagBlink["TagID"] = Row["idnode"].ToString(); break; case "Name": tagBlink["Name"] = Row["name"].ToString(); break; case "Serial": tagBlink["Serial"] = Row["sensor"].ToString(); break; case "Location": tagBlink["Location/X"] = Row["X"].ToString(); tagBlink["Location/Y"] = Row["Y"].ToString(); break; case "Location/X": tagBlink["Location/X"] = Row["X"].ToString(); break; case "Location/Y": tagBlink["Location/Y"] = Row["Y"].ToString(); break; case "Buttons": //skip if this boolean is 0 tagBlink["Buttons"] = Row["button1"].ToString(); break; case "Temperature": tagBlink["Temperature"] = Row["temperature"].ToString(); break; case "RTLSBlinkTime": tagBlink["RTLSBlinkTime"] = DateTime.UtcNow.ToString("yyyy/MM/dd HH:mm:ss") + timezone; break; default: throw new FaultException("The field" + field.ToString() + " is not available"); } } tagBlinks.Add(tagBlink); } } //Jerry won't like this... catch (Exception ex) { Console.WriteLine(ex.Message); Console.WriteLine(ex.StackTrace); throw new FaultException("The database of the WSN could not be accessed properly or the SQL query was unable to execute\n Check the connection parameters"); } QueryResult queryResult = new QueryResult(tagBlinks); return new QueryResponse(queryResult); }