eFHT - Brick

eFHZ - enhanced FHZ ; eFHT - enhanced FHT ; eFS20 - enhanced FS20
Mit diesen Bricks ist es möglich die vorhandenen Funktionen der FHZ & FHT Thermostate & FS20 Aktoren im IPS weiter auszuschöpfen.
Inhalt: In jedem Paket sind die Skripte und eine Anleitung enthalten. Im eFHZ Brick ist zudem auch die Core.Main.dll für die Verwendung von IPS-Bricks inkludiert.

Achtung: Die Bricks sind nur in der IPS V1 lauffähig.

Die wären beim eFHT Brick:

[ul]
[li]Nutzung der Komfort-,Absenk- und Fenstertemperatur
[/li][li]Nutzung der Party-/Urlaubsfunktion
[/li][li]Nutzung des Wochenprogrammes
[/li][li]ev. folgen noch weitere wenn sich die Sinnhaftigkeit erkennen lässt :slight_smile:
[/li][/ul]
Das Senden und Empfangen (= bidirektional, soweit man das bei den FHT nennen kann) der Funktionen ist in den Bricks vorhanden.

… und hier ein kleines eFHT-Beispielskript:

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
*/
include('../bricks/eFHT/class.eFHT.php');
eFHT::Begin("OFFIC_eFHT");

eFHT::bFHT_SetMode(mktime(13,20,0,2,18,2008));
eFHT::bFHT_SetTemperature(25.5);
eFHT::bFHT_SendTo();
?>

Die wären beim eFS20 Brick:

[ul]
[li]toggeln des Zustandes an FS20 Aktoren
[/li][li]relative Dimmung möglich, auf volle Helligkeit dimmen ohne den aktuellen Wert zu verändern
[/li][li]Nutzung des internen Timers von FS20 Aktoren (z.B.: FS20DU)
[/li][/ul]
… und hier ein kleines eFS20-Beispielskript:

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
*/
include('../bricks/eFS20/class.eFS20.php');
eFS20::Begin("FSDU");
eFS20::sFS20_SetTimer(300);
eFS20::sFS20_SwitchMode(true);
?>

P.S: Danke an steiner & paresy für die Genehmigung zur Veröffentlichung
Für Interessierte: Viel Spass beim Ausprobieren!

UPDATES - eFHZ:

[ul]
[li]05.03.2008: Schaltjahrproblem bei alten FHT’s eingearbeitet -> Tipp von DHOKAI
[/li][li]04.03.2008: komplett neu überarbeitet
[/li][li]16.02.2008: Release[/ul]
[/li]UPDATES - eFHT:

[ul]
[li]24.05.2008: Bugfix bei bFHT_SetMode -> Danke bmwm3 & weitere vFHT_ Variablenfunktionen
[/li][li]05.03.2008: Schaltjahrproblem bei alten FHT’s eingearbeitet -> Tipp von DHOKAI
[/li][li]04.03.2008: komplett neu überarbeitet
[/li][li]25.02.2008: eFHT_DecodeWP() -> Tipp von wgreipl
[/li][li]24.02.2008: bFHT_RclWeekProgram -> Tipp von wgreipl
[/li][li]24.02.2008: Bugfix bei der Aktualisierung der Statusvariablen -> Tipp von wgreipl
[/li][li]16.02.2008: Release[/ul]
[/li]UPDATES - eFS20:

[ul]
[li]01.05.2008: Release[/ul]
[/li]Gruß
Günter.

eFHZ - Brick.zip (589 KB)

eFS20 - Brick.zip (47 KB)

eFHT - Brick.zip (61.3 KB)

Hallo Günter,

Dein Brick hört sich sehr interessant an.
Ich habe versucht es nach deiner Anleitung zu installieren.

  • Core.Main.dll getauscht
  • eFHZ Script angelegt
  • Name für Buffer ebenfalls auf eFHZ_buffer gesetzt
  • Name für Berechnung auf eFHZ_calc gesetzt
  • Script gespeichert
    Jetzt habe ich Deine Anleitung so verstanden, dass das Script nun ausgeführt werden soll.

IPS quittiert das Ausführen aber mit der Sanduhr und 100% CPU-Last des IPS Prozesses.

Kannst Du mir helfen was ich falsch mache ?

Hallo Chris,
das soll natürlich nicht vorkommen. Grundsätzlich hast du keinen Fehler produziert.

