FHT Anbindung im Webfront

Hallo ihr lieben Leute, ich habe mal eine frage zu den Heizungsreglern im Webfront. Ich habe es jetzt hin bekommen das ich die Temperaturenleiste angezeigt bekomme, wenn ich einen Wert anklicke wird er auch ausgeführt, aber ich bekomme keine Bestätigung das ich den Wert ausgewählt habe, erst wenn die Temperatur vom Regler übernommen wird, färbt sich der BUtton blau. Das er sich dann erst blau färbt finde ich sinnig, aber gibt es nicht eine Möglichkeit, das er mir kurz anzeigt das der Wert ausgewählt wird, Z.B das der Button kurz aufleuchtet oder so ?! Hat einer vlt eine Idee, Danke schon mal …

Von welchen Heizungsreglern redest Du. ?

Meinst Du das Profil von den FHTs.

Für die FHT solltest Du Dir eine Variable für den Sollwert erstellen, die Dir den zuletzt gewählten Wert anzeigt, und dann per Skript die Variable aktualisiert und der FHT den neuen Sollwert übergibt.

Anleitung
- Neues Skript unterhalb der FHT-Instanz erstellen und den unten angegebenen Inhalt hineinkopieren.

  • Float-Variable unterhalb der Instanz erstellen mit Variablenprofil ~Temperature.FHT und dem soeben erstellten Skript als Aktionsskript.
  • Skript und Variable Target Temperature verstecken.
<?php
    $parentID = IPS_GetObject($IPS_SELF);
    $parentID = $parentID['ParentID'];
    
    SetValueFloat($IPS_VARIABLE, $IPS_VALUE);
    FHT_SetTemperature($parentID, $IPS_VALUE);
?>

Im Bild heißt die Variable Solltemperatur.

FHT-Sollwert-Variable.png

Eine kleine Erweiterung für das Script von Horst. Mit der Änderung wird die Variable Solltemperatur im Webinterface, bei Änderungen der Temperatur an der FHT, richtig gesetzt.

Das Skript muss noch zusätzlich bei Veränderung der Variable Target Temperature aufgerufen werden.

<?
$parentID = IPS_GetObject($IPS_SELF);
$parentID = $parentID['ParentID'];

if ( IPS_GetName($IPS_VARIABLE) == 'Target Temperature'){
	$ChildrenIDs = (IPS_GetChildrenIDs($parentID));
	$I = 1;
	while(( IPS_GetName( $ChildrenIDs[$I]) <> 'Solltemperatur' ) and ( $ChildrenIDs[$I] <> 0)){
		$I++;
	}
	if ( $ChildrenIDs[$I] == 0 ){ // wenn die Variable 'Solltemperatur' nicht gefunden wurde
	   echo 'Variable Solltemperatur nicht gefunden ';
	}
	else{
		SetValueFloat( $ChildrenIDs[$I], $IPS_VALUE); // Variable 'Solltemperatur' schreiben
	}
}
else {
	SetValueFloat($IPS_VARIABLE, $IPS_VALUE);
	FHT_SetTemperature($parentID, $IPS_VALUE);
}
?>

Wunderbar. In folgender Variante darf Target Temperature von der Instanz dann noch benannt worden sein, wie man will, da ich hier mit dem Ident der Statusvariable arbeite. IPS_GetVariableIDByName erspart Dir übrigens die Schleife über alle Unterobjekte.

<?php
$parentID = IPS_GetObject($IPS_SELF);
$parentID = $parentID['ParentID'];

if ($IPS_VARIABLE == IPS_GetStatusVariableID($parentID, "TargetTempVar"))
{
    $solltemperaturID = @IPS_GetVariableIDByName("Solltemperatur", $parentID);
    if ($solltemperaturID === false)
    {
        echo 'Variable "Solltemperatur" nicht gefunden.';
    }
    else
    {
        SetValueFloat($solltemperaturID, $IPS_VALUE);
    }
}
else
{
    SetValueFloat($IPS_VARIABLE, $IPS_VALUE);
    FHT_SetTemperature($parentID, $IPS_VALUE);
}
?>

Hallo

wo sind eigentlich diese Variablen (z.B. TargetTempVar) zu finden.
In der Suche gibt’s nur einen Hinweis in der Doku finde ich dazu gar nichts.

gruß
astrastar

Die bekommst Du folgendermaßen:

print_r(IPS_GetStatusVariableIdents(Instanz-ID));

Danke, wenn man weis nach was man suchen muss :loveips:
dann findet man es auch in der Doku.

gruß
astrastar

Hallo Horst,

dein Skript verhält sich leider nicht wie erwartet und ich habe null Ahnung warum. Ich kann im WebFront oder am FHT80B die Solltemperatur verändern, diese wird dann auch im Target Temperature (Pending) angezeigt, aber als Target Temperatur kommt ein viel kleinerer Wert an, der sich dann minütlich um 0,5°C erhöht, warum auch immer. Hast du eine Idee woran das liegen könnte. ich bin mir eigentlich sicher alles 100% nach deiner (guten) Anleitung eingerichtet zu haben. Wenn du mehr Angaben oder Screenshots brauchst, sage bitte kurz bescheid.

dto. hier.

Denke mal nicht das das was mit dem Script zu tun hat.
Das macht der FHT von selbst so.
Wobei mir dieses Feature erst seit umstellung auf IPS bemerke.

gruß
bb

Das liegt am Slider, der gibt den Wert immer zurück wenn man die Felder „<>“ getätigt. Dann wird die Temperatur immer um einen Schritt ( 0.5 C° ) erhöht an die FHT gesendet. Ich habe mir z.B. einen eigenen Silder projektiert, mit den Temperaturen 16,18,19,20,21,22 C°, dadurch entfallen die Tasten „<>“.

Gruß Sven

Nein, daran liegt es nicht. jetzt spinnt meine FHT80B total, seit dem ich das Skript darauf angewendet habe. Ich habe nun alles rückgängig gemacht und sogar auch die Batterien mal aus der FHT raus genommen … aber der Sollwert läuft nun immer noch wohin er will, ohne das ich überhaupt etwas an die FHT sende… ich versteh jetzt gar nichts mehr …:confused:

Das Skript ist mit der aktuellen Beta nicht mehr nötig, da das Heizungsmodul auch die FHT regeln kann. Zu Problemen mit der FHT kann ich nichts sagen, das Skript benutzt nur FHT_SetTemperature. Ich selber setze auch keine FHT ein, sondern Funkdimmersteckdosen mit Heimeier-Ventilen.

@ Horst,

könntet Ihr zum Heizungsmodul ein paar Details rauslassen ?

Ich möchte nicht unbedingt die Beta einspielen, um es mir anzuschauen.

Wäre das möglich ?

Gruss
B71

Man kann eine Temperaturvariable einstellen, für die dann Instanzen an/aus geschaltet werden bzw. Geräte mit eigener Funktionalität wie die FHTs einfach mit deren Befehl zum Temperatur eingestellt werden. Mehrere Instanzen sind möglich, da man ja schließlich mehrere Heizkörper haben kann. Selbiges gilt für Vorrang-Variablen, da man mehrere Fenstersensoren haben kann, die dann das Heizen blockieren. Das Handler-Skript ist nur nötig, wenn man keine ab Werk unterstützte Instanz schalten will.

Hallo obicom,

ich denke das durch die < > eine Menge an Temperaturänderung in der FHZ-Queue liegen die nach und nach an den FHT gesendet werden.

Hier hilft glaube ich nur ein Neustart von IPS.

Hallo Werner,

das wird es wohl gewesen sein. hast du eine Idee, wie man das vermeiden kann?
Ein Weg wäre wäre natürlich nur 5 Schritte zu definieren. Besser wäre natürlich wenn die <> nicht gleich den Wert ändern würden, sondern nur die Skala verschieben würden und erst beim Anklicken des Werts die Var setzen.

obicom,

Die feine Einteilung dachte ich mir am Anfang auch, es stellt sich aber die Frage für was.

Letztendlich bin ich nun soweit das ich nur noch 3 Werte an die FHT senden will.

AUS | NACHT | TAG

Dahinter verstecken sich die Temperaturwerte

5,5 | 17 | 22

mehr brauche ich nicht, ist aber jeden seine Sache, aber ich denke mit 4-5 Werten sollte jeder auskommen.

Für die Sache das die < > keine Werte senden ist Horst der richtige Ansprechpartner.

@obicom

ich hab das weiter vorne vorgestellte Script nochmal modifiziert, so dass die FHT Queue nicht bei jeder Änderung der Solltemperatur mit einem SetTemperatur „beschossen“ wird. Dadurch kannst Du auch im WebFront ein Profil verwenden was die „<>“ anzeigt und trotzdem nicht bei jedem Klick ein Update Richtung FHT schickt. Der „Nachlauf“-Effekt wird dadurch vermieden.

Die Änderung ist ganz einfach, beim Klick ändert man zunächst nur die Variable und startet einen Timer (z.B. 10 Sec). Erst wenn der Timer abgelaufen ist, sendet man ein Update in Richtung FHT. Wenn Du also deine Einstellung mit max. 10 Sec Pause zwischen den Klicks erledigst, dann wird genau ein Update geschickt.

Hier der Code:


<?
$parentID = IPS_GetObject($IPS_SELF);
$parentID = $parentID['ParentID'];
if( $IPS_SENDER == "TimerEvent" ) {
    // timer abgelaufen
    IPS_SetScriptTimer($IPS_SELF, 0); // timer aus
    $solltemperaturID = IPS_GetVariableIDByName("Solltemperatur", $parentID);
    $value = GetValueFloat( $solltemperaturID );
    FHT_SetTemperature($parentID, $value);
} else {
    // wenn IPS_VARIABLE gesetzt ist, dann war das Var Event der Trigger
    if ($IPS_VARIABLE == IPS_GetStatusVariableID($parentID, "TargetTempVar"))
    {
       // die status var des FHT wurde geändert (jemand hat am Rad gedreht)
       $solltemperaturID = IPS_GetVariableIDByName("Solltemperatur", $parentID);
       if ($solltemperaturID === false)
       {
            echo 'Variable "Solltemperatur" nicht gefunden.';
       }
       else
       {
          // custom var value anpassen
          SetValueFloat($solltemperaturID, $IPS_VALUE);
       }
    }
    else // sonst action script per var veränderung
    {
        // wert setzen
        SetValueFloat($IPS_VARIABLE, $IPS_VALUE);
        // und timer starten
        IPS_SetScriptTimer($IPS_SELF, 10);
    }
}
?>

Gruß steve

Super, danke für die Anpassung!

Vielleicht eine dumme Frage, aber muss man das Script pro FHT erzeugen oder kann man ein zentrales Script nehmen und den gleichen Effekt erziehlen?

Danke & CIAo