Jump to content

AuronX

Members
  • Gesamte Inhalte

    887
  • Benutzer seit

  • Letzter Besuch

Posts erstellt von AuronX

  1. Es ist zweiteilig:

     

    Das tatsächliche Bricklet (also die Hardware) sendet dann die Callbacks aus, wenn beispielsweise bei der Temperatur die CallbackPeriod gesetzt ist. Alles weitere interessiert das Bricklet nicht.

     

    Deine Bindings hingegen merken sich nun welche Listener jeweils registriert sind und stellen das jeweils zu sobald eine Nachricht vom Bricklet kommt.

     

    Methoden zum einzelnen Entfernen sollten meiner Erinnerung nach gut möglich sein. Bei den Is*-Methoden würdest du halt abfragen ob gerade ein Listener registriert ist, aber NICHT ob auch die entsprechende Period einen Wert > 0 hat. Das müsstest du dann in zwei Abfragen erledigen wenn du beides wissen willst.

  2. Also alle anderen genannten deckten auch beide Welten ab ^^ Bei Ruby bin ich mir auf dem RaspPi nicht so sicher.

     

    @Editor für python: Für den Anfang sollte ein normaler Editor mit Syntax-Highlighting reichen. Mit Pyhton mitgeliefert ist auch IDLE, den kann man auch nutzen, habe ich aber persönlich nciht ausprobiert... viele lieben ihn aber.

  3. Zur Orientierung:

     

    Plattformunabhängigkeit

    Python, C#, Java und PHP sind alle plattformunabhängig. Das heißt für alle gängigen Plattformen sind Laufzeitumgebungen verfügbar.

     

    Zukunftssicherheit

    Python, C# und Java sind derzeit weit verbreitet und sie werden noch immer aktiv gepflegt und weiterentwickelt. Beides sind recht gute Kriterien, um die Zukunftssicherheit zu bewerten. Bei PHP habe ich das Gefühl, dass die Verbreitung inzwischen stark zurückgegangen ist. Es gibt natürlich noch viele große Projekte in PHP, aber ich glaube wenn heute auf der Web-Schiene etwas neues entwickelt wird, dann eher mit Ruby on Rails (Ruby) oder Django (Python). Nichts-desto-trotz wird PHP wohl noch immer weiterentwickelt. Aber dort sehe ich die geringsten Zukunftsaussichten.

     

    Anfängerfreundlichkeit

    Hier weiß ich nicht wirklich wie ich das objektiv bewerten kann. Ich halte Python für etwas Anfängerfreundlicher, weil es dich zwingt deinen Code korrekt einzurücken... Andererseits finde ich die statische Typisierung von C# und Java auch gut. Wie finden Anfänger das? kA...

     

    edit: ich habe mal noch PHP ergänzt, weil das ja auch öfter erwähnt wurde

  4. So ist das auch nicht gedacht. Du nutzt nur SetMonoflop mit true und SetState mit false. Das bedeutet wenn die Verbindung nach einem SetState(false) abbricht, dann bleibt es aus. Wenn sie nach einem SetMonoflop(true) abbricht, dann geht es von alleine aus, wegen des Monoflop-Counters.

     

    Sehr einfaches Beispiel:

    while(true)
    {
      if(temp < minimumTemp)
      {
        relay.SetMonoflop(1, true, 12000);
      }
      Thread.Sleep(10000); //etwas kürzer schlafen als das Monoflop dauert, sonst schaltet sich das Gerät zwischendurch jedes mal kurz aus
    }

  5. http://www.tinkerforge.com/de/doc/Software/IPConnection_CSharp.html#callbacks

     

    Mögliche Enumerierungsarten sind:

    IPConnection.ENUMERATION_TYPE_AVAILABLE (0): Gerät ist verfügbar (Enumerierung vom Benutzer ausgelöst).

    IPConnection.ENUMERATION_TYPE_CONNECTED (1): Gerät ist neu verfügbar (Automatisch vom Brick gesendet nachdem die Kommunikation aufgebaut wurde). Dies kann bedeuten, dass das Gerät die vorher eingestellte Konfiguration verloren hat und neu konfiguriert werden muss.

    IPConnection.ENUMERATION_TYPE_DISCONNECTED (2): Gerät wurde getrennt (Nur bei USB-Verbindungen möglich). In diesem Fall haben nur uid und enumerationType einen gültigen Wert.

     

    Das Ende der Enumeration ist nicht explizit feststellbar, weil das der Stack auch nicht "weiß". Aber es gilt die Regel wenn du 2500ms keine Antwort erhältst, dann ists wohl fertig. (weil 2500ms default timeout ist)

  6. Ich denke das IO16 kannst du sogar knapper beschalten, zumindest wenn ich deinen Schalter richtig verstehe:

    Mitte des Schalters mit dem 5V-Ausgang des IO16 verbinden (der ist immer High),

    die anderen beiden enden wie gehabt. Insbesondere verstehe ich im aktuellen Design nicht, warum du den mittleren Kontakt des Schalters zweimal mit dem IO16 verbindest.

     

    Aber vorsicht: So viel Ahnung habe ich gar nicht von Elektronik :D

  7. Callbacks werden von einem eigenen Thread abgearbeitet. Unter normalen Umständen sollten Callbacks ohne weitere Verzögerung abgearbeitet werden.

     

    Noch ein kurzer Disclaimer, weil Plenz seine Schwierigkeiten mit Threads angedeutet hat: Während du einen Callback verarbeitest läuft dein Code im einzigen Thread der Callbacks ausliefert. Das heißt wenn du dort lange rechnest, dann verzögert das schon die folgenden Callbacks. Wenn deine Hauptarbeit im Main-Thread läuft und deine Callback-Verarbeitung schnell geht, dann ist das aber alles kein Problem ^^

  8. @FlyingDoc: Danke für die Erklärung, aber so war das nicht gemeint ^^ Mir war nicht klar wo er ein Array erwartet ^^

     

    Und noch als Ergänzung: In C# (und auch in allen anderen Sprachen die mir gerade einfallen) haben Arrays immer eine feste Größe. Für dynamisches Resizen gibt es dann üblicherweise verschiedene Klassen, die meist entweder auf Arrays aufbauen (und beim Vergrößern alles von einem ins nächste kopieren) oder als verkettete Listen arbeiten.

     

    @CChris: schön zu sehen, dass es geholfen hat und du schonmal anfangen konntest :)

  9. Kommt jetzt noch ein bisschen drauf an, ob du WPF oder WinForms nutzt. Im Wesentlichen sind folgende Schritte zu erledigen:

    1. Alle Daten die du anzeigen willst am besten in einer kleinen Klasse kapseln

     

    etwa:

    class MyModel
    {
      public string UID { get; private set; }
      //...mehr properties zum anzeigen...
    
      public MyModel(string uid, /* mehr parameter für mehr properties */)
      {
        UID = uid;
        //und der Rest
      }
    }

     

    2. Im Callback aus den erhaltenen Informationen eine solche Klasse erstellen und zur ListView hinzufügen, dabei beachten, dass das ganze im GUI-Thread erfolgen muss, google stichworte dazu:

    WinForms Invoke

    oder

    WPF Invoke

     

    3. Im ListView konfigurieren wie die Model-Elemente angezeigt werden sollen, auch hier ist das ganze WinForms/WPF-abhängig

     

    P.S.: Ein WPF-Beispiel für einen anderen Anwendungsfall findest du hier:

    https://github.com/NobodysNightmare/TwitchURLGrabber/tree/master/TwitchURLGrabber

     

    (hat nix mit TF zu tun, aber das ist meine erste in WPF realisierte ListView ^^)

×
×
  • Neu erstellen...