WebHook aus Modul dynamisch erstellen

Die Variable spielt im ersten Moment wahrscheinlich gar nicht so die Rolle sondern Du brauchst die passende Funktion für die Instanz da die Variable ja nicht firekt geändert wird sondern über die Funktion z.B. Homematic HM_WriteValueBoolean(12345, „STATE“, true);
Anhand der vielen Geräte habe ich keine Ahnung ob es bei den Idents ein System gibt. Eventuell könntest Du aber z.B. schauen ob Du über den Ident STATE nicht die passende Variable zum Schalten bekommst. Dazu müsstest Du Dir aber mal die Befehle bei den unterschiedlichen Geräten anschauen.

Braucht man alles gar nicht.
Hatte ich doch geschrieben; einfach hier abschauen:
SymconMisc/module.php at master · paresy/SymconMisc · GitHub

Ihr braucht SwitchVariable, GetProfileAction und GetProfileName.

Dort wird auch berücksichtigt, wenn es eigene Aktionen (Aktions-Scripte) gibt.

Michael

Danke Michael,
Kai ist jetzt auf einem Weg, es zu probieren.
Wir haben uns das gerade mal gemeinsam angeschaut.(Ist ja mein IPS auf dem das ganze Hier im Haus läuft.:D)
Hintergrund ist, ich habe LCN in meiner Wohnung und für alle gemeinsamen Lampen, ind den Wohnungen ist kein LCN vorhanden, da alte verkabelung. Kai’s Wohnung haben wir mit zwave versucht, musste da aber auch einiges an Modulen in meiner Wohnung versenken, um das Signal rüber zu bringen. Und an einigen Stellen habe ich keine LCN Datenader liegen, da kommt erst mal zwave hin. Auch alle Rauchmelder die hier im Haus verbaut sind, und werden sind zwave, und das klappt gut mit IPS.
Deine Idee mit IPS_RequestAction scheint der richtige Weg zu sein. Ich bin im Moment nicht auf dem Aktuellen Stand, meine erstem Module sind ja schon wieder Uralt, und heute geht mehr…:loveips:

Und Danke für die anderen Tipp’s von allen, Kai beschäftigt sich mit IPS erst seit kurzer Zeit, hat aber den Vorteil, er kann einige Dinge besser als Papa…:smiley:
Ich bin auch erst, mit der ersten Version von IPS angefangen, die auf dem PI lief, also auch noch nicht wirklich lange.

Hallo Michael,

ich habe mir das gerade ein mal angeschaut. Sehr interessant, danke. :slight_smile:
Also würde ich so vorgehen:

Ich wähle in der Form mein Gerät aus, dann entscheide ich, ist es ein Switch, ein Thermostat oder vielleicht ein Dimmer usw.

Wenn es ein Switch ist, lasse ich mir in der Form ein Feld einblenden, wo ich nur eine Variable für den Status „verlinken“ muss.
Wenn es ein Thermostat ist, dann lasse ich mir Felder anzeigen, wo ich eine Variable für den Modus (Heizen, Kühlen oder Aus) „verlinke“,eine Variable für die aktuelle Temperatur und das ganze nochmal für die Zieltmeperatur.

Auf diese Variablen lasse ich dann die Funktionen los, die du mir da oben gezeigt hast.
Ich hoffe ich habe das so nun richtig verstanden. :slight_smile:

Grüße,
Kai

Hallo,

hier mal ein Screenshot, wie ich mir das gedacht habe:

Ich weiß aber noch nicht, ob das vielleicht zu viel für IP-Symcon Console wird.
Gibt es da eine Grenze, also für die Anzahl der Objekte auf einer Form?

Grüße,
Kai

Du hast eher das Problem, dass du ja die Eigenschaften statisch im Create erzeugen musst.

Entweder du wartest auf die Listen.
Oder, was eventuell auch geht, du baust dir eine Instanz als Splitter welche die Daten aus dem Hook empfängt und einzeln Instanzen pro zu steuernden Gerät.
Alternativ gibt es ja auch schon Module welche eine ähnliche Logik benötigen, eventuell solltest du dir die Mal ansehen (Alexa oder das alte Homekit?).
Kenne allerdings beide nicht.
Michael

Hallo Michael,

ja, das mit den Eigenschaften ist mir dann auch aufgefallen, jetzt müsste ich für jede eventuelle Möglichkeit eine Eigenschaft erstellen, was mir völlig sinnlos und übertrieben erscheint.

Dein Vorschlag hatte ich auch schon im Kopf, das alte Homekit Modul arbeitet genauso.

Und wenn die Listen dann da sind, dann kann ich es ja immer nochmal umbauen.

Grüße,
Kai

Gibt zur Zeit ohne die Listen aber keine andere Möglichkeit. Du musst alle Eigenschaften erzeugen egal ob diese dann benötigt werden oder nicht. Glücklicherweise zählen ja Eigenschaften nicht als Variablen daher kannst Du damit auch niemand vergrenzen der z.b. eine kleine Lizenz hat und die Variablenanzahl sprengen. Du musst Dir also nur einen realistischen Wert ausdenken und dann so viel Eigenschaften erzeugen. Wo da das Maximum liegt weis ich nicht aber es gibt durchaus Formulare von Modulen wo es aufgrund der Fülle von Eigenschaften langsam unübersichtlich wird.

