ein und aus schalten kann. Wie würdet Ihr das am saubersten lösen?
Im Moment habe ich 2 Scripte mit jeweils dem Befehl drin der dann an das jeweilige event des Tasters gehängt ist.
Das ist ja aber nicht gerade sauber so
Gibt es eine Möglichkeit die Lampe je nach aktuellem Status um zu schalten statt an und aus?
Gibt es eine Möglichkeit alle events an ein Script zu senden und dann per Abfrage die Quelle heraus zu finden?
Per sender ID oder so. Dann könnte ich mir da eine Managment Klasse schreiben an die man Lichter und Schalter einfach anmelden kann.
Leider bekomme ich… wie in der Beschreibung des Befehls auch angegben:
Konnte der Befehl erfolgreich ausgeführt werden, liefert er als Ergebnis TRUE, andernfalls FALSE.
Immer nur 1 also TRUE zurück geliefert. Also das der Befehl erfolgreich ausgeführt wurde… Wie komme ich dann an den benötigten Status Wert?
Außerdem gibt es ja hier noch den Hinweiß:
Diese Funktion belastet den Funkverkehr erheblich. Sie sollte ausschliesslich verwendet werden, um kritische Geräte zum IP-Symcon-Start zu aktualisieren. Ein erneutes Abfragen zur Laufzeit wird nicht benötigt, da die HomeMatic alle Statusänderungen direkt an IP-Symcon weiterleitet.
Wobei, so oft am Tag ja nicht ein Schaltevent ausgelöst werden sollte das es das Netzwerk stört.
Ich denke ich muss was IPS angeht erstmal ein paar grundlegende Missverständniss Hürden überwinden
GetValueBoolean sollte false/true liefern.
GetValue eigentlich auch, wenn die IPS-Variable boolean ist. Außer hier wurde aus Gründen der Kompatibilität was anders gemacht.
Ich empfehle da Typensicher zu arbeiten.
Dann kommen solche komischen Effekte hat nicht erst.
Michael
Können jetzt soviele Lampen wie man mag hinzugefügt werden.
Hab jetzt noch eingebaut das man Taster als nur off oder nur on verbinden kann.
Um zb einen Ausschalter für mehrere Lampen zu implementieren. Standart ist tog für toggle.
<?
if($_IPS['SENDER'] != "Variable") die();
class LightConnection
{
public $lightId;
public $lightVar;
public $eventId;
public $behavior;
function LightConnection($_lightId, $_lightVar, $_eventId, $_behavior)
{
$this->lightId = $_lightId;
$this->lightVar = $_lightVar;
$this->eventId = $_eventId;
$this->behavior = $_behavior;
}
}
class LightManager
{
private $lightSwitchConnections = array();
function addConnection($lightId, $lightVar, $eventId, $behavior = "tog")
{
$this->lightSwitchConnections[] = new LightConnection($lightId, $lightVar, $eventId, $behavior);
}
function handleEvent($eventId)
{
foreach ($this->lightSwitchConnections as &$connection)
{
if($connection->eventId == $eventId)
{
IPS_LogMessage("Licht Manager", "Event call:" . $eventId . " - " . $connection->behavior );
if($connection->behavior == "tog")
$newState = GetValue($connection->lightVar /*[Räume\EG Büro 3\EG Büro 3 Licht\Zustand]*/) == 1 ? false : true;
else if($connection->behavior == "on")
$newState = true;
else if($connection->behavior == "off")
$newState = false;
IPS_LogMessage("Licht Manager", "Light geschaltet:" . IPS_GetName($connection->lightVar) . " auf " . $newState );
HM_WriteValueBoolean($connection->lightId /*[Räume\EG Büro 3\EG Büro 3 Licht]*/, "STATE", $newState);
}
}
}
}
$lightMan = new LightManager;
// Setup all connections
$lightMan->addConnection(33566,18070,42521);
$lightMan->addConnection(33566,18070,39631,"off");
// Handle the current event
$lightMan->handleEvent($_IPS['EVENT']);
?>