WebHook aus Modul dynamisch erstellen

Das sehe ich doch anhand des Typs der Variable, ob integer, float, String oder boolean ist.
Oder übersehe ich da jetzt was?

Gibt es etwa auch denn Fall das false an sein kann?

Grüße,
Kai

Gesendet von iPhone mit Tapatalk

Ja, gibt ja auch Geräte wo false Fenster offen anstatt zu heißt.
Michael

Ohje, das macht das ganze ja richtig kompliziert. :eek:
Dann muss ich mal gucken, wie ich sowas abfragen kann. :rolleyes:

Ah, da fällt mir ein, den selben Fall habe ich ja beim Thermostat ebenfalls, da lasse ich mir von dem Benutzer angeben wie welcher State bei ihm bei diesem Gerät ist. :smiley:
Das werde ich erstmal so weiter handhaben, sowas kann man ja immer mal noch anpassen.
Sonst komme ich ja nie voran und man brauch ja auch etwas, was man später vielleicht mal noch verbessern kann. :smiley:

Grüße,
Kai

Hallo zusammen,

ich hätte noch eine Frage zu den dynamischen Formularen.

Wie ihr auf dem Screenshot ja gesehen habt, habe ich mir ein Feld Anzahl gesetzt und je nachdem wie hoch der Wert ist, so viele Felder gibt es dann zum auswählen.

Es ist allerdings nicht möglich dynamisch die Funktion RegisterPropertyInteger() aufzurufen, richtig? Diese ist nur im Create() aufrufbar und somit muss ich vorher einen festen Wert anlegen, wieviele Variablen ich anlegen möchte?!

Da gibt es auch keine andere Lösung für, wenn ich das richtig verstanden habe?

Wenn es so ist gebe ich erstmal einen Wert von 99 mit, sowas könnte man dann ja evtl. in IPS 4.2 durch die Listen ersetzen?!

Grüße,
Kai

Ja so ist das zur Zeit eine andere Lösung fällt zumindest mir nicht ein.

Hallo,

@Michael, ich hab das ja so mit deinem Buffer umgesetzt. Die Idee ist auch echt super, aber jetzt wird immer nen Wert überschrieben, da ja das Homebridge Plugin pollt, und sobald zwei Geräte gleichzeitig loslaufen, bekommt ein Gerät auch mal den Wert von dem anderen. Hättest du dafür evtl. einen Lösungsansatz?

Das ist zumindest meine Befürchtung, wenn ich es versuche im Browser zu reproduzieren bekomme ich immer den selben Wert und zwar den richtigen.

Grüße,
Kai

Ich habe es jetzt nicht probiert, aber du hast doch bestimmt irgendeine Art von Ident damit nur die richtige Instanz antwortet.
Dann sollte das hier funktionieren.
$this->{„Buffer“.$irgendwas}
Kannst ja anstatt wie beim Beispiel einfach prüfen ob der leer ist, wenn ja warten, wenn nein dann ist das Ergebnis drin.
Und du solltest in den Device-Instanzen welche die Daten empfangen noch einen ReceiveFilter nutzen, sonst werden immer alle angesprochen.
Michael

Ich hab das ganze jetzt auch mal in IPS mitgeloggt, anscheinen passiert es echt im IPS PHP.
Die beiden Werte kommen aber aus der selben Instanz.

Also müsste ich sowas mache:


  $this->SendDataToParent(json_encode(Array("DataID" => "{78487FC0-53EC-4C53-A472-D64772FB341D}", "Typ" => "State",  "Result" => $result)));

  $this->SendDataToParent(json_encode(Array("DataID" => "{78487FC0-53EC-4C53-A472-D64772FB341D}", "Typ" => "Brightness",  "Result" => $result)));

Und im Splitter:


public function ForwardData($JSONString) {
    $data = json_decode($JSONString);
    $this->Buffer = utf8_decode($data->Result);
    $this->SetReplyEvent = true;
    return true;

Das Ganze irgendwie auf den Typ abfragen und mit dem Typen in den Buffer schreiben und beim ausgeben prüfen ist es vom richtigen Typ, wenn ja, dann gebe es aus, sonst nicht.
Wie würde ich das dort denn richtig in den Buffer schreiben?

EDIT: Oh man ist ja schon spät… :smiley:

Einfach $data komplett rein und dann im Hook abfragen?

Oder den Buffer so aufbauen:

$this->SetBuffer("Device Name Brightness", "34");
$this->SetBuffer("Device Name State", "1");

Und beim Ausgeben nur löschen, wenn er wirklich ausgegeben wurde?

Grüße,
Kai

Hallo Michael,

ich glaube ich habs. :slight_smile:

Ich habe das nun so gemacht:

Im Splitter


  public function ForwardData($JSONString) {
    $data = json_decode($JSONString);
    $this->SetBuffer($data->Device." ".$data->Typ, $data->Result);
    //$this->Buffer = utf8_decode($data->Result);
    //$this->SetReplyEvent = true;
    return true;
  }

Und als Beispiel in der Lightbulb Instanz:


$this->SendDataToParent(json_encode(Array("DataID" => "{78487FC0-53EC-4C53-A472-D64772FB341D}", "Typ" => $variable, "Device" => $name, "Result" => $result)));

Daraufhin kamen zumindest schon Mal die richtigen Werte zu der richtigen Variable. :slight_smile:
Aber es gab nun das Problem, dass die Werte nicht zur richtigen Zeit abgefragt wurden, bzw. manchmal wurden Anfragen verschluckt. :banghead:

Ich habe nun mal den WaitForResponse Block rausgenommen und siehe da es funktioniert. :slight_smile:
Nun werde ich das ganze mal mit mehreren Geräten testen.

Grüße,
Kai

Hallo Kai,

vielen Dank für das Modul und das Teilen - das ist ja mal ein Einstieg in IPS!:slight_smile:

Folgende Idee:
Ich meine Du hast im IPS selbst alle Daten um die config-Datei daraus erstellen zu lassen?

Wenn das stimmt:

  • Per Skript die config-Datei erstellen
  • Homebridge stoppen
  • Datei ersetzen
  • Homebridge wieder starten
    …sollte - wenn das so möglich ist - viele Frage zur Konfiguration überflüssig machen…

Joachim

Hallo Joachim,
das wollte ich als nächstes sowieso tun. :slight_smile:

Hast du das Modul getestet?

Grüße,
Kai

Gesendet von iPhone mit Tapatalk

…leider noch nicht - nur so weit vorbereitet wie es zeitlich passte, aber ich habe die Diskussion gesehen…[emoji6]

Mich würde interessieren, ob du die selben Probleme hast, bei mir läuft es einwandfrei.

Grüße,
Kai

Gesendet von iPhone mit Tapatalk