Statusvariable für Dimmer

Hallo HM-Fans,

da ich nun auch zur Fangemeinde von HM gehöre und bereits ein paar Sensoren/Aktoren habe habe ich bezüglich der Dimmer eine Frage.

Der Dimmer liefert ja eigentlich nur die Variable „LEVEL“ über die man den Dimmer steuern kann.

Nun möchte ich für den Dimmer ähnlich wie bei FS20-Dimmern eine Statusvariable AN/AUS haben und nutzen.

Habe mir diesbezüglich ein kleines Skript geschrieben das mir diese Variable inkl. Webfrontbedienung nachbildet.

<?
if($IPS_SENDER == "WebFront")
{
 $int = 0;
   SetValue($IPS_VARIABLE, $IPS_VALUE);
 if($IPS_VALUE) $int = 1|0 ;
   HM_WriteValueFloat(59534 /*[Test\Wohnzimmer neu\Deckenlampe]*/, "LEVEL", $int);
}
 
if($IPS_VARIABLE == 34517 /*[Test\Wohnzimmer neu\Deckenlampe\WORKING]*/) {
 if(GetValue(57716 /*[Test\Wohnzimmer neu\Deckenlampe\LEVEL]*/) > 0) {
    SetValue(51008 /*[Test\Wohnzimmer neu\Deckenlampe\Status]*/, true);
 } else {
    SetValue(51008 /*[Test\Wohnzimmer neu\Deckenlampe\Status]*/, false);
 }
}
 
?>

Das Skript funktioniert auch recht gut, bis auf das ausschalten da ich den LEVEL abfrage und diese verzögert von der CCU kommt.

Getrigger wird das Skript einmal von der LEVEL-Variable und das andere mal aus Webfront um den Dimmer ein und auszuschalten.

Warum ich diesen Thread schreibe ist, hat jemand der HM-Fans eine ähnliche Funktion geschrieben?

Anbei noch ein paar Screenshots der Console und des Webfronts.

Hallo,

hab sowas ähnliches (habs fürs Dashboard gebraucht) seit nem Jahr laufen:


<?
$dimlevel = GetValue(22367 /*[Schlafzimmer\SZ - Stehlampe\LEVEL]*/) * 100;
if ($dimlevel == 0)
          {
 SetValue(32587 /*[Schlafzimmer\SZ - Stehlampe\DIMSTATE]*/,false);
          }
else
      {
 SetValue(32587 /*[Schlafzimmer\SZ - Stehlampe\DIMSTATE]*/,true);
          }
SetValue(26957 /*[Schlafzimmer\SZ - Stehlampe\DIMLEVEL]*/, $dimlevel);
?>

Da php nicht unbedingt mein Freund ist, gehts sicher schöner, aber es funktioniert. :stuck_out_tongue:

Also das Script von chrisu funktioniert bei mir. Allerdings kann man damit -soweit ich das sehe- damit nicht im Webfront den Dimmer ein- und ausschalten.

wgreipl Script habe ich versucht zu übertragen. Leider funktioniert es noch nicht richtig. Es wird weder mir der korrekte Status angezeigt (steht immer auf „AUS“) noch kann ich im Webfront den Dimmer ein- oder ausschalten. Jemand eine Idee? :confused::

<?
if($IPS_SENDER == "WebFront")
{
 $int = 0;
   SetValue($IPS_VARIABLE, $IPS_VALUE);
 if($IPS_VALUE) $int = 1|0 ;
   HM_WriteValueFloat(58700/*[Test\Wohnzimmer neu\Deckenlampe]*/, "LEVEL", $int);
}

if($IPS_VARIABLE == 51580 /*[Test\Wohnzimmer neu\Deckenlampe\WORKING]*/) {
 if(GetValue(30566 /*[Test\Wohnzimmer neu\Deckenlampe\LEVEL]*/) > 0) {
    SetValue(27002 /*[Test\Wohnzimmer neu\Deckenlampe\Status]*/, true);
 } else {
    SetValue(27002 /*[Test\Wohnzimmer neu\Deckenlampe\Status]*/, false);
 }
}

