Jump to content

CChris

Members
  • Gesamte Inhalte

    128
  • Benutzer seit

  • Letzter Besuch

Alle erstellten Inhalte von CChris

  1. Naja... genau kann ich das noch nicht spezifizieren. Prinzipiell aber wären es Leuchtstoffröhren und z.B. Halogen Strahler zur Wärmeregulierung in den Terrarien.
  2. Hallo Zusammen, Ich habe jetzt bereits ein paar mal gelesen, dass man Lampen nicht ohne weitere Schutzschaltungen über das DualRelayBricklet schalten sollte - um Fehlfunktionen bzw. schäden an der Hardware zu vermeiden. Ich habe jetzt noch eine etwas ältere Version des Relay Bricks, habe aber auch gesehen, dass die Version 1.2 mit entsprechender Schutzschaltung versehen ist. Ist es mit dem neueren DualRelay damit jetzt möglich, oder nach wie vor nicht empfehlenswert? Oder sollte ich für das Schalten von Lampen generell lieber auf solidstate relais setzen? Danke & Gruß, Christoph
  3. Ich sehe schon... Mein 'paar-zeilen' Testcode hat noch viel Luft nach oben, für optimierungen ^^ Ich setze mich da dann nochmal ran und versuche, das entsprechend umzustricken. Danke.
  4. Nein. Wie gesagt, ich bin kein Anwendungsentwickler - und habe C# auch nie richtig gelernt... Ich habe es mir aber angewöhnt, so viel wie möglich in eine Variable zu schreiben - um dann damit ggf. später auch einfacher arbeiten zu können. z.B. Verwende ich mehrere Bricklets, die die Temperatur messen können. Alle arbeiten mit "temperature"... Nun wird aber jede Rückgabe in ihre eigene Variable geschrieben: TemperatureBricklet -> tmp1 = temperature TemperatureIRBricklet -> tmp2 = temperature usw. finde ich persönlich Einfacher... ^^ Aber wie bereits gesagt: Keine Gewähr, ob das schöner - oder gar "korrekter" Code ist. Für mich funktioniert es zumindest...
  5. hm... Reicht im Grunde schon. Ursprünglich war da aber noch eine weitere Ausgabe als Text - und eventuell wollte ich noch ein bisschen mehr damit machen - daher habe ich mich für eine Variable entschieden. Ich glaube auch, dass das Sinnvoller ist, wenn ich z.B. die Werte wie zuvor beschrieben später in anderen Code-Teilen weiter verarbeiten möchte. @NIC: Ich bin kein Anwendungsentwickler... und meine Erfahrungen in C# sind... naja... sehr spärlich, zugegebener Maßen. Für kleinere Sachen reicht es sicherlich - aber naja. Ich versuche mich mal weiter in das Thema ein zu lesen ^^ Danke.
  6. Hi, alles klar - danke. Nur - hilf mir bitte mal kurz auf die Sprünge - wie ziehe ich sie am geschicktesten raus? Via return xyzValue; ? Was den rest des Quellcodes an geht, steht da nicht viel relevantes drin. Bisschen Aktion für Button-Clicks, und wenn sich das Programm beendet... sonst ist da noch nicht viel mehr
  7. Hallo Zusammen, ich weiß - für die Profis hier vermutlich eine 'dumme Frage' ... aber im Moment komme ich um ehrlich zu sein nicht auf die Lösung... auch, wenn sie vermutlich recht simpel ist. Ich habe derzeit ein normales Temperature Bricklet, sowie ein TemperatureIR Bricklet an meinem Stapel angeschlossen. Angezeigt wird im Moment die Umgebungstemperatur vom Temp.Bricklet und die ObjektTemperatur vom TempIR Bricklet via CallBack: Aufruf der CallBacks BrickletTemperature tmp1 = new BrickletTemperature("dD5", ipcon); tmp1.Temperature += TemperatureCB; tmp1.SetTemperatureCallbackPeriod(1000); BrickletTemperatureIR tmp2 = new BrickletTemperatureIR("zY2", ipcon); tmp2.ObjectTemperature += TemperatureIRCB; tmp2.SetObjectTemperatureCallbackPeriod(1000); Callbacks: private void TemperatureCB(BrickletTemperature sender, short temperature) { short tmpValue = temperature; aGauge2.Invoke(new Action(() => aGauge2.Value = tmpValue / 100)); } private void TemperatureIRCB(BrickletTemperatureIR sender, short temperature) { short tmpIRValue = temperature; aGauge1.Invoke(new Action(() => aGauge1.Value = tmpIRValue / 10)); } Ich möchte jetzt auch die Umgebungstemperatur vom IR Bricklet mit einbeziehen. Klar, dafür auch einen CallBack-Aufruf machen, usw... ABER: ich möchte bei: aGauge2 gerne folgendes machen: Value = ((Temperature/100)+(TemperatureIR/10)/2) um mir quasi aus beiden Bricklets die Durchschnittstemperatur zu ermitteln und diese anzuzeigen. Nur: mir fällt eben gerade absolut nicht ein, wie ich das aus den beiden Callbacks heraus bekomme... :-( Danke und Gruß, Chris
  8. Hi, ich hatte ein ähnliches Problem mit meinem "Master", nachdem ich die Tastenkombination für das Starten in den Bootloader gedrückt hatte (http://www.tinkerforge.com/de/doc/Software/Brickv.html) Bei mir war das Problem, dass ich die Hardware über einen USB Hub angeschlossen hatte - was im "normalen" Betrieb zwar funktioniert hat, aber zum Flashen der Firmware offenbar nicht. Nachdem ich den Brick direkt an einem USB Port des Rechners angeschlossen hatte, wurde mir ein neuer COM Port angezeigt - und dieser war dann auch der Brick. Versuche also erst mal, alle möglichen externen Fehlerquellen aus zu schließen... ggf. kann es aber auch sein, dass du erst einen Treiber oder so installieren musst - ich hatte diesbezüglich auch noch was gelesen, weiß jetzt allerdings nicht mehr wo :-(
  9. Hi. Ja, Redundanz wäre nicht schlecht - aber ich glaube, dann auch wieder überdimensioniert ^^ Ich denke im Moment eher an ein zusätzliches Monitoring & alerting, welches dann im Fehlerfall halt eine Benachrichtigung schickt. Sooo kritisch sind die Systeme auch wieder nicht. Hintergrund der 'eigenständigen' Systeme war ursprünglich die Situation, dass bei einer Änderung oder Wartung an einem Terrarium immer beide betroffen waren, da sie beide durch die gleiche Logo gesteuert werden. Allerdings bringt mich mein jetziger Ansatz zum nächsten Punkt, über welchen ich mir Gedanken mache... Die Software soll auf dem RED Brick im Hintergrund laufen. Eine GUI ist nicht notwendig - es reicht ggf. Ein paar Infos auf einem OLED o.ä. anzuzeigen. - das Monitoring sollte überwachen können, ob die Anwendung ausgeführt wird oder nicht (beendet, hängen geblieben, etc.) - die Software sollte Zusätzlich ein Webinterface bieten, über welches man in den 'automatischen' prozess eingreifen kann -> einzelne Komponenten ggf. ausschalten, obwohl die logik bestimmt hat, dass sie laufen sollten - ein Hardwareseitiges eingreifen sollte auch möglich sein, z.B. über einen zusätzlichen Schalter nach einem Relais... - Und hier wäre zu überlegen, ob es nicht ggf. Interessant sein könnte, wenn die SW dies wiederum mitbekommt und entsprechend loggt bzw. ein Signal gibt. Bsp. Lampe fällt aus und muss gewechselt werden. Per SW ist diese aber eingeschaltet - nun schalte ich sie per switch aus, es geht eine LED an oder ein piepton, damit ich das Einschalten nicht vergesse... Oder irgend ein ähnliches Szenario halt.
  10. Meh. Danke War dann wohl gestern zu spät dafür ^^ Wenn ich einzelne bricklets abfragen möchte, dann muss ich ja ein connect mit der jeweiligen uid des bricklets absetzen, richtig? Wie kann ich ggf. hier überprüfen, ob noch eine Verbindung besteht? Oder denke ich jetzt in die falsche Richtung?
  11. Ja, genau das mache ich auch. if (IPConnection.CONNECTION_STATE_CONNECTED == 1) { try { ipcon.Disconnect(); } catch (Exception exceptionMsg) { MessageBox.Show(exceptionMsg.Message, "Fehler!", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Error); } } Folgendes verhalten: Setze ich das ipcon.Disconnect nicht in eine try/catch block, beendet sich das programm wegen einer nicht behandelten eception. Der Tinkerforge.NotConnected (o.ä. Genauen Text hab ich jetzt nicht im Kopf). Ich kann also kein Disconnect machen, weil kein Connect abgesetzt wurde. Meine Lösung daher mit der if abfrage. Nur: Der Code springt IMMER in den if Block rein und gibt mir in einer msgbox, welche ich testweise mal mit rein gebaut habe den CONNECTION_STATE mit 1 aus. Springt dann aber in den catch block und wirft die exception, dass keine Verbindung besteht. Das verwirrt mich
  12. Hallo Zusammen, ich habe gerade ein kleines Problemchen, bei welchem ich nicht wirklich durchblicke :-( Ich habe eine kleine Testanwendung geschrieben, welche mir ähnlich wie der BrickViewer erst einmal alle Bricks und Bricklets anzeigt, die angeschlossen sind. Dazu führe ich folgenden Code aus: public partial class Form1 : Form { private static string HOST = "localhost"; private static int PORT = 4223; IPConnection ipcon = new IPConnection(); public Form1() { InitializeComponent(); // Register IP Connection callbacks ipcon.EnumerateCallback += EnumerateCB; //ipcon.Connected += ConnectedCB; this.FormClosing += Form1_FormClosing; } private void EnumerateCB(IPConnection sender, string UID, string connectedUID, char position, short[] hardwareVersion, short[] firmwareVersion, int deviceIdentifier, short enumerationType) { if (enumerationType == IPConnection.ENUMERATION_TYPE_CONNECTED || enumerationType == IPConnection.ENUMERATION_TYPE_AVAILABLE) { string deviceName = ""; // DeviceIdentifier in lesbaren Text umwandeln switch (deviceIdentifier.ToString()) { case "11": deviceName = "DC Brick"; break; ... } if (connectedUID == "0") { connectedUID = "--"; } //Baue ListenItems auf string[] myItems = new string[5]; if (position == '\x0030') { myItems[3] = "--"; } else { myItems[3] = position.ToString().ToUpper(); } myItems[0] = deviceName; myItems[1] = UID; myItems[2] = connectedUID; ListViewItem LVItem = new ListViewItem(myItems); try { listView2.Invoke(new Action(() => listView2.Items.Add(LVItem))); } catch (Exception exceptionMsg) { MessageBox.Show(exceptionMsg.Message, "Fehler!", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Error); } } if (connectedUID == "0") { connectedUID = "--"; } //Baue ListenItems auf string[] myItems = new string[5]; if (position == '\x0030') { myItems[3] = "--"; } else { myItems[3] = position.ToString().ToUpper(); } myItems[0] = deviceName; myItems[1] = UID; myItems[2] = connectedUID; ListViewItem LVItem = new ListViewItem(myItems); try { listView2.Invoke(new Action(() => listView2.Items.Add(LVItem))); } catch (Exception exceptionMsg) { MessageBox.Show(exceptionMsg.Message, "Fehler!", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Error); } } } private void button1_Click(object sender, EventArgs e) { // Connect to brickd, will trigger cb_connected try { ipcon.Connect(HOST, PORT); //MessageBox.Show("Connected: " + IPConnection.CONNECTION_STATE_CONNECTED.ToString(), "2"); } catch (Exception exceptionMsg) { MessageBox.Show(exceptionMsg.Message + "\n\nDas Programm wird beendet.", "Fehler!", MessageBoxButtons.OK, MessageBoxIcon.Error); this.Close(); } try { ipcon.Enumerate(); //MessageBox.Show("Connected: " + IPConnection.CONNECTION_STATE_CONNECTED.ToString(),"3"); } catch (Exception exceptionMsg) { MessageBox.Show(exceptionMsg.Message, "Fehler!", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Error); } } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (e.CloseReason == CloseReason.UserClosing) { MessageBox.Show("Connected: " + IPConnection.CONNECTION_STATE_CONNECTED.ToString(), "4"); // Prompt user to save his data // CONNECTION STATE = 1, obwohl noch keine Verbindung aufgebaut wurde... ? if (IPConnection.CONNECTION_STATE_CONNECTED == 1) { try { ipcon.Disconnect(); } catch (Exception exceptionMsg) { MessageBox.Show(exceptionMsg.Message, "Fehler!", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Error); } } listView2.Clear(); MessageBox.Show("Tinkerforge Disconnected", "Anwendungsstop!", MessageBoxButtons.OK, MessageBoxIcon.Information); } } } } Das Phänomen: Obwohl das Connect erst nach klick auf den button1 stattfindet - erst dann baut er mir die Liste auf, welches im EnumerateCB mit drin steht, bekomme ich für die Abfrage im Form1_FormClosing bei IPConnection.CONNECTION_STATE_CONNECTED den Wert 1 zurück. Bezieht sich dies nur auf die reine USB-Verbindung? Ist also nur dann 0, wenn der USB Stecker gezogen ist? Wenn ja, wie sollte ich die Abfrage ändern, damit die "Verbindung" zu den Bricks getrennt wird? Danke schon mal und Gruß, Christoph
  13. Hi Zusammen, Als ich vor knapp 3 Jahren auf TinkerForge aufmerksam wurde, gab es glaube ich nur das Temperature und maximal das Temperature IR Bricklet. Inzwischen hast sich hier Ja einiges getan, wie ich feststellen konnte - das Thermocouple und das TPC Bricklet sind zumindest für mich neu, was die Möglichkeiten zur Temperaturüberwachung angeht. Da ich derzeit in meinen Terrarien TP1000 Fühler verbaut habe, klingt natürlich gerade das das TPC Bricklet besonders interessant. Jetzt bin ich natürlich am überlegen, mit welcher Hardware sich welche Anwendungsmöglichkeiten bieten... -TPC: Es ist egal, wo das Bricklet verbaut ist, gegessen wird die Temperatur am Fühler - Temperature: Es wird die Temperatur gemessen, wo das Bricklet verbaut würde... macht u.U. weniger Sinn, da das Bricklet ggf. schlecht im Terrarium platziert werden kann (Kabelanschlüsse). - Temperature IR: Könnte Sinn machen, um z.B. die Temperatur am Sonnenplatz zu messen, wenn dort kein Fühler verbaut werden kann... Thermocouple: Ist im prinzip das gleiche wie TPC, bloß für andere Fühler Sind meine Gedanken hierzu richtig?
  14. Hi, Dank dir Ja, das habe ich damals nicht mit bekommen - habe mich jetzt beinahe drei Jahre nicht mehr mit TF befasst gehabt *schande über mein Haupt* :-/ Noch eine andere Frage: Ich habe beim WiFi2.0 gelesen, dass der RED Brick derzeit nicht unterstützt wird... was bedeutet dies konkret?
  15. Hallo zusammen Ich bin nach wie vor am stöbern im Shop um mir eine einkaufsliste für einige tests zusammen zu stellen. Jetzt ergibt sich dir mich folgende frage: Worin genau liegen die Unterschiede zwischen den beiden wifi extensions? Kann mir die jmd kurz zusammen fassen? In Verbindung mit einem RED... Welche erweiterung sollte ich eher wählen? Danke und Gruß, Christoph
  16. Hallo __LC__ Ein k.o. Kriterium ist das natürlich nicht - die Idee, das alle Terrarien ausfallen gefällt mir allerdings auch nicht so wirklich. Im Moment ist das zwar weniger Tragisch, da die Tiere in den Terrarien einen Ausfall von X-Stunden denke ich ganz gut weg stecken könnten - dennoch möchte ich bei verschiedenen Terrarien das Risiko entsprechend gering halten. Zumal es durchaus sein kann, dass sich am Tierbestand und somit an den Terrarien in Zukunft auch noch das ein oder andere Ändern wird - und dann könnte ein Ausfall eventuell schon entsprechend Kritischer sein. Ich bin ja aber aktuell noch ganz am Anfang meiner Planungen - und gerade die Failure-Szenarien spielen hier eine nicht unerhebliche Rolle. Schließlich sollte die Heizanlage nicht unbedingt auf ON stehen bleiben, wenn ein System ausfällt... Das könnte im Schlimmsten Fall sonst böse enden. Für mich bedeutet das also auch, dass ich versuche, im Schlimmsten Fall nur ein "Problemkind" zu haben - sprich ein Terrarium, dessen Steuerung und Anlage ausgefallen ist. Wenn es eine längere Störung sein sollte, dann kann das Tier ggf. immer noch in eines der anderen Terrarien dazu gesetzt werden (zumindest in meiner jetzigen Situation). Ein nächster Punkt ist, dass die einzelnen Terrarien u.U. andere Parametrierungen und Anforderungen benötigen. Wenn ich also die Steuerung anpassen muss, etc.pp. dann kann ich bei einer Lösung, welche für jede Anlage autark läuft vorab entsprechend Testen - und die bestehenden Terrarien laufen ohne Probleme und ohne Risiko weiter... ... Naja, wie du siehst hüpfen mir die verschiedensten Gedanken diesbezüglich im Kopf umher... Zu einem Endgültigen Schluss bin ich aber noch nicht gekommen. Nur: Ich will am Ende nicht am falschen Ende sparen
  17. Hast du ggf. einen USB-Hub in Verwendung? Wenn ja, versuche auf jeden Fall mal einen direkten USB Anschluss. Bei mir war das Problem ähnlich, während sich der MasterBrick im Bootloader (für FW Update) befand... Zuvor wurde er vom Viewer ohne Probleme erkannt, die FW ließ sich aber nicht updaten... Nach Erase+Reset Tastenkombination, schien erst einmal alles tot zu sein. Keinerlei Reaktion mehr, keine LEDs - nichts. Auch im Viewer wurde MB nicht gefunden. Erst nach testen eines anderen USB-Ports, welcher eben nicht an einem USB Hub war, wurde auch die neue COM-Schnittstelle im Gerätemanager angezeigt und die FW konnte aufgespielt werden... Ich könnte mir gut vorstellen, dass es bei dir etwas ähnliches sein dürfte - denn nach knapp 3 Jahren in der Bastelkiste - und etlichen "Experimenten" läuft mein MB nach wie vor... Ist also ziemlich robust.
  18. Hallo Zusammen, ich habe heute mal meinen alten MasterBrick ausgegraben um mich wieder ein wenig in das Thema hinein zu arbeiten... Als erstes wollte ich daher mal ein FW Update machen. Für die angeschlossenen Bricklets hat dies zumindest lt. Anzeige im BrickViewer auch geklappt, aber mein Master lässt sich scheinbar nicht von FW 2.0.6 auf 2.4.1 updaten ?! Ich hab es jetzt mehrmals probiert... auch mit Reset, und Verbindung trennen und neu anschließen. Die FW bleibt auf 2.0.6 Irgend eine Idee? Gibt es einen speziellen Trick? Edit: Habe gerade das hier gefunden und entsprechend Ausgeführt... Brick per USB an PC anschließen. Erase Knopf drücken und gedrückt halten. Reset Knopf drücken und wieder loslassen. Erase Knopf wieder loslassen. Allerdings tut sich jetzt gar nichts mehr und mein BrickViewer zeigt den Master nicht mal mehr an :-( Edit II: Ok. Lag am USB Hub FW erfolgreich aufgespielt. Thema geschlossen... sorry für den Unnötigen Beitrag :-(
  19. Hi, Dank dir:) dann war meine Vermutung diesbezüglich schon mal richtig Ich werde dann mal ein bißchen shoppen gehen, nachdem ich mich nochmal etwas mit dem bricklets befasst habe, die noch bei mir herum liegen... Sobald es etwas zu berichten gibt, oder ich weitere Fragen haben sollte, hört ihr sicherlich wieder von mir
  20. Hallo liebe Community, Ich habe bereits vor einigen Jahren mal ein klein wenig mit Tinkerforge herum experimentiert, um mir eine Steuerung für Terrarien zu bauen. Leider verliefen sich die experimente damals aus Zeitlichen Gründen relativ schnell im Sand - und es kam nie zu einem Abschluss. Jetzt will ich das ganze aber noch einmal versuchen... Und wende mich daher erst einmal mit ein paar Fragen an Euch, in der Hoffnung, ihr könnt mir vielleicht den ein oder anderen Tipp mitgeben. Dass ich für die Grundfunktionen der Steuerung Bricklets wie Temperatur, Humidity und co. benötige, ist soweit klar - und zum Teil aus meinen früheren versuchen auch noch vorhanden. Aber: Ich möchte gerne, dass jedes Terrarium eine eigene Steuerung bekommt, welche an und für sich autark läuft. Diese Steuerungen sollen aber über eine Serveranwendung konfiguriert werden. Sprich - über eine Anwendung möchte ich Zugriff auf mehrere, separat laufende Steuerungen. Wie sollte dies am besten gelöst werden, wenn ich an dieser Stelle komplett mit TF arbeiten will? Brauche ich einen RED brick für jedes Terrarium, oder reicht einer als Server, welcher sich dann quasi via wifi, rs485 oder ethernet,.... Mit den jeweiligen Steuerungen verbindet? Die einzelnen Stwuerungen sollen ihre Arbeit auch machen, wen der 'Server' einmal nicht erreichbar ist - Konkret müssen parameter wie max. temperatur, Uhrzeit und co. also auch auf der jeweiligen Steuerung gespeichert sein - und nicht nur über den Server. Daher gehe ich im Moment davon aus, dass jede Steuerung ihren eigenen Redbrick braucht & der Server nur eine SW Lösung sein kann... Helft mir doch nach Möglichkeit, eine Sinnvolle Einkaufsliste zu erstellen Vielen Dank schon mal und Grüße, Christoph
  21. danke für das Beispiel... da stand ich irgendwie voll auf dem Schlauch^^
  22. dass das Programm davon nix mitbekommt macht nichts... wenn der Rechner hängen bleibt oder probleme macht, dann bekommt das Programm sowieso nix mehr mit. Mir ist nur aufgefallen, dass wenn ich den Status mit setState auf true setze, der Monoflop Counter eben nicht runterzählt und das Relay auf Off stellt, wenn z.B. das Programm beendet wird. Beispiel: Ich möchte im Programm das Relay einschalten. Wie lange usw. ist jetzt erstmal unwichtig. irgndwann soll das Relay wieder ausgeschaltet werden. "Normalerweise" mit SetState(true...) und anschließend mit SetState(false...) bricht jetzt die Verbindung ab, oder beendet sich die Software, sollte "in diesem Moment" der Monoflop-Counter beginnen und das Relay nach z.B. 20000ms auf false stellen (da ja die Kontrolle über das Programm fehlt). Dies funktioniert aber nicht, wenn ich z.B. im Callback den Monoflop setze und an anderer Stelle dann dem Bricklet sage: SetState(true...) bei der Simulation bleibt das Relay dann nach beenden der Software an. Der MonoflopCounter wird also in diesem Moment nicht mehr "aktiviert"
  23. Hi, nein.... (oder doch?) Ich hatte mir das ganze Ursprünglich wie folgt gedacht: Ich setze den Status des Relay vom Bricklet auf true... und lasse weiterhin meinen Code laufen... wird jetzt plötzlich die Verbindung getrennt (warum auch immer) setzt der Monoflop-Counter ein. und das Gerät schaltet das Relay auf false, wenn der MonoflopCounter abgelaufen ist.
  24. aber es ist nicht möglich, ein Relay mittels SetState(true...) zu schalten und dennoch im Falle eines Disconnects den MonoflopCounter auszulösen?!
×
×
  • Neu erstellen...