saschakp Geschrieben August 12, 2012 at 20:28 Geschrieben August 12, 2012 at 20:28 Hallo zusammen, ich habe heute ein bisschen mit C# rumgespielt, wollte ein kleines Programm schreiben was daten von einem Temperatur Sensor in die Datenbank schreibt. Bis jetzt ist es mir nicht gelungen. Werte werden schonmal in der Konsole ausgegeben und auf ein Text wird auf dem LCD display angezeigt. Vieleicht könnt Ihr mir Helfen. mfg Sascha using Tinkerforge; using MySql.Data.MySqlClient; class Example { private static string HOST = "localhost"; private static int PORT = 4223; private static string UID = "9p19cLeYP8w"; // Change to your UID private static string UID2 = "b4A"; // Change to your UID private static string UID4 = "9LY"; // Change to your UID static void Main() { IPConnection ipcon = new IPConnection(HOST, PORT); // Create connection to brickd BrickMaster master = new BrickMaster(UID); // Create device object BrickletTemperature temp = new BrickletTemperature(UID2); // Create device object BrickletLCD20x4 lcd = new BrickletLCD20x4(UID4); // Create device object ipcon.AddDevice(lcd); // Add device to IP connection ipcon.AddDevice(master); // Add device to IP connection ipcon.AddDevice(temp); // Add device to IP connection // Don't use device before it is added to a connection for (int i = 1; i <= 5; i++) { // Get voltage and current from stack (in mV/mA) ushort voltage = master.GetStackVoltage(); ushort current = master.GetStackCurrent(); short temperature = temp.GetTemperature(); lcd.BacklightOn(); lcd.ClearDisplay(); lcd.WriteLine(0, 0, "Test"); System.Console.WriteLine("## TinkerForge (c) SK"); System.Console.WriteLine("## Projekt Temperatur + MySQL Datenbank"); System.Console.WriteLine("Stack Voltage: " + voltage / 1000.0 + " V"); System.Console.WriteLine("Stack Current: " + current / 1000.0 + " A"); System.Console.WriteLine("Temperature: " + temperature / 100.0 + " °C"); System.Threading.Thread.Sleep(500); System.Console.Clear(); public void InsertRow(string myConnectionString) { // If the connection string is empty, use a default. if(myConnectionString == "") { myConnectionString = "DATABASE=wetter;Data SERVER=localhost; UID=xxxxxxx; PASSWORD=xxxxxxxxxxxxxxx"; } MySqlConnection myConnection = new MySqlConnection(myConnectionString); string myInsertQuery = "INSERT INTO wetter (sensor1, sensor2) Values(testwert1, testwert2)"; MySqlCommand myCommand = new MySqlCommand(myInsertQuery); myCommand.Connection = myConnection; myConnection.Open(); myCommand.ExecuteNonQuery(); myCommand.Connection.Close(); } } System.Console.WriteLine("Press key to exit"); System.Console.ReadKey(); ipcon.Destroy(); } } Zitieren
AuronX Geschrieben August 12, 2012 at 20:59 Geschrieben August 12, 2012 at 20:59 Definierst du die Funktion InsertRow mitten IN der main-funktion? Das sieht komisch aus und ich wäre erstaunt, wenn das kompiliert... aber gut. Auf jeden Fall scheinst du diese methode niemals aufzurufen, liegt es daran? Ansonsten: Kommen Fehler? Oder läuft alles stumm durch? Zitieren
Nic Geschrieben August 13, 2012 at 01:17 Geschrieben August 13, 2012 at 01:17 Hmmh, zumindest in Delphi gibt es die Möglichkeit verschachtelter Routinen (natürlich mit eingeschr. Gültigkeitsbereich). Möglich daß das seine Intension war, die InsertRow in die Main einzubetten. Allerdings bin ich mir nicht sicher ob sowas auch C# zulässt !? Den Aufruf von InsertRow habe ich auch nicht gefunden, kann aber auch immer öfters an meinen Augen liegen... PS: Zumindest für den 13.08 ist hiermit ein Posting im Forum gesichert PSS: ipcon.AddDevice(master); // Add device to IP connection Wozu soll der gut sein ? i.d.R. braucht man den Master-Brick in der Anwendung nicht. Zitieren
saschakp Geschrieben August 13, 2012 at 06:19 Autor Geschrieben August 13, 2012 at 06:19 Danke für eure antworten. Mit welcher Programmier sprache ist die anbindung an einer mySQL einfacher (ausser PHP)? Es soll eine anwendung sein die auf meinem Windows Server läuft, es sollen ja noch weitere Sensoren angeschlossen werden. In PHP habe ich das ganze hinbekommen, aber C# ist komplett neu für mich. Werde mal mich in anderen Sprachen einlesen ob da die anbindung besser klappt. mfg Sascha Zitieren
AuronX Geschrieben August 13, 2012 at 07:14 Geschrieben August 13, 2012 at 07:14 Also erstmal steht auch noch die Frage im Raum ob der Code den du gezeigt hast ausführbar ist, es sieht nämlich nach einem kleinen Fehler aus (Vermutung: Funktion InsertRow mal außerhalb der Main-methode definieren und nur innerhalb der main rufen, dann klappts). Ansonsten ist wohl keine Sprache dafür von sich aus besser geeignet. C# ist schon ziemlich gut, weil du mit Visual Studio ein ziemlich gutes Entwicklungs-Werkzeug zur Verfügung hast (meine Meinung). Gut erlernbar wäre denke ich Python. Aus dem Bauch heraus würde ich sagen bleib einfach bei C#, wenn jede andere Sprache (außer PHP) ebenso Einarbeitung für dich bedeutet (Ansonsten nimm eine Sprache die dir vertraut ist). PHP würde ich tatsächlich nur im Webserver-Umfeld nutzen. Zitieren
saschakp Geschrieben August 13, 2012 at 09:49 Autor Geschrieben August 13, 2012 at 09:49 Der Code wird ausgeführt, er zeigt in der Konsole auch den Temperatur Wert und die Werte vom Maste Brick an. Habe aber gerade gesehen das er mir zu der mySQL funktion auch fehler ausgepuckt hatte, die ich anscheinend ignoriert hatte Was ich halt "nur" brauche ist ein Programm/Script was im Hintergrund läuft und mir die Werte in eine DB schreibt, es sollen nich mehr Sensoren angeschlossen werden. Das auslesen wird alles in PHP gemacht. Werde mich mit dem Thema C# noch weiter einlesen, mal sehen ob ich ein Buch finde. Trozdem Danke erstmal. mfg Sascha Zitieren
saschakp Geschrieben September 23, 2012 at 18:45 Autor Geschrieben September 23, 2012 at 18:45 So habe heute nach langer Zeit mich wieder mit dem dem Thema C# und mySQL beschäftigt, es funktioniert das er in die Datenbank schreibt, aber er schreibt noch nicht die richtigen werte. "INSERT into wetter (sensor1, sensor2) values ('voltage','temperature')"; Hier schreibt er das Wort: "voltage" und "temperature" in die Datenbank, irgendwie bekomme ich ihn nicht dazu den richtigen wert zu nehmen, hat jemand eine Idee? Hier der Komplette Code: using Tinkerforge; using MySql.Data; using MySql.Data.MySqlClient; using System; using System.Data; class Example { private static string myConnectionString = "SERVER=localhost;" + "DATABASE=wetter;" + "UID=xxxx;" + "PASSWORD=xxxxxxx;"; private static string HOST = "localhost"; // Am Server abgeschlossen ist private static int PORT = 4223; private static string UID_00 = "xxxxxxxxxxx"; // Change to your UID private static string UID_01 = "xxx"; // Change to your UID private static string UID_02 = "xxx"; // Change to your UID private static DateTime thisDate = DateTime.Now; static void Main() { IPConnection ipcon = new IPConnection(HOST, PORT); // Create connection to brickd BrickMaster master = new BrickMaster(UID_00); // Create device object BrickletTemperature temp = new BrickletTemperature(UID_01); // Create device object BrickletLCD20x4 lcd = new BrickletLCD20x4(UID_02); // Create device object ipcon.AddDevice(lcd); // Add device to IP connection ipcon.AddDevice(master); // Add device to IP connection ipcon.AddDevice(temp); // Add device to IP connection // Don't use device before it is added to a connection //for (int i = 1; i <= 1000; i++) while( true ) { // Get voltage and current from stack (in mV/mA) ushort voltage = master.GetStackVoltage(); ushort current = master.GetStackCurrent(); short temperature = temp.GetTemperature(); lcd.BacklightOn(); lcd.ClearDisplay(); lcd.WriteLine(0, 0, "Tinkerforge"); // lcd.WriteLine(1, 0, "{0:d}", thisDate); lcd.WriteLine(2, 0, "Temperatur " + temperature /100.0 + " C"); System.Console.Clear(); // System.Console.WriteLine(("").PadRight(38, '#')); System.Console.WriteLine("## TinkerForge Temperatur Projekt ## \n"); System.Console.WriteLine("Stack Voltage: " + voltage / 1000.0 + " V \n"); System.Console.WriteLine("Stack Current: " + current / 1000.0 + " A \n"); System.Console.WriteLine("Temperature: " + temperature / 100.0 + " ∞C \n"); System.Console.WriteLine("Datum: {0:d} \n", thisDate); System.Console.WriteLine("Zeit: {0:t} \n", thisDate); MySqlConnection connection = new MySqlConnection(myConnectionString); MySqlCommand command = connection.CreateCommand(); ; command.CommandText = "INSERT into wetter (sensor1, sensor2) values ('voltage','temperature')"; // Daten werden in Datenbank geschrieben mit Auto ID MySqlDataReader Reader; connection.Open(); Reader = command.ExecuteReader(); System.Threading.Thread.Sleep(2500); // Wert wird später hochgesetzt } } } mfg Sascha Zitieren
saschakp Geschrieben September 23, 2012 at 19:10 Autor Geschrieben September 23, 2012 at 19:10 So ist es richtig: "INSERT into wetter (sensor1, sensor2) values ('" + voltage / 1000.0 + "','" + temperature / 100.0 + "')"; mfg Sascha Zitieren
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.