Permanente Statuswechsel Meldungen

Hallo,

ich komme mit folgender Situation noch nicht zurecht:

  • eine IO-Instanz ist offline (Testfall mit falschen Verbindungsdaten)

Nun erhalten meine verbundenen Devices alle 60 Sekunden eine IM_CHANGESTATUS Message obwohl sich eigentlich am Status nichts ändert:

10.08.2018 10:15:46 | 13636 | MESSAGE | AmazonEchoIO         | Einstellungen gespeichert
10.08.2018 10:15:46 | 13636 | MESSAGE | Event Control        | Wiederverbinden [Amazon Echo Remote IO offline] erfolgreich
10.08.2018 10:15:46 | 00000 | CUSTOM  | MessageSink          | Instanz #17160: Message from SenderID 13636 with Message 10505, Data: [211]

Wodurch wird das ausgelöst? Stutzig macht mich der Logeintrag „Wiederverbinden … erfolgreich“. Mir scheint, ich habe irgendetwas noch nicht bedacht - aber was? :confused:

Gruß

Burkhard

Falsche Verbindungsdaten sind ja ein Fehler. Das musst du im ApplyChanges dann halt mit z.b. Echo ausgeben.
Das gibt dann ein Pop-up wenn der User die Einstellungen übernimmt, oder ein wiederverbinden fehlgeschlagen.
Das IPS alle 60 Sekunden versucht die Instanz zu ‚heilen‘ per ApplyChanges ist normal.
Dies kannst du nur unterbinden wenn die Instanz aktiv oder inaktiv ist.
Kannst natürlich auch bei falschen Daten die Instanz auf inaktiv setzen. Aber dann merkt der User nicht wenn z.b. irgendwann die Daten nicht mehr stimmen, weil IPS keine Fehler wirft.
Michael

Ok soweit. Mich machte nur stutzig, dass permanent ein IM_CHANGESTATUS kommt, obwohl der Status des IO unverändert auf 211 (falsche Verbindungsdaten) bleibt.

Aber wenn das so gewollt ist, auch ok. Ich hatte nur befürchtet, dass ich etwas falsch gemacht habe:)

Nein, ist Absicht. Sobald eine Instanz als ‚defekt‘ markiert wird, versucht das Event Control alle 60 Sekunden das zu fixen.
Ist auch gut, weil wenn z.b. Mal das Ziel offline war (Netzwerk weg etc) es versucht wird immer wieder neu zu erreichen.
Michael

Ja, in der Richtung ist es ja auch gut und richtig, Aber immer wieder zu melden, dass sich der Zustand geändert hat, darin sehe ich nicht wirklich einen Sinn. Aber egal. Ist dann halt so.

Und wie sollte es sonst funktionieren?
Du setzt das Modul und Fehler wenn der Login fehlschlägt weil Inet offline ist und dann bleibt dein Modul ewig und drei Tage im Fehlerzustand?
Das Ergebnis der Aktion vom EventControl wird dann als Nachricht in den MessageSink geworfen.
Es bleibt dir jetzt zu überlassen was du im ApplyChanges oder auch im MessageSink machst. Kannst dir deinen alten Status ja merken…
Michael

Das Ergebnis des Eventcontrols sollte doch sein, das sich nichts geändert hat…
Das Device muss jetzt den Changestatus auf seinen Wahrheitsgehalt prüfen…
Aber wie gesagt ist in meinem Fall nicht schlimm, hat mich halt nur verwirrt.

Meine zweite Baustelle ist mir da wichtiger.[emoji1]

Eine grundsätzliche Frage dazu: sollte eine I/O Instanz immer ein aktiv/inaktiv Flag haben, damit der Benutzer die Instanz deaktivieren kann? In den Best Practice finde ich dazu nichts.

Hast du vielleicht ein Beispiel dafür?

Momentan hat meine IO-Instanz dieses Flag nicht und IPS versucht trotz fehlender/falscher Verbindungsdaten die Instanz zu ‚heilen‘. Auch wenn der Anwender mitten im Dialog ist :frowning:

Bei IO ist das empfehlenswert.
Dann sollte der IO auf inactive gehen und auch nicht mehr aktiv Verbindungen aufbauen oder Daten weiterleiten.
Und auch keine Fehler werfen!

Michael

Die wiederholten Reparaturversuche seitens IP-Symcon führen dazu, dass es zu Anmeldeversuchen kommt und bei zu vielen Fehlschlägen Amazon beim Anmelden eine zusätzliche Captcha Abfrage zwischenschaltet.:mad:

Um diesem aus dem Weg zu gehen möchte ich nun deinen Vorschlag umsetzen und dem IO ein ‚Active‘ Property spendieren, so dass der Anwender die Instanz außer Betrieb nehmen kann.

Zudem möchte ich gerne das Property auch im Modul auf false setzen, wenn mehr als drei Anmeldeversuche fehlschlagen. So meine Idee. Aber wie setze ich das am besten um? Ich denke da an einen Buffer, in dem ich die Anmeldeversuche zähle. Aber an welcher Stelle setzte ich das Property um? Kann ich das im ApplyChanges() machen?

Hier bräuchte ich einen Tipp.

Gruß

Burkhard

Das Aktive Property nicht ändern!
Einfach dann wenn der Zähler überschritten wird, das Modul auf Fehler lassen/setzen und dann gerne eine Exception werfen.
Dann merkt der User das auch :slight_smile:
Michael

Ok, mache ich dann so.

[ul]
[li]Bei fehlerhaftem Login Buffer um 1 erhöhen
[/li][li]wenn Buffer auf 3 ist, dann Instanz auf IS_INACTIVE setzen, Exception schmeißen und Buffer wieder auf 0 setzen
[/li][li]bei erfolgreichem Login Buffer auf 0 setzen
[/li][/ul]
Dann bleibt die Instanz so lange inaktiv bis zum nächsten ApplyChanges durch den Benutzer.

Besten Dank!

Ich würde sie auf Fehler setzen.
Und jedesmal wenn dann IPS einen Applychanges macht wieder den Fehler werfen.
Einen Fehler im Log übersehen die User, aber alle Minute einen Fehler… Das nervt :smiley:

Den Counter würde ich nur zurück setzen wenn entweder die Instanz deaktiv wird (User nimmt Haken Aktiv raus), oder User/Passwort geändert wurde.
Dann musst du aber User Passwort auch im Buffer behalten.

Michael

Generell sollte ja auch zwischen faschen Zugangsdaten und einer fehlerhaften Verbindung unterschieden werden. Wenn ich von der API zurück bekomme, dass meine Zugangsdaten falsch sind muss ich auch damit nicht noch mal anfragen. In dem Fall bekommt man ja trotzdem eine gültige API Antwort