HA-Bridge gemeinsam mit IP-Symcon betreiben

Du nimmst einen bool Wert und prüfst dann auf einen String (‚off‘).
Wie soll das funktionieren?
f($state == „on“ and $Imac == „off“)
Richtig:
f($state == „on“ and $Imac == false)
Michael

Case gibt es nur als Teil von switch
Da fehlt also switch mit der Bedingung siehe Dokumentation switch oder kleines Beispiel zu switch.

@Fonzo:
In Post 13 siehst du das er Switch nutzt.
Er hat nur einen Auszug gepostet.
Michael

$imac == „off“

Geht nicht da der Wert der Variable true oder false ist.

Wenn Dir das aber einfacher fällt nicht mit dem eigentlichen Wert zu arbeiten sondern dem was Du im Webfront angezeigt bekommst, d.h. das im Variablenprofil zugeordnet ist dann kannst Du
GetValueFormatted nutzten

In dem Fall ist dann


$imac = GetValueFormatted(12345);

Ein String, der den Wert wiedergibt, der beim Variablenprofil zugewiesen ist. Das könnte dann also auch so was wie „aus“ sein.

Ich habe es nun mit „false“ versucht aber der Case wird trotzdem immer ausgeführt.

Wie hast Du das denn genau geschrieben? Die Tücke ist im Detail.


$imac == false

prüft auf den Wert false

$imac == “false“

Würde auf einen String prüfen der false heist


$Imac === false

Geht auch.

Kannst Du noch mal Dein Skript komplett posten wie es zur Zeit aussieht?

Hi Fonzo

Ich habe einfach dein Script geändert. Unten kommen dann nur weitere „case“

