Homematic Jalosieaktor geht bei negativen Werten auf 100%

Hi zusammen,

mein FBH-Mischer hängt an einem Wired-HM-Jalousieaktor.
In Abhängigkeit der Heizkurve, aktueller Raumtemperatur usw. wird der Mischer skriptgesteuert verfahren.

Das Skript prüft in regelmäßigen Intervallen, ob die Vorlauf-Temp innerhalb der Hysterese stimmt und verfährt sonst den Mischer in 2%-Stufen. Muss der Aktor-Level runtergefahren werden, sieht der Code-Ausschnitt dazu so aus:


$mischerlevel = GetValueFloat(16748 /*[Heizung\Fußbodenheizung Wohnung\Mischer FBH\LEVEL]*/);
HM_WriteValueFloat(52364 /*[Heizung\Fußbodenheizung Wohnung\Mischer FBH]*/, "LEVEL", $mischerlevel-0.02);

Funktioniert fast prima! Aber: ist der Level bspw. schon bis auf 1,5% runter und das Prüfskript erkennt trotzdem, dass die Vorlauftemp noch etwas zu hoch ist, erwarte ich, dass der Mischer auf 0% fährt und auch dort bleibt.
Tut er aber nicht - der Mischer fährt dann auf 99,5% hoch - womit meine Räume natürlich völlig überheizt werden.

Mit einer einfachen if-Abfrage ließe sich das sicher recht einfach lösen; damit die 2% nur dann vom aktuellen Level subtrahiert werden, wenn der aktuelle Level mindestens 2% beträgt. Aber ist das nicht ein Bug bzw. Fehler by design?

Viele Grüße,
ika

Moin,
kann ein Designfehler sein. Die meisten Programme würde einfach abstürzen;) Der Regler kann nun mal nicht weniger als null. Für das „richtige“ setzen der Variable bist Du allein als Programmierer zuständig. Es ist ein mehr als schlechter Programmierstil von Dir, die Variable ohne Netz und doppelten Boden (if abfrage) zu beeinflussen.
LG
//Sven

Und das ist falsch. So hättest Du nie die Möglichkeit bis auf „0“ zu kommen.
Du musst immer die 2% abziehen. Wenn das Ergebnis kleiner/gleich „0“ ist musst Du auf „0“ begrenzen!

Danke euch Beiden für die Antwort.
Hatte mir sowas schon fast gedacht -man merkt halt doch, dass ich zwar PHP in Grundbegriffen spreche, aber von Programmierung in Wirklichkeit keine Ahnung habe.

@Martin: auch der Gedanke kam mir kurz - hatte ihn aber damit abgetan, dass mein Mischer gerne auch auf 0,5% oder dergleichen stehenbleiben darf, würde in diesem Fall nicht stören. Aber um es ganz sauber zu machen, damit ich dich richtig verstehe, wäre der Code wie folgt?!


$mischerlevel = GetValueFloat(16748 /*[Heizung\Fußbodenheizung Wohnung\Mischer FBH\LEVEL]*/)-0.02;
if ($mischerlevel <= 0) {
HM_WriteValueFloat(52364 /*[Heizung\Fußbodenheizung Wohnung\Mischer FBH]*/, "LEVEL", 0);
}
else { 
HM_WriteValueFloat(52364 /*[Heizung\Fußbodenheizung Wohnung\Mischer FBH]*/, "LEVEL", $mischerlevel);
}

Oder geht das noch kürzer und sauberer? :wink: Danke für Die Lernstunde!

$mischerlevel = GetValueFloat(16748 /*[Heizung\Fußbodenheizung Wohnung\Mischer FBH\LEVEL]*/)-0.02; 
if ($mischerlevel < 0 $mischerlevel = 0);
HM_WriteValueFloat(52364 /*[Heizung\Fußbodenheizung Wohnung\Mischer FBH]*/, "LEVEL", $mischerlevel); 

Hallo zusammen,

ohne das jetzt getestet zu haben, aber ich glaube, mws, du hast die Klammern falsch gesetzt:

$mischerlevel = GetValueFloat(16748 /*[Heizung\Fußbodenheizung Wohnung\Mischer FBH\LEVEL]*/)-0.02; 
if ($mischerlevel < 0) $mischerlevel = 0;
HM_WriteValueFloat(52364 /*[Heizung\Fußbodenheizung Wohnung\Mischer FBH]*/, "LEVEL", $mischerlevel);  

Alternativ könntest du einfach die max-funktion von PHP nutzen, damit du nicht in den negativen Bereich landest. Finde ich persönlich die eleganteste Lösung:


$mischerlevel = GetValueFloat(16748 /*[Heizung\Fußbodenheizung Wohnung\Mischer FBH\LEVEL]*/)-0.02; 
HM_WriteValueFloat(52364 /*[Heizung\Fußbodenheizung Wohnung\Mischer FBH]*/, "LEVEL", max(0, $mischerlevel));  

Beste Grüße,
Keeper

offtopic:

verstehe ich das richtig das du deine FBH mit richtigen mischern 0-100%? Ich baue gerade eine FBH ein und werde sie ebenfalls per HM/IPS steuern bin aber bis jetzt davon ausgegangen das man dafuer an/aus steller verwendet?

Kannst gerne per PN antworten, will nicht deinen thead hijacken :wink:

@Keeper: Danke, das mit der max-Funktion scheint mir wirklich sehr sauber zu sein.

@Mulder: Ich machs hier im Thread kurz, ist vielleicht für andere auch interessant. Bei weiteren Fragen gerne PN.
Der 0-100%-Mischer (gesteuert über HM-Jalousieaktor) regelt bei mir nur die generelle Vorlauftemperatur gemäß Heizkennlinie für das GANZE FBH-System (alle Räume). Das ist nichts Neues, praktisch überall wo es unterschiedliche Heizkreise gibt (also bspw. Heizkörper und FBH) wird das so gemacht. Nur in der Regel autark ohne IPS :wink:

Ob man dahinter jetzt noch eine Einzelraumregelung aufschaltet (mit An-/Aus-Ventilen) oder ob man sich auf guten hydraulischen Abgleich verlässt und somit die FBH hoffentlich zu einem sich selbst regelnden System macht, ist Glaubensfrage :wink: