Guten Morgen,
ich arbeite gerade an meinem zweiten Modul, einer Heizungssteuerung.
Diese benutzt zum schalten der Aktoren die RequestAction-Funtion, da das Modul Unabhängig von der verwendeten Hardware funktionieren soll.
Aktuell komme ich gerade nicht weiter beim Aufbau der Logik für den Schaltvorgang.
Eigenglich wäre das simpel, wäre da nicht der Unterschied zwischen selbstregelenden Aktoren & geschaltete Aktoren, wo ich nicht weiß wie ich die Logik hier am besten gestalte.
Selbstregelende Aktoren:
z.B. Homematic IP Heizungsthermostate, hier übergibt man die gewünschte Temperatur an das Heizkörper Stellantriebe und dieser hält regelst sich selbständig, damit diese Temperatur erreicht / gehalten wird.
Geschaltene Aktoren:
Z.B. ganz normale Stellventile, die über z.B. ein Bus-System, je nach aktueller Temperatur, An- oder aus zum Schließen oder Öffnen geschalten werden. (Ich simuliere das aktuell im Test bei mir mit einer schaltbaren Steckdose)
Variablen:
$heating_phase = aktuelle Heizphase
$aktor_buffer = ID des zuschaltenden Aktors
Heizphasen:
0 = Ausgeschalten
1 = Frostschutz
2 = Grundwärme / Normal
3 = Heizwärme / Abgesenkt
Aktuell sieht mein Skript wie folgt aus, was auch aktuell funktioniert für selbstgeregelde Aktoren:
if ($heating_phase == 0)
{
RequestAction($aktor_buffer, 0);
}
elseif ($heating_phase == 1)
{
RequestAction($aktor_buffer, $frost_protection);
}
elseif ($heating_phase == 2)
{
RequestAction($aktor_buffer, $normal_temperature);
}
elseif ($heating_phase == 3)
{
RequestAction($aktor_buffer, $heating_temperature);
}
Hier übergebe ich die Temperatur, die über das Webfrontend eingestellt wird, an den Homematic Aktor. Dieser regelt sich dann quasi selbst auf dies Temperatur.
Das funktioniert jetzt nicht mit geschalteten Aktoren, da ich diese je nach aktueller Ist-Temperatur und Wunschtemperatur quasi anfassen muss um diese zu starten (öffnen) oder zu stoppen (schließen).
Hier müsste das Skript quasi so aussehen:
if ($heating_phase == 0)
{
RequestAction($aktor_buffer, 0);
}
elseif ($heating_phase == 1)
{
if ($is_temperature < $frost_protection)
{
RequestAction($aktor_buffer, 1);
}
else
{
RequestAction($aktor_buffer, 0);
}
}
elseif ($heating_phase == 2)
{
if ($is_temperature < $normal_temperature)
{
RequestAction($aktor_buffer, 1);
}
else
{
RequestAction($aktor_buffer, 0);
}
}
elseif ($heating_phase == 3)
{
if ($is_temperature < $heating_temperature)
{
RequestAction($aktor_buffer, 1);
}
else
{
RequestAction($aktor_buffer, 0);
}
}
Was ich jetzt möchte, ich möchte beide Kombinieren so dass ich beiden Arten von Aktoren mit einem Modul steuern kann.
Unschöne Lösungen, die ich im Kopf hatte aber nicht realisieren möchte:
-
z.B. am Homematic Thermostat die Boost-Funktion mit 1 aktiviere, bis die gewünschte Temperatur erreicht ist und diese dann abschalte.
-
Man könnte auch einfach die Set_Temperatur am Homematic Thermostat, sobald die gewünschte Temperatur erreicht ist auch wieder auf 0 setzen. (Hier aber dann statt 1 im 2ten Skript den Werte der gewünschten Temperatur z.B. RequestAction($aktor_buffer, 16))
Diese beiden Ideen, könnte ich auch einfach mit dem zweiten Skript realisieren, ist aber nicht schon. Hier hätte ich dann einen erhöhten Funkkontakt zwischen CCU und Homematic-Aktor, was zu lasten der Batterie geht.
Hat jemand einen Anstoß für mich, wie ich die beiden Varianten der Aktoren in einem Skript vereinen kann? Einmal quasi das regeln mit an und aus und / oder das setzten der Wunschtemperatur.
Oder sollte ich noch eine Auswahl in meinem Konfigurationsformular für das Modul hinzufügen, um auszuwählen um was es sich für einen „Art“ von Aktor handelt? Ohne wäre natürlich schöner, aktuell habe ich aber leider keine Idee.