if(isset($_GET[„state“]) && isset($_GET[„light“]))
{
IPS_LogMessage(„WebHook HA-Bridge“, print_r($_GET, true));
$state = $_GET[„state“];
$Imac = GetValueBoolean(38425);
switch ($_GET[„light“]) {

case „Steckdose_1“: // IMac schalten

if($state == "on" and $Imac == "false")
{
    SetValue(38425, true); // Variable IMac schalten   
    IPS_RunScript(11357); // Action Script IMac aktivieren  
}

break;

Falsch: $Imac == „false“
Richtig: $Imac == false
Aber das stand alles schon weiter oben!

Michael

Vielen Dank für eure Geduld und Mühen!!! Jetzt funktioniert’s

Na ja dann viel Spass beim Nutzen. Du kannst ja wenn sich das im Alltag als funktionsfähig erwiesen hat, wenn Du willst nochmal eine Kurzanleitung schreiben und Screenshots der Einstellungen posten bzw. schreiben an welchen Stellen es Stolpersteine gab. Dann kann zumindest jemand, der das Gleiche machen will und vor der selben Herausforderung steht, das schneller einrichten.

Hallo,

ich bin auf diesen Thread gestossen da ich ähnliches problem habe und habe mich nach der Anleitung von Fonzo gehalten.
Denoch habe ich vermutlich noch eine Kleinigkeit übersehen da die Geräte nicht richtig geschlten werden.
Vor allem beim Script habe ich noch meine Bedenken und würde mich sehr freuen wenn mal ein Profi drüberschauen könnte…

Script:

<?
if(isset($_GET[„state“]) && isset($_GET[„light“]))
{
IPS_LogMessage(„hook habridge“, print_r($_GET, true));
$state = $_GET[„state“];
switch ($_GET[„light“]) {

case „WZ-Licht (Couch)“:

if($state == "on")
{
    HM_WriteValueBoolean(14738, "STATE", true); // Objekt ID ergänzen
}
else
{
    HM_WriteValueBoolean(14738, "STATE", false); // Objekt ID ergänzen
}
break;

case „WZ-Licht (Vitrine)“:
if($state == „on“) {
HM_WriteValueBoolean(20131, „STATE“, true); // Objekt ID ergänzen
}
else
{
HM_WriteValueBoolean(20131, „STATE“, false); // Objekt ID ergänzen
}
break;
case „WZ-Rollladen (Terrasse)“:

if($state == "on")
{
    HM_WriteValueBoolean(15092, "STATE", true); // Objekt ID ergänzen
}
else
{
    HM_WriteValueBoolean(15092, "STATE", false); // Objekt ID ergänzen
}

break;

//folgender Schalter mit Dimmer noch nicht vorhanden!

case „WZ-Licht (Decke)“:
if($state == „on“) {
HM_WriteValueBoolean(00000, „STATE“, true); // Objekt ID ergänzen
}
else
{
HM_WriteValueBoolean(00000, „STATE“, false); // Objekt ID ergänzen
}
break;

}
}
elseif(isset($_GET[„intensity“]) && isset($_GET[„light“]))
{
$intensity = $_GET[„intensity“];
switch ($_GET[„light“]) {

case „WZ-Licht (Decke)“:
//SetValue(00000, $intensity);
$intensity = $intensity/100;

HM_WriteValueFloat(00000, "LEVEL", $intensity); //Gerät auf x% dimmen
 if($intensity &gt; 0)
{
    SetValueBoolean(00000, true);
}
else
{
    SetValueBoolean(00000, false);
}

break;

}
}
else
{
echo „Das Skript kann nur durch einen Webhook aufgerufen werden“;
}
?>

Ja da sind noch ein paar Dinge anzupassen, sonst kann das so noch nicht in der Form funktionieren.
Als erstes ist grundsätzlich zunächst mal zu testen, wenn man den Webfront öffnet, ob sich die angelegten Instanzen aus dem Webfront wie gewünscht schalten lassen, das ist die Grundvoraussetzung dafür, dass es auch aus der HA-Bridge funktioniert.

Des weiteren willst Du aus der HA-Bridge ja mehrere Geräte schalten und diesen einen Befehl an IP-Symcon übergeben. Zur Zeit hast Du aber unter Target Item stehen


http://192.168.2.31:3777/hook/habridge?state=on

Da Du aber mehrere Geräte schalten willst, musst Du noch ein weiteres Unterscheidungsmerkmal übergeben, damit dann IP-Symcon den Befehl auch einem Gerät zuordnen kann. Gesetzt den Fall Du nutzt sowohl Licht als auch Rollläden würde ich dann also noch einen Parameter für type übergeben und einen Parameter für den Gerätenamen

als Beispiel:


http://192.168.2.31:3777/hook/habridge?state=on&name=coach&type=light

Im Unterschied zu dem jetzigen Eintrag bei Dir in der HA-Brigde wird also noch
?state=on&name=coach&type=light
übergeben.

Ja das Skript müsstest Du an Deine Werte die Du übergibst anpassen


<?php

if(isset($_GET["state"]) && isset($_GET["type"]) && isset($_GET["name"])) // prüft ob alle Parameter übergeben worden sind
{
IPS_LogMessage("hook habridge", print_r($_GET, true));
$state = $_GET["state"];
switch ($_GET["name"]) {

case "coach":

if($state == "on")
{
    RequestAction(49451, true); // 49451 Objekt ID der Instanz WZ Coach auf den Wert true setzten
}
else
{
    RequestAction(49451, false); // 49451 Objekt ID der Instanz WZ Coach auf den Wert false setzten
}
break;
case "vitrine":
if($state == "on") {
    RequestAction(39932, true); // 39932 Objekt ID der Instanz WZ Coach auf den Wert true setzten
}
else
{
    RequestAction(39932, false); // 39932 Objekt ID der Instanz WZ Coach auf den Wert false setzten
}
break;

// .. weitere Geräte Namen ergänzen, darauf achten das der Name bei Target Item in der url mit dem Namen im Skript übereinstimmt

}
}
else
{
echo "Das Skript kann nur durch einen Webhook aufgerufen werden";
}


Wichtig ist das ein RequestAction genutzt wird, da der Gerätetyp ein anderer ist als in dem Skript das Du kopiert hast, somit funktioniert das dann auch bei der Instanz, die Du schalten willst. Ansonsten must Du das Skript dann um die weiteren Gerätenamen und Instanzen noch ergänzen.

Zunächst würde ich aber mal an Deiner Stelle testen ob sich die beiden Lampen dann so weit schalten lassen. Dazu kannst Du ja vielleicht einen kurze Rückmeldung geben. Wenn das funktioniert kannst Du dann das Skript um die Rollläden bzw. weitere Geräte erweitern.

Bei den Rollläden hast Du das „Problem“ das die HA-Bridge ja Lampen emuliert, es gibt also kein auf und zu nur ein und aus.

Hallo Fonzo,
vielen Dank für deine Hinweise!

neues Script:

<?php

if(isset($_GET["state"]) && isset($_GET["type"]) && isset($_GET["name"])) // prüft ob alle Parameter übergeben worden sind
{
IPS_LogMessage("hook habridge", print_r($_GET, true));
$state = $_GET["state"];
switch ($_GET["name"]) {

case "coach":

if($state == "on")
{
    RequestAction(14738, true); // 14738 Objekt ID der Instanz WZ Coach auf den Wert true setzten
}
else
{
    RequestAction(14738, false); // 14738 Objekt ID der Instanz WZ Coach auf den Wert false setzten
}
break;
case "vitrine":
if($state == "on") {
    RequestAction(20131, true); // 20131 Objekt ID der Instanz WZ Coach auf den Wert true setzten
}
else
{
    RequestAction(20131, false); // 20131 Objekt ID der Instanz WZ Coach auf den Wert false setzten
}
break;

// .. weitere Geräte Namen ergänzen, darauf achten das der Name bei Target Item in der url mit dem Namen im Skript übereinstimmt

}
}
else
{
echo "Das Skript kann nur durch einen Webhook aufgerufen werden";
}

Die Objekt-ID’s habe ich geändert auf die ID des Schalters (s. Anhang), leider noch ohne Funktion.
Gruß Yansop

Screen für die Objekt-ID’s vergessen…

Lassen sich denn die Geräte grundsätzlich schalten, über den Webfront?

Wenn Du nur ein Skript anlegst mit


<?php
RequestAction(14738, true); // 14738 Objekt ID der Instanz WZ Coach auf den Wert true setzten

und das ausführst schaltet dann die Lampe an?


<?php
RequestAction(14738, false); // 14738 Objekt ID der Instanz WZ Coach auf den Wert false setzten

schaltet dann die Lampe aus?

Kannst Du mal das Skript so anpassen das IPS_Logmessage am Anfang steht


<?php
IPS_LogMessage("hook habridge", print_r($_GET, true));
if(isset($_GET["state"]) && isset($_GET["type"]) && isset($_GET["name"])) // prüft ob alle Parameter übergeben worden sind
{



Wenn Du die URL, die Du in der HA-Bridge eingetragen hast, in einen Browser eingibst, erscheint dann eine Mitteilung im Log wenn Du bei Status auf Prüfen drückst?

Falls hier was ankommen sollte, funktioniert das Schalten dann nicht wenn Du den Tastendruck in der HA-Bridge testest oder wenn Du auf dem Harmony Hub eine Taste drückst?

Hallo Fonzo,

ganz lieben dank für dein Auschlussverfahren, Dank deiner Hilfe läuft alles wie gewünscht!
Noch eine Frage: wie muss das folgende aktuelle Script dann ausschauen, wenn der Lichtschalter mit Dimmer vorhanden ist?
Und die Einstellungen für den Dimmer in der habridge so wie im Anhang?

<?php
if(isset($_GET["type"]) && isset($_GET["name"]) && isset($_GET["state"]))
{
IPS_LogMessage("hook habridge", print_r($_GET, true));
$state = $_GET["state"];
switch ($_GET["name"]) {

case "rollladenterrasse":

if($state == "on")
{
    RequestAction(15092, false);
}
else
{
    RequestAction(15092, true);
}
break;
case "lichtvitrine":
if($state == "on") {
    RequestAction(20131, true);
}
else
{
    RequestAction(20131, false);
}
break;
case "lichtcouch":
if($state == "on") {
    RequestAction(14738, true);
}
else
{
    RequestAction(14738, false);
}
break;

// ...Lichtschalter mit Dimmer noch nicht im Einsatz!

case "lichtzimmer":
if($state == "on") {
    RequestAction(00000, true);
}
else
{
    RequestAction(00000, false);
}
break;

}
}
else
{
echo "Das Skript kann nur durch einen Webhook aufgerufen werden";
}

Dann liegt in der Regel eine Variable in IP-Symcon vor vom Typ Integer mit dem Variablenprofil ~Intensity.100, kann aber auch in Einzelfällen vom Typ Float sein und ein eigenes Variablenprofil haben.
In dem Fall ist dann das Skript nochmals zu erweitern. Im Kopf des Skripts folgendes austauschen


<?php
IPS_LogMessage("hook habridge", print_r($_GET, true));

if((isset($_GET["state"]) || isset($_GET["level"])) && isset($_GET["type"]) && isset($_GET["name"])) // prüft ob alle Parameter übergeben worden sind
{
if(isset($_GET["state"]))
{
    $state = $_GET["state"];
}
else
{
    $state = "unkown";
}
if(isset($_GET["level"]))
{
    $level = $_GET["level"];
}
else
{
    $level = -1;
}

switch ($_GET["name"]) {

case "coach":

if($state == "on")
{
    RequestAction(36449, true); // Objekt ID der Variable für STATE auf den Wert true setzten
}
elseif($level > -1)
{
    RequestAction(36797, $level); // Objekt ID der Variable für LEVEL auf den Wert $level setzten
}
elseif($state == "off")
{
    RequestAction(36449, false); // Objekt ID der Variable für STATE auf den Wert false setzten
}
break;
// .....

Neu ist in dem Fall das entweder ein state übergeben wird („on“/„off“) oder wenn etwas gedimmt wird statt dessen level als Zahl. Die Zahl wird dann von IP-Symcon an das Gerät als einzustellender Wert übergeben.

Es ist also bei einem Gerät, das man sowohl ein/aus und dimmen kann dann noch als Bedingung


elseif($level > -1)
{
    RequestAction(36797, $level); // 36797 Objekt ID der Variable für LEVEL auf den Wert $level setzten
}

zu ergänzen.

Beim Dimmen wird ja anders als bei ein/aus kein fester Wert übergeben, also auch nicht „on“ oder „off“.
Statt dessen wird von der HA-Bridge selber der Wert weitergegeben, den die HA-Bridge selber von dem Eingabegerät, das der HA-Bridge den Befehl schickt, erhalten hat.

Passend zu der Erweiterung im Skript in IP-Symcon, bei dem auf level geprüft und ausgelesen wird, müsste der Eintrag bei einem Gerät in der HA-Bridge dann z:B. so aussehen


http://192.168.2.31:3777/hook/habridge?name=coach&type=light&level=${intensity.percent}

hierbei ist ${intensity.percent} ein fester unveränderlicher Platzhalter in der HA-Bridge, für der Wert der Intensität in Prozent (also 0-100).

Vielen Dank für die Erklärungen.
Den Taster werde ich morgen einbauen und hier berichten.

Gruß Yansop.

Hallo Fonzo,
Wie versprochen meine Rückmeldung: der Dimmer von Rademacher ist für mich leider nicht zu gebrauchen, da dieser meine Lampe nicht korrekt regelt.
Eine Frage: kann mein Rolladen in den Hausteuerungstasten der Logitech auch mit den Dimmertasten bewegt werden?
Also Pfeil rauf = Rolladen rauf und Pfeil runter = Rolladen runter?
Wie schaut hierfür das Script aus?

Gruß Yansop

Was regelt denn da nicht korrekt, der Dimmer selber, also auch die Ansteurung aus dem Webfront direkt oder gibt es Probleme in Kombination mit der HA Bridge?

Das weis ich ehrlich gesagt nicht das hängt davon ab wie das Gerät die Befehle verarbeitet. Da würde ich mal im Thread zu Rademacher fragen. Das Problem wird ja sein, dass die Harmony eher kontinuierlich Werte sendet, wenn man die Taste gedrückt hält, ob das dann mit dem jeweilgen Rollladen funktioniert hängt vom System ab. In der Regel bekommt so ein System ja gleich den Endwert angegeben also 75 %. Frag doch mal im Rademacher Thread, vielleicht gibt es da ja jemand der auch seine Rollläden über Taster oder auch eine Harmony Remote steuert.