Ich bin weitergekommen, die Auswertung einer Action bekomme ich jetzt hin, danke für die Hilfe Nall-chan.
Da habe ich aber gleich die nächste Frage, im Create-Bereich, erstelle ich einen Wochenplan:
(Über diesen sollen die Heizzeiten gesteuert werden)
if (@$this->GetIDForIdent("heatingplan") == false) {
$heatingplan = IPS_CreateEvent(2);
IPS_SetParent($heatingplan, $this->InstanceID);
IPS_SetPosition($heatingplan, 4);
IPS_SetEventScheduleAction($heatingplan, 0, "Absenkung", 0xFF7F00, "");
IPS_SetEventScheduleAction($heatingplan, 1, "Heizen", 0xFF0000, "");
IPS_SetEventScheduleGroup($heatingplan, 0, 31); //Mo - Fr (1 + 2 + 4 + 8 + 16)
IPS_SetEventScheduleGroup($heatingplan, 1, 96); //Sa + So (32 + 64)
IPS_SetName($heatingplan, "Heizplan");
IPS_SetIdent($heatingplan, "heatingplan");
}
Ich versuch jetzt den aktuellen Schaltzustand des Wochenplans herauszufinden, dafür habe ich eine Funktion im Modul mit der ich den aktuellen Schaltzustand herausfinden kann. Diese arbeitet mit IDs, die ja nicht verwendet werden soll. (Hier suche ich noch nach einer anderen Lösung.
Das ganze versuche ich mit:
$this->wochenplan_status($this->GetValue("heatingplan"));
→ Hier sagt er mir das die Variable mit IDxxx nicht existiert.
Wie kann ich von der Funktion unten auf den Wochenplan im Create-Bereich zugreifen um den aktuellen Schaltzustand auszulesen?
Hier einmal mein ganzer Quelltext:
<?
// Klassendefinition
class Heizkoerpersteuerung extends IPSModule {
// Überschreibt die interne IPS_Create($id) Funktion
public function Create() {
// Diese Zeile nicht löschen.
parent::Create();
$istemperature = $this->RegisterVariableFloat("IsTemperature", $this->Translate("Is temperature"),"",0);
$shouldtemperature = $this->RegisterVariableInteger("ShouldTemperature", $this->Translate("Should temperature"),"",1);
$reduction = $this->RegisterVariableInteger("Reduction", $this->Translate("Reduction"),"",2);
$heatingphase = $this->RegisterVariableInteger("HeatingPhase", $this->Translate("Heatingphase"),"",3);
$this->RegisterPropertyFloat("Faktor", 0.5);
$this->EnableAction("ShouldTemperature");
$this->EnableAction("Reduction");
if (@$this->GetIDForIdent("heatingplan") == false) {
$heatingplan = IPS_CreateEvent(2);
IPS_SetParent($heatingplan, $this->InstanceID);
IPS_SetPosition($heatingplan, 4);
IPS_SetEventScheduleAction($heatingplan, 0, "Absenkung", 0xFF7F00, "");
IPS_SetEventScheduleAction($heatingplan, 1, "Heizen", 0xFF0000, "");
IPS_SetEventScheduleGroup($heatingplan, 0, 31); //Mo - Fr (1 + 2 + 4 + 8 + 16)
IPS_SetEventScheduleGroup($heatingplan, 1, 96); //Sa + So (32 + 64)
IPS_SetName($heatingplan, "Heizplan");
IPS_SetIdent($heatingplan, "heatingplan");
}
$this->RegisterPropertyInteger("Aktor-ID", 0);
$this->RegisterPropertyString("Schaltbefehl", "0");
$this->RegisterPropertyInteger("Temperatur-ID", 0);
}
// Überschreibt die intere IPS_ApplyChanges($id) Funktion
// Moduleinstellungen
public function ApplyChanges() {
// Diese Zeile nicht löschen
parent::ApplyChanges();
}
public function RequestAction($Ident, $Value) {
$this->temperatursteuerung($this->GetValue("IsTemperature"),$this->GetValue("ShouldTemperature"),
$this->GetValue("Reduction"),
$this->GetValue("HeatingPhase"),
5 #Die 5 ist ein Platzhalter im Moment);
$this->wochenplan_status($this->GetValue("heatingplan"));
}
public function temperatursteuerung($istemperature,$soll_temperatur,$soll_absenkung,$heizphase,$wochenplan) {
if ($wochenplan == 0)
{
#SetValueInteger($heizphase,2); #Abgesenkt
//echo "Wochenplan Aktion: Abgesenkt --> ";
}
else
{
#SetValueInteger($heizphase,3); #Heizen
//echo "Wochenplan Aktion: Heizen --> ";
}
#$heizphase = GetValueInteger($heizphase);
#$soll_absenkung = GetValueInteger($soll_absenkung);
#$soll_temperatur = GetValueInteger($shouldtemperature);
switch ($heizphase) {
case 0:
#HM_WriteValueFloat($aktor, $set_parameter, 0);
break;
case 1:
#HM_WriteValueFloat($aktor, $set_parameter, $temperatur_frostschutz );
break;
case 2:
#HM_WriteValueFloat($aktor, $set_parameter, $soll_temperatur-$soll_absenkung);
break;
case 3:
#HM_WriteValueFloat($aktor, $set_parameter, $soll_temperatur);
break;
}
}
public function wochenplan_status($id) {
$e = IPS_GetEvent($id);
$actionID = false;
//Durch alle Gruppen gehen
foreach($e['ScheduleGroups'] as $g) {
//Überprüfen ob die Gruppe für heute zuständig ist
if(($g['Days'] & pow(2,date("N",time())-1)) > 0) {
//Aktuellen Schaltpunkt suchen. Wir nutzen die Eigenschaft, dass die Schaltpunkte immer aufsteigend sortiert sind.
foreach($g['Points'] as $p) {
if(date("H") * 3600 + date("i") * 60 + date("s") >= $p['Start']['Hour'] * 3600 + $p['Start']['Minute'] * 60 + $p['Start']['Second']) {
$actionID = $p['ActionID'];
} else {
break; //Sobald wir drüber sind, können wir abbrechen.
}
}
break; //Sobald wir unseren Tag gefunden haben, können wir die Schleife abbrechen. Jeder Tag darf nur in genau einer Gruppe sein.
}
}
#var_dump($actionID);
#return $actionID;
}
}
?>
Ich habe nach einem Beispielmodul gesucht wo ein Wochenplan ausgewertet werden soll, habe aber keins gefunden.