?>

Hast Du das Skript auch als Aktionskript der Statusvariable eingetragen. Ansonsten reagiert es definitiv nicht auf An/Aus.

Nein. Wie mache ich das denn?:frowning:

Wat wollen die alle von mir … :smiley:

Doppelklick Variable, zweite Seite, bei „Eigene Aktion“ auswählen des Scriptes.

Gruß
Bruno

Super. Wieder was dazu gelernt.:wink:

Jetzt stoße ich gleich auf die nächste Hürde. Wenn ich über das Webfront Aus schalte und dann wieder An geht mein Dimmer direkt auf 100%. Wenn ich per Taster direkt Aus und dann wieder An schalte, merkt er sich den vorherigen Wert und dimmt auf diesen wieder hoch.

Kann ich das auch in diesem Script irgendwie umsetzen? Hätte dazu folgende Überlegung:

-Hätte jetzt erstmal eine neue Variabel (level_old) angelegt.
-Dem Script gesagt das wenn Level auf 0 umgeschrieben werden soll -> dann der level-Wert in level_old geschrieben wird.
-Wird jetzt auf der Dimmer wieder über das Webfront eingeschaltet, dann nehme den level-Wert aus level_old

Leider zügeln mich meine php-Kenntnisse in der Umsetzung:o Ein kleiner Ansatz würde mir schon genügen. Danke. :slight_smile:

Den letzten Dimm-Level müßtest Du vorher in einer speratren Variable abspeichern wenn Du diesen nutzen möchtest.

Soll der Dimmer wenn Du ihn in Webfront anschaltest einen definierten Wert erhalten müßt Du nur diese Zeile ändern.

HM_WriteValueFloat(58700/*[Test\Wohnzimmer neu\Deckenlampe]*/, "LEVEL", $int);

Anstatt $int einfach 0.25 für 25% oder 0.5 für 50% Dimm-Level eingeben.

Danke. wgreipl

ich nutze zurzeit mal die Sache mit dem Standartwert. Falls im Alltag das nicht so dolle sein sollte werde ich mich mal an die Umsetzung mit dem letzten Dimm-Stand ranwagen

Nabend,

geht auch einfacher:


HM_WriteValueBoolean($DimmerID,"OLD_LEVEL",true);

das schaltet den HM Dimmer auf den letzten Wert.

Gruss, Michael

Danke Michael,

man sollte sich ab und an doch einmal die Datenpunkliste ansehen :smiley:

Funktioniert hervorragend.

Für unseren Indianer „grossermanitu“:

<?
$ramp_on  = 3;  //Rampe einschalten einschalten
$ramp_off   = 10; //Rampe einschalten einschalten
$id_dimmer  = 59534;
if($IPS_SENDER == "WebFront")
{
   SetValue($IPS_VARIABLE, $IPS_VALUE);
   if($IPS_VALUE) {
    HM_WriteValueFloat($id_dimmer, "RAMP_TIME", $ramp_on);
    HM_WriteValueBoolean($id_dimmer, "OLD_LEVEL", true);
 }
 else
 {
    HM_WriteValueFloat($id_dimmer, "RAMP_TIME", $ramp_off);
    HM_WriteValueFloat($id_dimmer, "LEVEL", 0);
 }
}
 
if($IPS_VARIABLE == 34517 /*[Erdgeschoß\Wohnzimmer\Deckenlampe\WORKING]*/) {
 if(GetValue(57716 /*[Erdgeschoß\Wohnzimmer\Deckenlampe\LEVEL]*/) > 0) {
    SetValue(51008 /*[Erdgeschoß\Wohnzimmer\Deckenlampe\Status]*/, true);
 } else {
    SetValue(51008 /*[Erdgeschoß\Wohnzimmer\Deckenlampe\Status]*/, false);
 }
}
 
?>

das angepasste Skript.

Danke wgreipl. Nach so etwas habe ich die ganze Zeit gesucht.:slight_smile:

