IPSModuleStrict Preview

Ergänzung:

Wenn ich nun Client Socket und Serial Port mitgebe:

	public function GetCompatibleParents(): string
	{
		return '{"type": "require", "moduleIDs": ["{3CFF0FD9-E306-41DB-9B5A-9D06D38576C3}", "{6DC3D946-0D31-450F-A8C6-C42DB8D7D4F1}"]}';
	}

Dann wird ersteres vorgeschlagen und nicht beide. Wenn ich nach Anlegen der Instanz umverknüpfen wollte, dann könnte ich theretisch alle I/O Instanzen auswählen, auch wenn ich diese gar nicht “freigegeben” habe für das Modul. Gibt es neben „require“ weitere Typen?

Aber genau dann wäre hier dort der Ort gewesen um darauf Bezug zu nehmen.

Du hast ja selber das TODO in der Doku gesehen und hier im Forum gibt es auch schon den einen oder anderen Fall, wo das neue Vorgehen der Konsole noch nicht fehlerfrei ist/war.
Von daher ist es ja mit der Testing der 8.2 noch immer ein ‚preview‘.
Glaube zum Release werden die Jungs und Mädels da schon mehr fertig haben.

Für Grundlagen sind die YouTube Videos sehr gut. Glaube das ist besser als es eine Dokumentation sein kann.

Die Objektnummer steht ja im Namen, dieses Objekt hat den SerialPort angelegt.

Ich weiß selber noch nicht wie da das beste Vorgehen ist. Glaube ich würde da auch auf GetCompatibleParents setzen und es nicht weglassen.

Nein Darstellungen für Variablen sind das hier:

Glaube da müssen wir auf @paresy warten. Keine Ahnung was die Konsole machen sollte.
Da ich nach Möglichkeit immer Konfiguratoren zum erstellen von Instanzen anbiete, betrifft mich das aber auch weniger.

Ja, siehe oben:

Grundsätzlich ja; ich habe mir auch einige angesehen. Da steckt auch viel Arbeit drinnen - ist sicher super gemeint, aber für mein dafürhalten sind die Videos zu lang. Kompakter oder eine ordentliche Doku ist mir lieber. Insbesondere, wenn man schnell etwas nachschauen will - man kann sich nicht immer alles merken, dann spult man sich einen “Wolf”. Nicht, dass das falsch rüber kommt: Symcon ist ein super System, da stehe ich vollkommen hinter.

Hi Ian,

kurz Frage: Hast du wirklich die neuste Version installiert? Im letzten Update hatten wir leider noch einen Fehler korrigiert der genau diese Liste falsch ausgewertet/angezeigt hat.

Denn genau das sollte passieren → Es sollten beide Modul zur Auswahl stehen.

Die Doku für das Thema kommt noch. Es war in den letzten Woche doch noch etwas mehr Bewegung drin als wir erwartet hatten :slight_smile:

paresy

Hallo paresy,

ich habe in Debian die stable installiert und das ist die 8.1 mit Revision “f05de273b4f1”. Ich kann das nochmals bei der 8.2 Test-Version probieren, wenn es Sinn macht.
Bzgl. Doku kein Stress. Manchmal ist es das Eifer des Gefechts beim Programmieren. Das Symcon-Team, insbesondere der Chef, muss auch über die Tage zur Ruhe kommen dürfen :wink:

Ergänzung: mit der testing Version werden genau die beiden UIDs angeboeten. Wie es sein soll. War davon ausgegangen, dass das schon länger gegolten hatte. Daher Entwarnung. Die anderen Mechanismen werde ich auch nochmals dahingehend testen. Wie ist die 8.2 eigentlich 8.2? Das wäre doch schon bald 9.0 Wert gewesen, oder?

Ich meine GetCompatibleParents geht auch nur ab 8.2
@paresy Bei der Doku Seite steht noch 8.1?

Es führt in der 8.1 zumindestens nicht zu einem Fehler. Nur der Auswahldialog wird erst ab 8.2 angeboten. In der 8.1 wird die erste GUID für die Instanzverbindung genutzt, die GetCompatibleParents hinterlegt ist.

Ich bearbeite gerade das Modul „SMAHomeManager“ um es auf den aktuellen Stand zu bringen.

Die Geräteinstanz benötigt einen Multicast Socket als Parent. Sollte ich dann in der module.json die I/O Schnittstellen ID {C8792760-65CF-4C53-B5C7-A30FCC84FEFE} oder direkt die Multicast Socket ID {BAB408E0-0A0F-48C3-B14E-9FB2FA81F66A} eintragen?

{
  "id":                 "{AC047B7E-8502-D0F7-6391-86FBE46B3A3C}",
  "name":               "SMA Home Manager Device",
  "type":               3,
  "vendor":             "SMA",
  "aliases":            [],
  "parentRequirements": [
    "{C8792760-65CF-4C53-B5C7-A30FCC84FEFE}"
  ],
  "childRequirements":  [],
  "implemented":        [
    "{7A1272A4-CBDB-46EF-BFC6-DCF4A53D2FC7}"
  ],
  "prefix":             "SMAHM",
  "url":                "https://github.com/bumaas/SMAHomeManager/blob/master/README.md"
}

Momentan funktioniert es so noch nicht und es kommt ein Auswahldialog beim Erstellen der Instanz:

Meine Frage: sollte die Angabe ausreichend sein, oder benötige ich noch ein GetCompatibleParents() mit

    public function GetCompatibleParents(): string
    {
        return json_encode([
                               'type'      => 'require',
                               'moduleIDs' => [self::MODID_MULTICAST_SOCKET]
                           ], JSON_THROW_ON_ERROR);
    }

Wenn ich die Funktion ergänze, dann legt er einen neuen zweiten Socket an, obwohl bereits einer da ist:

Und die Zuordnung kann ich später nicht ändern:

Ich habe es so verstanden, dass ich als parentRequirements direkt die Multicast Socket ID eintragen können sollte und ansonsten nichts weiter vorgeben müsste. Aber das funktioniert bei mir nicht.

Genau so sollte es funktionieren mit GetCompatibleParents. Es gab aber einen Bug zum Jahresende, dass es nicht funktioniert hatte. Bist du auf der aktuellsten Version unterwegs?

In der module.json bleibt weiterhin der bekannte Datenfluss.

paresy

Ich bin auf der aktuellen Version.

Dann scheint es wohl noch einen Fehler zu geben, dass beim Anlegen nicht erkannt wird, wenn schon ein Multicast Socket vorhanden ist.

Hast du das Modul auf einem Branch sodass ich es testen könnte? Bei Require sollte er gar nicht fragen, sondern immer einen neuen erstellen.

paresy

Ah, es liegt am ‚require‘. Ich hatte das Beispiel aus der Doku.

Mit ‚connect‘ wird wie von mir gewünscht gefragt. Damit geht es nun. Besten Dank!

Nö.. hier fragt er auch

Und beim Konfigurator wird es ganz wild. Da habe ich GetCompatibleParents extra weg gelassen…
Da wird immer ein Splitter erzeugt und das wechseln in der Konsole auf einen vorhandenen anderen Splitter geht nicht, obwohl es zwei zur Auswahl gibt.


image

Die „ausführliche“ Erklärung zu require: Er bietet zum Verbinden nur den eigenen (natürlich nur bei existierenden Instanzen im Ändern Dialog) und Instanzen ohne Verbindungen an. Hängt also an einem I/O nichts, wird er bei require angeboten.

Wenn du GetCompatibleParents weg lässt, wird bei einem Konfigurator standardmäßig require angenommen, damit werden deine exstierenden Splitter nicht angeboten.

Ah, verstehe. Das Thema „ohne Verbindungen“ solltet ihr bei einem Konfigurator eventuell lassen? Sonst kann man, nach dem löschen eines Konfigurators, einen neu angelegten nie mehr an einen vorhandenen Splitter, welche schon Geräte Verbindungen hat, andocken.

Habe UnregisterHook gerade getestet. Funktioniert einwandfrei. Danke für die Funktion. Ich bin begeistert.

Grüße

Jürgen

Doku: UnregisterHook — IP-Symcon :: Automatisierungssoftware

Wir arbeiten an einer verbesserten Version von GetCompatibleParents — IP-Symcon :: Automatisierungssoftware, welche dann auch GetConfigurationForParent vereint und zwei neue Feld bringt „initial“ und „formOverride“.

Was haltet ihr davon?

inital erlaubt eine Konfiguration zu setzen, die nur initial gesetzt sein soll, aber trotzdem editierbar ist. z.B. ganz oft der „Open“/„Active“ Parameter vom I/O, soll True statt False sein.

formOverride erlaubt es die Form vom Parent zu modifizieren. z.B. im Serial Port nur bestimmte Baudraten zulassen, oder beim Client Socket SSL ausblenden, wenn dies keinen Sinn macht (statt nur per Option zu blockieren)

paresy

PS: Beides ist noch WIP und nicht in der 8.2 drin!

3 „Gefällt mir“

Moin,

beim MQTT Konfigurator kann ich keinen MQTT Server auswählen, nur neuen anlegen…

Eine ähnliche Situation („Konfigurator lässt sich nicht mit bestehendem Splitter verbinden“) hatte ich auch die letzten Tage.
Das liegt wohl wohl daran, dass der Splitter bereits Verbindungen hat. Mir hat geholfen, die bestehenden Verbindungen temporär zu löschen.
Dann klappte die Auswahl beim Konfigurator wieder.
Ist es bei dir auch so?

Ich denke, es ist dieser Fall: