Temperaturwerte aus einem Pelletkessel der FA. ETA auslesen

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… :confused:

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 :wink:

IPS_1.1 Beta.rar (19.3 KB)

Sollte in der Beta Version ausgebessert sein. Bitte um Rückmeldung ob etwas nicht funktioniert. Danke :slight_smile:

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…:slight_smile:
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:

  • MK1 und MK2 auf Sommembetrieb (Kessel aus) wenn in den nächsten Tagen das Wetter entsprechend ist.
    Gruß Konny

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