//if($IPS_VARIABLE == 34517 /*[Erdgeschoß\Wohnzimmer\Deckenlampe\WORKING]*/) {

Die Zeil habe ich auskommentiert. Somit wird mir auch der Status korrekt angezeigt wenn ich direkt an meinem Schalter per Hand schaltet.
Was soll diese Zeile eigentlich bewirken?

Denke mal wenn der Dimmer am dimmen ist, das dann und nur dann der darunter stehender Text ausgeführt wird.

Uwe hat Recht :slight_smile:

Wenn z.B. der Dimmer mit einer angelernten Fernbedienung gedimmt wird oder auch am runterdimmen durch drücken der AUS/AN-Taste betätigt wird geht die Working auf True, dann wird verglichen ob der Dimmwert > 0 ist als ob die Lampe effektiv leuchtet. Solange Dimmerwert >0 ist der Status auf An und erst wenn er auf 0 ist geht sie auf aus.

Nabend,

es gibt auch noch eine ‚lazy‘ Lösung. Ich nutze nur 2 Scripte für alle Dimmer. Jeder Dimmerinstanz habe ich eine boolsche Variable (~Switch) mit dem Namen Dimmer hinzugefuegt. Diese triggert folgendes Script:

<?
$o = IPS_GetObject($IPS_VARIABLE);
$val = GetValueBoolean($IPS_VARIABLE);

if($val == false)
{
   HM_WriteValueFloat($o['ParentID'], "RAMP_TIME", 5);
	HM_WriteValueBoolean($o['ParentID'],"OLD_LEVEL",true);
}
else
{
   HM_WriteValueFloat($o['ParentID'], "RAMP_TIME", 5);
	HM_WriteValueFloat($o['ParentID'],"LEVEL",0.0);
}
?>

Um den richtigen Status kümmert sich folgendes Script:


<?
$o = IPS_GetObject($IPS_VARIABLE);
$ObjektID = @IPS_GetObjectIDByName("Dimmer", $o['ParentID']);
if ($ObjektID == false)
  print "Objekt nicht gefunden!";
else
{
	if($IPS_VALUE == 0.0)
		SetValueBoolean($ObjektID, false);
	else
		SetValueBoolean($ObjektID, true);
}
?>

getriggert wird bei ‚update‘ durch die ‚LEVEL‘ Varibale.

Jedenfalls braucht man sich so nicht mit den ID’s rumschlagen:)

Gruss, Michael

PS. fast vergessen. hier mein ‚analog‘ Script. Ausgeloest durch den Slider der LEVEL Variablen:


<?
$o = IPS_GetObject($IPS_VARIABLE);
HM_WriteValueFloat($o['ParentID'], "LEVEL", $IPS_VALUE);
?>

1 „Gefällt mir“

Moin Moin,

ich musste folgende Zeile auch deaktivieren, da ich immer eine Fehlermeldung bekommen habe.

if($IPS_VARIABLE == 34517 /*[Erdgeschoß\Wohnzimmer\Deckenlampe\WORKING]*/)

Fehlermeldung:

Notice:  Undefined variable: IPS_VARIABLE in [Erdgeschoss\Wohnküche\Ambiente Licht\Status] on line 10

Kann mir jemand sagen warum im Webfront der Status „AN“ nicht grün und bei „AUS“ nicht rot hinterlegt ist ? Die Variable ist als Switch angelegt.

Ein und Ausschalten kann ich´s damit auch nicht. Nur den Status abfragen.

Uploaded with ImageShack.us

Danke schon mal
Gruß Christian

Du mußt das Statusskript auch als „Action“ der Variable „Status“ zuweisen (siehe Bild).

Bezüglich deines Fehlers mit $IPS_VARIABLE. Hast Du auch die ID deiner WORKING-Variable im Skript eingetragen. Des Weiteren darfst Du das Skript auch nicht per Hand ausführen, ansonsten kommt dieser Fehler.

Status.png

Ahh Danke…

lagst mit beiden Tipps richtig :wink: Wieder was dazu gelernt. :smiley:

Dafür ist das Forum ja da.:slight_smile: