hallo,
gibt’s was neues in Bezug IP-Symcon und Etasteuerung V1.0
Ich bekomme die Kobination nicht zum laufen…
Gruß Konny
hallo,
gibt’s was neues in Bezug IP-Symcon und Etasteuerung V1.0
Ich bekomme die Kobination nicht zum laufen…
Gruß Konny
Hall ,
hallo mistljo und Attain,
nach der Anpassung der Scripts nach dem Umstellungsscript von 2.4 auf 2.5 hab ich den Fehler, dass alle ETA-Werte sich unter Root-ips neu eintragen und nicht mehr in den bereits erstellten Unterordnern.
Sytem immer noch Ips 2.4.
<?
/*
*******************************
IP-SYMCON Event Scripting
*******************************
File : ETA_functions.ips.php
Trigger : -
Interval : -
Dieses Script dient zum Einstellen der gewünschten Monitor Daten und
beinhaltet auch alle für ETA benötigten Funktionen.
Version: 1.0
Mistljo | 23.05.2008 | neu erstellung
*/
//TOdo:
//Blockintervall Zähler auf dynamisches array umbauen. derzeit nur 120 Werte möglich
//Variablen deklaration
$ETA_MLP='';
$ETA_MLP_0='';
$ETA_MLP_1='';
$ETA_MLP_2='';
$ETA_MLP_3='';
$ETA_MLP_4='';
$ETA_MLP_5='';
$Intervall='';
$HighByte='';
$Anzahl='';
$ParameterBlockAnzahl='';
$BlockIntervallTimer = GetValueInteger(GetObjectID("ETA/Datenabfrage Intervall")); // Alle X Sekunden wird der Parameter Block rotiert
$Intervall = 60; // (60)Intervall der ankommenden Daten, nicht ändern da bei dieser Version das anders abgearbeitet wird, 60 sek ist ein optimaler Wert
// Dieser Wert wird an den Ofen gesendet und gibt das Intervall an, wieoft (Zeitabstand) der Ofen die angefoderten Werte schicken soll, nicht ändern!
//$Anzahl =20; // Anzahl der Auszulesenden Parameter [Wert: 1-20] Bezieht sich immer auf alle Parameter Blöcke
//Parameter als ID !! nachzugucken im XML File (derzeit)
//Die Steuerung erlaubt nur max. 20 Abfragen !!!
//Wieviele MonitorListen Blöcke sind vorhanden? Ein Block hat 20 Parameter
//Max. 6 Blöcke (Durchlaufzeit 60 Sekunden, 10 Sek Pro Block[siehe ->$BlockIntervallTimer])
$HighByte = 0; //normalerweise immer 0 , sollte nicht geändert werden
// Einen weiteren Monitor Parameter schicken lassen
function MonitorListe_weiterenParameterHolen($ETA_ComID)
{
$MonitorListeWeiter ="{MA";
If (GetValueInteger(GetObjectID("ETA/Setup/Berechtigungs Stufe?")) == 0) {
$MonitorListeWeiterBytes = chr(02) . chr(02) . chr(01) . chr(01); //Standard
} else if (GetValueInteger(GetObjectID("ETA/Setup/Berechtigungs Stufe?")) == 1) {
$MonitorListeWeiterBytes = chr(02) . chr(03) . chr(01) . chr(02); //Service
} else if (GetValueInteger(GetObjectID("ETA/Setup/Berechtigungs Stufe?")) == 2) {
$MonitorListeWeiterBytes = chr(02) . chr(04) . chr(01) . chr(03); //Profi
} else if (GetValueInteger(GetObjectID("ETA/Setup/Berechtigungs Stufe?")) == 3) {
$MonitorListeWeiterBytes = chr(02) . chr(05) . chr(01) . chr(04); //Expert
}
$MonitorListeEndZeichen = "}";
//Zusammensetzen
$Daten = $MonitorListeWeiter . $MonitorListeWeiterBytes . $MonitorListeEndZeichen;
ComPort_SendText($ETA_ComID, $Daten);
}
// Einen weiteren Parameter schicken lassen (MF)
function Parameter_Liste_weiterenParameterHolen($ETA_ComID)
{
$ParameterListeStart ="{MF";
If (GetValueInteger(GetObjectID("ETA/Setup/Berechtigungs Stufe?")) == 0) {
$ParameterListeStartBytes = chr(02) . chr(02) . chr(01) . chr(01); //Standard
} else if (GetValueInteger(GetObjectID("ETA/Setup/Berechtigungs Stufe?")) == 1) {
$ParameterListeStartBytes = chr(02) . chr(03) . chr(01) . chr(02); //Service
} else if (GetValueInteger(GetObjectID("ETA/Setup/Berechtigungs Stufe?")) == 2) {
$ParameterListeStartBytes = chr(02) . chr(04) . chr(01) . chr(03); //Profi
} else if (GetValueInteger(GetObjectID("ETA/Setup/Berechtigungs Stufe?")) == 3) {
$ParameterListeStartBytes = chr(02) . chr(05) . chr(01) . chr(04); //Expert
}
$ParameterListeEndZeichen = "}";
//Zusammensetzen
$Daten = $ParameterListeStart . $ParameterListeStartBytes . $ParameterListeEndZeichen;
ComPort_SendText($ETA_ComID, $Daten);
}
// Einen weiteren Parameter schicken lassen (Mi)
function Parameter_Index_Liste_weiterenParameterHolen($ETA_ComID)
{
$ParameterListeIndexStart ="{MH";
$ParameterListeIndexStartBytes = chr(01) . chr(01) . chr(01);
$ParameterListeIndexEndZeichen = "}";
//Zusammensetzen
$Daten = $ParameterListeIndexStart . $ParameterListeIndexStartBytes . $ParameterListeIndexEndZeichen;
ComPort_SendText($ETA_ComID, $Daten);
}
// End Signal zum Ofen, Keine Parameter Zeile mehr schicken (Monitor List (XML), ParameterList, ParameterIndex)
function ParameterHolenSTOPP($ETA_ComID)
{
$ParameterListeEnde = "{MO";
$ParameterListeEndeBytes = chr(01) . chr(01);
$ParameterListeEndZeichen = "}";
//Zusammensetzen
$Daten = $ParameterListeEnde . $ParameterListeEndeBytes . $ParameterListeEndZeichen;
ComPort_SendText($ETA_ComID, $Daten);
}
//Ende der Datenaufzeichnung, STOPP für den Ofen
function Datenanfodern_STOP($ETA_ComID)
{
$Daten ="{ME"; //Startzeichen und Servicekennung
$Daten .= chr(0); //Anzahl der Nutzdatenbytes
$Daten .= chr(0); //Prfsumme
$Daten .= "}"; //Stoppzeichen
IPS_Sleep(100);
ComPort_SendText($ETA_ComID, $Daten);
IPS_Sleep(100);
}
//START für den Ofen daten zu schicken, abhängig vom derzeitigen Parameter Block
function Datenanfordern_START($ETA_ComID,$BlockID)
{
//Variable Deklatation
global $ETA_MLP, $ETA_MLP_0, $ETA_MLP_1, $ETA_MLP_2, $ETA_MLP_3, $ETA_MLP_4, $ETA_MLP_5;
global $Intervall,$HighByte,$Anzahl;
$TempDaten = '';
$TempPS = 0;
$tempBlockName = "ETA_MLP_". $BlockID;
$Anzahl = count($$tempBlockName);
//Daten Bauen
$Daten ="{MC"; //Startzeichen und Servicekennung
$Daten .= chr(1+($Anzahl*3)); //Anzahl der Nutzdatenbytes ( RefreshTime + Anzahl * 3 byte)
$PS = $Intervall;
$RealBlockNameArray = $$tempBlockName;
for ($i=0; $i<$Anzahl; $i++) //Die n Anzahl Parameter
{
$TempDaten .= chr((int)MonitorXMLAuslesen(1, $RealBlockNameArray[$i],0,0)) . chr((int)$HighByte) . chr((int)MonitorXMLAuslesen(2, $RealBlockNameArray[$i],0,0)); //...jeweils 3 byte
//Pruefsumme
$TempPS = $TempPS + MonitorXMLAuslesen(1, $RealBlockNameArray[$i],0,0) + MonitorXMLAuslesen(2, $RealBlockNameArray[$i],0,0);
}
$PS = $PS + $TempPS;
$PS = $PS%256; //Modulo 256
$Daten .= chr($PS);
$Daten .= chr($Intervall);
$Daten .= $TempDaten;
$Daten .= "}";
ComPort_SendText($ETA_ComID, $Daten);
}
//Auslesen des MonitorXML Files
function MonitorXMLAuslesen($SuchType, $ML_ID, $Knoten, $LByte)
{
//SuchType
// 1 = ID->Knoten
// 2 = ID->Index(LByte)
// 3 = Knoten und Index->Teiler
// 4 = Knoten und Index->ID
// 5 = Knoten und Index->Name
// 6 = ID->Name
// 7 = ID->Ueberschrift
// 8 = ID->Datentype
$xml = simplexml_load_file('Monitorliste.xml');
if ($SuchType == 1) {
foreach ($xml->xpath('MonitorRow') as $Row) {
If ($Row->ID == $ML_ID) {
return $Row->Knoten;
}
}
} else if ($SuchType == 2) {
foreach ($xml->xpath('MonitorRow') as $Row) {
If ($Row->ID == $ML_ID) {
return $Row->LByte;
}
}
} else if ($SuchType == 3) {
foreach ($xml->xpath('MonitorRow') as $Row) {
If ($Row->Knoten == $Knoten and $Row->LByte == $LByte) {
return $Row->Teiler;
}
}
} else if ($SuchType == 4) {
foreach ($xml->xpath('MonitorRow') as $Row) {
If ($Row->Knoten == $Knoten and $Row->LByte == $LByte) {
return $Row->ID;
}
}
} else if ($SuchType == 5) {
foreach ($xml->xpath('MonitorRow') as $Row) {
If ($Row->Knoten == $Knoten and $Row->LByte == $LByte) {
return utf8_decode($Row->Name);
}
}
} else if ($SuchType == 6) {
foreach ($xml->xpath('MonitorRow') as $Row) {
If ($Row->ID == $ML_ID) {
return utf8_decode($Row->Name);
}
}
} else if ($SuchType == 7) {
foreach ($xml->xpath('MonitorRow') as $Row) {
If ($Row->ID == $ML_ID) {
return utf8_decode($Row->Ueberschrift);
}
}
} else if ($SuchType == 8) {
foreach ($xml->xpath('MonitorRow') as $Row) {
If ($Row->ID == $ML_ID) {
return $Row->Datentype;
}
}
}
}
//Diese Funktion überprüft die Auswahl der Monitor Parameter und schreibt sie in die Arrays
function ETA_ParameterAuswahlAnalyse()
{
global $ParameterBlockAnzahl;
global $ETA_MLP, $ETA_MLP_0, $ETA_MLP_1, $ETA_MLP_2, $ETA_MLP_3, $ETA_MLP_4, $ETA_MLP_5;
$AnalyseFehler = false;
$vars = IPS_GetVariableList();
$ETA_MLP = array();
foreach($vars as $var)
{
$GetvarType = IPS_GetVariable($var);
$GetvarName = IPS_GetObject($var);
if (($GetvarType['VariableValue']['ValueType'] == 1) and (substr($GetvarName['ObjectName'],0,8) == 'ETA_MLP_') and ($GetvarType['VariableValue']['ValueInteger'] == 1))
{
$IDTemp = substr($GetvarName['ObjectName'],8,3);
//nullen vorne entfernen
if ((substr($IDTemp,0,1) == 0)) {
$IDTemp = substr($IDTemp,1,2);
if ((substr($IDTemp,0,1) == 0)) {
$IDTemp = substr($IDTemp,1,1);
}
}
array_push($ETA_MLP,$IDTemp);
}
}
//grösse überprüfen
if (count($ETA_MLP) == 0) {
write_error("Warnung: Mindestens einen Monitor Parameter auswählen!", 1);
$AnalyseFehler = true;
} elseif (count($ETA_MLP) > 120) {
write_error("Warnung: Maximal 120 Monitor Parameter auswählen! Derzeit sind ".count($ETA_MLP)." ausgewählt", 1);
$AnalyseFehler = true;
} else {
// Auf doppelte einträge prüfen
$tempArray = array();
foreach($ETA_MLP as $ETA_MLP_tempID)
{
$tempArray[$ETA_MLP_tempID] = MonitorXMLAuslesen(1,$ETA_MLP_tempID, 0, 0).MonitorXMLAuslesen(2,$ETA_MLP_tempID, 0, 0);
}
$DoppelteIDs = array_not_unique($tempArray);
if (!count($DoppelteIDs) == 0)
{
//Doppelte Einträge vorhanden
$AnalyseFehler = true;
write_error("Error: Abfrage kann nicht gestartet werden!",1); // 2= General 1= ETA Alarm
write_error("Folgende ausgewählte Monitor Parameter haben gleiche Zieldaten (Knoten/Index): ",1); // 2= General 1= ETA Alarm
SetValueBoolean(GetObjectID("ETA/ETA Status?"),true);
foreach (array_keys($DoppelteIDs) as $DoppelteID)
{
write_error("ID: ".$DoppelteID." Name: ".MonitorXMLAuslesen(6,$DoppelteID, 0, 0),1); // 2= General 1= ETA Alarm
}
} else {
//keine doppelte Einträge vorhanden
$AnalyseFehler = false;
//Blöck Arrays befüllen
$ETA_MLP_0 = array();
//Block1 Array befüllen
for($count = 1; ($count <= count($ETA_MLP)) and ($count <= 20); $count++)
{
array_push($ETA_MLP_0,$ETA_MLP[$count-1]);
}
//Block2 Array befüllen
if (count($ETA_MLP) > 20) {
$ETA_MLP_1 = array();
$ParameterBlockAnzahl = $ParameterBlockAnzahl +1;
for($count = 21; ($count <= count($ETA_MLP)) and ($count <= 40); $count++)
{
array_push($ETA_MLP_1,$ETA_MLP[$count-1]);
}
}
//Block3 Array befüllen
if (count($ETA_MLP) > 40) {
$ParameterBlockAnzahl = $ParameterBlockAnzahl +1;
$ETA_MLP_2 = array();
for($count = 41; ($count <= count($ETA_MLP)) and ($count <= 60); $count++)
{
array_push($ETA_MLP_2,$ETA_MLP[$count-1]);
}
}
//Block4 Array befüllen
if (count($ETA_MLP) > 60) {
$ParameterBlockAnzahl = $ParameterBlockAnzahl +1;
$ETA_MLP_3 = array();
for($count = 61; ($count <= count($ETA_MLP)) and ($count <= 80); $count++)
{
array_push($ETA_MLP_3,$ETA_MLP[$count-1]);
}
}
//Block5 Array befüllen
if (count($ETA_MLP) > 80) {
$ParameterBlockAnzahl = $ParameterBlockAnzahl +1;
$ETA_MLP_4 = array();
for($count = 81; ($count <= count($ETA_MLP)) and ($count <= 100); $count++)
{
array_push($ETA_MLP_4,$ETA_MLP[$count-1]);
}
}
//Block6 Array befüllen
if (count($ETA_MLP) > 100) {
$ParameterBlockAnzahl = $ParameterBlockAnzahl +1;
$ETA_MLP_5 = array();
for($count = 101; ($count <= count($ETA_MLP)) and ($count <= 120); $count++)
{
array_push($ETA_MLP_5,$ETA_MLP[$count-1]);
}
}
}
}
return $AnalyseFehler;
}
//Überprüft ein array auf doppelte Einträge und gibt ein array zurück
function array_not_unique($raw_array) {
$dupes = array();
natcasesort($raw_array);
reset ($raw_array);
$old_key = NULL;
$old_value = NULL;
foreach ($raw_array as $key => $value) {
if ($value === NULL) { continue; }
if ($old_value == $value) {
$dupes[$old_key] = $old_value;
$dupes[$key] = $value;
}
$old_value = $value;
$old_key = $key;
}
return $dupes;
}
//Diese Function schreibt die Error logs für das Webfrontend
function write_error($Meldung, $Type)
{
if ($Type == 1) { // ETA Alarm
SetValueString('ETA Alarmmeldungen',GetValueString('ETA Alarmmeldungen') .date("Y.m.d, H:i:s"). " " .$Meldung ."</BR>");
SetValueBoolean('ETA Status?',true);
IPS_SetHidden(GetObjectID("ETA/ETA Alarmmeldungen"), false); //Objekt verstecken
WFC_Reload(GetObjectID("WebFront Configurator"));
}
if ($Type == 2) { //General Alarm
SetValueString('IPS Alarm',GetValueString('IPS Alarm') .date("Y.m.d, H:i:s"). " " .$Meldung ."</BR>");
SetValueBoolean('IPS_Alarm_Bool',true);
}
if ($Type == 3) { //Setup Log
SetValueString('Setup_log',GetValueString('Setup_log') .date("Y.m.d, H:i:s"). " " . $Meldung ."</BR>");
}
}
//Liefert die gesuchte Kategorie ID zurück, Bsp. des Übergabewertes: "ETA/Variablen/Allgemein"
function GetObjectID($ObjectsString)
{
$TempParentID = 0;
$ObjectArray = explode("/", $ObjectsString);
foreach($ObjectArray as $TempObjectID){
$TempParentID = IPS_GetObjectIDByName($TempObjectID,$TempParentID);
}
return $TempParentID;
}
//Erstellt Variablen Profile
function createVariablenProfile($VarProfileName,$VarProfileType,$Profilename_Prefix,$Profilename_Suffix,$PMin,$PMax,$PSchritt,$PNachkommastellen,$PIcon)
{
IPS_CreateVariableProfile($VarProfileName,$VarProfileType);
IPS_SetVariableProfileText($VarProfileName,$Profilename_Prefix,$Profilename_Suffix);
IPS_SetVariableProfileValues($VarProfileName,$PMin,$PMax,$PSchritt);
IPS_SetVariableProfileDigits($VarProfileName,$PNachkommastellen);
IPS_SetVariableProfileIcon($VarProfileName,$PIcon);
}
function createVariablenProfileParameterListe($VarProfileName,$VarProfileType,$Profilename_Prefix,$Profilename_Suffix,$PMin,$PMax,$PSchritt,$PNachkommastellen,$PIcon)
{
IPS_CreateVariableProfile($VarProfileName,$VarProfileType);
IPS_SetVariableProfileText($VarProfileName,$Profilename_Prefix,$Profilename_Suffix);
IPS_SetVariableProfileValues($VarProfileName,$PMin,$PMax,$PSchritt);
IPS_SetVariableProfileDigits($VarProfileName,$PNachkommastellen);
IPS_SetVariableProfileIcon($VarProfileName,$PIcon);
}
function KategorieErstellen($KategorieName,$ParentID)
{
$CatID = IPS_CreateCategory(); // Kategorie anlegen
IPS_SetName ($CatID, $KategorieName); //Name festlegen
IPS_SetParent($CatID,$ParentID); // in parent ID verschieben
return $CatID;
}
function IfVarNotExistCreateNewOneWithProfile($IPSVarName,$IPSVarType,$ParentID,$ProfileName,$ObjectHidden,$DummyModul)
{
$newVar = 0;
$newDummyModulID = 0;
$VarID = @IPS_GetVariableIDByName($IPSVarName);
if ($VarID == 0)
{
if ($DummyModul == true)
{
//Dummy Modul erstellen
$newDummyModulID = IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
IPS_SetName($newDummyModulID,$IPSVarName);
IPS_SetParent($newDummyModulID, $ParentID);
IPS_ApplyChanges($newDummyModulID);
//Original Variable erstellen
$newVar = IPS_CreateVariable($IPSVarType);
IPS_SetName($newVar, $IPSVarName);
IPS_SetParent($newVar, $newDummyModulID);
if ($ProfileName == "0") {
} else {
IPS_SetVariableCustomProfile($newVar, $ProfileName);
}
IPS_SetHidden($newVar, $ObjectHidden); //Objekt verstecken
//Graph Variable erstellen
$newVar = IPS_CreateVariable(0);
IPS_SetName($newVar, "Graph");
IPS_SetParent($newVar, $newDummyModulID);
IPS_SetVariableCustomProfile($newVar, "~Switch");
IPS_SetVariableCustomAction($newVar,GetObjectID("ETA/Scripts/SCR_WebInterfaceUebergabe_ETA"));
} else {
$newVar = IPS_CreateVariable($IPSVarType);
IPS_SetName($newVar, $IPSVarName);
IPS_SetParent($newVar, $ParentID);
if ($ProfileName == "0") {
} else {
IPS_SetVariableCustomProfile($newVar, $ProfileName);
}
IPS_SetHidden($newVar, $ObjectHidden); //Objekt verstecken
}
}
return $newVar;
}
//Erstellt/löscht DB Logs einer/aller Variablen
//$status 0 = löscht ein Log einer Variable
//$status 1 = erstelt ein Log einer Variable
//$status 2 = löscht alle Logs aller Variablen
//VarID = IPSID der Variable
function enableDisableDBLogging($newstatus,$varID)
{
$CurLogStatus = AC_GetLoggingStatus(GetObjectID("Archive Handler"),$varID);
//deaktivieren
if ($newstatus == 0)
{
if ($CurLogStatus == 1)
{
AC_SetLoggingStatus(GetObjectID("Archive Handler"),$varID,false);
IPS_ApplyChanges(GetObjectID("Archive Handler"));
$LogDBStatus = 0;
} else {
$LogDBStatus = 1;
}
//aktivieren
} elseif ($newstatus == 1) {
if ($CurLogStatus == 0)
{
AC_SetLoggingStatus(GetObjectID("Archive Handler"),$varID,true);
IPS_ApplyChanges(GetObjectID("Archive Handler"));
$LogDBStatus = 0;
} else {
$LogDBStatus = 1;
}
}
return $LogDBStatus;
}
//
function WerteVerstecken()
//Alle Dummy Module werden bei Start der Monitorliste Abfrage versteckt.
//Werte die aktuell abgefragt werden, werden beim eintreffen wieder sichtbar geschalten (ComString_zerlegen)
{
$All_IPS_Objects = IPS_GetObjectList();
foreach($All_IPS_Objects as $IPS_Obj)
{
$IPS_Obj_as_object = IPS_GetObject($IPS_Obj);
// Wenn es sich um ein "ETA_Werte" Dummy Modul handelt...
if ((substr($IPS_Obj_as_object['ObjectName'],0,9) == 'ETA_Wert_') and ($IPS_Obj_as_object['ParentID'] == GetObjectID("ETA/Variablen/Aktuelle Werte")))
{
IPS_SetHidden($IPS_Obj_as_object['ObjectID'], true);
}
}
}
//Wenn prüfsumme ungültig, wert nochmal anfragen
function WertNochmalAnfragen($ETA_ComID)
{
/*
$StringEnde = "{MR";
$StringEndeBytes = chr(00) . chr(00);
$StringEndZeichen = "}";
//Zusammensetzen
$Daten = $StringEnde . $StringEndeBytes . $StringEndZeichen;
ComPort_SendText($ETA_ComID, $Daten);
*/
write_error("Wert Nochmal angefordert (Prüfsummen Error).",3);
}
?>
Kann mir da jemand helfen…
Gruß Konny
Hallo konny,
$VarID = @IPS_GetVariableIDByName($IPSVarName);
Da fehlt noch der Parameter der parent ID.
IPS_GetVariableIDByName: IP-Symcon :: Automatisierungssoftware
Gruß
Leider habe ich in letzter Zeit etwas wenig Zeit um an eta2ips zu arbeiten. Ich habe aber eine Beta Version die unter IPS 2.5 läuft. Ich habe einige Fehler entfernt aber sicher auch neue eingebaut.
Die Buttons sind auch nicht alle ganz fertig aber diese Version funktioniert bei mir normal.
Da meine Webseite derzeit auch nicht ganz funktioniert und ich noch nicht dazugekomme bin diese neu zu machen, gibts die Beta heute so. :mad:
Ein Update des Scripts ist derzeit nicht eingebaut, daher bitte IPS leer machen oder neu laden. Backup nicht vergessen
IPS_1.1 Beta.rar (19.3 KB)
Sollte in der Beta Version ausgebessert sein. Bitte um Rückmeldung ob etwas nicht funktioniert. Danke
Danke, das war’s :
$VarID = @IPS_GetVariableIDByName($IPSVarName,$ParentID);
So jetzt werd ich meine IPS2.4 mit ETA 0.2 auf 2.5 umstellen
und dann mal leer die neue Beta 1.1 testen.
Danke Konny
Guten Tag miteinander,
hab mich gerade registriert weil ich beim googeln diesen thread gefunden habe.
Ich hab kein IP-Symcom, also bitte nicht gleich rauswerfen…
Vielleicht gibts ja Schnittmengen.
Was ich habe ist ne Homematic-CCU, und einen (neuen) ETA PC-20 Pelletkessel, der noch nicht ganz rund läuft.
Und CCU-Historian, ein super logging-Programm für homematic:
CCU-Historian: Ein Langzeitarchiv für die CCU
Der Kessel hat ja die LAN-Schnittstelle und ich würde sooo gern dessen Daten zusammen mit denen der CCU über CCU-Historian aufzeichnen, um mit dem Heizungsbauer fundiert reden zu können.
Der Entwickler von CCU-Historian arbeitet gerade dran, beliebige Datenquellen mit XML-RPC-Schnittstelle anzapfen zu können, aber der Kessel hat ja leider was proprietäres.
Und dann gibt es diesen Thread.:o
Hat vielleicht einer bereits was laufen und/oder ne Idee wie man eine mögliche Anpassung realisieren könnte?
Danke!
E.
Rausgeworfen wurde hier noch niemand.
Tut mir Leid, aber über die LAN Schnittstelle habe ich keine Info’s. Aber wenn Du mal ganz nett bei ETA per Mail anfragst, bekommst Du bestimmt eine Antwort. Die sind ganz umgänglich. (Ich würde mich über eine Kopie per PN freuen).
Dann wäre die Frage wie weiter. Entweder bastelst Du Dir was, um die Daten mit dem Datenlogger aufzeichnen zu können oder Du steigst gleich auf IP-Symcon um. Da kannst Du dann auch alle Werte in Datenbanken versenken . Ob die von der CCU, Deinem Kessel oder sonst woher kommen ist dann eigentlich egal.
HTH
Attain
Hi Attain,
danke für die Antwort!
Hatte eigentlich nicht vor IP-SYMCOM zu verwenden… man muß sich auch damit beschäftigen, und Hausautomatisierung ist bei mir Mittel zum Zweck, nicht Hobby.
OK, ich werd mal bei ETA nachfragen. Kopie schicke ich dann.
Danke!
E.
Hallo Mistljo,
hast du was Neues ?
Die ETA 1.1 in 2.5 IPS bleibt bei der Konfuguration der Monitorliste ( ca.4 bis 20 Variablen) hängen und legt keine Variablen im Objektbaum an…
Lösungsergänzung:
liegt an der langen Verbindung: USB15m + usbtoserial + Bautrate + Energieeinsbarung USB-Hub. Alles eleminiert.
Gruß Konny
Interessant, gibt IPS eine Fehlermeldung aus?
Du meinst beim laden der Grundkonfiguration?
Ist das laden von ofen schon abgeschlossen?
LOG?
Nein:
Etalog läuft in 2 Minuten ab
Monitorliste nach 2min (192 Werte)fertiggestellt
Parameter xml nach 10 Minutern angelegt…
Bei Datenabfrage:
Alarmmeldung mindestens einen Monitorwert auswählen…
…leider ja keiner angelegt…
Beim Drücken auf zurücksetzen: Grunddaten werden gerade geladen…
Gruß Konny
soweit ich es mir jetzt im Script
SCR_Grunddaten
angeschaut habe, hängt es irgendwo zwischen case 3 und 4.
Ich habs jetzt mal „manuell“ gelöst:
<?
function KategorieErstellen($KategorieName,$ParentID)
{
$CatID = IPS_CreateCategory(); // Kategorie anlegen
IPS_SetName ($CatID, $KategorieName); //Name festlegen
IPS_SetParent($CatID,$ParentID); // in parent ID verschieben
return $CatID;
}
function GetObjectID($ObjectsString)
{
$TempParentID = 0;
$ObjectArray = explode("/", $ObjectsString);
foreach($ObjectArray as $TempObjectID){
$TempParentID = IPS_GetObjectIDByName($TempObjectID,$TempParentID);
}
return $TempParentID;
}
function GetObjectList($parent) {
$ids = IPS_GetChildrenIDs($parent);
foreach($ids as $id)
{
$ids = array_merge($ids, GetObjectList($id));
}
return $ids;
}
//Löscht nicht mehr vorhandene Variablen aus dem Archive Handler
function deleteOldVarsFromArchiveHandler()
{
foreach (AC_GetAggregationVariables(GetObjectID("Archive Handler"),false) as $AC_archiv){
$VarID = $AC_archiv['VariableID'];
$VarExist = @IPS_GetVariable($VarID);
if ($VarExist == false)
{
AC_DeleteVariableData(GetObjectID("Archive Handler"),$VarID,0,0);
}
}
}
function CheckCreateNewObject($IPSObjName,$IPSObjType,$IPSVarType,$ParentID,$ProfileName,$ObjectHidden,$DummyModul,$UebersichtVar,$XMLVarID)
{
switch ($IPSObjType)
{
case 0: //Kategorie erstellen
$CatID = IPS_CreateCategory(); // Kategorie anlegen
IPS_SetName ($CatID, $IPSObjName); //Name festlegen
IPS_SetParent($CatID,$ParentID); // in parent ID verschieben
return $CatID;
break;
case 1: //Instance erstellen
//Derzeit nicht in Verwendung
break;
case 2: //Variable erstellen
$newVar = 0;
$newDummyModulID = 0;
$AktuelleWerteObjectsID = GetObjectList($ParentID);
foreach ($AktuelleWerteObjectsID as $AktuellerWertObjectID)
{
$AktuellerWertObject = IPS_GetObject($AktuellerWertObjectID);
if ($AktuellerWertObject['ObjectType'] == 2)
{
//Ist gefundene Variable gleich der gesuchten?
if ($AktuellerWertObject['ObjectName'] == $IPSObjName)
{
$newVar = $AktuellerWertObjectID; //Gefundene Variable zurückgeben
}
}
}
if ($newVar == 0)
//Es wurde keine Variable gefunden = neue erstellen
{
if (($DummyModul == true) and ($UebersichtVar == false)) //Aktueller Wert Variable
{
//Dummy Modul erstellen
$newDummyModulID = IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
IPS_SetName($newDummyModulID,$IPSObjName." Wert");
IPS_SetParent($newDummyModulID, $ParentID);
IPS_SetPosition($newDummyModulID, $XMLVarID); //ID als Position mitgeben
IPS_ApplyChanges($newDummyModulID);
//Graph Variable erstellen
$newVar = IPS_CreateVariable(0);
IPS_SetName($newVar, "Graph");
IPS_SetParent($newVar, $newDummyModulID);
IPS_SetVariableCustomProfile($newVar, "~Switch");
IPS_SetVariableCustomAction($newVar,GetObjectID("ETA/Scripts/SCR_WebInterfaceUebergabe_ETA"));
IPS_SetPosition($newVar, 1);
//Original Variable erstellen
$newVar = IPS_CreateVariable($IPSVarType);
IPS_SetName($newVar, $IPSObjName);
IPS_SetParent($newVar, $newDummyModulID);
if ($ProfileName == "0") {
} else {
print "Profile zuordnung"." ".$newVar." ".$ProfileName;
IPS_SetVariableCustomProfile($newVar, $ProfileName);
}
IPS_SetHidden($newVar, $ObjectHidden); //Objekt verstecken
} else if (($DummyModul == true) and ($UebersichtVar == true)) //Aktueller Wert Variable und Übersichtsvariable erstellen
{
//Dummy Modul erstellen
$newDummyModulID = IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
IPS_SetName($newDummyModulID,$IPSObjName." Wert");
IPS_SetParent($newDummyModulID, $ParentID);
IPS_ApplyChanges($newDummyModulID);
//Original Variable erstellen
$newVar = IPS_CreateVariable($IPSVarType);
IPS_SetName($newVar, $IPSObjName);
IPS_SetParent($newVar, $newDummyModulID);
if ($ProfileName == "0") {
} else {
IPS_SetVariableCustomProfile($newVar, $ProfileName);
}
IPS_SetHidden($newVar, $ObjectHidden); //Objekt verstecken
//Link in der Übersichtsseite erstellen
$LinkID = IPS_CreateLink(); //Link anlegen
IPS_SetName($LinkID, $IPSObjName); //Link benennen
IPS_SetLinkChildID($LinkID, $newVar); //Link verknüpfen
IPS_SetParent($LinkID, GetObjectID("ETA/Übersicht"));
IPS_SetPosition($LinkID, $XMLVarID); //ID als Position mitgeben
} else {
$newVar = IPS_CreateVariable($IPSVarType);
IPS_SetName($newVar, $IPSObjName);
IPS_SetParent($newVar, $ParentID);
if ($ProfileName == "0") {
} else {
echo $newVar;
echo $ProfileName;
IPS_SetVariableCustomProfile($newVar, $ProfileName);
}
IPS_SetHidden($newVar, $ObjectHidden); //Objekt verstecken
}
}
break;
}
return $newVar; //Liefert Variablen ID zurück
}
if (file_exists('Monitorliste.xml') == true){
$xml = simplexml_load_file('Monitorliste.xml');
$i = 0;
$top = 0;
$left = 5;
foreach ($xml->xpath('MonitorRow') as $Row)
{
if (strlen($Row->ID) == 1) {
$newID = "00" . utf8_decode($Row->ID);
} elseif (strlen($Row->ID) == 2) {
$newID = "0" . utf8_decode($Row->ID);
} else {
$newID = utf8_decode($Row->ID);
}
if (($Row->IndexEbene == 0) and (($Row->Ueberschrift == 255) or ($Row->Ueberschrift == 2)or ($Row->Ueberschrift == 32))) { //HauptGruppen erstellen index 0
$neueIndexEbene0 = KategorieErstellen(strval(utf8_decode($Row->Name)),GetObjectID("ETA/Variablen/Monitor Liste"));
//für die Übersichtsseite
if ($Row->Ueberschrift != 255) {
$NeueVariablenID = CheckCreateNewObject("Übersicht_".utf8_decode($Row->Name),2,1,$neueIndexEbene0,"ETA.Main.Monitorliste",false,false,false,null);
IPS_SetInfo($NeueVariablenID,"ETA_MLP_".$newID);
IPS_SetVariableCustomAction($NeueVariablenID,GetObjectID("ETA/Scripts/SCR_WebInterfaceUebergabe_ETA"));
}
} elseif (($Row->IndexEbene == 1) and ($Row->Ueberschrift == 255)) { //Index Ebene 1
$neueIndexEbene1 = KategorieErstellen(strval(utf8_decode($Row->Name)),$neueIndexEbene0);
} elseif (($Row->IndexEbene == 2) and ($Row->Ueberschrift == 255)) { //Index Ebene 2
$neueIndexEbene2 = KategorieErstellen(strval(utf8_decode($Row->Name)),$neueIndexEbene1);
} elseif (($Row->IndexEbene == 3) and ($Row->Ueberschrift == 255)) { //Index Ebene 3
$neueIndexEbene3 = KategorieErstellen(strval(utf8_decode($Row->Name)),$neueIndexEbene2);
} elseif (($Row->IndexEbene == 1) and ($Row->Ueberschrift != 255)) { //Index Ebene 1 - Variablen
$NeueVariablenID = CheckCreateNewObject(utf8_decode($Row->Name),2,1,$neueIndexEbene0,"ETA.Main.Monitorliste",false,false,false,null);
IPS_SetInfo($NeueVariablenID,"ETA_MLP_".$newID);
IPS_SetVariableCustomAction($NeueVariablenID,GetObjectID("ETA/Scripts/SCR_WebInterfaceUebergabe_ETA"));
} elseif (($Row->IndexEbene == 2) and ($Row->Ueberschrift != 255)) { //Index Ebene 2 - Variablen
$NeueVariablenID = CheckCreateNewObject(utf8_decode($Row->Name),2,1,$neueIndexEbene1,"ETA.Main.Monitorliste",false,false,false,null);
IPS_SetInfo($NeueVariablenID,"ETA_MLP_".$newID);
IPS_SetVariableCustomAction($NeueVariablenID,GetObjectID("ETA/Scripts/SCR_WebInterfaceUebergabe_ETA"));
} elseif (($Row->IndexEbene == 3) and ($Row->Ueberschrift != 255)) { //Index Ebene 3 - Variablen
$NeueVariablenID = CheckCreateNewObject(utf8_decode($Row->Name),2,1,$neueIndexEbene2,"ETA.Main.Monitorliste",false,false,false,null);
IPS_SetInfo($NeueVariablenID,"ETA_MLP_".$newID);
IPS_SetVariableCustomAction($NeueVariablenID,GetObjectID("ETA/Scripts/SCR_WebInterfaceUebergabe_ETA"));
}
}
SetValueInteger(GetObjectID("ETA/Setup/Grunddaten laden oder zurücksetzen/Grunddaten Status"),1); //Grunddaten fertig geladen
SetValueBoolean(GetObjectID("ETA/Setup/Grunddaten laden oder zurücksetzen/Grunddaten"),true);
}
else {
WFC_SendPopup(GetObjectID("WebFront Configurator"),"Fehler","Monitorliste Variablen wurden schon erstellt oder Monitorliste.xml Datei fehlt!");
}
?>
So jetzt sind schon mal die Monitorwerte vorhanden…
und jetzt hab ich auch die geloggten Variablen (DB war bei 100MB Bestand)+15min)
Mal schaun ob jetzt alles funktioniert…
Gruß Konny
Läuft ,
leider hab ich das selbe Problem wie zuvor:
Die Datenanforderung ETA kommt immer wieder ins stocken…
Ich kann mit dem manuellen Ausführen der SCR_Datenanforderung jedoch starten. Da bräuchte man irgendeinen Watchdog.
Datenabfragen von der Fritzbox (Solarview) und Homematic läuft aber paralell ohne Probleme??
Gruß Konny
Ich hab jetzt das ganze auf einen E1210 Atom mini (Medion, MSI-Wind)geschoben…
14 Watt …
OK großartig ändern über Netztwerk dauert,aber bis auf die ab und zu stehenbleibende Datenanforderung ETA ganz ok.
Gruß Konny
Kleiner Zwischenbericht:
Grundsätzlich läuft das Eta Script mit dem Rest aus 2.5 so.
Das Stoppen habe ich versucht mit dem
Entfernen des Energiesparmodus (Xp) unter Geräte /USB-Hub zu eliminieren. Weiterhin hab ich mit einem Exec( shutdown)-Befehl die Möglichkeit den ips-Server neu zu starten. Solange ich den Server beschäftige, läuft die Abfrage. Heute als Test das schon seit 3 Stunden.Ansonsten komischer Weiße eine halbe bis eine Stunde.
Vielleicht kann mir ja doch jemand den direkten Befehl für die Pumpen / an und aus (solar, zirkulation) / anhand meiner Knotenliste machen. Ich kann das nicht…
Gruß Konny
…
15m USB-Kabel entfernt…
Server in die Nähe des Kessels…
COM1-Bautrate auf 19200…
…
scheint jetzt zu klappen.
Und jetzt an die neuen Ideen:
Hallo Attain,
inzwischen kann ich alle Parameter ändern.
( ich hatte ein Problem mit Index/IndexL_Byte und LowWert…ist aber jetzt klar).
Was ich nicht kann, ist die Pumpen schalten, da ich nicht die Knoten finden.
Weder in der Monitorliste, wie auch in der Parameterliste nicht.
Wie hast du das auf Seite 5 gemacht?
Ich möchte praktisch das machen, was ich auch am Heizkessel als „service“/Handbedienung machen kann.
Gruß Konny
… Nur durch ändern der Parameter?..
http://www.ip-symcon.de/forum/f23/temperaturwerte-pelletkessel-fa-eta-auslesen-4485/index5.html#post51615
Welche Parameter kann ich ändern,
damit bei Solarvorrang die Boilerpumpe anspringt?..
Extra laden funktioniert da auch nicht.
Gruß Konny
Hallo konny,
was habe ich wo auf Seite 5 gemacht?? Kannst Du etwas genauer werden?
Ich steuere keine Pumpen direkt, habe ich auch noch nicht probiert. Das überlasse ich der Kesselsteuerung.
Alles was ich einstelle sind nur Parameter.
Gruß
Attain