jensweigele / ioBroker.yahka

Yet another HomeKit adapter for ioBroker
MIT License
131 stars 47 forks source link

Shelly 2.5 - Roller Shutter Mode - HomeKit: kein Status #433

Closed jolichter closed 1 year ago

jolichter commented 1 year ago

Hallo, ich verwende einen Shelly 2.5 im Shutter-Modus für ein Fensterrollo. Die Integration mit ioBroker und HomeKit funktioniert bis auf den Status einwandfrei. Soweit ich weiß, muss der PositionState für HomeKit einen Wert zwischen 0 und 2 haben und repräsentiert nicht die tatsächliche Position, sondern den Status:

0 - Rollo fährt herunter 1 - Rollo fährt hoch 2 - Rollo steht still

Da der Shelly 2.5 jedoch Zeichenketten (Strings: "close", "open" und "stop") anstelle von Ganzzahlen (Integers: 0, 1 oder 2) ausgibt, habe ich dies durch eine "Conversion Map" angepasst. Dennoch zeigt HomeKit mir den aktuellen Zustand des Rollos (ob es steht, herunterfährt oder hochfährt) nicht an.

Jemand eine Idee oder Tipp dazu? Oder kann HomeKit das (derzeit) nicht?

ioBroker_Yahka_Shelly25_Shutter_State

ioBroker: V 6.3.5 Node.js: V 18.16.0 Yahka: V 0.17.0 Shelly 2.5 Firmware: 20220809-123456/v1.12-g99f7e0b

jolichter commented 1 year ago

PS: Um den PositionState des Shelly 2.5 zu übersetzen, habe ich auch folgendes Skript im Conversion-Feld getestet (leider ohne Erfolg):

// To HomeKit
function(value) {
  switch (value) {
    case 'close':
      return 0;
    case 'open':
      return 1;
    case 'stop':
      return 2;
    default:
      // Fehlerbehandlung für unbekannte Zustände
      console.error('Unbekannter ioBroker PositionState:', value);
      return null;
  }
}

// To IOBroker
function(value) {
  // Hier ist nichts zu konvertieren, da PositionState von HomeKit zu ioBroker nicht zurück konvertiert werden soll.
}
jolichter commented 1 year ago

Meine Vermutung:

Es sieht es so aus, als ob das Hauptproblem darin besteht, dass HomeKit den Status des Rollos nicht korrekt anzeigt, da der Shelly 2.5 nur die Werte Shutter.Position (im Bereich von 0-100) und Shutter.State (close, open, stop [0, 1, 2]) zur Verfügung stellt. Diese Werte entsprechen möglicherweise nicht den Erwartungen von HomeKit.

HomeKit erwartet normalerweise separate Werte für CurrentPosition und TargetPosition, um den aktuellen und den Zielzustand des Rollladens darzustellen. Da der Shelly 2.5 jedoch nur einen Wert für Shutter.Position liefert, der sowohl für CurrentPosition als auch für TargetPosition verwendet wird, scheint HomeKit den Shutter.State zu ignorieren?

Aufgrund dieser Einschränkung zeigt HomeKit möglicherweise keinen korrekten Status für den Rollladen an, da CurrentPosition und TargetPosition immer den gleichen Wert haben und sich nicht ändern.

Um dieses Problem zu lösen, müsste eine Lösung gefunden werden, um HomeKit mit den erwarteten separaten Werten für CurrentPosition und TargetPosition zu versorgen, während der Shelly 2.5 weiterhin nur den Wert für Shutter.Position bereitstellt.

jolichter commented 1 year ago

OK, habe das für mich mit einem Datenpunkt und Blockly lösen können. Vielleicht kennt jemand eine bessere Lösung? Hier mein Fix:

  1. Datenpunkt erstellen, z.B.: 0_userdata -> 0 -> rollo -> "Rollo1-Postion-StoppedAt" (Datentyp: number; min: 0; max: 100).
  2. Mit Blockly (Objekt Trigger auf Datenpunkt Shutter.State) den Wert 0-100 vom Shelly "Shutter.Postion", in Datenpunkt "Rollo1-Postion-StoppedAt" bei jedem Stopp vom Shelly schreiben.

Dadurch habe ich immer die Position nach einem Stopp sowie auch dann, wenn der Rollo mit einer neuen TargetPostion gestartet wird. Im Yahka-Adapter CurrentPosition State, den Datenpunkt "Rollo1-Postion-StoppedAt" eintragen.

Das funktioniert bei mir, da sich die aktuelle Position erst nach dem Stopp aktualisiert.

PS: PositionState habe ich deaktiviert.