Ah, sehr interessant !
KannSt Du bitte mal über das Shuttercontrol script schauen, das ich weiter oben gepostet haben und kurz bewerten, ob ich dein Teil von macgyver richtig eingebaut habe, dann kann ich Deinen Teil auch noch übernehmen.
Danke
Ah, sehr interessant !
KannSt Du bitte mal über das Shuttercontrol script schauen, das ich weiter oben gepostet haben und kurz bewerten, ob ich dein Teil von macgyver richtig eingebaut habe, dann kann ich Deinen Teil auch noch übernehmen.
Danke
Dein Skript sieht soweit korrekt aus :). Funktioniert es denn auch mittlerweile?
Mein „umgestrickter“ Code ersetzt den von macgyver - du solltest diesen nicht zusätzlich einfügen, sondern alternativ. In jenem Falle ist der Anfang des ShutterControl-Skriptes noch wie folgt zu modifizieren:
<?php
include('LightManager.ips.php');
ini_set('max_execution_time', 60);
Hallo,
komme leider erst jetzt wieder dazu, mich mit dem Thema zu beschäftigen.
Ich poste dann die Ergebnisse.
Grüße,
Fred
Hallo iP-Symcon Gemeinde,
Habe seit ca. 1Monat Symcon und Plugwise und HomeMatic
laufen ( Dank an die User ).
Wollte wie hier beschrieben auch den LightManager Pro einbinden, ohne Erfolg:o.
Wenn ich einen Befehl abschicke leuchtet die Led rot ( an LM-Hardware ) kurz auf.
Es tut sich aber nichts!
So und nun möchte ich bei dem Programm LightManager die Kommunikation mitlesen.
Wie geht das?
Hatte im Forum auch bei der direkten Steuerung von Plugwise ohne Server folgendes gelesen:
• serielle Verbindung aufgebaut
• RegVar angelegt
Habe eine Instanz SerialPort eingerichtet.
Bei mir ist nur der COM3 Port vorhanden.
Der Port kann nicht geöffnet werden?!
Was mach ich falsch?
Da ich ein Neuling bei Symcon bin, bitte ich um eine einfache ( Schritt für Schritt ) Erklärung.
Danke:)
Aktor
<?
include('LightManager.ips.php');
$mode = GetValueBoolean(13970 /*[LightManager Pro\AktorSchalten\Status]*/) ? LightManager::INTERTECHNO_OFF : LightManager::INTERTECHNO_ON;
LightManager::InterTechno_SwitchMode('A7', $mode, 13970 /*[LightManager Pro\AktorSchalten\Status]*/, true);
?>
LightManager
<?
/**
* Klasse zur Ansteuerung des jbmedia Light-Manager Pro per HID-Instanz
* Beinhaltet aus Gründen der IPS-Konformität und Wumpus-Widmung ausschließlich statische Methoden
* Unterstützte Systeme: InterTechno, Uniroll, FS20 (rudimentär)
*
* @author tpmaerk
*/
class LightManager
{
const INTERTECHNO_OFF = 0x00;
const INTERTECHNO_ON = 0x01;
const INTERTECHNO_TOGGLE = 0x02;
const INTERTECHNO_TURN_LEFT = 0x03;
const INTERTECHNO_TURN_RIGHT = 0x04;
const UNIROLL_UP = 0x01;
const UNIROLL_STOP = 0x02;
const UNIROLL_DOWN = 0x04;
const FS20_OFF = 0x00;
const FS20_ON = 0x11;
const FS20_TOGGLE = 0x12;
private static $FS20_Housecode;
private static $instanceId;
/**
* Konfiguration: ID der LightManager-Instanz setzen
*
* @param string $instanceId ID der LightManager-Instanz
* @return void
*/
public static function setInstanceId($instanceId)
{
self::$instanceId = $instanceId;
}
/**
* Befehl an LightManager senden (Wrapper für HID_SendEvent())
*
* @param mixed $command Abzusetzender Befehl
* @return boolean Rückgabe von HID_SendEvent()
*/
private static function _sendCommand($command)
{
return HID_SendEvent(self::$instanceId, 0, $command);
}
/**
* InterTechno-Adressen (A1 - P16) in internes Hex-Format übersetzen
*
* @param string $actor Adresse des Aktors (etwa 'A1')
* @return string Adresse im internen Hex-Format
*/
public static function InterTechno_TranslateAddress($actor)
{
$group = ord(strtoupper(substr($actor, 0, 1))) - 65;
$channel = intval(substr($actor, 1)) - 1;
return '0x'.dechex($group).dechex($channel);
}
/**
* InterTechno-Aktor schalten
*
* @param string $actor Adresse des Aktors (etwa 'A1')
* @param int $mode Schaltmodus (vordefinierte Konstante angeben)
* @param int $statusID ID der Status-Variable (etwa 12345)
* @param boolean $isAdaptable true, falls Aktor lernfähig, ansonsten false (Default)
* @return void
*/
public static function InterTechno_SwitchMode($actor, $mode, $statusID, $isAdaptable = false)
{
$address = self::InterTechno_TranslateAddress($actor);
$type = !$isAdaptable ? chr(0x06).chr(0x00) : chr(0x07).chr(0x01);
self::_sendCommand(chr(0x05).chr($address).chr($mode).$type.chr(0x00).chr(0x00).chr(0x00));
$msg = ($mode == self::INTERTECHNO_ON) ? true : false;
$msg = ($mode == self::INTERTECHNO_TOGGLE) ? !GetValueBoolean($statusID) : $msg;
SetValueBoolean($statusID, $msg);
}
/**
* Lernfähigen InterTechno-Aktor dimmen
*
* @param string $actor Adresse des Aktors (etwa 'A1')
* @param int $value Intensität (0 bis 100)
* @param int $statusID ID der Status-Variable (etwa 12345)
* @param int $intensityID ID der Intensitäts-Variable (etwa 12345)
* @return void
*/
public static function InterTechno_SetIntensity($actor, $value, $statusID, $intensityID)
{
$address = self::InterTechno_TranslateAddress($actor);
$scale = array(0x00, 0x08, 0x18, 0x28, 0x38, 0x48, 0x58, 0x68, 0x78, 0x88, 0x98, 0xa8, 0xb8, 0xc8, 0xd8, 0xe8, 0xf8);
$level = ceil($value / 6.25);
self::_sendCommand(chr(0x05).chr($address).chr($scale[$level]).chr(0x04).chr(0x01).chr(0x00).chr(0x00).chr(0x00));
SetValueBoolean($statusID, ($value == 0) ? false : true);
SetValueInteger($intensityID, floor($level * 6.25));
}
/*
* Uniroll-Rollladen steuern
*
* @param string $actor Adresse des Aktors (etwa 1)
* @param int $mode Schaltmodus (vordefinierte Konstante angeben)
* @param int $statusID Optional: ID der Status-Variable (etwa 12345)
* @return void
*/
public static function Uniroll_SwitchMode($actor, $mode, $statusID = null)
{
$address = dechex(intval($actor) - 1);
self::_sendCommand(chr(0x15).chr($address).chr(0x74).chr($mode).chr(0x00).chr(0x00).chr(0x00).chr(0x00));
if(!empty($statusID)) {
$msg = ($mode == self::UNIROLL_UP) ? 'Geöffnet' : 'Geschlossen';
$msg = ($mode == self::UNIROLL_STOP) ? 'Angehalten' : $msg;
SetValue($statusID, $msg);
}
}
/**
* FS20-Adressen (1111 - 4444) in internes Hex-Format übersetzen
*
* @param string $actor Adresse des Aktors (etwa '1111')
* @return string Adresse im internen Hex-Format
*/
public static function FS20_TranslateAddress($actor)
{
$trans = array(11 => '0', 12 => '1', 13 => '2', 14 => '3', 21 => '4', 22 => '5', 23 => '6', 24 => '7',
31 => '8', 32 => '9', 33 => 'a', 34 => 'b', 41 => 'c', 42 => 'd', 43 => 'e', 44 => 'f');
return '0x'.$trans[substr($actor, 0, 2)].$trans[substr($actor, 2, 2)];
}
/**
* Konfiguration: FS20-Hauscode setzen
*
* @param string $code FS20-Hauscodes (etwa '11111111')
* @return void
*/
public static function setFS20Housecode($code)
{
$part1 = self::FS20_TranslateAddress(substr($code, 0, 4));
$part2 = self::FS20_TranslateAddress(substr($code, 4, 4));
self::$FS20_Housecode = chr($part1).chr($part2);
}
/*
* FS20-Aktor schalten
*
* @param string $actor Adresse des Aktors (etwa '1111')
* @param int $mode Schaltmodus (vordefinierte Konstante angeben)
* @param int $statusID Optional: ID der Status-Variable (etwa 12345)
* @return void
*/
public static function FS20_SwitchMode($actor, $mode, $statusID = null)
{
$address = self::FS20_TranslateAddress($actor);
self::_sendCommand(chr(0x01).self::$FS20_Housecode.chr($address).chr($mode).chr(0x00).chr(0x03).chr(0x00));
if(!empty($statusID)) {
$msg = ($mode == self::FS20_ON) ? true : false;
$msg = ($mode == self::FS20_TOGGLE) ? !GetValueBoolean($statusID) : $msg;
SetValueBoolean($statusID, $msg);
}
}
}
// Konfiguration hier vornehmen
LightManager::setInstanceId( 55202 /*[LightManager Pro (HID)]*/ );
LightManager::setFS20Housecode('12341234');
?>
Hallo,
habe mich weiter beschäftigt und dank einem Beitrag von Boui folgende Link abgearbeitet:
http://www.ip-symcon.de/forum/f52/newbie-fuer-newbies-register-variablen-10754/#post89045
Das Beispiel erfolgreich in Symcon getestet.
Wollte dies auf den LM Pro umsetzen ( HID Instanz ).:o
Bei dem Debug Fenster von der HID ist eine Transmitted Nachricht sichtbar,
wenn von Script Aktor der Befehl gesendet wird.
Habe eine RegisterVariable erstellt die auf die HID Instanz verweist und
das Enpfangsscript von den vorhergehenden Link verwendet.
EmpfangScript
<?
$RegVarID = $IPS_INSTANCE;
$newdata = $IPS_VALUE;
// fetch data in buffer
$data = RegVar_GetBuffer ( $RegVarID );
// add received data
$data .= $newdata;
// wrte back data to variable for use in other scripts
RegVar_SetBuffer($RegVarID, $data);
IPS_LogMessage( "EmpfangsTest" , $newdata );
?>
Dann das Debug Fenster von der RegVar geöffnet – LEER
Bin ich da komplett falsch???
Ich möchte mitschreiben ( lesen ) was das LM Programm zu dem Aktor sendet!
Kann ja direkt von dort aus den Aktor schalten.
Möchte herausfinden warum von Symcon aus zum LM der Befehl nicht richtig umgesetzt wird.
Vielleicht hat sich was von der LM Seite geändert ( Updates ).
Habe auch noch folgende Links gelesen:
http://www.ip-symcon.de/forum/f53/elektronische-haushalts-zaehler-ehz-auslesen-11505/
http://www.ip-symcon.de/forum/f52/serial-port-datensaetze-verarbeiten-13173/#post111926
Ich hoffe, es kann mir auf die Sprünge geholfen werden!
Hallo,
hast Du es probeweise mit der DosBox versucht (siehe erste Seite)?
Hallo,
macgyver hat meinen Fehler entdeckt, warum die Kommunikation bei mir Fehlerhaft war.
<?
include('LightManager.ips.php');
$mode = GetValueBoolean(13970 /*[LightManager Pro\AktorSchalten\Status]*/) ? LightManager::INTERTECHNO_OFF : LightManager::INTERTECHNO_ON;
LightManager::InterTechno_SwitchMode('A7', $mode, 13970 /*[LightManager Pro\AktorSchalten\Status]*/, false); // True = lernbare-; FALSE = nicht lernbare-Aktoren
?>
Habe nicht lernbare Aktoren, „FALSE“ ist Richtig!
LM läuft jetzt.
Eines wollte ich noch, ob ein mitlesen bei einer HID Instanz ( LM USB ) mit Symcon möglich ist?
Bin da auch bis jetzt gescheitert.:rolleyes:
Hallo Zusammen,
da meine PHP-Kentnisse derzeit leider nur für Copy&Paste reichen, stehe ich irgendwie auf dem Schlauch, was die Anbindung meines Light_Managers an das Shutter-Control Modul betrifft.
Beim Einmessvorgang erhalte ich als Fehlermeldung immer den Quellcode des Skripts selbst als Ausgabe.
Ohne Schutter Control also direkt über die Light Manager Klasse funktioniert die Rolladensteuerung einwandfrei.
Ich hoffe das jemand anhand der beigefügten Bilder bzw. des folgenden Schutter-Control Skripts einen Fehler enteckt.
Ich wäre euch sehr dankbar.
//Variables provided by ShutterControl Module
//IPS_LogMessage("InstanceID", $_IPS['INSTANCE']); /* InstanceID */
//IPS_LogMessage("Direction", $_IPS['DIRECTION']); /* {0..2} Stop, Up, Down */
//IPS_LogMessage("Duration", $_IPS['DURATION']); /* ms */
include('LightManager.ips.php');
ini_set('max_execution_time', 60);
if($_IPS['SENDER'] != "ShutterControl")
die("This script can only be started by the ShutterControl Module");
define("SC_DIRECTION_STOP", 0);
define("SC_DIRECTION_UP", 1);
define("SC_DIRECTION_DOWN", 2);
$instance = IPS_GetInstance($_IPS['INSTANCE']);
switch($instance['ModuleInfo']['ModuleID'])
{
case "{E6D7692A-7F4C-441D-827B-64062CFE1C02}": //Light-Manager Pro
$running = CreateVariableByName($SC_INSTANCE2, "Moving", 0);
$value = GetValue(IPS_GetStatusVariableID($SC_INSTANCE2, "StatusVariable"));
$shutterID = GetValue(IPS_GetVariableIDByName("Kanal", $SC_INSTANCE2));
switch($SC_DIRECTION)
{
case SC_DIRECTION_STOP:
if(GetValue($running))
{
LightManager::Uniroll_SwitchMode($shutterID, LightManager::UNIROLL_STOP);
SetValue($running, false);
}
break;
case SC_DIRECTION_UP:
if(!GetValue($running))
{
LightManager::Uniroll_SwitchMode($shutterID, LightManager::UNIROLL_UP);
SetValue($running, true);
}
if($SC_DURATION > 0)
{
IPS_Sleep($SC_DURATION);
LightManager::Uniroll_SwitchMode($shutterID, LightManager::UNIROLL_STOP);
SetValue($running, false);
}
else
SetValue($running, false);
break;
case SC_DIRECTION_DOWN:
if(!GetValue($running))
{
LightManager::Uniroll_SwitchMode($shutterID, LightManager::UNIROLL_DOWN);
SetValue($running, true);
}
if($SC_DURATION > 0)
{
IPS_Sleep($SC_DURATION);
LightManager::Uniroll_SwitchMode($shutterID, LightManager::UNIROLL_STOP);
SetValue($running, false);
}
else
SetValue($running, false);
break;
}
break;
default:
die("No Handler for Module ".$instance['ModuleInfo']['ModuleName']." found");
}
function CreateVariableByName($id, $name, $type)
{
$vid = @IPS_GetVariableIDByName($name, $id);
if($vid===false) {
$vid = IPS_CreateVariable($type);
IPS_SetParent($vid, $id);
IPS_SetName($vid, $name);
IPS_SetInfo($vid, "This Variable was created by Script #".$_IPS['SELF']);
}
return $vid;
}
in Zeile 5, fehlt ein ;
Hi,
habe das Test-Skript geändert in:
include(‚LightManager.ips.php‘);
//$status = 52463 /[Rolladen Steuerung\Schutter Control\StatusVariable]/;;
$status = 55542 /[Rolladen Steuerung\Schutter Control]/;
SC_Move($status, 0);
//LightManager::Uniroll_SwitchMode(‚1‘, LightManager::UNIROLL_DOWN, $status); //UP DOWN OR STOP
Jetzt bekomme ich zwar keine Fehlermeldung mehr, aber es passiert auch nix.
Ich denke mal das Problem liegt irgendwie an meinem Schutter-Control Skript, welches den Code von tpmaerk für die Light_Manager KLasse beinhaltet.
Hat vielleicht jemand noch eine Idee?
Gruß
Sebastian
möglicherweise steht die Moving Variable noch auf TRUE?
was schreibt er im Event-Log?
Grüße
Marco
Hallo Zusammen,
erstmal vielen Dank für Eure Bemühungen.
Es war jetzt irgendwie doch einfacher als gedacht.
Keine Ahnung was der Fehler war, aber Ich habe einfach das alte Schutter Modul gelöscht und anschliesend wieder ein neues
angelegt (ohne irgendwas am Skript zu ändern) und schon funktionierts.
Naja manche Dinge erledigen sich wohl von selbst.
Viel Spaß noch mit IPS
Gruß
Sebastian
Ich muss das alte Thema noch einmal auskramen.
Ich würde gerne über IPS Schaltbefehle an den LM Pro mit WiFi Modul senden.
Grund dafür ist, dass ich gerne die „Siro“ Akku Motoren für Verdunkelungsrollos kaufen will.
SmartHome Archive - Siro Antrieb
Kann ich mit IPS Befehle an den LM Pro senden?
Das ist ein einfacher HTTP Befehl, wenn Du weist wie der lautet für den LM Pro kannst Du den von IPS aus verschicken.