Durch die FHT und die Resourcen die dein PC dem IPS zur Verfügung stellt könnte es aber so sein.

  • [li]Für ein Fehlerkontrolle musst du nur die Eventtrigger von eFHZ_buffer und eFHZ_calc entfernen.
    [/li][li]Ich habe ein paar Bilder für deine Fehlersuche angehängt.
    [/li]Bitte sieh nach ob alle Teile installiert und richtig gesetzt wurden.
    [li]Hast du bereits FHT Scripts erzeugt. bzw wieviele Scripts/FHT’s hast du inkludiert?
    [/li][li]Versuche einmal beim Berechnungsscript (eFHZ_calc) den Eventtrigger zu entfernen.
    [/li]Beim Pufferskript (=eFHZ_buffer) muss der Trigger auf OnUpdate stehen.
    Es sollten nun beide Variablen aktualisiert werden, wobei die Prozessorlast nur unwesentlich oder gar nicht ansteigen soll.

Anmerkung:
Das eFHT-Brick ist erst in Alpha, ich habe noch kein Feedback um die Skripts optimieren zu können.

Gruß
Günter.

modules.jpg

Hallo Günter,

er legt beim Ausführen weder das calc noch das buffer Script an.
Die Register-Var. wird ebenfalls angelegt.

Ich habe herausgefunden, dass er bei diesem Schritt abstürzt:
(im run.brx.php Script)
$ok=IPS_CreateModuleInstance(’{A3855B3C-7CD6-47CA-97AB-E66D346C037F}’);

Muss ich irgend etwas per Hand noch anlegen ?

Hallo Chris,

warum der Fehler bei IPS_ModuleCreateInstance auftritt kann ich dir noch nicht sagen, muss mich selbst mal schlau machen.

Aber versuche einmal folgendes Prozedere:

Manuell:

[ol]
[li]ein RegisterVariable Modul erstellen, dieses Modul mit dem FTDI Modul in BEIDEN Richtungen verbinden
[/li][li]im RegisterVariableModul die Variable eFHT_buffer auf Append Variable eintragen, BufferSize = 8096
[/li][/ol]

Hier die beiden Scripts:
ACHTUNG: die Empfangsvariablen eFHT_buffer & eFHT_calc sind hier hardcoded. Bei Verwendung anderer Variablennamen sind sie hier eventuell anzupassen.

<?
/*
*******************************
 IP-SYMCON Event Scripting  eFHT_buffer
*******************************
*/
function ChkOld($new) {return ($new!=GetValueString("eFHZ_calc"));}

$stbyt=chr(0x81);$rest=explode($stbyt,$IPS_VALUE,2);$teil=explode($stbyt,$IPS_VALUE);
$word=$teil[0];$len1=ord(substr($word,0,1));$len2=ord(substr($teil[1],0,1));
if ($len1>=strlen($word)&&$len1!=$len2) $word.=$stbyt.$teil[1];
if ($len1>0) {
   $new1=substr($stbyt.$word,0,$len1+2);
   $new2=$stbyt.chr($len1).substr($word,0,$len1+1,$len1-2);
   if (strlen($new1)>$len1 && ChkOld($new1)) SetValueString("eFHZ_calc",$new1);
   if (strlen($word)>$len1+2) {
      if (strlen($new2)>$len1 && ChkOld($new2)) SetValueString("eFHZ_calc",$new2);
   }
}
if (count($rest)>1) SetValueString("eFHZ_buffer",$rest[1]);
?>
<?
/*
*******************************
 IP-SYMCON Event Scripting eFHT_calc
*******************************
*/
include(IPS_GetKernelDir()."bricks\\eFHT\\recv.eFHZ.php");
/*
********************************************************************
* ANSCHLIESSEND DIE ZU VERWENDETEN eFHT BRICKS EINBAUEN
* z.B:
* include("ROOM1_eFHT.ips.php");
* Check($IPS_VALUE);
* include("ROOM2_eFHT.ips.php");
* Check($IPS_VALUE);
* etc..
* [Die INCLUDES NICHT in Schleifen verbauen -> Timingprobleme]
********************************************************************
*/

?>

Hallo Günter,

ich glaube ich habe die Lösung.
Ich habe eine Register-Var. manuell angelegt.
nur um mal eine angelegt zu haben.

jetzt das Script erneut ausgeführt mit dem Erfolg:

  • kein Absturz !!!
  • eine weitere Register-Var. erstellt und verbunden
  • Variablen erstellt und zugewiesen
  • die 2 Scripte erstellt (calc und buffer)

Ich glaube es sieht jetzt ganz gut aus.
(Ich werde jetzt weiter testen)

Ich bedanke mich bei Dir für die schnelle Hilfe.

Hallo Chris,
schön dass das jetzt klappt bei dir.

Ich weiß noch nicht wie sich die falsche GUID Adresse bei dir „materialsiert“ hat. Das run.brx.php Skript vom eFHZ-Brick sollte jedenfalls so aussehen:


// Zeile 12 bis 26 kontrollieren

foreach ((IPS_GetInstanceIDsByGUID("{F3855B3C-7CD6-47CA-97AB-E66D346C037F}")) as $IPS_INSTANCE) {
   $inssetbef[$IPS_INSTANCE]=$IPS_INSTANCE;
}
// Modul erstellen
$ok=IPS_CreateModuleInstance('{F3855B3C-7CD6-47CA-97AB-E66D346C037F}');
if ($ok) {
   echo "Schritt 1: OK: Das RegisterVariable Modul wurde erfolgreich erstellt.".chr(13);
}
else {
   echo "Schritt 1: FEHLER: Das RegisterVariable Modul konnte nicht erstellt werden!".chr(13);
   exit;
}
foreach ((IPS_GetInstanceIDsByGUID("{F3855B3C-7CD6-47CA-97AB-E66D346C037F}")) as $IPS_INSTANCE) {
   $inssetaft[$IPS_INSTANCE]=$IPS_INSTANCE;
}

Die Skript müssten jedenfalls stimmen, ich habe sie gerade noch einmal heruntergeladen und kontrolliert.

Günter.

Hallo Günter,

das A steht nur Temp. im Script von meinen Experimenten um es zum laufen zu bringen.

Der Absturz kam mit dem original Script, in dem natürlich ein F ist.

Wie gesagt wenn irgendeine Reg.Var vorhanden ist, dann geht Dein Script.

Hallo Spawn,

selbes Problem wie beim Vorredner.

Habe die Core ausgetauscht und die beiden Bricks in den Ordner Bricks geschoben,

[ul]
[li]IPS gestartet
[/li][li]Die Klasse eFHZ im Skripteditor angelegt.
[/li][li]Die beiden Variablen im BricksEditor vergeben (ohne die Var manuel anzulegen)
[/li][li]gespeichert
[/li][li]und Execute.
[/li][/ul]

Ab diesem Zeitpunkt steht IPS und kann nur noch hart beendet werden.

Eine Idee?

Hallo Werner, ehrlich gesagt ich weiß nicht warum das anscheinend nur bei mir funktioniert!
Aber versuche es mal wie Chris die Empfangsvariablen (String-Typ) von Hand zu erstellen. Chris hat es damit geschafft! Ich habe erst heute wieder das Ganze bei mir ohne Fehler installiert.
Das eFHZ Skript sollte nur eine Installationshilfe sein. Probiere mal den Manuellen Weg

Gruß
Günter.

Hallo Spawn,

danke für die prompte Antwort.

Habe es gerade so gemacht, RegVar angelegt, auf BufferVar gelinkt und skript gestartet.

Das eFHT-Brick meinte zwar das die Var Buffer schon da ist, wird aber sauber mit Daten gefüttert.

Lege gerade den ersten FHT an, dann schauen wir mal was daraus wird.

So. Jetzt habe ich mal einiges manuell gebastelt und ein Testskript für den einen FHT geschrieben.

include("../bricks/eFHT/class.eFHT.php");

eFHT::Begin("eFHT_Keller");
eFHT::bFHT_SetTemperature(21.0);
eFHT::bFHT_SendTo(true);

Da bekomme ich für die Funktion eFHT::bFHT_SendTo(true); den Fehler:

:::: Anscheinend bekomme ich den Fehler im SendTo() nur beim vorherigen bFHT_SetTemperature(21.0); :::::

<b>Warning</b>:  Unable to locate IPSVariable:  in <b>C:\Programme\IP-SYMCON\bricks\eFHT\class.eFHT.php</b> on line <b>115</b>

und die Zeile sieht so aus

            if ($key==0x41) SetValueFloat(self::$FHT_Settings['Settings']['TargetIPSTempVar'],(float)($val/2));

Deswegen aktualisiert mir das Skript auch keine einzige Variable.

Noch ein Idee?

Hallo zusammen,

bei mir reichte es irgendeine Reg.Var anzulegen !!
Danach ging auch das Script.

Das Skript läuft auch mittlerweile, nur bei diesem einen befehl (víelleicht auch andere) bekomme ich den Skriptgehler.

Das geniale an dem Skript ist, das man alle Funktionen des FHT damit einstellen kann.

[ul]
[li]Wochenprogramme
[/li][li]Komfort-Temperatur
[/li][li]Absenk-Temperatur
[/li][li]Fenster offen Temp
[/li][li]Uhrzeit
[/li][/ul]

Und das ganze auch Abfragen. Das sind ähnliche Funktionen wie in der Ur-Software von ELV.