Sieht ja gut aus, Du machst hier Pionierarbeit, so ein Formular kann man dann auch für Echo verwenden wenn der Skill mal irgendwann da ist :D. Ich würde noch ein Textfeld ergänzen und dies mit dem Namen der Instanz vorbefüllen. Dies ist dann der Siri Name, dieser kann aber vom Nutzer im Konfigurationsformular angepasst werden.

Ich schaue mir gerade den anderen Lösungsansatz an mit Splitter und verschiedenen Instanzen für die jeweiligen Geräte.

Grüße,
Kai

Das wird aber viel zu unübersichtlich, dann lieber für jedes Gerät eine Instanz. :smiley:
Jetzt bin ich verwirrt, ob ich nicht doch lieber nur mit einem Formular arbeiten soll und einfach die ganzen Variablen anlegen soll. :smiley:

Grüße,
Kai

Oder nur die Daten aufbereiten und ein vom User anzupassendes Script starten… Also ähnlich deiner ersten Umsetzung :grinning:
Wobei sich dann ja die $_IPS Variable zur Weitergabe der Werte eignet.
Michael

Naja an sich wäre das schon in einem Konfigurator richtig aufgehoben in dem man alle Geräte die man mit Siri nutzten will auf einmal konfiguriert. Aber ich gebe Dir Rechts das das ohne Listen ziemlich schnell ein ewiges Scrollen gibt und unübersichtlich wird.

Also ich persönlich finde den Ansatz mit dem Formular an sich ganz gut. Ich denke das hält sich auch in Grenzen, denn die meisten Leute steuern bestimmt nicht hunderte von Geräten mit Siri da hast Du schon Spass Dir für jedes Gerät einen passenden Namen auszudenken den Siri auch sauber auseinander halten kann. Bei den meisten wird es sich wohl die Anzahl in Grenzen halten das man zwar scrollen muss aber nicht Minutenweise ;).

Also würdest du einfach für alles eine Variable im Create() erzeugen, ich glaube du machst das auch in deinem Flow Plugin so oder?

Gesendet von iPhone mit Tapatalk

Oder ich lege für jeden Service so eine Instanz mit dem Formular an, dann habe ich das Problem der ungenutzten Variablen nicht und das ganze wird übersichtlicher.

Gesendet von iPhone mit Tapatalk

Macht wahrscheinlich wirklich mehr Sinn. Am besten dann alle Instanzen in einer Kategorie ablegen dann weis man wo alle liegen. Bei Flow lege ich die Eigenschaften zwar an weil ich nicht weis was alles an Daten mit dem Flow kommen, Dennoch ist dort auch eine Instanz ein Flow. Insofern macht das wohl schon Sinn einfach für jedes Device auch eine eigene Konfigurationsinstanz zu haben, macht die Anzahl der Instanzen zwar größer aber man sieht auch welche Geräte für Siri denn vorhanden sind auf einen Blick im Objektbaum und muss nicht erst das Formular öffnen.

Hallo,

ich habe es nun so:

IPS_HomebridgeSwitch <- eine Instanz in der ein Benutzer alle Switche hinzufügen kann.

IPS_HomebridgeSplitter <- dort wird der Hook verarbeitet, wenn die Homebridge einen Status vom Switch abfragt, dann soll diese Anfrage dann IPS_HomebridgeSwitch weitergeleitet werden, hier wird das Gerät dann abgefragt und die Antwort zurück an IPS_HomebridgeSplitter geschickt und dort wieder an den Hook zur Ausgabe übergeben.

So zumindest ist zur Zeit meine Vorstellung davon wie ich es realisieren will, ob es klappt werde ich sehen. :smiley:

Grüße,
Kai

Hallo zusammen,

das ganze mal in einem Screenshot für einen Switch:

Ich glaube so wird es wirklich wesentlich übersichtlicher.

Jetzt muss ich nur noch das verstehen, was Michael vorgeschlagen hat:

Grüße,
Kai

Hallo,

ich habe noch eine Frage zu $this->SendDataToChildren und co.

Ich tu im Splitter folgendes:

  protected function ProcessHookData() {
    if (isset($_GET["service"])) {
      switch ($_GET["service"]) {
        case "Thermostat":
          # code...
        case "Switch":

        break;
        case "Lightbulb":

        break;
        case "Temperatur":
          if (isset($_GET["get"])) {
            $this->GetValue($_GET["service"], $_GET["device"], $_GET["get"]);
          }
        break;
      }
    }
  }

  protected function getValue($service, $device, $get) {
    $this->SendDataToChildren(json_encode(Array("DataID" => "{B79316C2-B029-4E7C-BFDE-496D98B8810C}", "Service"=> $service, "Device" => $device, "Action" => "get", "Variable" => $get)));
  }

In der ProcessHookData() verarbeite ich den Hook. Hier im Beispiel also folgendes:
Wenn Temperatur abgefragt wird, wird die Funktion GetValue aufgerufen, diese sendet mit $this->SendDataToChildren();
der Werte an die Instanz, in der alle Temperaturen sind. Nur wie bekomme ich jetzt direkt die Antwort darauf? Ich muss ja in ProcessHookData() einen Wert zurückgeben.
Also müsste meine Instanz für den Temperatur Service ja direkt auf SendDataToChildren() antworten, damit ich in der GetValue im Splitter einen return setzen kann. Was übersehe ich hier? :confused:

Grüße,
Kai