Rolladen Status-Buttons mit eigendynamic

Hallo,

irgendwie spielt mir das neue Webfrontend einen Streich.

Ich habe für den Homematic Rolladenaktor, statt des 0-100% Balkens, vier versichiedene Stati von „Offen“, über „Beschattung“, „Zu mit Lüftungsschlitzen“ und „ganz geschlossen“ definiert.

Nun habe ich ein sehr interessantes Verhalten.
Klicke ich auf den Butten offen, fährt der Rolladen hoch und zeigt danach auch den Butten „offen“ als aktiv an, alles gut.

Klicke ich jedoch auf Beschattung fährt der Rolladen zwar in die gewünschte Position, zeigt im Webfrondend aber „Zu mit Lüftung“ als aktiv an.

Was habe ich hier falsch gemacht?

Im Anhang die Screenshots des Webfrontends und der Konfig.

Danke für Eure Unterstützung!
Micha

Rolladen-Variablen-Definition.jpg

Rolladen-Schliess-Stati.jpg

Du hast dein Variablenprofil mit keinem Aktionscript verknüpft.

Hallo Rainer,

dazu 2 Fragen

  1. Warum muss ich das denn, wenn wohl automatisch Buttons aktiv gesetzt werden?

  2. ich habe das versucht und immer gleich zwei Fehlermeldungen bekommen.
    Vorallem die Meldung der nur-Lesen Variable irritiert mich, ich kann sie nämlich nicht ändern.

Du musst auf die Instanz schalten und nicht auf die Variable.

hmmm,
das ist das Skript, und ich bekomme in Zeile 4 bereits die erste Fehlermeldung.

<?php
if ($IPS_SENDER == "WebFront")
{
 SetValue($IPS_VARIABLE, $IPS_VALUE);
}
switch($IPS_VALUE) {

  case 0:
    HM_WriteValueFloat(44434 /*[Haus-EG\Küche\Rolladen]*/,"STATE",0.0);
  break;
  case 0.15:
   HM_WriteValueFloat(44434 /*[Haus-EG\Küche\Rolladen]*/,"STATE",0.15);
  break;
  case 0.45:
   HM_WriteValueFloat(44434 /*[Haus-EG\Küche\Rolladen]*/,"STATE",0.45);
  break;
  case 1:
   HM_WriteValueFloat(44434 /*[Haus-EG\Küche\Rolladen]*/,"STATE",1.0);
  break;
 }
?>

Eine eigene Integervariable, hast Du dir aber schon angelegt mit deinem Profil.

44434 ist das deine Instanz oder ist das deine Statusvariable.

um ehrlich zu sein ich habe das Prinzip des ganzen noch nicht richtig verstanden, 44434 ist die Instanz.

Nein ich habe keine eigene Variable angelegt, ich wollte direkt mit der Homematic Level Variable (Float) arbeiten und der nur ein anderes Profil zuweisen.

OK, wenn ich eine eigene Variable anlege und nicht die Homematic Variable verwende, dann funktioniert es, dann muss ich aber diesen Aufwand für jedes Fenster extra treiben, mit Variable, Skript, etc …

Einfacher wäre doch, wenn ich der Homematic Variable „LEVEL“ einfach ein anderes Profil zuweisen könnte.

ausserdem wird der Status nicht angepasst, wenn der Rolladen von Hand oder einem anderen Skript betätigt wird. Wie kann man das denn in Griff bekommen?

so jetzt bin ich dem ganzen Thema mal auf den Grund gegangen,
Ergebnis:

Ich sage dem HM Rolladenaktor fahre auf den Wert 0,45 was macht er, er fährt auf den Wert 0,44. Sage ich fahre auf 0,15 fährt er auf 0,14.
Und dies bewirkt, dass im Webfrontend die falschen Buttons aktiviert werden, nämlich jeweils der für den kleineren Wert.

Wo kommt jetzt diese Differenz von 0,01 her ???

Ich habe ähnliches Umgesetzt, arbeite allerdings mit definierten %-Schritten:
0;20;40;60;80;100

Um das Rundungsverhalten in den Griff zu bekommen habe ich jeweils Bereiche definiert. Dabei gilt

  • „Anzeige“ ist die Visualisierung im Webfront
  • „Ist“ ist der aktuelle Aktuator-Status der Angefahren werden soll
  • „Mapping“ ist der Wertebereich, der beim Auslesen des Aktor-Level zur zugeordneten Webfront-Anzeige führt.