Mich würden mal Beispiele interessieren:

Wie sieht so eine Gestaltung einer Wochentabelle aus, oder Fenster-Auf Temperatur? Ich dachte immer, die könnte man nicht beeinflussen ?

Zusätliche Frage: Kann man dieses Modul auch mit der WLAN FHZ benutzen? Da ist nämlich keine FTDI Instanz, sondern eine Server-Socket-Instanz

mfG Franz

Hallo,

nachdem ich das mal alles entpackt habe, muss ich etwas gestehen:

Ich versteh nur Bahnhof ! Schade :frowning:

Franz

Hallo Franz,

ist ansich nicht zu schwer wenn man sich erst einmal eingearbeitet hat.

Was man nicht erwarten darf ist eine Benutzeroberfläche, für das ist das Brick wahrscheinlich auch nicht geschrieben.

Was das Skript für mich macht ist.

[ul]
[li]Die Komfort-Temperatur einstellen. eFHT::bFHT_SetSunTemperature
[/li][li]Die Absenktemperatur einstellen. eFHT::bFHT_SetLunaTemperature
[/li][li]Die Fensterauf-Temperatur einstellen. eFHT::bFHT_SetWindowTemperature
[/li][li]Die Programme für jeden Tag einstellen eFHT::sFHT_SetWeekProgram
[/li][li]Die Uhrzeit stellen eFHT::sFHT_SetDateAndTime
[/li][li]u.v.m.
[/li][/ul]

Diese Werte konnte man entweder nur am FHT einstellen oder mit der originalen Software (ELV / Con…) die bei der FHZ dabei war.

Mit diesen beiden Bricks ist es nun möglich die Werte aus IPS zu setzen was bei mir sinnvoll ist da ich die FHT im Automatik-Modus laufen habe.

Auch soll / wird dieses Skript nicht Torro´s Heating-Modul ersetzen da es sich hier um einen ganz anderen Ansatz handelt.

Ich sehe es mehr als Ergänzung zu fehlenden Funktionen im FHT-Modul von IPS.

Hallo Werner,
bFHT_SetTemperature ist gleichwertig mit FHT_SetTemperature außer dass auch Integerwerte erlaubt sind. Zudem werden auch die Originalstatusvariablen verwendet. Der Grund warum es nicht funktioniert liegt hier wahrscheinlich in der Settings.xml. Wenn es dir nichts ausmacht kannst du mir deine Settings über PN schicken. Ich sehe mir das an und kann dann eventuell eine Anpassung in den Skripts durchführen.

Die Zeile:

 if ($key==0x41) SetValueFloat(self::$FHT_Settings['Settings']['TargetIPSTempVar'],(float)($val/2)); 

kannst du aber auch einfach auskommentieren. Müsste auch funktionieren, bis auf den Unterschied das die Erfolgsmeldung (von FHT kommend) nicht so schnell aufgezeichnet wird.

P.S.: @ all, für weitere Bugfixes, Wünsche einfach nur melden. Es freut mich wenn die Bricks auf Anklang stossen.

Gruß
Günter.

Hallo Franz,
wenn du wissen möchtest wie die Wochentabelle aufgebaut, schreib’ ne PN.
Ich kann das Protokoll nicht direkt veröffentlichen. paresy & steiner gestatteten mir die Veröffentlich der Bricks weil damit das Protokoll nur indirekt veröffentlicht wird.

Wie Werner es schon sagte, die Bricks sind nur als Zusatzfunktionen zu den bestehenden oder als Ersatz dafür gedacht. Als Einsatz für Designer, WIIPS muss also selbst „Hand anlegen“. :smiley:

Bezüglich ServerSocket <-> WLAN FHZ:
Kann ich dir nicht sagen, aber eigentlich müsste auch das funktionieren.
Hier brauchst du wahrscheinlich ein ServerSocket und ein ClientSocket und folgende Verbindungen.

ServerSocket <— RegisterVariable SENDEN
ClientSocket —> RegisterVariable EMPFANGEN

Allerdings müsste man die Skripts für das SENDEN auch teilweise umschreiben. Für den EMPFANG müsste es sofort funktionieren.

Das einmal fürs Erste.

Gruß
Günter.

Das mit der WLAN FHZ geht direkt mit dem Serversocket.

Lies überall wo FTDI steht einfach ServerSocket und dann wird es gehen. Der ClientSocket ist hier nicht erforderlich.

(Wenn man die WLAN-FHZ im Servermodus betreibt muss man natürlich den ClientSocket nutzen, statt des ServerSockets. Das tut guyabano aber nicht)

paresy