IPS 4 Homematic Rolladen Aktor LEVEL auslesen nur eine nachkomma Stelle

Hallo,

selbst wenn ich mit GetValueFloat(id) die Position eines Homamtic Rolladen Aktors auslese erhalte ich nur eine Nachkomma Stelle, also anstatt der in der CCU Web UI angezeigten 0,55 nur 0,5.

Auch zeigt mir die Console eine Falschen Wert an und Interessant ist aber das im Archiv der Richtige steht wie im Screenprint zu sehen!

Also habe ich aktuell in Symcon drei Werte für eine Variable…

Paul

Magst du mal schauen was für ein Profil eingestellt ist. Ist dort evtl. eine Nachkommastelle angegeben?

paresy

Hallo Parsey,

vielen Dank für den Hinweis aber ich hatte das Profil mit zwei Kommastellen eingerichtet.
Was damit nun klar ist warum in der Console 40 Angezeigt wird wenn die Position auf 0.55 ist

Aber nicht warum ich per GetValue und GetValueFloat nur eine Stelle nach dem Komma erhalte.

Vielen Dank für deine Hilfe!

Paul

Kann ich hier leider nicht Nachstellen. Hab ne Float Variable mit Wert = 0,56 erstellt und ausgeben lassen und es läuft super.


 var_dump(GetValueFloat(42614 /*[Testing\FloatTest\Digits]*/));

paresy

Hallo Parsey,

das ist jetzt aber sehr „Merkwürdig“…

Ich habe zur Automatisierung meiner Rolläden ein Script erstellt welches eine Funktion beinhaltet die die Rolläden steuert:

Dieser Funktion übergebe ich nur die ID des Rolladen selbst und die ID der Position (LEVEL) wird Automatisch gesucht und der Rolladen nur dann bewegt wenn die gewünschte Position von der Aktuellen abweicht.

Wenn ich die Funtion unten in einem neuen test Script so ausführe erhalte ich:

print "Position: ".GetValueFloat(57314)."
";

moveHMRollo(42617, 0.55);
moveHMRollo(42617, 0.55);
moveHMRollo(42617, 0.55);

print "Position: ".GetValueFloat(57314)."
";

function moveHMRollo($id, $pos){
print "------------
pos: $pos
";
   foreach (IPS_GetChildrenIDs($id) as $key){
      if (IPS_GetObject($key)["ObjectType"] == 2){ //wenn eine Variable
         if(IPS_GetVariable($key)["VariableType"] == 2){ //Type Float was der Datenpunkt Postion oder LEVEL immer haben wird...
            $val = GetValueFloat($key);
         }
      }
   }

   if($val != $pos){
		print "val: $val | move to: $pos
";
   	HM_WriteValueFloat($id,"LEVEL", $pos);
	}
}
Position: 0,56
------------
pos: 0,55
val: 0,56 | move to: 0,55
------------
pos: 0,55
------------
pos: 0,55
Position: 0,55

Was richtig ist, nur wenn ich es in meinem Eigentlichen Script das auch mehrmals diese Funktion nutzt ausführe erhalte ich folgende Ausgabe wenn ich von 0.55 auf die Postition 0.56 fahre was beim ersten Aufruf ja passt nur wenn ich das Script mehrmals Starte erhalte ich immer diese Ausgabe und der Rolladen wird angesteuert obwohl er sich (auch lt. CCU WebUI) schon auf dieser Postion befindet und der Änderungs Timestamp wird Aktualisiert:

pos: 0,5
val: 0,54 | move to: 0,5

Es scheint als würde der Übergabeparameter $pos nur eine Nachkomma Stelle aufweisen?!

Ich bin einfach :confused:

Paul

Moin!

Ich hab versucht das Beispiel nachzustellen und habe das Problem nicht nachstellen können.

Magst du das Beispiel vielleicht reduzieren und mir ein neues Beispiel erstellen.

Gruß
Pio

Hallo Pio,

ich habe ein „großes“ script für die Rolläden Automatik und in diesem Verwende ich die Funktion mit „Erweiterungen“ wo ich z.B. noch prüfe of das Fenster offen ist und nur wenn es nicht zu lange bei Frost offen war fährt der Rolladen…

Das Problem ist das wenn ich eine zwischenposition anfahre also die genannte 0.55 wird die zweite Nachkomma Stelle beim übergabe Parameter $pos der Funktion function moveHMRollo($id, $pos){ verschluckt.

Gibt es irgend einen Grund warum dies der Fall sein kann oder bin ich einfach zu ****?

Es ist jetzt kein show stopper, aber vielleicht ein Fehler der sich bei anderen wichtigeren Leuten / Programmen auswirken kann!

Vielen Herzlichen Dank für eure Hilfe!

Paul

Kann es sein, dass HM die Position nur als Zehntel auflösen kann? Dann wäre das Thema systembedingt.
Edit: was kommt denn im Debug für ein Rohwert?

Hallo,

Nein, da es ja mit dem Test script oben geht und auch die CCU selbst erlaubt das anfahren jedes prozent wertes welcher per HM script auch mit 0.55 angegeben werden muss.

Paul

Wie schnell hintereinander führst du das Skript denn aus? Die Rückmeldung von der CCU kommt ja asynchron kommen. Wenn du das Variablenprofil deaktivierst… Welchen Wert siehst du dann in der Konsole? Irgendwo übersehen wir etwas. Ich glaube weniger, dass das hier eine Fehler ist :slight_smile:

paresy