// Anzeige Ist Mapping (Unten-Oben)
// Zu 0.0 0.0-0.1
// 20 0.3 0.1-0.4
// 40 0.5 0.4-0.6
// 60 0.7 0.6-0.75
// 80 0.8 0.75-0.9
// Offen 1.0 0.9-1.0

Das Script besteht damit aus 2 Teilen:
a) Aufruf über Webfront führt zu Setzen des Aktor-Level
b) Aufruf über Aktor-Working == false führt zu auslesen des Aktor-Level und setzen der Integer-Visualisierungs-Variable

Hier das Script, welches ich für jeden Aktor angelegt habe:


// Anzeige  Ist       Mapping (Unten-Oben)
// My_Level SetLevel
// Zu       0.0       0.0-0.1
// 20       0.3       0.1-0.4
// 40       0.5       0.4-0.6
// 60       0.7       0.6-0.75
// 80       0.8       0.75-0.9
// Offen    1.0       0.9-1.0

/***************************************/
/* Ab hier Konfigurieren               */

$id_aktor = 34525 /*[Homematic\Jalousie 4]*/;
$id_MyLevel = 10766 /*[Homematic\Jalousie 4\MyLevel]*/;

/* Bis hier Konfigurieren              */
/***************************************/

//* Aktuellen Level des Aktor auslesen
$id_Level = @IPS_GetObjectIDByName("LEVEL", $id_aktor);
$Level = GetValue($id_Level);

//Webfront-Eingabe einlesen und Jalousie ansteuern
if ($IPS_SENDER == "WebFront") {
   SetValue($IPS_VARIABLE, $IPS_VALUE);
   
    //"MyLevel" wird der über Webfront eingelesene Wert übergeben
    $MyLevel = GetValue($id_MyLevel);

    //Zu setzender LEvel "SetLEvel" wird lokal bestimmt
    $SetLevel = 0.0;
    if ($MyLevel == 20)
        $SetLevel = 0.3;
    if ($MyLevel == 40)
        $SetLevel = 0.4;
    if ($MyLevel == 60)
        $SetLevel = 0.7;
    if ($MyLevel == 80)
        $SetLevel = 0.8;
    if ($MyLevel == 100)
        $SetLevel = 1.0;

    //Aktor wird mit berechnetem "SetLevel" angesteuert
    HM_WriteValueFloat ($id_aktor, "LEVEL", $SetLevel);

} /*Webfront*/
else
{ //Else-Zweig soll ausgeführt werden, wenn Script durch Trigger "Working == False" gestartet wird
    //Lokale Berechnung von $MyLevel
    $MyLevel = 0;
    if ($Level > 0.1)
        $MyLevel = 20;
    if ($Level > 0.4)
        $MyLevel = 40;
    if ($Level > 0.6)
        $MyLevel = 60;
    if ($Level > 0.75)
        $MyLevel = 80;
    if ($Level > 0.9)
        $MyLevel = 100;

    //Berechneter MyLevel wird geschrieben
    SetValueInteger($id_MyLevel, $MyLevel);

} /*else Webfront*/
?>

Hallo blopp,

danke für das Skript, ich hatte jetzt ähnliches mit 2 Skripten umgesetzt, aber Deines ist etwas eleganter, werde es für meine Buttons anpassen.

Gruß
Micha

Moinsen!

Hole das hier gerade noch einmal hervor, denn ich habe das Script oben nun auch für zwei Aktoren im Einsatz.
Habe die Steuerzeiten entsprechend angepasst und funktioniert auch recht gut.

Allerdings nur, solange ich die Jalousien aus einer definierten Position fahre, also z.B. von Geöffnet auf 75%.
Wenn sie sich gerade irgendwo befinden kommt es zu ganz zufälligen Positionen…
Denke mal das es mit den unterschiedlichen Geschwindigkeiten bei auf und ab zusammenhängt.

Daher nun die Überlegung ob man vor der eigentlichen Position erst einmal komplett hoch, bzw. runter fährt!?
Nur wie könnte man das mit dem Script von blopp umsetzen?

Danke euch!


ups, sehe grade bin im Webfront Forum gelandet, passt ja ned so ganz, kann man das verschieben!?