Jump to content

AuronX

Members
  • Gesamte Inhalte

    888
  • Benutzer seit

  • Letzter Besuch

Posts erstellt von AuronX

  1. Historisch ist die korrekte Antwort:

     

    Am Anfang war der brickv mitsamt samba.py. Als ich also das Flash-Tool geschrieben habe, habe ich es zum brickv geschoben, um diese Datei nicht kopieren zu müssen (Code-Duplikation vermeiden).

     

    Wenn man es ganz genau nimmt müsste mit den einzelnen Komponenten folgendes passieren (aus einer modularen Sicht):

    - samba.py wandert in eine flash-library, also eine eigenständige Bibliothek um flashen zu können. Möglicherweise  auch eine TFLib, für alles mögliche das mit TF zu tun hat

    - brickv bleibt alleine und hängt von der FlashLib/TFLib ab

    - flash-cli wandert in eigenes Paket und hängt ebenfalls von der FlashLib/TFLib ab (man könnte auch argumentieren, dass die flash-cli zum brickd wandert und dieser von der Lib abhängt, allerdings würde dann der neue C-brickd von Python abhängen)

  2. 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.

  3. 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.

  4. 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

  5. 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
    }

  6. 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)

  7. 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

  8. 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 ^^

  9. @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 :)

×
×
  • Neu erstellen...