Mit „einem“ Testmodul habe ich auch schon etwas „rumgespielt“.
Gut ganz verstehen tue ich es (noch) nicht. Doch soviel wie ich verstanden habe brauch ein Modul ja immer die $InstanceID zur Abarbeitung.
Das führt zwar jetzt in die Modul Programmierung aber eben zum verstehen.
<?php
class TB_Bibliothek extends IPSModule
{
public function Create()
{
parent::Create();
// Initialisierungen hier hinzufügen, falls nötig
}
public function ApplyChanges()
{
parent::ApplyChanges();
// Änderungen anwenden
}
// Gibt den letzten Aktualisierungszeitpunkt einer IPS-Variable zurück
public function AktualisierungsZeitHolen(int $id)
{
#$this->$v = $this->GetValue($id);
#$update = (int) $v['VariableUpdated'];
$StatusvariableValue = $this->GetValue($id);
return StatusvariableValue;
}
// Weitere Funktionen können hier hinzugefügt werden
}
Es gibt aber nicht immer dafür eine „Modul“ Instanz. Vieles sind auch einfach DummyModule wo Varablen und Scripte drinne liegen.
Falls mir da einer auf die Sprünge helfen könnte?
In der Endausbaustufe sollte zb. diese Funktion aus einem Script, welche da wunderbar arbeitet nun dann im Modul aufrufbar sein.
/**
* Erzeugt eine Variable unterhalb {id} mit dem Namen {name} vom Typ {type}
* Existiert die Variable schon wird diese zurückgeliefert.
*
* @param int $id ID unter welchem die Variable erzeugt werden soll.
* @param string $ident Ident der zu erzeugenden Variable
* @param string $name Name der zu erzeugenden Variable
* @param int $type Typ der Variable (0 = Boolean, 1 = Integer, 2 = Float, 3 = String)
* @param int $pos 0 gleich Standard, sonst neue Sortierreihenfolgenummer {pos}
* @param string $icon Zuweisung eines Icons mit dem übergebenen Namen
* @param string $profil Leer für kein Profil, sonst Profilnamen
* @param int $action ID der benutzerdefinierten Aktion (Auslösung via Webfront)
*
* @return int ID der bestehenden oder neu angelegten Variable
*/
function CreateVariableByIdent($id, $ident, $name, $type, $pos = 0, $icon = '', $profile = '', $action = null)
{
$ident = CreateIdent($ident);
$vid = GetObjectByIdent($id, $ident);
if ($vid === false) {
$vid = IPS_CreateVariable($type);
IPS_SetParent($vid, $id);
IPS_SetName($vid, $name);
IPS_SetIdent($vid, $ident);
IPS_SetPosition($vid, $pos);
IPS_SetIcon($vid, $icon);
if ($profile !== '') {
IPS_SetVariableCustomProfile($vid, $profile);
}
if ($action != null) {
IPS_SetVariableCustomAction($vid, $action);
}
}
return $vid;
}
Also man möchte irgendwas berechnen. DummyModul erstellt. Leeres Script erstellt.
define('ID_ARCHIV', 17032); // Archiv
define('ID_JSON_API', CreateVariableByName($_IPS['SELF'], 'JSON API Daten', 3, 0, '', '')); // JSON API String
define('ID_AKTUELL', CreateVariableByName(IPS_GetParent($_IPS['SELF']), 'aktuell', 2, 0, '', '~Electricity') );
define('ID_HEUTE', CreateVariableByName(IPS_GetParent($_IPS['SELF']), 'heute', 2, 1, '', '~Electricity') ); // TODO: Archivierung aktivieren (Typ: Zähler));
define('ID_MORGEN', CreateVariableByName(IPS_GetParent($_IPS['SELF']), 'morgen', 2, 3, '', '~Electricity'));
define('ID_LEISTUNG', CreateVariableByName(IPS_GetParent($_IPS['SELF']), 'Aktuelle Leistung', 3, 4, 'EnergyProduction', '~HTMLBox'));
define('ID_VORHERSAGE', CreateVariableByName(IPS_GetParent($_IPS['SELF']), 'Vorhersage', 3, 0, 'Graph', '~HTMLBox'));
Und einfach dann damit arbeiten im Script.