Fragen zur Modulstruktur

Hallo zusammen,

ich arbeite nach meinem JVC Projektor Modul (das außer mir selbst scheinbar niemand braucht :frowning:) jetzt an einem neuen Modul. Es soll die automatische Gartenbewässerung mit OpenSprinkler gesteuert werden. Den Controller hat eine API, die über HTTP ansprechbar ist.

Der Controller kann acht bis 64 Stationen verwalten, die würde ich als Geräteinstanzen über einen Konfigurator (da kämpf ich mich dann durch…) anlegen.

Nun habe ich zwei Implementierungsfragen:

  1. Konfiguration und Status aller Stationen kann ich über einen einzigen API Call auslesen. Das würde ich dann zyklisch in einer IO Instanz machen und die einzelnen Stations-Instanzen mit SendDataToChildren aktualisieren, oder?

  2. Ich frage eine API über HTTP ab. In den meisten Beispielen wird hier curl verwendet. Das funktioniert auch soweit. Wann würde ich das vordefinierte HTTP Request IO Modul ({4CB91589-CE01-4700-906F-26320EFCF6C4}) verwenden?

Und dann noch eine Best Practice Frage: Die Konfiguration des Controllers ist im Grunde statisch, es sei denn, man konfiguriert was um. Würde man dann eher erwarten, die Konfiguration nur über die Instanzkonfiguration explizit zu aktualisieren (über ein „Auslesen“ Button oder auch in ApplyChanges) oder sollte die Konfiguration jederzeit implizit beim zyklischen Auslesen aktualisiert werden. Da kann dann auch mal eine Sprinkler Station dazukommen oder wegfallen.

Und abschließend: Hat jemand einen OpenSprinkler und Interesse, das Modul zu testen, wenn es soweit ist?

VG
Bernd

Jein. Kurze Grundlage:

  • SendDataToChildren sendet aber immer an alle Child-Instanzen. Du entscheidest also bei SendDataToChildren nicht wo die Daten landen.
  • Immer alle Daten zu senden an alle Childs, kann ein System stark beanspruchen.
  • Eine Child-Instanz kann aber einen Filter setzen, auf Datensätze welche sie empfangen möchte.

Somit wäre der eine Call bestimmt die beste Wahl.
Dann aber das Ergebnis zerlegen in je einen Datensatz pro Station und Diese einzelnen Datensätze auch
einzeln mit SendDataToChildren versenden.
Im Child den ReceiveFilter setzen; dann kommt nur der eine gewünschte Datensatz auch in dieser einen Instanz an.

Dafür habe ich selber auch noch keine Verwendung (in einem PHP-Modul). Ich benutze auch direkt PHP-curl.

Verstehe jetzt nicht wirklich was du hier meinst.
Wenn eine Station hinzukommt, dann kannst du das im Konfigurator anzeigen.
Anlegen muss die Instanz aber der User. Entweder manuell über Instanz hinzufügen, oder über deinen Konfigurator.
Beim löschen ebenso; manuell löschen oder über den Konfigurator.
Michael

1 Like

Hallo Michael,

danke für das Feedback.

Wenn ich es richtig verstehe, dann führt SetReceiveDataFilter() dazu, dass IPS die Nachricht auf Basis von regex auswertet und an die richtigen Children sendet. Dadurch, dass das Child den Filter selbst setzt, wäre es dann aber auch kein großer Unterschied, wenn das Child die ganze Config bekommt und sich seinen Teil entsprechend rausziehen, oder?

Das beantwortet meine Frage aber auch schon. :slight_smile:
Stationen kommen in zwei Fällen dazu oder weg: Wenn man ein Erweiterungsboard in den Controller einbaut oder wenn man eine Station Controller-seitig aktiviert/deaktiviert.
Der erste Fall passiert natürlich zwischen selten und nie, der zweite kann schon eher mal auftreten, aber sicher auch nicht regelmäßig.
Klingt also eher nach was, was man dann manuell aktualisiert.
Das könnte man dann vermutlich auch mit einer Discovery Instanz lösen.

VG
Bernd

Discovery Instanzen sind dazu gedacht Geräte im Netzwerk oder an anderen physikalischen Schnittstellen zu erkennen.
Das Auslesen der Konfig von deinem Controller und darstellen der verfügbaren Stationen wäre ein Konfigurator.

Technisch eher so daß er Nachrichten verwirft, wenn der Filter nicht passt. Nur wenn der Filter stimmt, geht ein Datensatz durch.

Könnte schwierig werden, weil der Filter auf den String vom Datenaustausch greift. Das ist ein json kodiertes Objekt.
Und da man ja das im ReceiveData vom Child wieder dekodieren muss, benutzt man den Filter immer so daß er einen ganzen Datensatz durchlässt.
Michael

So habe ich es jetzt auch gebaut. Die Discovery Instanz wäre eher was, um es einfach mal gemacht zu haben, denn dass ein neuer OpenSprinkler im Netzwerk dazukommt ist doch eher selten… und auch die Anzahl der Stationen ändert sich normal nicht.

Ich glaube, das muss ich einfach mal ausprobieren, was besser passt…

VG
Bernd