1-Wire S0 Zähler Auswerteskript

Hallo,

das habe ich ja gemacht, somit funktioniert mein IPSwitch-SG. Ich schaffe es aber nicht meine Variablen in dieses komplexe Auswerteskript einzubinden.

Hallo Zusammen,
ich habe auch die gleiche Thematik mit dem Ipswitch add. Ich glaube wir haben das Verständnisproblem wie das Script zb mit Ipswitch oder EKM Zähler funktionieren soll. Insbesonders interssant wenn man zb 10 Zähler hat.
Der „Knackpunkt“ liegt meiner Meinung nach hier:

    ....
$zaehler_name = "S0 Zähler Haushaltstrom";     //Default = S0 Zähler   ?? welcher Name und warum "Name"
$zaehler_variable = "Zähler 2"   ;     //    Default: Zähler 1 oder Zähler 2  ?? unklar - es gibt nur Current oder Zähler
$zaehler_impulse =      800;           //ist klar 
$ID_counter_erkennung = 2;          //Automatisch = 1, Manuel = 2   ?? hier in meinem Fall wohl 2 - oder
$ds2423_counter_man = 38005      //hier die ID des Ipswitch Zählers oder EKM Zählers - also zb EKM Zähler 

Für mich ist unklar was ich bei den ersten beiden Variablen nehmen muss/machen soll…
Wer kann hier bitte eine Unterstützung geben?

Danke im Voraus !
Red Raz

Namen dienen zur Unterscheidung

$zaehler_variable = "Zähler 2"   ;     //    Default: Zähler 1 oder Zähler 2  ?? unklar - es gibt nur Current oder Zähler

Gefragt ist „Zähler 2“ → somit wohl die Benennung der Zähler2-Variable (ID davon unten angeben), Current ist, wie mehrfach beschrieben, der Momentanverbrauch

$ID_counter_erkennung = 2;          //Automatisch = 1, Manuel = 2   ?? hier in meinem Fall wohl 2 - oder

Im Script oben zu lesen:

//******************************************************************************
    //Auswahl des Zaehlerausgangs des 1-Wire S0 Counters
    //Verwendeten Zaehler des 1-Wire Bausteins auswaehlen
    //******************************************************************************
    //Es kann die ID des Zaehlers automatisch ermittelt oder manual eingegeben werden.
    //Soll die ID automatisch ermittelt werden, muß der Zähler unterhalb der angelegten Kategorie sein.
    $ID_counter_erkennung = 2;                                   //Automatisch = 1, Manuel = 2

        //Wenn Manuell, hier die ID der Zaehler Instance eintragen:

Auf deutsch: Entweder Du gibst die ID des Zählers an oder das Script findet sie (Voraussetzung beachten!)

$ds2423_counter_man = 38005;      //hier die ID des Ipswitch Zählers oder EKM Zählers - also zb EKM Zähler

Die ID des Zählers eintragen den Du darstellen willst, hier Zähler 2

Habe mich nur kurz damit beschäftigt, denke aber, dass es so stimmt.

Bilder dazu siehe hier

Gruß
Bruno

Plötzlich doppelt, warum auch immer :o

Hallo Community,

leider schaffe ich es nicht, das Skript zum laufen zu bekommen. Es erscheint folgende Fehlermeldung:


Warning:  Objekt Zähler 1 wurde nicht gefunden in C:\IP-Symcon\scripts\34342.ips.php on line 149

Warning:  TMEX_SetInterval: Instance #20581 not found! in C:\IP-Symcon\scripts\34342.ips.php on line 346

Warning:  Variable #0 existiert nicht in C:\IP-Symcon\scripts\34342.ips.php on line 379

das verwendete Skript lautet:


<?


/******************************************************************************
Stromzaehlerauswertung für IPS und 1-Wire S0 Counter von eservice-online
Erstellt von andrge für eservice-online (http://www.eservice-online.de)

 Version 1.4
 Datum: 15.04.2012
 Skript fuer IPS Version bis V2.4 und 2.5
*******************************************************************************

//Auswerteskript für digitale Stromzähler mit S0 Impulsausgang und einem 1-Wire S0 Counter Modul
Es werden zusaetzlich String Variablen fuer die Ausgabe z.B. per 1-Wire LCD Modul angelegt

Das Skript erstellt folgende Variablen, Skripte und errechnet Energeiwerte

Auswertung Energeiwerte aus gelesenen Zaehlerwert fuer:
- Aktuelle Leistung
- Tageswerte (Float und String)
- Maimaler Tageswert mit Zeitstempel
- Monatswerte (Float und String)
- Jahreswerte (Float und String)
- Jahresgrenzwert (Wurde ein bestimmter Jahresertag erreicht, z.B. PV-Analge mit KWh pro montierten kWp)
- Anlage aktive (PV-Anlage aktiv? Leistung größer z.B. 50W, fuer z.B. PV-Anlage)

Skripte und Triggerbedingung fuer:
- Triggerzeit fuer Zaehlerbaustein
- Triggerbedingung fuer Auswerteskript
- Skript fuer Uebertrag und Reset Tageswerte + Reset Max. Wert
- Skript fuer Uebertrag und Reset Monatswerte
- Skript fuer Uebertrag und Reset Jahreswerte

Alle benoetigten Variablen, Skripte und Triggerbedingungen werden automatisch in IPS-Symcon durch einmaliges "Ausfuehren" angelegt.
Sollte eine Variable geloescht werden, wird eine neue Variable mit dem naechsten Skriptdurchlauf angelegt.
*******************************************************************************/


/*
//Installation:
	Konfiguration fuer Stromzaehler, 1-Wire S0 Counter, Jahresgrenzwert und Grenzwert "Akiv" einstellen

	Weiterhin sind nachfolgende Schritte von Hand ausführen:

	Schritt 1:
	Kategorie für die 1-Wire S0 Stromauswertung anlegen. Name nach eigenen Wünschen

	Schritt 2:
	Ein neues Skript unterhalb der Kategorie (aus Schritt 1) erstellen.
	Name nach eigenen Wünschen

	Schritt 3:
	Eine Instanz für den DS2413 unterhalb dieser Kategorie (aus Schritt 1) anlegen.
	Hier den Namen der S0 Zaehler Instance eintragen:

	Name des 1-Wire Zaehlers:           														*/
	$zaehler_name = "S0 Modul (01)"; 	//Default = S0 Zähler

	/*Schritt 4:
	Name des auszuwertenden Zaehlervariable eintragen. Wenn Sie den Namen nicht veraendert haben,
	tragen Sie hier die Defaultnamen der Zaehlervariable ein    						*/
	$zaehler_variable = "Zähler 1"   ; 	//	Default: Zähler 1 oder Zähler 2

	/*Schritt 5:
	Konfiguration für Stromzaehler, des Auswertezyklus und Schwellwerte für Statusausgaben:

	//Hier den passenden Impulswert des Stromzaehlers auswaehlen (die Zeichen // an der richtigen Stelle entfernen)
	//******************************************************************************
	Auswahl des Stromzählers (Impulse pro KW)
	Auswertung von Stromzaehlern mit 800, 1000 oder 2000 Impulse moeglich   		*/
	$zaehler_impulse =  	1000;

	//******************************************************************************
	//Auswahl des Zaehlerausgangs des 1-Wire S0 Counters
	//Verwendeten Zaehler des 1-Wire Bausteins auswaehlen
	//******************************************************************************
	//Es kann die ID des Zaehlers automatisch ermittelt oder manual eingegeben werden.
	//Soll die ID automatisch ermittelt werden, muß der Zähler unterhalb der angelegten Kategorie sein.
	$ID_counter_erkennung = 2;   								//Automatisch = 1, Manuel = 2

		//Wenn Manuell, hier die ID der Zaehler Instance eintragen:
		$ds2423_counter_man = 20581 /*[Geräte\S0 Modul\S0 Modul 01\Zähler 1]*/   ;

	//******************************************************************************
	//Abfragezyklus des 1-Wire S0 Zaehlers
	//******************************************************************************
	// Wie oft soll der 1-Wire S0 Counter abgefragt werden?
	// Bei sehr geringen Leistungen und Zaehlern mit wenigen Impulsen macht es Sinn auf die 180 Sek. zu gehen
	$pollzeit = 120	; 											//Default 180 Sekunden. Zulaessig sind 60, 120 oder 180 Sekunden

	//******************************************************************************
	//Jahresgrenzwert (z.B. fuer PV-Anlage)
	//******************************************************************************
	//Grenzwert als Aussage "Jahresgrenzwert erreicht?".
	//Beispiel: Wurde der kalkulierte Jahresertrag einer PV-Anlage erreicht
	$grenzwert_jahr = 950		;        					//Default: PV-Anlage 950 KW pro montierten Leistung KWp fuer Suedbayern

	//******************************************************************************
	//Grenzwert "Anlage Aktiv"
	//******************************************************************************
	//Grenzwert für Aussage "Aktiv", z.b. um den Berieb eines Wechselrichters zu erkennen
	$grenzwert_aktiv = 0.05		;        					//Default 0.05KW = 50W


/*	Schritt 6:
	Skript 1x per "Ausführen" starten

	FERTIG !!!!!!!!

	Ab jetzt wird das Skript bei einer Änderung der ausgewaehlten Zaehlervariablen getriggert.

	Viel Spaß mit diesem Beispielskript. Keine Gewaehr fur Fehlerfreiheit und Richtigkeit
	Gerne duefen Sie uns Verbesserungen oder Kritik (gern auch positiv) senden.
	Mail: info@eservice-online.de

*******************************************************************************/

//******************************************************************************
//Debug Ausgaben
//Fuer Testzwecke koennen Testausgaben aktiviert werden
//******************************************************************************
$debug =false;   										// Debug Modus fuer Variablen ID usw.,    Ausgabe = true / keine Ausgabe =false
$debug_auswertung = false;   							// Debug Modus fuer Berechung,            Ausgabe = true / keine Ausgabe =false


/********************************************************************************************************
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   Ab hier nichts mehr ändern   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
********************************************************************************************************/

// Übergeordnete Kategorie ermitteln
$parentID = IPS_GetObject($IPS_SELF);
$parentID = $parentID['ParentID'];
if($debug) {echo "ParentID:  $parentID 
";}

//automatische oder manuelles Einlesen der Counter ID
If ($ID_counter_erkennung == 1) {
   // Automatisches einlesen der Counter ID
   $ds2423 = IPS_GetInstanceIDByName ( $zaehler_name, $parentID );
	if($debug) {echo "ID DS2423:  $ds2423 
";}   												//Debug Ausgabe
	}
elseif ($ID_counter_erkennung == 2) {
	//Manuelle ID von oben abholen
	$ds2423 = $ds2423_counter_man;
	if($debug) {echo "ds2423counter_man: $ds2423 
";}											//Debug Ausgabe
	}
Else {echo "Fehler: Auswahl des Zaehlers Auto / Manuel, Es ist nur 1 oder 2 zulaessig  
";}

// Variablen zur Skriptverarbeitung einlesen und intern verfügbar machen
$ds2423counter = 	IPS_GetVariableIDByName( $zaehler_variable, $ds2423);
if($debug) {echo "ds2423counter: $ds2423counter 
";}											//Debug Ausgabe


// Inhalt des benötigten Actionsskripts in Variable ablegen
$actionScript = "<?
if(\$IPS_SENDER == 'WebFront') {
  	SetValue(\$IPS_VARIABLE, \$IPS_VALUE);
}
//";


// Inhalt für Skript "Reset Tag" erzeugen
//********************************************
$skript_reset_tag = "<?
//Übertrag auf Vortag und Reset der Tageswerte
//Übergeordnete Kategorie ermitteln
	\$parentID = IPS_GetObject(\$IPS_SELF);
	\$parentID = \$parentID['ParentID'];

	\$id_tag_leistung 					= @IPS_GetVariableIDByName('Tag', \$parentID);
	\$id_tag_leistung_string 		= @IPS_GetVariableIDByName('Tag_1', \$parentID);
	\$id_max_leistung          		= @IPS_GetVariableIDByName('Maximal_Tag', \$parentID);
	\$id_max_leistung_string   		= @IPS_GetVariableIDByName('Maximal_Tag_1', \$parentID);
	\$id_max_leistung_time_string  = @IPS_GetVariableIDByName('Maximal Tag Zeit', \$parentID);
	\$id_vortag_leistung 				= @IPS_GetVariableIDByName('Vortag', \$parentID);
	\$id_vortag_leistung_string 	= @IPS_GetVariableIDByName('Vortag_1', \$parentID);
	\$id_tag_counter 					= @IPS_GetVariableIDByName('counter_tag', \$parentID);
	\$reset_tag 							= @IPS_GetVariableIDByName('Reset Tag', \$parentID);

	//Übertrag String und Float
	\$uebertrag_1 = GetValue (\$id_tag_leistung_string  );  												//Tagesleistung abholen
 	SetValue (\$id_vortag_leistung_string  , \$uebertrag_1);
 	\$uebertrag = GetValue (\$id_tag_leistung  );              //Tagesleistung abholen
	SetValue (\$id_vortag_leistung  , \$uebertrag);
	IPS_Sleep(20);

	//Reset Tagwerte
	SetValueInteger(\$id_tag_counter  , 0);     													//Tagesleistung auf 0 setzen
	SetValueString (\$id_tag_leistung_string  , '0 KWh');
	SetValueFloat  (\$id_tag_leistung  , 0);
	SetValueFloat  (\$id_max_leistung , 0);                                          //Maximalwert zurueck setzen
	SetValueString (\$id_max_leistung_string  , '0');                                //Maximalwert zurueck setzen
	SetValueString (\$id_max_leistung_time_string  , '-');                           //Zeit Maximalwert zurueck setzen

	//Boolean fuer Rueckmeldung eines Tastersymbols

	if (\$IPS_SENDER != 'Designer')
		{
  		Echo 'Reset durchgeführt';
		}
	?>";

// Inhalt für Skript "Reset Monat" erzeugen
//********************************************
$skript_reset_monat = "<?
//Übertrag auf Vormonat und Reset der Monateswerte
//Übergeordnete Kategorie ermitteln
	\$parentID = IPS_GetObject(\$IPS_SELF);
	\$parentID = \$parentID['ParentID'];

 	\$id_monat_leistung 				= @IPS_GetVariableIDByName('Monat', $parentID);
	\$id_monat_leistung_string 		= @IPS_GetVariableIDByName('Monat_1', $parentID);
	\$id_vormonat_leistung 			= @IPS_GetVariableIDByName('Vormonat', $parentID);
	\$id_vormonat_leistung_string	= @IPS_GetVariableIDByName('Vormonat_1', $parentID);
	\$id_monat_counter 				= @IPS_GetVariableIDByName('counter_monat', $parentID);
	\$reset_monat 						= @IPS_GetVariableIDByName('Reset Monat', $parentID);

	//Übertrag String und Float
	\$uebertrag = GetValue (\$id_monat_leistung  );  										//Monatesleistung abholen
	SetValue \(\$id_vormonat_leistung  , \$uebertrag);
	\$uebertrag_1 = GetValue (\$id_monat_leistung_string  );  										//Monatesleistung abholen
	SetValue (\$id_vormonat_leistung_string  , \$uebertrag_1);
	IPS_Sleep(20);

	//Reset Tagwerte
	SetValueInteger(\$id_monat_counter  , 0);     											//Monatesleistung auf 0 setzen
	SetValueString (\$id_monat_leistung_string  , '0 KWh');
	SetValueFloat  (\$id_monat_leistung  , 0);

	//Boolean fuer Rueckmeldung eines Tastersymbols
	SetValueBoolean(\$reset_monat , true);
	IPS_Sleep(1000);
	SetValueBoolean(\$reset_monat , false);

	if (\$IPS_SENDER != 'Designer')
		{
  		Echo 'Reset durchgeführt';
		}
	?>";


// Inhalt für Skript "Reset Jahr" erzeugen
//********************************************
$skript_reset_jahr = "<?
//Übertrag auf Vormonat und Reset der Jahreswerte
//Übergeordnete Kategorie ermitteln
	\$parentID = IPS_GetObject(\$IPS_SELF);
	\$parentID = \$parentID['ParentID'];

	\$id_jahr_leistung 				= @IPS_GetVariableIDByName('Jahr', $parentID);
	\$id_jahr_leistung_string 		= @IPS_GetVariableIDByName('Jahr_1', $parentID);
	\$id_vorjahr_leistung 			= @IPS_GetVariableIDByName('Vorjahr', $parentID);
	\$id_vorjahr_leistung_string 	= @IPS_GetVariableIDByName('Vorjahr_1', $parentID);
	\$id_jahr_counter 				= @IPS_GetVariableIDByName('counter_jahr', $parentID);
	\$reset_jahr 						= @IPS_GetVariableIDByName('Reset Jahr', $parentID);

	//Übertrag String und Float
	\$uebertrag = GetValue (\$id_jahr_leistung  );  										//Jahresleistung abholen
	SetValue (\$id_vorjahr_leistung  , \$uebertrag);
	\$uebertrag_1 = GetValue (\$id_jahr_leistung_string  );  										//Jahresleistung abholen
	SetValue (\$id_vorjahr_leistung_string  , \$uebertrag_1);
	IPS_Sleep(20);

	//Reset Tagwerte
	SetValueInteger(\$id_jahr_counter  , 0);     											//Jahresleistung auf 0 setzen
	SetValueString (\$id_jahr_leistung_string  , '0 KWh');
	SetValueFloat  (\$id_jahr_leistung  , 0);

	//Boolean fuer Rueckmeldung eines Tastersymbols
	SetValueBoolean\(\$reset_jahr , true);
	IPS_Sleep(1000);
	SetValueBoolean(\$reset_jahr , false);

	if (\$IPS_SENDER != 'Designer')
		{
  		Echo 'Reset durchgeführt';
 		}
	?>";




// ***************** Start Erstinitialisierung *********************************
if($IPS_SENDER == "Execute")
	{                																						// nur wenn bei "Ausführen"

	// Skript verstecken
   IPS_SetHidden($IPS_SELF, true);
   IPS_SetPosition($IPS_SELF, 99);

	//Reset Tag
	//***************************************************************************
	// Skript "Reset Tag" erzeugen (siehe function)
   $scriptid_reset_tag = CreateScriptByName("Reset Tag", $parentID, $skript_reset_tag);
		if($debug) { echo "Skript -Reset Tag- angelegt
"; }									//Debug Ausgabe

	// Triggerbedingung/Ereignis für Skript "Reset Tag" erstellen falls nicht vorhanden
	//*****************************************************************
	$EreignisID = @IPS_GetEventIDByName( "Reset Tag" , $scriptid_reset_tag);
		if ($EreignisID == 0){
		$eid = IPS_CreateEvent(1);        															// Ausgelöstes Ereignis
		IPS_SetEventCyclic($eid, 2, 1, 0, 0, 0, 0);   											//Taeglich
		IPS_SetEventCyclicTimeBounds($eid, mktime(00, 00, 02), 0);            			//immer um 00:00:01Uhr
		IPS_SetParent($eid, $scriptid_reset_tag); 												// Ereignis zuordnen
		IPS_SetName($eid, "Reset Tag" );    														// Ereignis umbennen
		IPS_SetEventActive($eid, true);                       								// Ereignis aktivieren
		}

	//Reset Monat
	//***************************************************************************
	// Skript "Reset Moant" erzeugen (siehe function)
   $scriptid_reset_monat = CreateScriptByName("Reset Monat", $parentID, $skript_reset_monat);
   	if($debug) { echo "Skript -Reset Monat- angelegt
"; }								//Debug Ausgabe

	// Triggerbedingung/Ereignis für Skript "Reset Tag" erstellen falls nicht vorhanden
	//*****************************************************************
	$EreignisID = @IPS_GetEventIDByName( "Reset Monat" , $scriptid_reset_monat);
		if ($EreignisID == 0){
		$eid = IPS_CreateEvent(1);        															// Ausgelöstes Ereignis
		IPS_SetEventCyclic($eid, 4, 1, 0, 1, 0, 0);   											// Monatlich
		IPS_SetEventCyclicTimeBounds($eid, mktime(00, 00, 02), 0);            			// immer um 00:00:01Uhr
		IPS_SetParent($eid, $scriptid_reset_monat); 												// Ereignis zuordnen
		IPS_SetName($eid, "Reset Monat" );    														// Ereignis umbennen
		IPS_SetEventActive($eid, true);                       								// Ereignis aktivieren
		}

	//Reset Jahr
	//***************************************************************************
	// Skript "Reset Moant" erzeugen (siehe function)
   $scriptid_reset_jahr = CreateScriptByName("Reset Jahr", $parentID, $skript_reset_jahr);
		if($debug) { echo "Skript -Reset Jahr- angelegt
"; }									//Debug Ausgabe

	// Triggerbedingung/Ereignis für Skript "Reset Tag" erstellen falls nicht vorhanden
	//*****************************************************************
	$EreignisID = @IPS_GetEventIDByName( "Reset Jahr" , $scriptid_reset_jahr);
		if ($EreignisID == 0){
		$eid = IPS_CreateEvent(1);        															// Ausgelöstes Ereignis
		IPS_SetEventCyclic($eid, 5, 1, 0, 1, 0, 0);   											// Jaehrlich
		IPS_SetEventCyclicTimeBounds($eid, mktime(00, 00, 02), 0);            			// immer um 00:00:01Uhr
		IPS_SetParent($eid, $scriptid_reset_jahr); 												// Ereignis zuordnen
		IPS_SetName($eid, "Reset Jahr" );    														// Ereignis umbennen
		IPS_SetEventActive($eid, true);                       								// Ereignis aktivieren
		}

	//Triggerintervall für Baustein einstellen
	//*****************************************************************
	TMEX_SetInterval($ds2423, $pollzeit);
		if($debug) {echo "DS2423 Triggerintervall programmiert
";}							//Debug Ausgabe

	//Triggerbedingung fuer dieses Skript erzeugen
	//***************************************************************************
	// Triggerbedingung/Ereignis für Skript erstellen falls nicht vorhanden
	// Ereignis für Skript erstellen falls nicht vorhanden
	$EreignisID = @IPS_GetEventIDByName($zaehler_variable,$IPS_SELF);
	if ($EreignisID == 0) {
		$eid = IPS_CreateEvent(0);        															// Ausgelöstes Ereignis
		IPS_SetEventTrigger($eid, 0, $ds2423counter); 											// Bei Änderung von Variable
		IPS_SetParent($eid, $IPS_SELF); 																// Ereignis zuordnen
		IPS_SetName($eid, $zaehler_variable);    													// Ereignis umbennen
		IPS_SetEventActive($eid, true);                       								// Ereignis aktivieren
	}
	else {
	if($debug) {echo "Ereignis bereits erstellt"; }
	}


}
// ****************** Ende Erstinitialisierung *********************************


//Berechnung
//******************************************************************************
//Variablen
//******************************************
// Variablen IDs zuweisen und gegebenenfalls anlegen
$id_counter_alt	= CreateVariableByName($parentID, "counter_alt", "I"  );
$id_counter_delta	= CreateVariableByName($parentID, "counter_delta", "I"  );

//Zählerwerte abholen
$counter_neu 		= GetValueInteger ($ds2423counter );
$counter_alt 		= GetValueInteger ($id_counter_alt );

//Delta berechnen
$delta = $counter_neu - $counter_alt;   															//alter Wert von neuen Wert abziehen

SetValueInteger($id_counter_alt  , $counter_neu );   											//Zaehlerwert ablegen
SetValueInteger($id_counter_delta  , $delta );          										//Ausgabe Differenz
	if($debug) {echo  "Counter: $counter_neu 
Delta: $delta
";}						// Debug Ausgabe Berechung


//*******************************************************************
// Akueller Wert:

If ($zaehler_impulse == 800){$zaehlerfaktor = 0.00125;} 										//Digitaler Stomzähler 1000W / Impulse  (800) = 1,25W pro Impuls
elseif ($zaehler_impulse == 1000){$zaehlerfaktor = 0.001;}									//Digitaler Stomzähler 1000W / Impulse (1000) = 1W pro Impulse
elseif ($zaehler_impulse == 2000){$zaehlerfaktor = 0.0005;}									//Digitaler Stomzähler 1000W / Impulse (2000) = 0,5W pro Impuls
else {echo "Falscher Zaehler Impulswert eingegeben, nur 800, 1000 und 2000 möglich!
\r";}
if($debug) {echo  "Zaehler Impulse pro KW: $zaehler_impulse 
";}

If ($pollzeit == 60){$Umrechungsfaktor = 60;} 													//Umrechnungsfaktor = Stunde (Minuten / Auslesezeit (Min.)
elseif ($pollzeit == 120){$Umrechungsfaktor = 30;}
elseif ($pollzeit == 180){$Umrechungsfaktor = 20; }
else {echo "Falscher Auslesezykluszeit eingegeben, nur 60, 120 oder 180 Sekunden möglich!
\r";}
if($debug) {echo  " Auslesezeit:  $pollzeit 
";}

$deltaKWh = ($delta * $zaehlerfaktor) * $Umrechungsfaktor  ;

//Aktuelle Leistung / aktueller Verbrauch
//*******************************************************************

$id_aktuell_leistung 			= CreateVariableByName($parentID, "Aktuell", "kWh" );
$id_aktuell_leistung_string 	= CreateVariableByName($parentID, "Aktuell_1", "S" );
$id_max_leistung 					= CreateVariableByName($parentID, "Maximal_Tag", "kWh" );
$id_max_leistung_string       = CreateVariableByName($parentID, "Maximal_Tag_1", "S" );
$id_max_leistung_time_string  = CreateVariableByName($parentID, "Maximal Tag Zeit", "S" );

//Anzeige Verbrauch aktuell
SetValueFloat ($id_aktuell_leistung    , $deltaKWh);

//Ausgabe fuer String vorbereiten
//Ausgabe fuer Watt
$round_aktuell_summe_1 = round ($deltaKWh * 1000, 2);     							// auf 2 Stellen runden
$round_aktuell_summe_2 = sprintf("%2.0f", $round_aktuell_summe_1); 				// Formatierung 2vor und 0 Nachkommastellen

//Ausgabe fuer KW
$round_aktuell_summe_3 = round ($deltaKWh, 2);     									// auf 0 Stellen runden
$round_aktuell_summe_4 = sprintf("%2.2f", $round_aktuell_summe_3); 				// Formatierung auf 2vor und 2 Nachkommastellen

//Maximalwert Tag + Zeit:
$leistung_max = GetValueFloat ($id_max_leistung);

If ($deltaKWh >= $leistung_max)
	{
	SetValueFloat ($id_max_leistung    , $deltaKWh);
	SetValueString ($id_max_leistung_string , $round_aktuell_summe_4. " kWh " );
	SetValueString ($id_max_leistung_time_string , date("H:i")); 							//aktuelle Uhrzeit, Stunde und Minuten
		if($debug_auswertung) {Echo "Max. Leistung Neu: $round_aktuell_summe_4 kWh 
"; }// Debug Ausgabe Berechung
	}

//Anzeige für Dashboard und LCD Display
if ($deltaKWh < 1.0) 																				//Wenn die aktuelle Leistung kleiner als 1KW, dann Ausgabe in Watt
   {
   SetValueString ($id_aktuell_leistung_string , $round_aktuell_summe_2. " Wh" );
		if($debug_auswertung) {Echo "Aktuelle Leistung: $round_aktuell_summe_2 W 
"; }// Debug Ausgabe Berechung
	}
else
	{
   SetValueString ($id_aktuell_leistung_string , $round_aktuell_summe_4. " kWh ");
		if($debug_auswertung) {Echo "Aktuelle Leistung: $round_aktuell_summe_4 KW 
"; }// Debug Ausgabe Berechung
	}


//Tageswerte
//*******************************************************************
$id_tag_leistung 				= CreateVariableByName($parentID, "Tag", "kWh" );
$id_tag_leistung_string 	= CreateVariableByName($parentID, "Tag_1", "S" );
$id_vortag_leistung 			= CreateVariableByName($parentID, "Vortag", "kWh" );
$id_vortag_leistung_string = CreateVariableByName($parentID, "Vortag_1", "S" );
$reset_tag 						= CreateVariableByName($parentID, "Reset Tag", "an" );
$id_tag_counter 				= CreateVariableByName($parentID, "counter_tag", "I" );

$counter_tag = GetValueInteger ($id_tag_counter );
$counter_tag_neu = $counter_tag + $delta ;
SetValueInteger($id_tag_counter  , $counter_tag_neu);

	//Anzeige Tagsverbrauch
	$tag_leistung_summe = $counter_tag_neu * $zaehlerfaktor ;
	SetValueFloat ($id_tag_leistung , $tag_leistung_summe);

	//Anzeige für LCD Display
	$round_tag_summe_1 = round ($tag_leistung_summe, 2);     								// auf 2 Stellen runden
	$round_tag_summe_2 = sprintf("%2.2f", $round_tag_summe_1); 								// Formatierung 2 vor und 2 Nachkommastellen
   SetValueString ($id_tag_leistung_string , $round_tag_summe_2. " kWh");
		if($debug_auswertung) {Echo "Tag Summe: $round_tag_summe_2 kWh
"; }        // Debug Ausgabe Berechung


//Monatswerte
//*******************************************************************
// Variablen IDs zuweisen und gegebenenfalls anlegen
$id_monat_leistung 				= CreateVariableByName($parentID, "Monat", "kWh" );
$id_monat_leistung_string 		= CreateVariableByName($parentID, "Monat_1", "S" );
$id_vormonat_leistung 			= CreateVariableByName($parentID, "Vormonat", "kWh" );
$id_vormonat_leistung_string 	= CreateVariableByName($parentID, "Vormonat_1", "S" );
$reset_monat 						= CreateVariableByName($parentID, "Reset Monat", "an" );
$id_monat_counter 				= CreateVariableByName($parentID, "counter_monat", "I"  );

$counter_monat = GetValueInteger ($id_monat_counter);
$counter_monat_neu = $counter_monat + $delta ;
SetValueInteger($id_monat_counter  , $counter_monat_neu);  //

	//Anzeige Monatsverbrauch
	$monat_leistung_summe = $counter_monat_neu * $zaehlerfaktor ;
	SetValueFloat ($id_monat_leistung    , $monat_leistung_summe);

	//Anzeige für LCD Display
	$round_monat_summe_1 = round ($monat_leistung_summe, 2);     							// auf 2 Stellen runden
	$round_monat_summe_2 = sprintf("%2.2f", $round_monat_summe_1); 						// Formatierung auf 2 vor und 2 Nachkommastellen
   SetValueString ($id_monat_leistung_string   , $round_monat_summe_2. " kWh");     //
		if($debug_auswertung) {Echo "Monat Summe: $round_monat_summe_2 kWh
"; }		// Debug Ausgabe Berechung

//Jahreswerte
//*******************************************************************
$id_jahr_leistung 			= CreateVariableByName($parentID, "Jahr", "kWh" );
$id_jahr_leistung_string 	= CreateVariableByName($parentID, "Jahr_1", "S" );
$id_vorjahr_leistung 		= CreateVariableByName($parentID, "Vorjahr", "kWh" );
$reset_jahr 					= CreateVariableByName($parentID, "Reset Jahr", "an" );
$id_vorjahr_leistung_string 	= CreateVariableByName($parentID, "Vorjahr_1", "S" );
$id_jahr_counter 				= CreateVariableByName($parentID, "counter_jahr", "I" );

$counter_jahr = GetValueInteger ($id_jahr_counter);
$counter_jahr_neu = $counter_jahr + $delta ;
SetValueInteger($id_jahr_counter  , $counter_jahr_neu);  //

	//Anzeige jahrsverbrauch
	$jahr_leistung_summe = $counter_jahr_neu * $zaehlerfaktor ;
	SetValueFloat ($id_jahr_leistung  , $jahr_leistung_summe);

	//Anzeige für LCD Display
	$round_jahr_summe_1 = round ($jahr_leistung_summe, 2);     								// auf 2 Stellen runden
	$round_jahr_summe_2 = sprintf("%2.2f", $round_jahr_summe_1); 							// Formatierung auf 2vor und 2 Nachkommastellen
   SetValueString ($id_jahr_leistung_string   , $round_jahr_summe_2. " KWh");       // Ausgabe in Variable
		if($debug_auswertung) {Echo "Jahr Summe: $round_jahr_summe_2 KWh
"; }      // Debug Ausgabe Berechung

//Jahresgrenzwert erreicht?
//*******************************************************************
// Variablen IDs zuweisen und gegebenenfalls anlegen
$status_jahresgrenzwert 	= CreateVariableByName($parentID, "Jahresgrenzwert", "an" );
if ($deltaKWh >= $grenzwert_jahr)  																	//Hat die Anlage den Jahresmindestwert erreicht?
	{
   SetValueBoolean($status_jahresgrenzwert  ,true);
   	if($debug_auswertung) {echo "Grenzwert Jahr ($grenzwert_jahr kWh) erreicht 
";}// Debug Ausgabe Berechung
   }
else
	{
   SetValueBoolean($status_jahresgrenzwert   ,false);
   	if($debug_auswertung) {echo "Grenzwert Jahr ($grenzwert_jahr kWh) nicht erreicht 
";}// Debug Ausgabe Berechung
   }

//Anlage in Betrieb?
//*******************************************************************
// Variablen IDs zuweisen und gegebenenfalls anlegen
$status_anlage 	= CreateVariableByName($parentID, "Anlage aktiv", "an" );
if ($deltaKWh >= $grenzwert_aktiv)  																//Anlage aktiv?
	{
   SetValueBoolean($status_anlage   ,true);
   if($debug_auswertung) {echo "Anlage in Betrieb, Leistung groesser $grenzwert_aktiv kW  
";}// Debug Ausgabe Berechung
   }
else
	{
   SetValueBoolean($status_anlage   ,false);
   if($debug_auswertung) {echo "Anlage aus, Leistung kleiner $grenzwert_aktiv kW  
";}// Debug Ausgabe Berechung
   }

// Ende Berechnung
// ****************************************************************************


// ****************************************************************************
// Funktionen
// ****************************************************************************
// Variablen erstellen falls nicht vorhanden und ID entsprechend zuordnen
function CreateVariableByName($id, $name, $type) {
	global $IPS_SELF;
	global $ScriptID;
	$vid = @IPS_GetVariableIDByName($name, $id);
	if($vid === false) {
		// $vartype: Boolean=0, Integer=1, Float=2, String=3
		if ($type == 'kWh')   			$vartype = 2;
		if ($type == 'W')  				$vartype = 2;
		if ($type == 'I') 				$vartype = 1;
		if ($type == 'S') 				$vartype = 3;
		if ($type == 'OK') 				$vartype = 0;

		$vid = IPS_CreateVariable($vartype);
		IPS_SetParent($vid, $id);
		IPS_SetName($vid, $name);
		IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");

		if ($type == 'kWh')	{
			IPS_SetVariableCustomProfile ($vid, "~Electricity");
			IPS_SetPosition($vid, 10); }
		if ($type == 'W')	{
			IPS_SetVariableCustomProfile ($vid, "~Watt.3600");
			IPS_SetPosition($vid, 20); }
		if ($type == 'I')	{
			//IPS_SetVariableCustomProfile ($vid, " ");
			IPS_SetPosition($vid, 30);  }
		if ($type == 'OK') {
			IPS_SetVariableCustomProfile ($vid, "~Alert.Reversed");
			IPS_SetVariableCustomAction($vid, $ScriptID);
			IPS_SetPosition($vid, 40);  }
      if ($type == 'an') {
			IPS_SetVariableCustomProfile ($vid, "~Switch");
			IPS_SetVariableCustomAction($vid, $ScriptID);
			IPS_SetPosition($vid, 50);  }
  		if ($type == 'S')	{
			//IPS_SetVariableCustomProfile ($vid, " ");
			IPS_SetPosition($vid, 60);  }
		}
		return $vid;
	}
// Eine Function um ein Script im Script-Verzeichnis zu erzeugen
// erstellt von hirschbrat, angepasst wgreipl
function CreateScriptByName($ScriptNAME, $ParentID, $ScriptTEXT)
	{
	global $IPS_SELF;
	$ScriptID = @IPS_GetScriptIDByName($ScriptNAME, $ParentID);
	if ($ScriptID == 0){
		$ScriptID = IPS_CreateScript(0);
		IPS_SetName($ScriptID, $ScriptNAME);
		IPS_SetParent($ScriptID, $ParentID);
		IPS_SetInfo($ScriptID, "This script was created by: #$IPS_SELF#");
		$fh = fopen(IPS_GetKernelDir()."scripts\\".$ScriptID.".ips.php", 'w') or die("can't open file");
		fwrite($fh, $ScriptTEXT);
		fclose($fh);
		$ScriptPath = $ScriptID.".ips.php";     												//Skriptdatei
		IPS_SetScriptFile($ScriptID, $ScriptPath);
		IPS_SetHidden($ScriptID, true);
		IPS_SetPosition($ScriptID, 80);
		//if($debug) { echo "Die Skript-ID lautet: . $ScriptID
"; } 					//Debug Ausgabe

		}
	return $ScriptID;
	}

Anbei ein Bild von der Listenstruktur:

Vielen Dank für Eure Unterstützung

Gruß
Wickie

Versuchs mal ohne Umlaute, Leerzeichen und Sonderzeichen!

habe ich gerade versucht:
leider ohne Erfolg…
das gleiche Ergebnis wie vorher…
:confused:

Hallo Wicki,

hast du den überhaupt einen S0 Zähler angeschlossen?
So wie es aussieht hast du zwar die Instanz angelegt, aber noch keinen S0 Zähler dran. Damit wären die Fehler alle logisch.

Grüße
andrge

Es ist doch so das die ID der Instance und nicht die der Variable im skript angegeben werden? -glaub ich-
Bin da auch gerade am rumprobieren und meine dass das Skript nicht unter die Instance sondern unter der Variable hängen muss, sonsst gibt es Probleme bei dem Zweiten Zähler. Hab ich beide Skripte der Instance direkt unter dieser hab ich nur differenzen erhalten. Nun hab ich die Skripte unter die jeweilige Variable gehängt schaut es gut aus (Test noch nicht abgeschlossen, da schon wieder an etwas anderem rumspiele). Melde mal bitte ob es bei Dir auch so ist.

Jan

Hallo, super Arbeit. Gibt es mittlerweile eine Anpassung für IPS4.1. Da ich mit demnächst IPS anschaffen möchte, wäre es super wenn ich ein Script dafür hätte um meinen Strom und Gaszähler auszuwerten.

Frage noch, mit wieviel Variablen muss ich etwa pro Counter rechnen?

Danke und Grüße
cerberus

Bisher hat es noch keiner für IPS 4.1 angepasst. Du bist jedoch herzlich eingeladen, dieses zu tun und das Ergebnis der Community zur Verfügung zu stellen. Ich habe das Skript eben mal grob überflogen und vermute, dass nur die Systemvariablen auf die mittlerweile übliche Schreibweise umgestellt werden müssen, also z.B. $_IPS[‚SENDER‘] anstatt $IPS_SENDER und so weiter.

Dazu kann ich auch nichts 100%iges sagen. Bei mir sind es 29 pro Counter. Ich bin mir aber gerade unsicher, ob ich mir da damals noch 1-2 dazugebastelt habe.

Grüße,
Christoph

Hallo,
habe kürzlich einen neuen Wasserzähler an einen 1-Wire S0-Zähler von eservice angeschlossen:


Anbei das Skript dazu (den Array und die for-Schleife wegdenken…):

<?

$Zaehlernummer = [2];			// diese Zähler sollen verwendet werden!

$ID_array = 44171 /*[Geräte\Sonstiges\array_Raum]*/;        

$ID_Zaehler_S0 = 47773 /*[Geräte\S0_Modul\S0 Modul (2)\Zähler 1\Zaehler_S0]*/;
$dZ_S0 = 191606 - 38844.4;

$aa_S0_Zaehler = 6;
$cc_S0_Zaehler = 0;

$json = GetValue($ID_array);
$array = ( json_decode($json,true));

$ID_Archiv = $array[4][0][0]["ID_Archieve_Handler"];

for ($i_Zaehler = 0 ;  $i_Zaehler<count($Zaehlernummer) ; $i_Zaehler++)	
{           
	$dZ = 0;
	
	$grenzwert = $array[$aa_S0_Zaehler][$Zaehlernummer[$i_Zaehler]][$cc_S0_Zaehler]["Grenzwert"];      
	$ID_Zaehler = $array[$aa_S0_Zaehler][$Zaehlernummer[$i_Zaehler]][$cc_S0_Zaehler]["ID_Zaehler"];    
	$ID_Zaehler_alt = $array[$aa_S0_Zaehler][$Zaehlernummer[$i_Zaehler]][$cc_S0_Zaehler]["ID_Zaehler_alt"];     
	$ID_Summe = $array[$aa_S0_Zaehler][$Zaehlernummer[$i_Zaehler]][$cc_S0_Zaehler]["ID_Summe"];
	$Umrechnung = $array[$aa_S0_Zaehler][$Zaehlernummer[$i_Zaehler]][$cc_S0_Zaehler]["Umrechnung"];
	
	$Zaehler_alt = GetValueInteger ( $ID_Zaehler_alt );
	$Zaehler = GetValueInteger ( $ID_Zaehler );
	$Summe = GetValueFloat ( $ID_Summe );
	
	if ($Zaehler - $Zaehler_alt > 0 && $Zaehler - $Zaehler_alt < $grenzwert)
	{
		$dZ =($Zaehler - $Zaehler_alt)/$Umrechnung ;
		$Summe = $Summe + $dZ;
	}
	else
	{
	}
	SetValueInteger ($ID_Zaehler_alt, $Zaehler );
	SetValueFloat ($ID_Summe, $Summe );
}
SetValueFloat ($ID_Zaehler_S0, $Summe - $dZ_S0);
?>

Viele Grüße
Wickie

Dein Script wertet aber wirklich nur den Zähler aus. Das Script aus #1 wertet täglich, monatlich und jährlich aus. :wink:

Hab 28 Variablen gezählt.

ja, da hast du Recht.

Habe noch einen anderen S0-Zähler, der den Strom-Hausverbauch, sowie die PV-Erzeugung misst.
Dabei berechne ich mir noch die durchschnittliche Leistung der letzten 2 / 5 / 15Minuten.
Nur so als Anregung:


Skript „Stromberechnung“:

<?

$Zaehlernummer = [0,1];			// diese Zähler sollen verwendet werden!

$ID_array = 44171 /*[Geräte\Sonstiges\array_Raum]*/;        

$ID_Pel_EV = 33804 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_EV_gesamt]*/;
$ID_Pel_Bezug = 34989 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_Bezug_gesamt]*/;
$ID_Pel_Einspeisung= 13146 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_Einspeisung_gesamt]*/;   

$aa_S0_Zaehler = 6;
$cc_S0_Zaehler = 0;

$json = GetValue($ID_array);
$array = ( json_decode($json,true));

$ID_Archiv = $array[4][0][0]["ID_Archieve_Handler"];

$dV = 0;
$dB = 0;
$dEV = 0;
$dE = 0;
$dPV = 0;



for ($i_Zaehler = 0 ;  $i_Zaehler<count($Zaehlernummer) ; $i_Zaehler++)	
{           
	$dZ = 0;

	
	$grenzwert = $array[$aa_S0_Zaehler][$Zaehlernummer[$i_Zaehler]][$cc_S0_Zaehler]["Grenzwert"];      
	$ID_Zaehler = $array[$aa_S0_Zaehler][$Zaehlernummer[$i_Zaehler]][$cc_S0_Zaehler]["ID_Zaehler"];    
	$ID_Zaehler_alt = $array[$aa_S0_Zaehler][$Zaehlernummer[$i_Zaehler]][$cc_S0_Zaehler]["ID_Zaehler_alt"];     
	$ID_Summe = $array[$aa_S0_Zaehler][$Zaehlernummer[$i_Zaehler]][$cc_S0_Zaehler]["ID_Summe"];
	$Umrechnung = $array[$aa_S0_Zaehler][$Zaehlernummer[$i_Zaehler]][$cc_S0_Zaehler]["Umrechnung"];
	
	$Zaehler_alt = GetValueInteger ( $ID_Zaehler_alt );
	$Zaehler = GetValueInteger ( $ID_Zaehler );
	$Summe = GetValueFloat ( $ID_Summe );
	
	if ($Zaehler - $Zaehler_alt > 0 && $Zaehler - $Zaehler_alt < $grenzwert)
	{
		$dZ =($Zaehler - $Zaehler_alt)/$Umrechnung ;
		$Summe = $Summe + $dZ;
	}
	else
	{
	}
	SetValueInteger ($ID_Zaehler_alt, $Zaehler );
	SetValueFloat ($ID_Summe, $Summe );
	
	switch ($i_Zaehler) {
		case 0:     	
			$dV = $dZ;	
			break;         
		case 1:     	
			$dPV = $dZ;	
			break;
		default:
		break;			
	}     		
													

	
}

		echo "dZ: ", 	   $dZ ,"
";    
		echo "dV: ", 	   $dV ,"
";         
		echo "dPV: ", 	   $dPV ,"
";

$EV = GetValueFloat ( $ID_Pel_EV  );
$B = GetValueFloat ( $ID_Pel_Bezug );
$E = GetValueFloat ( $ID_Pel_Einspeisung );

$dB = max($dV - $dPV,0);
$dEV = $dV - $dB;
$dE = max($dPV - $dV,0);

$B = $B+$dB;
$EV = $EV+$dEV;
$E = $E+$dE;

SetValueFloat ( $ID_Pel_EV ,$EV );
SetValueFloat ( $ID_Pel_Bezug,$B  );
SetValueFloat ( $ID_Pel_Einspeisung,$E );

?>

Skript „Stromberechnung_XXmin“:

<?

//$dt = 60*2;    // Abfrage Stromzähler alle 60s
$ID_Archiv = 20434 /*[Archive Handler]*/;
$dt00 = 55;

//$ID_QPel_Verbrauchges = 40580 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_Verbrauch_gesamt]*/;

//$ID_Pel_Verbrauchges_02min = 45285 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_Verbrauch_02min]*/;


$x = array ();
$x [] = array (   "Bezeichnung"         => "Pel_VerbrauchGesamt_00min",	// nicht notwendig
						"ID_Pel_gesamt"     => 40580 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_Verbrauch_gesamt]*/,  	// nicht notwendig
						"ID_Pel_XXmin" 		=> 50484 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_Verbrauch_00min]*/,
						"dt"  		=> $dt00);
$x [] = array (   "Bezeichnung"         => "Pel_VerbrauchGesamt_02min",	// nicht notwendig
						"ID_Pel_gesamt"     => 40580 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_Verbrauch_gesamt]*/,  	// nicht notwendig
						"ID_Pel_XXmin" 		=> 45285 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_Verbrauch_02min]*/,
						"dt"  		=> 60*2);
$x [] = array (   "Bezeichnung"         => "Pel_VerbrauchGesamt_05min",	// nicht notwendig
						"ID_Pel_gesamt"     => 40580 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_Verbrauch_gesamt]*/,  	// nicht notwendig
						"ID_Pel_XXmin" 		=> 33946 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_Verbrauch_05min]*/,
						"dt"  		=> 60*5);
$x [] = array (   "Bezeichnung"         => "Pel_VerbrauchGesamt_15min",	// nicht notwendig
						"ID_Pel_gesamt"     => 40580 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_Verbrauch_gesamt]*/,  	// nicht notwendig
						"ID_Pel_XXmin" 		=> 49156 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_Verbrauch_15min]*/,
						"dt"  		=> 60*15);
$x [] = array (   "Bezeichnung"         => "Pel_PV_00min",	// nicht notwendig
						"ID_Pel_gesamt"     => 26970 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_PV_gesamt]*/,  	// nicht notwendig
						"ID_Pel_XXmin" 		=> 11019 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_PV_00min]*/,
						"dt"  		=> $dt00);
$x [] = array (   "Bezeichnung"         => "Pel_PV_02min",	// nicht notwendig
						"ID_Pel_gesamt"     => 26970 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_PV_gesamt]*/,  	// nicht notwendig
						"ID_Pel_XXmin" 		=> 15702 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_PV_02min]*/,
						"dt"  		=> 60*2);
$x [] = array (   "Bezeichnung"         => "Pel_PV_05min",	// nicht notwendig
						"ID_Pel_gesamt"     => 26970 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_PV_gesamt]*/,  	// nicht notwendig
						"ID_Pel_XXmin" 		=> 42401 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_PV_05min]*/,
						"dt"  		=> 60*5);
$x [] = array (   "Bezeichnung"         => "Pel_PV_15min",	// nicht notwendig
						"ID_Pel_gesamt"     => 26970 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_PV_gesamt]*/,  	// nicht notwendig
						"ID_Pel_XXmin" 		=> 47636 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_PV_15min]*/,
						"dt"  		=> 60*15);
$x [] = array (   "Bezeichnung"         => "Pel_Bezug_00min",	// nicht notwendig
						"ID_Pel_gesamt"     => 34989 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_Bezug_gesamt]*/,  	// nicht notwendig
						"ID_Pel_XXmin" 		=> 17367 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_Bezug_00min]*/,
						"dt"  		=> $dt00);
$x [] = array (   "Bezeichnung"         => "Pel_Bezug_02min",	// nicht notwendig
						"ID_Pel_gesamt"     => 34989 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_Bezug_gesamt]*/,  	// nicht notwendig
						"ID_Pel_XXmin" 		=> 54719 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_Bezug_02min]*/,
						"dt"  		=> 60*2);
$x [] = array (   "Bezeichnung"         => "Pel_Bezug_05min",	// nicht notwendig
						"ID_Pel_gesamt"     => 34989 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_Bezug_gesamt]*/,  	// nicht notwendig
						"ID_Pel_XXmin" 		=> 39437 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_Bezug_05min]*/,
						"dt"  		=> 60*5);
$x [] = array (   "Bezeichnung"         => "Pel_Bezug_15min",	// nicht notwendig
						"ID_Pel_gesamt"     => 34989 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_Bezug_gesamt]*/,  	// nicht notwendig
						"ID_Pel_XXmin" 		=> 54832 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_Bezug_15min]*/,
						"dt"  		=> 60*15);
$x [] = array (   "Bezeichnung"         => "Pel_Einspeisung_00min",	// nicht notwendig
						"ID_Pel_gesamt"     => 13146 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_Einspeisung_gesamt]*/,  	// nicht notwendig
						"ID_Pel_XXmin" 		=> 53093 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_Einspeisung_00min]*/,
						"dt"  		=> $dt00);
$x [] = array (   "Bezeichnung"         => "Pel_Einspeisung_02min",	// nicht notwendig
						"ID_Pel_gesamt"     => 13146 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_Einspeisung_gesamt]*/,  	// nicht notwendig
						"ID_Pel_XXmin" 		=> 42137 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_Einspeisung_02min]*/,
						"dt"  		=> 60*2);
$x [] = array (   "Bezeichnung"         => "Pel_Einspeisung_05min",	// nicht notwendig
						"ID_Pel_gesamt"     => 13146 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_Einspeisung_gesamt]*/,  	// nicht notwendig
						"ID_Pel_XXmin" 		=> 37186 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_Einspeisung_05min]*/,
						"dt"  		=> 60*5);
$x [] = array (   "Bezeichnung"         => "Pel_Einspeisung_15min",	// nicht notwendig
						"ID_Pel_gesamt"     => 13146 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_Einspeisung_gesamt]*/,  	// nicht notwendig
						"ID_Pel_XXmin" 		=> 52846 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_Einspeisung_15min]*/,
						"dt"  		=> 60*15);
$x [] = array (   "Bezeichnung"         => "Pel_Eigenverbrauch_00min",	// nicht notwendig
						"ID_Pel_gesamt"     => 33804 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_EV_gesamt]*/,  	// nicht notwendig
						"ID_Pel_XXmin" 		=> 42102 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_EV_00min]*/,
						"dt"  		=> $dt00);
$x [] = array (   "Bezeichnung"         => "Pel_Eigenverbrauch_02min",	// nicht notwendig
						"ID_Pel_gesamt"     => 33804 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_EV_gesamt]*/,  	// nicht notwendig
						"ID_Pel_XXmin" 		=> 40333 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_EV_02min]*/,
						"dt"  		=> 60*2);
$x [] = array (   "Bezeichnung"         => "Pel_Eigenverbrauch_05min",	// nicht notwendig
						"ID_Pel_gesamt"     => 33804 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_EV_gesamt]*/,  	// nicht notwendig
						"ID_Pel_XXmin" 		=> 22515 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_EV_05min]*/,
						"dt"  		=> 60*5);
$x [] = array (   "Bezeichnung"         => "Pel_Eigenverbrauch_15min",	// nicht notwendig
						"ID_Pel_gesamt"     => 33804 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_EV_gesamt]*/,  	// nicht notwendig
						"ID_Pel_XXmin" 		=> 44007 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_EV_15min]*/,
						"dt"  		=> 60*15);


for($i=0; $i < count($x); $i++)  // für jede Variable wird berechnet
	{
	$ID_Pel_gesamt = $x[$i]["ID_Pel_gesamt"];
	$ID_Pel_XXmin = $x[$i]["ID_Pel_XXmin"];
	$dt = $x[$i]["dt"];

	$wert = AC_getLoggedValues($ID_Archiv,$ID_Pel_gesamt,time()-$dt,time(),0);
	$anzahl = count($wert);
	if ($anzahl >1)
		{
		$erste = $anzahl -1;
		$letzte = 0;
		$dTime = $wert[$letzte]['TimeStamp']-$wert[$erste]['TimeStamp'];
		$erste =$wert[$erste]['Value'];
		$letzte =$wert[$letzte]['Value'];

		//$Pel_Verbrauch = ($letzte-$erste)/$dt*60*60*1000;
		$Pel_XX = min(($letzte-$erste)/$dTime*3600*1000,10000);
		//echo $anzahl."  ".$erste."  ".$letzte."  ".$Pel_XX."  ".$dTime;
		}
	else {
	$Pel_XX = 0;
	}
	SetValueFloat ($ID_Pel_XXmin, $Pel_XX );
	}

// Eigenverbrauchsquote auf Basis des 2Minuten-Wertes
// Deckungsquote = Eigenverbrauch / Gesamtverbrauch  (DQ = EV/GV)
// Eigenverbrauchsquote = Eigenverbrauch / PV-Erzeugung (EVQ = EV/PV)
$EV = GetValueFloat (40333 /*[Geräte\S0_Modul\S0 Modul (1)\Pel_EV_02min]*/); // $x[10]["ID_Pel_XXmin"]
$GV = max(GetValueFloat ( $x[2]["ID_Pel_XXmin"]),0.00001);
$PV = max(GetValueFloat ( $x[6]["ID_Pel_XXmin"]),0.00001);

$DQ = min(100,$EV/$GV*100);
$EVQ = min(100,$EV/$PV*100);

SetValueFloat (18649 /*[Geräte\S0_Modul\S0 Modul (1)\DQ]*/, $DQ );
SetValueFloat (12554 /*[Geräte\S0_Modul\S0 Modul (1)\EVQ]*/, $EVQ );


	echo "
",'Eigenverbauch  ' , $EV, "
";
	echo "
",'Gesamtverbrauch   ' , $GV, "
";
	echo "
",'PV-Leistung   ' , $PV, "
";
	echo "
",'Deckungsquote =EV/GV:    ' , $DQ, "
";
	echo "
",'Eigenverbauchsquote = EV/PV:     ' , $EVQ, "
";
?>

Vielleicht kann ja jemand etwas daraus verwenden…

Viele Grüße
Wickie

Hallo, anbei meine ersten Gehversuche bezüglich Anpassung Skripte.

Ich habe das S0 Counter Skript für die Auswertung von Stromzählern von eservice auf die Auswertung eines Gaszählers angepasst. Mit meinem Halbwissen :o ist mir das auch einigermaßen gelungen. Was nicht funktioniert und das auch schon im originalen Skript, ist das füllen der Reset Skripte mit Zeilen. Ich meine damit das die Skripte und auch die Ereignisse dazu zwar angelegt werden aber diese Skripte nicht mit den Daten aus dem Installationsskript gefüllt werden sondern leer bleiben.

Hat da jemand noch einen Tipp? Meine Script Kenntnisse sind da relativ überschaubar.

<?


/******************************************************************************
Gaszaehlerauswertung für IPS und 1-Wire S0 Counter von ESERA-Automation
Erstellt von andrge geraendert von cerberusde

 orignal Version 1.6
 Datum: 16.05.2012
 geändert am: 11.02.2017
 Skript fuer IPS Version V2.x
*******************************************************************************

//Auswerteskript für digitale Gaszähler mit S0 Impulsausgang und einem 1-Wire S0 Counter Modul
Es werden zusaetzlich String Variablen fuer die Ausgabe z.B. per 1-Wire LCD Modul angelegt

Das Skript erstellt folgende Variablen, Skripte und errechnet Energeiwerte

Auswertung Energiewerte aus gelesenen Zaehlerwert fuer:
- Aktuelle Leistung
- Tageswerte (Float und String)
- Maimaler Tageswert mit Zeitstempel
- Monatswerte (Float und String)
- Jahreswerte (Float und String)

Skripte und Triggerbedingung fuer:
- Triggerzeit fuer Zaehlerbaustein
- Triggerbedingung fuer Auswerteskript
- Skript fuer Uebertrag und Reset Tageswerte + Reset Max. Wert
- Skript fuer Uebertrag und Reset Monatswerte
- Skript fuer Uebertrag und Reset Jahreswerte

Alle benoetigten Variablen, Skripte und Triggerbedingungen werden automatisch in IPS-Symcon durch einmaliges "Ausfuehren" angelegt.
Sollte eine Variable geloescht werden, wird eine neue Variable mit dem naechsten Skriptdurchlauf angelegt.
*******************************************************************************/


/*
//Installation:
	Konfiguration fuer Gaszaehler, 1-Wire S0 Counter

	Weiterhin sind nachfolgende Schritte von Hand ausführen:

	Schritt 1:
	Kategorie für die 1-Wire S0 Gaswertung anlegen. Name nach eigenen Wünschen

	Schritt 2:
	Ein neues Skript unterhalb der Kategorie (aus Schritt 1) erstellen.
	Name nach eigenen Wünschen

	Schritt 3:
	Eine Instanz für den DS2413 unterhalb dieser Kategorie (aus Schritt 1) anlegen.
	Hier den Namen der S0 Zaehler Instance eintragen:

	Name des 1-Wire Zaehlers:           														*/
	$zaehler_name = "Hutschienen S0 Zaehlermodul"; 	//Default = S0 Zähler

	/*Schritt 4:
	Name des auszuwertenden Zaehlervariable eintragen. Wenn Sie den Namen nicht veraendert haben,
	tragen Sie hier die Defaultnamen der Zaehlervariable ein    						*/
	$zaehler_variable = "Zaehler 1"   ; 	//	Default: Zähler 1 oder Zähler 2

	/*Schritt 5:
	Konfiguration für Gaszaehler, des Auswertezyklus und Schwellwerte für Statusausgaben:

	//Hier den passenden Impulswert des Stromzaehlers auswaehlen (die Zeichen // an der richtigen Stelle entfernen)
	//******************************************************************************
	Auswahl des Gaszählers (Impulse pro m³)
	Auswertung von Stromzaehlern mit 100, 10, 1 je m³ Impulse moeglich   		*/
	$zaehler_impulse =  	100;

	//******************************************************************************
	//Auswahl des Zaehlerausgangs des 1-Wire S0 Counters
	//Verwendeten Zaehler des 1-Wire Bausteins auswaehlen
	//******************************************************************************
	//Es kann die ID des Zaehlers automatisch ermittelt oder manual eingegeben werden.
	//Soll die ID automatisch ermittelt werden, muß der Zähler unterhalb der angelegten Kategorie sein.
	$ID_counter_erkennung = 2;   								//Automatisch = 1, Manuel = 2

		//Wenn Manuell, hier die ID der Zaehler Instance eintragen:
		$ds2423_counter_man = 54063 /*[Räume\Keller\Haustechnik\Counter 2 Gasverbrauch & frei\Hutschienen S0 Zaehlermodul]*/  ;

	//******************************************************************************
	//Abfragezyklus des 1-Wire S0 Zaehlers
	//******************************************************************************
	// Wie oft soll der 1-Wire S0 Counter abgefragt werden?
	// Bei sehr geringen Leistungen und Zaehlern mit wenigen Impulsen macht es Sinn auf die 180 Sek. zu gehen
	$pollzeit = 60	; 											//Default 180 Sekunden. Zulaessig sind 60, 120 oder 180 Sekunden

/*	Schritt 6:
	Skript 1x per "Ausführen" starten

	FERTIG !!!!!!!!

	Ab jetzt wird das Skript bei einer Änderung der ausgewaehlten Zaehlervariablen getriggert.

	Viel Spaß mit diesem Beispielskript. Keine Gewaehr fur Fehlerfreiheit und Richtigkeit
	Gerne duefen Sie uns Verbesserungen oder Kritik (gern auch positiv) senden.
	Mail: info@eservice-online.de

*******************************************************************************/

//******************************************************************************
//Debug Ausgaben
//Fuer Testzwecke koennen Testausgaben aktiviert werden
//******************************************************************************
$debug =false;   										// Debug Modus fuer Variablen ID usw.,    Ausgabe = true / keine Ausgabe =false
$debug_auswertung = false;   							// Debug Modus fuer Berechung,            Ausgabe = true / keine Ausgabe =false


/********************************************************************************************************
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   Ab hier nichts mehr ändern   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
********************************************************************************************************/

// Übergeordnete Kategorie ermitteln
$parentID = IPS_GetObject($IPS_SELF);
$parentID = $parentID['ParentID'];
if($debug) {echo "ParentID:  $parentID 
";}

//automatische oder manuelles Einlesen der Counter ID
If ($ID_counter_erkennung == 1) {
   // Automatisches einlesen der Counter ID
   $ds2423 = IPS_GetInstanceIDByName ( $zaehler_name, $parentID );
	if($debug) {echo "ID DS2423:  $ds2423 
";}   												//Debug Ausgabe
	}
elseif ($ID_counter_erkennung == 2) {
	//Manuelle ID von oben abholen
	$ds2423 = $ds2423_counter_man;
	if($debug) {echo "ds2423counter_man: $ds2423 
";}											//Debug Ausgabe
	}
Else {echo "Fehler: Auswahl des Zaehlers Auto / Manuel, Es ist nur 1 oder 2 zulaessig  
";}

// Variablen zur Skriptverarbeitung einlesen und intern verfügbar machen
$ds2423counter = 	IPS_GetVariableIDByName( $zaehler_variable, $ds2423);
if($debug) {echo "ds2423counter: $ds2423counter 
";}											//Debug Ausgabe


// Inhalt des benötigten Actionsskripts in Variable ablegen
$actionScript = "<?
if(\$IPS_SENDER == 'WebFront') {
  	SetValue(\$IPS_VARIABLE, \$IPS_VALUE);
}
//";


// Inhalt für Skript "Reset Tag" erzeugen
//********************************************
$skript_reset_tag = "<?
//Übertrag auf Vortag und Reset der Tageswerte
//Übergeordnete Kategorie ermitteln
	\$parentID = IPS_GetObject(\$IPS_SELF);
	\$parentID = \$parentID['ParentID'];

	\$id_tag_leistung 				= @IPS_GetVariableIDByName('Tag', \$parentID);
	\$id_tag_leistung_string 		= @IPS_GetVariableIDByName('Tag_1', \$parentID);
	\$id_max_leistung          		= @IPS_GetVariableIDByName('Maximal_Tag', \$parentID);
	\$id_max_leistung_string   		= @IPS_GetVariableIDByName('Maximal_Tag_1', \$parentID);
	\$id_max_leistung_time_string   = @IPS_GetVariableIDByName('Maximal Tag Zeit', \$parentID);
	\$id_vortag_leistung 			= @IPS_GetVariableIDByName('Vortag', \$parentID);
	\$id_vortag_leistung_string 	= @IPS_GetVariableIDByName('Vortag_1', \$parentID);
	\$id_tag_counter 				= @IPS_GetVariableIDByName('counter_tag', \$parentID);
	\$reset_tag 					= @IPS_GetVariableIDByName('Reset Tag', \$parentID);

	//Übertrag String und Float
	\$uebertrag_1 = GetValue (\$id_tag_leistung_string  );      //Tagesleistung abholen
 	SetValue (\$id_vortag_leistung_string  , \$uebertrag_1);
 	\$uebertrag = GetValue (\$id_tag_leistung  );               //Tagesleistung abholen
	SetValue (\$id_vortag_leistung  , \$uebertrag);
	IPS_Sleep(20);

	//Reset Tagwerte
	SetValueInteger(\$id_tag_counter  , 0);     			    //Tagesleistung auf 0 setzen
	SetValueString (\$id_tag_leistung_string  , '0 m³');
	SetValueFloat  (\$id_tag_leistung  , 0);
	SetValueFloat  (\$id_max_leistung , 0);                     //Maximalwert zurueck setzen
	SetValueString (\$id_max_leistung_string  , '0');           //Maximalwert zurueck setzen
	SetValueString (\$id_max_leistung_time_string  , '-');      //Zeit Maximalwert zurueck setzen

	//Boolean fuer Rueckmeldung eines Tastersymbols

	if (\$IPS_SENDER != 'Designer')
		{
  		Echo 'Reset durchgeführt';
		}
	?>";
	

// Inhalt für Skript "Reset Monat" erzeugen
//********************************************
$skript_reset_monat = "<?
//Übertrag auf Vormonat und Reset der Monateswerte
//Übergeordnete Kategorie ermitteln
	\$parentID = IPS_GetObject(\$IPS_SELF);
	\$parentID = \$parentID['ParentID'];

 	\$id_monat_leistung 			= @IPS_GetVariableIDByName('Monat', \$parentID);
	\$id_monat_leistung_string 		= @IPS_GetVariableIDByName('Monat_1', \$parentID);
	\$id_vormonat_leistung 			= @IPS_GetVariableIDByName('Vormonat', \$parentID);
	\$id_vormonat_leistung_string	= @IPS_GetVariableIDByName('Vormonat_1', \$parentID);
	\$id_monat_counter 				= @IPS_GetVariableIDByName('counter_monat', \$parentID);
	\$reset_monat 					= @IPS_GetVariableIDByName('Reset Monat', \$parentID);

	//Übertrag String und Float
	\$uebertrag = GetValue (\$id_monat_leistung  );  			//Monatesleistung abholen
	SetValue (\$id_vormonat_leistung  , \$uebertrag);
	\$uebertrag_1 = GetValue (\$id_monat_leistung_string  );  	//Monatesleistung abholen
	SetValue (\$id_vormonat_leistung_string  , \$uebertrag_1);
	IPS_Sleep(20);

	//Reset Tagwerte
	SetValueInteger(\$id_monat_counter  , 0);   				//Monatesleistung auf 0 setzen
	SetValueString (\$id_monat_leistung_string  , '0 m³');
	SetValueFloat  (\$id_monat_leistung  , 0);

	//Boolean fuer Rueckmeldung eines Tastersymbols
	SetValueBoolean(\$reset_monat , true);
	IPS_Sleep(1000);
	SetValueBoolean(\$reset_monat , false);

	if (\$IPS_SENDER != 'Designer')
		{
  		Echo 'Reset durchgeführt';
		}
	?>";


// Inhalt für Skript "Reset Jahr" erzeugen
//********************************************
$skript_reset_jahr = "<?
//Übertrag auf Vormonat und Reset der Jahreswerte
//Übergeordnete Kategorie ermitteln
	\$parentID = IPS_GetObject(\$IPS_SELF);
	\$parentID = \$parentID['ParentID'];

	\$id_jahr_leistung 				= @IPS_GetVariableIDByName('Jahr', \$parentID);
	\$id_jahr_leistung_string 		= @IPS_GetVariableIDByName('Jahr_1', \$parentID);
	\$id_vorjahr_leistung 			= @IPS_GetVariableIDByName('Vorjahr', \$parentID);
	\$id_vorjahr_leistung_string 	= @IPS_GetVariableIDByName('Vorjahr_1', \$parentID);
	\$id_jahr_counter 				= @IPS_GetVariableIDByName('counter_jahr', \$parentID);
	\$reset_jahr 					= @IPS_GetVariableIDByName('Reset Jahr', \$parentID);

	//Übertrag String und Float
	\$uebertrag = GetValue (\$id_jahr_leistung  );  			//Jahresleistung abholen
	SetValue (\$id_vorjahr_leistung  , \$uebertrag);
	\$uebertrag_1 = GetValue (\$id_jahr_leistung_string  );     //Jahresleistung abholen
	SetValue (\$id_vorjahr_leistung_string  , \$uebertrag_1);
	IPS_Sleep(20);

	//Reset Tagwerte
	SetValueInteger(\$id_jahr_counter  , 0);     				//Jahresleistung auf 0 setzen
	SetValueString(\$id_jahr_leistung_string  , '0 m³');
	SetValueFloat(\$id_jahr_leistung  , 0);

	//Boolean fuer Rueckmeldung eines Tastersymbols
	SetValueBoolean(\$reset_jahr , true);
	IPS_Sleep(1000);
	SetValueBoolean(\$reset_jahr , false);

	if (\$IPS_SENDER != 'Designer')
		{
  		Echo 'Reset durchgeführt';
 		}
	?>";


// ***************** Start Erstinitialisierung *********************************
if($IPS_SENDER == "Execute")
	{                																		// nur wenn bei "Ausführen"

	// Skript verstecken
   IPS_SetHidden($IPS_SELF, true);
   IPS_SetPosition($IPS_SELF, 99);

	//Reset Tag
	//***************************************************************************
	// Skript "Reset Tag" erzeugen (siehe function)
   $scriptid_reset_tag = CreateScriptByName("Reset Tag", $parentID, $skript_reset_tag);
		if($debug) { echo "Skript -Reset Tag- angelegt
"; }								//Debug Ausgabe

	// Triggerbedingung/Ereignis für Skript "Reset Tag" erstellen falls nicht vorhanden
	//*****************************************************************
	$EreignisID = @IPS_GetEventIDByName( "Reset Tag" , $scriptid_reset_tag);
		if ($EreignisID == 0){
		$eid = IPS_CreateEvent(1);        													// Ausgelöstes Ereignis
		IPS_SetEventCyclic($eid, 2, 1, 0, 0, 0, 0);   										//Taeglich
		IPS_SetEventCyclicTimeBounds($eid, mktime(00, 00, 02), 0);            			    //immer um 00:00:01Uhr
		IPS_SetParent($eid, $scriptid_reset_tag); 											// Ereignis zuordnen
		IPS_SetName($eid, "Reset Tag" );    												// Ereignis umbennen
		IPS_SetEventActive($eid, true);                       								// Ereignis aktivieren
		}

	//Reset Monat
	//***************************************************************************
	// Skript "Reset Moant" erzeugen (siehe function)
   $scriptid_reset_monat = CreateScriptByName("Reset Monat", $parentID, $skript_reset_monat);
   	if($debug) { echo "Skript -Reset Monat- angelegt
"; }								    //Debug Ausgabe

	// Triggerbedingung/Ereignis für Skript "Reset Tag" erstellen falls nicht vorhanden
	//*****************************************************************
	$EreignisID = @IPS_GetEventIDByName( "Reset Monat" , $scriptid_reset_monat);
		if ($EreignisID == 0){
		$eid = IPS_CreateEvent(1);        													// Ausgelöstes Ereignis
		IPS_SetEventCyclic($eid, 4, 1, 0, 1, 0, 0);   										// Monatlich
		IPS_SetEventCyclicTimeBounds($eid, mktime(00, 00, 02), 0);            			    // immer um 00:00:01Uhr
		IPS_SetParent($eid, $scriptid_reset_monat); 										// Ereignis zuordnen
		IPS_SetName($eid, "Reset Monat" );    												// Ereignis umbennen
		IPS_SetEventActive($eid, true);                       								// Ereignis aktivieren
		}

	//Reset Jahr
	//***************************************************************************
	// Skript "Reset Moant" erzeugen (siehe function)
   $scriptid_reset_jahr = CreateScriptByName("Reset Jahr", $parentID, $skript_reset_jahr);
		if($debug) { echo "Skript -Reset Jahr- angelegt
"; }								//Debug Ausgabe

	// Triggerbedingung/Ereignis für Skript "Reset Tag" erstellen falls nicht vorhanden
	//*****************************************************************
	$EreignisID = @IPS_GetEventIDByName( "Reset Jahr" , $scriptid_reset_jahr);
		if ($EreignisID == 0){
		$eid = IPS_CreateEvent(1);        													// Ausgelöstes Ereignis
		IPS_SetEventCyclic($eid, 5, 1, 0, 1, 0, 0);   										// Jaehrlich
		IPS_SetEventCyclicTimeBounds($eid, mktime(00, 00, 02), 0);            			    // immer um 00:00:01Uhr
		IPS_SetParent($eid, $scriptid_reset_jahr); 											// Ereignis zuordnen
		IPS_SetName($eid, "Reset Jahr" );    												// Ereignis umbennen
		IPS_SetEventActive($eid, true);                       								// Ereignis aktivieren
		}

	//Triggerintervall für Baustein einstellen
	//*****************************************************************
	TMEX_SetInterval($ds2423, $pollzeit);
		if($debug) {echo "DS2423 Triggerintervall programmiert
";}							//Debug Ausgabe

	//Triggerbedingung fuer dieses Skript erzeugen
	//***************************************************************************
	// Triggerbedingung/Ereignis für Skript erstellen falls nicht vorhanden
	// Ereignis für Skript erstellen falls nicht vorhanden
	$EreignisID = @IPS_GetEventIDByName($zaehler_variable,$IPS_SELF);
	if ($EreignisID == 0) {
		$eid = IPS_CreateEvent(0);        													// Ausgelöstes Ereignis
		IPS_SetEventTrigger($eid, 0, $ds2423counter); 										// Bei Änderung von Variable
		IPS_SetParent($eid, $IPS_SELF); 													// Ereignis zuordnen
		IPS_SetName($eid, $zaehler_variable);    											// Ereignis umbennen
		IPS_SetEventActive($eid, true);                       								// Ereignis aktivieren
	}
	else {
	if($debug) {echo "Ereignis bereits erstellt"; }
	}


}
// ****************** Ende Erstinitialisierung *********************************


//Berechnung
//******************************************************************************
//Variablen
//******************************************
// Variablen IDs zuweisen und gegebenenfalls anlegen
$id_counter_alt	    = CreateVariableByName($parentID, "counter_alt", "I"  );
$id_counter_delta	= CreateVariableByName($parentID, "counter_delta", "I"  );

//Zählerwerte abholen
$counter_neu 		= GetValueInteger ($ds2423counter );
$counter_alt 		= GetValueInteger ($id_counter_alt );

//Delta berechnen
$delta = $counter_neu - $counter_alt;   													//alter Wert von neuen Wert abziehen

SetValueInteger($id_counter_alt  , $counter_neu );   										//Zaehlerwert ablegen
SetValueInteger($id_counter_delta  , $delta );          									//Ausgabe Differenz
	if($debug) {echo  "Counter: $counter_neu 
Delta: $delta
";}						// Debug Ausgabe Berechung


//*******************************************************************
// Akueller Wert:

If     ($zaehler_impulse == 100){$zaehlerfaktor = 0.01;}								    //Gaszähler 1 m³ / Impulse  (100)  = 0.01 m³ Impuls
elseif ($zaehler_impulse == 10){$zaehlerfaktor = 0.1;} 								        //Gaszähler 1 m³ / Impulse  (10)  = 0.1 m³ Impuls
elseif ($zaehler_impulse == 1){$zaehlerfaktor = 1.0;} 								        //Gaszähler 1 m³ / Impulse  (1)  = 1 m³ Impuls

else {echo "Falscher Zaehler Impulswert eingegeben, nur 100, 10 und 1 möglich!
\r";}
if($debug) {echo  "Zaehler Impulse pro m³: $zaehler_impulse 
";}

If ($pollzeit == 60){$Umrechungsfaktor = 60;} 											    //Umrechnungsfaktor = Stunde (Minuten / Auslesezeit (Min.)
elseif ($pollzeit == 120){$Umrechungsfaktor = 30;}
elseif ($pollzeit == 180){$Umrechungsfaktor = 20; }
else {echo "Falscher Auslesezykluszeit eingegeben, nur 60, 120 oder 180 Sekunden möglich!
\r";}
if($debug) {echo  " Auslesezeit:  $pollzeit 
";}

$deltam3 = ($delta * $zaehlerfaktor) * $Umrechungsfaktor  ;

//Aktuelle Leistung / aktueller Verbrauch
//*******************************************************************

$id_aktuell_leistung 		  = CreateVariableByName($parentID, "Aktuell", "m³/h" );
$id_aktuell_leistung_string   = CreateVariableByName($parentID, "Aktuell_1", "S" );
$id_max_leistung 			  = CreateVariableByName($parentID, "Maximal_Tag", "m³/h" );
$id_max_leistung_string       = CreateVariableByName($parentID, "Maximal_Tag_1", "S" );
$id_max_leistung_time_string  = CreateVariableByName($parentID, "Maximal Tag Zeit", "S" );

//Anzeige Verbrauch aktuell
SetValueFloat ($id_aktuell_leistung    , $deltam3);

//Ausgabe fuer String vorbereiten
//Ausgabe fuer Watt
#$round_aktuell_summe_1 = round ($deltam3 * 1000, 2);     						// auf 2 Stellen runden
#$round_aktuell_summe_2 = sprintf("%2.0f", $round_aktuell_summe_1); 			// Formatierung 2vor und 0 Nachkommastellen

//Ausgabe fuer m³/h
$round_aktuell_summe_3 = round ($deltam3, 2);     								// auf 0 Stellen runden
$round_aktuell_summe_4 = sprintf("%2.2f", $round_aktuell_summe_3); 				// Formatierung auf 2vor und 2 Nachkommastellen

//Maximalwert Tag + Zeit:
$leistung_max = GetValueFloat ($id_max_leistung);

If ($deltam3 >= $leistung_max)
	{
	SetValueFloat ($id_max_leistung    , $deltam3);
	SetValueString ($id_max_leistung_string , $round_aktuell_summe_4. " m³/h " );
	SetValueString ($id_max_leistung_time_string , date("H:i")); 							 //aktuelle Uhrzeit, Stunde und Minuten
		if($debug_auswertung) {Echo "Max. Leistung Neu: $round_aktuell_summe_4 m³/h 
"; } // Debug Ausgabe Berechung
	}

//Anzeige für Dashboard und LCD Display
   SetValueString ($id_aktuell_leistung_string , $round_aktuell_summe_4. " m³/h ");
		if($debug_auswertung) {Echo "Aktuelle Leistung: $round_aktuell_summe_4 m³/h 
"; }  // Debug Ausgabe Berechung

//Tageswerte
//*******************************************************************
$id_tag_leistung 			= CreateVariableByName($parentID, "Tag", "m³" );
$id_tag_leistung_string 	= CreateVariableByName($parentID, "Tag_1", "S" );
$id_vortag_leistung 		= CreateVariableByName($parentID, "Vortag", "m³" );
$id_vortag_leistung_string  = CreateVariableByName($parentID, "Vortag_1", "S" );
$reset_tag 					= CreateVariableByName($parentID, "Reset Tag", "an" );
$id_tag_counter 			= CreateVariableByName($parentID, "counter_tag", "I" );

$counter_tag = GetValueInteger ($id_tag_counter );
$counter_tag_neu = $counter_tag + $delta ;
SetValueInteger($id_tag_counter  , $counter_tag_neu);

	//Anzeige Tagsverbrauch
	$tag_leistung_summe = $counter_tag_neu * $zaehlerfaktor ;
	SetValueFloat ($id_tag_leistung , $tag_leistung_summe);

	//Anzeige für LCD Display
	$round_tag_summe_1 = round ($tag_leistung_summe, 2);     						  // auf 2 Stellen runden
	$round_tag_summe_2 = sprintf("%2.2f", $round_tag_summe_1); 						  // Formatierung 2 vor und 2 Nachkommastellen
   SetValueString ($id_tag_leistung_string , $round_tag_summe_2. " m³");
		if($debug_auswertung) {Echo "Tag Summe: $round_tag_summe_2 m³
"; }         // Debug Ausgabe Berechung


//Monatswerte
//*******************************************************************
// Variablen IDs zuweisen und gegebenenfalls anlegen
$id_monat_leistung 				= CreateVariableByName($parentID, "Monat", "m³" );
$id_monat_leistung_string 		= CreateVariableByName($parentID, "Monat_1", "S" );
$id_vormonat_leistung 			= CreateVariableByName($parentID, "Vormonat", "m³" );
$id_vormonat_leistung_string 	= CreateVariableByName($parentID, "Vormonat_1", "S" );
$reset_monat 					= CreateVariableByName($parentID, "Reset Monat", "an" );
$id_monat_counter 				= CreateVariableByName($parentID, "counter_monat", "I"  );

$counter_monat = GetValueInteger ($id_monat_counter);
$counter_monat_neu = $counter_monat + $delta ;
SetValueInteger($id_monat_counter  , $counter_monat_neu);  //

	//Anzeige Monatsverbrauch
	$monat_leistung_summe = $counter_monat_neu * $zaehlerfaktor ;
	SetValueFloat ($id_monat_leistung    , $monat_leistung_summe);

	//Anzeige für LCD Display
	$round_monat_summe_1 = round ($monat_leistung_summe, 2);     						// auf 2 Stellen runden
	$round_monat_summe_2 = sprintf("%2.2f", $round_monat_summe_1); 						// Formatierung auf 2 vor und 2 Nachkommastellen
   SetValueString ($id_monat_leistung_string   , $round_monat_summe_2. " m³");          //
		if($debug_auswertung) {Echo "Monat Summe: $round_monat_summe_2 m³
"; }		// Debug Ausgabe Berechung

//Jahreswerte
//*******************************************************************
$id_jahr_leistung 			= CreateVariableByName($parentID, "Jahr", "m³" );
$id_jahr_leistung_string 	= CreateVariableByName($parentID, "Jahr_1", "S" );
$id_vorjahr_leistung 		= CreateVariableByName($parentID, "Vorjahr", "m³" );
$reset_jahr 				= CreateVariableByName($parentID, "Reset Jahr", "an" );
$id_vorjahr_leistung_string = CreateVariableByName($parentID, "Vorjahr_1", "S" );
$id_jahr_counter 			= CreateVariableByName($parentID, "counter_jahr", "I" );

$counter_jahr = GetValueInteger ($id_jahr_counter);
$counter_jahr_neu = $counter_jahr + $delta ;
SetValueInteger($id_jahr_counter  , $counter_jahr_neu);  //

	//Anzeige jahrsverbrauch
	$jahr_leistung_summe = $counter_jahr_neu * $zaehlerfaktor ;
	SetValueFloat ($id_jahr_leistung  , $jahr_leistung_summe);

	//Anzeige für LCD Display
	$round_jahr_summe_1 = round ($jahr_leistung_summe, 2);     								// auf 2 Stellen runden
	$round_jahr_summe_2 = sprintf("%2.2f", $round_jahr_summe_1); 							// Formatierung auf 2vor und 2 Nachkommastellen
   SetValueString ($id_jahr_leistung_string   , $round_jahr_summe_2. " m³");       // Ausgabe in Variable
		if($debug_auswertung) {Echo "Jahr Summe: $round_jahr_summe_2 m³
"; }      // Debug Ausgabe Berechung

// Ende Berechnung
// ****************************************************************************


// ****************************************************************************
// Funktionen
// ****************************************************************************

// Nicht Standardprofile erstellen
if (!IPS_VariableProfileExists('Volumenstrom'))
{
    IPS_CreateVariableProfile('Volumenstrom', 2);
    IPS_SetVariableProfileDigits('Volumenstrom', 2);
    IPS_SetVariableProfileText('Volumenstrom', '', ' m³/h');
}

// Variablen erstellen falls nicht vorhanden und ID entsprechend zuordnen
function CreateVariableByName($id, $name, $type) {
	global $IPS_SELF;
	global $ScriptID;
	$vid = @IPS_GetVariableIDByName($name, $id);
	if($vid === false) {
		// $vartype: Boolean=0, Integer=1, Float=2, String=3
		if ($type == 'm³/h')   			$vartype = 2;
		if ($type == 'm³')  			$vartype = 2;
		if ($type == 'I') 				$vartype = 1;
		if ($type == 'S') 				$vartype = 3;
		if ($type == 'OK') 				$vartype = 0;

		$vid = IPS_CreateVariable($vartype);
		IPS_SetParent($vid, $id);
		IPS_SetName($vid, $name);
		IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");

		if ($type == 'm³')	{
			IPS_SetVariableCustomProfile ($vid, "~Gas");
			IPS_SetPosition($vid, 10); }
		if ($type == 'm³/h')	{
			IPS_SetVariableCustomProfile ($vid, "Volumenstrom");
			IPS_SetPosition($vid, 10); }
		if ($type == 'I')	{
			//IPS_SetVariableCustomProfile ($vid, " ");
			IPS_SetPosition($vid, 30);  }
		if ($type == 'OK') {
			IPS_SetVariableCustomProfile ($vid, "~Alert.Reversed");
			IPS_SetVariableCustomAction($vid, $ScriptID);
			IPS_SetPosition($vid, 40);  }
      if ($type == 'an') {
			IPS_SetVariableCustomProfile ($vid, "~Switch");
			IPS_SetVariableCustomAction($vid, $ScriptID);
			IPS_SetPosition($vid, 50);  }
  		if ($type == 'S')	{
			//IPS_SetVariableCustomProfile ($vid, " ");
			IPS_SetPosition($vid, 60);  }
		}
		return $vid;
	}
// Eine Function um ein Script im Script-Verzeichnis zu erzeugen
// erstellt von hirschbrat, angepasst wgreipl
function CreateScriptByName($ScriptNAME, $ParentID, $ScriptTEXT)
	{
	global $IPS_SELF;
	$ScriptID = @IPS_GetScriptIDByName($ScriptNAME, $ParentID);
	if ($ScriptID == 0){
		$ScriptID = IPS_CreateScript(0);
		IPS_SetName($ScriptID, $ScriptNAME);
		IPS_SetParent($ScriptID, $ParentID);
		IPS_SetInfo($ScriptID, "This script was created by: #$IPS_SELF#");
		$fh = fopen(IPS_GetKernelDir()."scripts\\".$ScriptID.".ips.php", 'w') or die("can't open file");
		fwrite($fh, $ScriptTEXT);
		fclose($fh);
		$ScriptPath = $ScriptID.".ips.php";     												//Skriptdatei
		IPS_SetScriptFile($ScriptID, $ScriptPath);
		IPS_SetHidden($ScriptID, true);
		IPS_SetPosition($ScriptID, 80);
		//if($debug) { echo "Die Skript-ID lautet: . $ScriptID
"; } 					//Debug Ausgabe

		}
	return $ScriptID;
	}
?>	

Hier noch ein Skript mit dem ich dann den Jahresverbrauch in kWH berechne.

<?

//Jahresverbrauch Gas in kWh berechnen

$brennwert = GetValue(13905 /*[Energie\Gas\Gaszähler (4040086468)\Brennwert]*/);
$jahresverbrauch = GetValue(36697 /*[Räume\Keller\Haustechnik\Counter 2 Gasverbrauch & frei\Hutschienen S0 Zaehlermodul\Zaehler 1\Jahr]*/);

//Jahresverbrauch in kWh
function Jahresverbrauch_kWh($brennwert,$jahresverbrauch)
{
    $val = $brennwert * $jahresverbrauch;
    return $val;
}

$jahresverbrauch_kWh = Jahresverbrauch_kWh($brennwert,$jahresverbrauch);

SetValue(22391 /*[Energie\Gas\Gaszähler (4040086468)\Jahresverbrauch in kWh]*/,$jahresverbrauch_kWh); 

?>

Danke und Grüße
Ringo

Hier noch zwei Bilder zum voerherigen Beitrag von mir

1 „Gefällt mir“

Ich habe mich an dem Script versucht aber mit wenig Erfolg.
Deshalb die Frage
Funktionieren die Scripte noch mit einer aktuellen Version von IP-Symcon. Wie ich gesehen habe gibt es da die ein oder andere Änderung in der Syntax z.B. $IPS_SELF ->$_IPS[‚SELF‘] usw.

Vielen Dank im voraus für die Info

Hab mich mal an dem Script versucht und es angepasst. Vielleicht könnte jemand das Script mal überprüfen, da maine Programierkenntisse doch sehr bescheiden sind.
Welche Änderungen wurden gemacht.

  1. Syntax angepasst,
  2. TMEX aufgrund meines ESERA 1-Wire-Contoller nicht gesetzt. Wenn ich das richtig gelesen habe wird der ab V4.0 nicht mehr benötigt,

Script angepasst:

 <?


/******************************************************************************
Gaszaehlerauswertung für IPS und 1-Wire S0 Counter von ESERA-Automation
Erstellt von andrge geraendert von cerberusde

 orignal Version 1.6
 Datum: 16.05.2012
 geändert am: 07.02.2023
 Skript fuer IPS Version V6.x
*******************************************************************************

//Auswerteskript für digitale Gaszähler mit S0 Impulsausgang und einem 1-Wire S0 Counter Modul
Es werden zusaetzlich String Variablen fuer die Ausgabe z.B. per 1-Wire LCD Modul angelegt

Das Skript erstellt folgende Variablen, Skripte und errechnet Energeiwerte

Auswertung Energiewerte aus gelesenen Zaehlerwert fuer:
- Aktuelle Leistung
- Tageswerte (Float und String)
- Maimaler Tageswert mit Zeitstempel
- Monatswerte (Float und String)
- Jahreswerte (Float und String)

Skripte und Triggerbedingung fuer:
- Triggerzeit fuer Zaehlerbaustein
- Triggerbedingung fuer Auswerteskript
- Skript fuer Uebertrag und Reset Tageswerte + Reset Max. Wert
- Skript fuer Uebertrag und Reset Monatswerte
- Skript fuer Uebertrag und Reset Jahreswerte

Alle benoetigten Variablen, Skripte und Triggerbedingungen werden automatisch in IPS-Symcon durch einmaliges "Ausfuehren" angelegt.
Sollte eine Variable geloescht werden, wird eine neue Variable mit dem naechsten Skriptdurchlauf angelegt.
*******************************************************************************/


/*
//Installation:
    Konfiguration fuer Gaszaehler, 1-Wire S0 Counter

    Weiterhin sind nachfolgende Schritte von Hand ausführen:

    Schritt 1:
    Kategorie für die 1-Wire S0 Gaswertung anlegen. Name nach eigenen Wünschen

    Schritt 2:
    Ein neues Skript unterhalb der Kategorie (aus Schritt 1) erstellen.
    Name nach eigenen Wünschen

    Schritt 3:
    Eine Instanz für den DS2413 unterhalb dieser Kategorie (aus Schritt 1) anlegen.
    Hier den Namen der S0 Zaehler Instance eintragen:

    Name des 1-Wire Zaehlers:                                                                   */
    $zaehler_name = "OWD1";     //Default = S0 Zähler

    /*Schritt 4:
    Name des auszuwertenden Zaehlervariable eintragen. Wenn Sie den Namen nicht veraendert haben,
    tragen Sie hier die Defaultnamen der Zaehlervariable ein                            */
    $zaehler_variable = "Z1"   ;     //    Default: Zähler 1 oder Zähler 2

    /*Schritt 5:
    Konfiguration für Gaszaehler, des Auswertezyklus und Schwellwerte für Statusausgaben:

    //Hier den passenden Impulswert des Stromzaehlers auswaehlen (die Zeichen // an der richtigen Stelle entfernen)
    //******************************************************************************
    Auswahl des Gaszählers (Impulse pro m³)
    Auswertung von Stromzaehlern mit 100, 10, 1 je m³ Impulse moeglich           */
    $zaehler_impulse =      10;

    //******************************************************************************
    //Auswahl des Zaehlerausgangs des 1-Wire S0 Counters
    //Verwendeten Zaehler des 1-Wire Bausteins auswaehlen
    //******************************************************************************
    //Es kann die ID des Zaehlers automatisch ermittelt oder manual eingegeben werden.
    //Soll die ID automatisch ermittelt werden, muß der Zähler unterhalb der angelegten Kategorie sein.
    $ID_counter_erkennung = 2;                                   //Automatisch = 1, Manuel = 2

    //Wenn Manuell, hier die ID der Zaehler Instance eintragen:
    $ds2423_counter_man = 45589 /*[Räume\Keller\Haustechnik\Counter 2 Gasverbrauch & frei\Hutschienen S0 Zaehlermodul]*/  ;

    //******************************************************************************
    //Abfragezyklus des 1-Wire S0 Zaehlers
    //******************************************************************************
    // Wie oft soll der 1-Wire S0 Counter abgefragt werden?
    // Bei sehr geringen Leistungen und Zaehlern mit wenigen Impulsen macht es Sinn auf die 180 Sek. zu gehen
    $pollzeit = 60    ;                                             //Default 180 Sekunden. Zulaessig sind 60, 120 oder 180 Sekunden

/*    Schritt 6:
    Skript 1x per "Ausführen" starten

    FERTIG !!!!!!!!

    Ab jetzt wird das Skript bei einer Änderung der ausgewaehlten Zaehlervariablen getriggert.

    Viel Spaß mit diesem Beispielskript. Keine Gewaehr fur Fehlerfreiheit und Richtigkeit
    Gerne duefen Sie uns Verbesserungen oder Kritik (gern auch positiv) senden.
    Mail: info@eservice-online.de

*******************************************************************************/

//******************************************************************************
//Debug Ausgaben
//Fuer Testzwecke koennen Testausgaben aktiviert werden
//******************************************************************************
$debug =true;                                           // Debug Modus fuer Variablen ID usw.,    Ausgabe = true / keine Ausgabe =false
$debug_auswertung = true;                               // Debug Modus fuer Berechung,            Ausgabe = true / keine Ausgabe =false


/********************************************************************************************************
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   Ab hier nichts mehr ändern   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
********************************************************************************************************/

// Übergeordnete Kategorie ermitteln
$parentID = IPS_GetObject($_IPS['SELF']);
$parentID = $parentID['ParentID'];
if($debug) {echo "ParentID:  $parentID \n";}

//automatische oder manuelles Einlesen der Counter ID
If ($ID_counter_erkennung == 1) {
   // Automatisches einlesen der Counter ID
   $ds2423 = IPS_GetInstanceIDByName ( $zaehler_name, $parentID );
    if($debug) {echo "ID DS2423:  $ds2423 \n";}                                                   //Debug Ausgabe
    }
elseif ($ID_counter_erkennung == 2) {
    //Manuelle ID von oben abholen
    $ds2423 = $ds2423_counter_man;
    if($debug) {echo "ds2423counter_man: $ds2423 \n";}                                            //Debug Ausgabe
    }
Else {echo "Fehler: Auswahl des Zaehlers Auto / Manuel, Es ist nur 1 oder 2 zulaessig  \r\n";}

// Variablen zur Skriptverarbeitung einlesen und intern verfügbar machen
$ds2423counter =     IPS_GetVariableIDByName( $zaehler_variable, $ds2423);
if($debug) {echo "ds2423counter: $ds2423counter \n";}                                            //Debug Ausgabe


// Inhalt des benötigten Actionsskripts in Variable ablegen
$actionScript = "<?
if(\$_IPS['SENDER'] == 'WebFront') {
      SetValue(\$_IPS['VARIABLE'], \$_IPS['VALUE']);
}
//";


// Inhalt für Skript "Reset Tag" erzeugen
//********************************************
$skript_reset_tag = "<?
//Übertrag auf Vortag und Reset der Tageswerte
//Übergeordnete Kategorie ermitteln
    \$parentID = IPS_GetObject(\$_IPS['SELF']);
    \$parentID = \$parentID['ParentID'];

    \$id_tag_leistung                 = @IPS_GetVariableIDByName('Tag', \$parentID);
    \$id_tag_leistung_string         = @IPS_GetVariableIDByName('Tag_1', \$parentID);
    \$id_max_leistung                  = @IPS_GetVariableIDByName('Maximal_Tag', \$parentID);
    \$id_max_leistung_string           = @IPS_GetVariableIDByName('Maximal_Tag_1', \$parentID);
    \$id_max_leistung_time_string   = @IPS_GetVariableIDByName('Maximal Tag Zeit', \$parentID);
    \$id_vortag_leistung             = @IPS_GetVariableIDByName('Vortag', \$parentID);
    \$id_vortag_leistung_string     = @IPS_GetVariableIDByName('Vortag_1', \$parentID);
    \$id_tag_counter                 = @IPS_GetVariableIDByName('counter_tag', \$parentID);
    \$reset_tag                     = @IPS_GetVariableIDByName('Reset Tag', \$parentID);

    //Übertrag String und Float
    \$uebertrag_1 = GetValue (\$id_tag_leistung_string  );      //Tagesleistung abholen
     SetValue (\$id_vortag_leistung_string  , \$uebertrag_1);
     \$uebertrag = GetValue (\$id_tag_leistung  );               //Tagesleistung abholen
    SetValue (\$id_vortag_leistung  , \$uebertrag);
    IPS_Sleep(20);

    //Reset Tagwerte
    SetValueInteger(\$id_tag_counter  , 0);                     //Tagesleistung auf 0 setzen
    SetValueString (\$id_tag_leistung_string  , '0 m³');
    SetValueFloat  (\$id_tag_leistung  , 0);
    SetValueFloat  (\$id_max_leistung , 0);                     //Maximalwert zurueck setzen
    SetValueString (\$id_max_leistung_string  , '0');           //Maximalwert zurueck setzen
    SetValueString (\$id_max_leistung_time_string  , '-');      //Zeit Maximalwert zurueck setzen

    //Boolean fuer Rueckmeldung eines Tastersymbols

    if (\$_IPS['SENDER'] != 'Designer')
        {
          Echo 'Reset durchgeführt';
        }
    ?>";
    

// Inhalt für Skript "Reset Monat" erzeugen
//********************************************
$skript_reset_monat = "<?
//Übertrag auf Vormonat und Reset der Monateswerte
//Übergeordnete Kategorie ermitteln
    \$parentID = IPS_GetObject(\$_IPS['SELF']);
    \$parentID = \$parentID['ParentID'];

     \$id_monat_leistung             = @IPS_GetVariableIDByName('Monat', \$parentID);
    \$id_monat_leistung_string         = @IPS_GetVariableIDByName('Monat_1', \$parentID);
    \$id_vormonat_leistung             = @IPS_GetVariableIDByName('Vormonat', \$parentID);
    \$id_vormonat_leistung_string    = @IPS_GetVariableIDByName('Vormonat_1', \$parentID);
    \$id_monat_counter                 = @IPS_GetVariableIDByName('counter_monat', \$parentID);
    \$reset_monat                     = @IPS_GetVariableIDByName('Reset Monat', \$parentID);

    //Übertrag String und Float
    \$uebertrag = GetValue (\$id_monat_leistung  );              //Monatesleistung abholen
    SetValue (\$id_vormonat_leistung  , \$uebertrag);
    \$uebertrag_1 = GetValue (\$id_monat_leistung_string  );      //Monatesleistung abholen
    SetValue (\$id_vormonat_leistung_string  , \$uebertrag_1);
    IPS_Sleep(20);

    //Reset Tagwerte
    SetValueInteger(\$id_monat_counter  , 0);                   //Monatesleistung auf 0 setzen
    SetValueString (\$id_monat_leistung_string  , '0 m³');
    SetValueFloat  (\$id_monat_leistung  , 0);

    //Boolean fuer Rueckmeldung eines Tastersymbols
    SetValueBoolean(\$reset_monat , true);
    IPS_Sleep(1000);
    SetValueBoolean(\$reset_monat , false);

    if (\$_IPS['SENDER'] != 'Designer')
        {
          Echo 'Reset durchgeführt';
        }
    ?>";


// Inhalt für Skript "Reset Jahr" erzeugen
//********************************************
$skript_reset_jahr = "<?
//Übertrag auf Vormonat und Reset der Jahreswerte
//Übergeordnete Kategorie ermitteln
    \$parentID = IPS_GetObject(\$_IPS['SELF']);
    \$parentID = \$parentID['ParentID'];

    \$id_jahr_leistung                 = @IPS_GetVariableIDByName('Jahr', \$parentID);
    \$id_jahr_leistung_string         = @IPS_GetVariableIDByName('Jahr_1', \$parentID);
    \$id_vorjahr_leistung             = @IPS_GetVariableIDByName('Vorjahr', \$parentID);
    \$id_vorjahr_leistung_string     = @IPS_GetVariableIDByName('Vorjahr_1', \$parentID);
    \$id_jahr_counter                 = @IPS_GetVariableIDByName('counter_jahr', \$parentID);
    \$reset_jahr                     = @IPS_GetVariableIDByName('Reset Jahr', \$parentID);

    //Übertrag String und Float
    \$uebertrag = GetValue (\$id_jahr_leistung  );              //Jahresleistung abholen
    SetValue (\$id_vorjahr_leistung  , \$uebertrag);
    \$uebertrag_1 = GetValue (\$id_jahr_leistung_string  );     //Jahresleistung abholen
    SetValue (\$id_vorjahr_leistung_string  , \$uebertrag_1);
    IPS_Sleep(20);

    //Reset Tagwerte
    SetValueInteger(\$id_jahr_counter  , 0);                     //Jahresleistung auf 0 setzen
    SetValueString(\$id_jahr_leistung_string  , '0 m³');
    SetValueFloat(\$id_jahr_leistung  , 0);

    //Boolean fuer Rueckmeldung eines Tastersymbols
    SetValueBoolean(\$reset_jahr , true);
    IPS_Sleep(1000);
    SetValueBoolean(\$reset_jahr , false);

    if (\$_IPS['SENDER'] != 'Designer')
        {
          Echo 'Reset durchgeführt';
         }
    ?>";


// ***************** Start Erstinitialisierung *********************************
if($_IPS['SENDER'] == "Execute")
    {                                                                                        // nur wenn bei "Ausführen"

    // Skript verstecken
   IPS_SetHidden($_IPS['SELF'], true);
   IPS_SetPosition($_IPS['SELF'], 99);

    //Reset Tag
    //***************************************************************************
    // Skript "Reset Tag" erzeugen (siehe function)
   $scriptid_reset_tag = CreateScriptByName("Reset Tag", $parentID, $skript_reset_tag);
        if($debug) { echo "Skript -Reset Tag- angelegt\n"; }                                //Debug Ausgabe

    // Triggerbedingung/Ereignis für Skript "Reset Tag" erstellen falls nicht vorhanden
    //*****************************************************************
    $EreignisID = @IPS_GetEventIDByName( "Reset Tag" , $scriptid_reset_tag);
        if ($EreignisID == 0){
        $eid = IPS_CreateEvent(1);                                                            // Ausgelöstes Ereignis
        IPS_SetEventCyclic($eid, 2, 1, 0, 0, 0, 0);                                           //Taeglich
        IPS_SetEventCyclicTimeFrom($eid, 0, 0, 02);                            //immer um 00:00:01Uhr
        IPS_SetParent($eid, $scriptid_reset_tag);                                             // Ereignis zuordnen
        IPS_SetName($eid, "Reset Tag" );                                                    // Ereignis umbennen
        IPS_SetEventActive($eid, true);                                                       // Ereignis aktivieren
        }

    //Reset Monat
    //***************************************************************************
    // Skript "Reset Moant" erzeugen (siehe function)
   $scriptid_reset_monat = CreateScriptByName("Reset Monat", $parentID, $skript_reset_monat);
       if($debug) { echo "Skript -Reset Monat- angelegt\n"; }                                    //Debug Ausgabe

    // Triggerbedingung/Ereignis für Skript "Reset Tag" erstellen falls nicht vorhanden
    //*****************************************************************
    $EreignisID = @IPS_GetEventIDByName( "Reset Monat" , $scriptid_reset_monat);
        if ($EreignisID == 0){
        $eid = IPS_CreateEvent(1);                                                            // Ausgelöstes Ereignis
        IPS_SetEventCyclic($eid, 4, 1, 0, 1, 0, 0);                                           // Monatlich
        IPS_SetEventCyclicTimeFrom($eid, 0, 0, 01);                            // immer um 00:00:01Uhr
        IPS_SetParent($eid, $scriptid_reset_monat);                                         // Ereignis zuordnen
        IPS_SetName($eid, "Reset Monat" );                                                    // Ereignis umbennen
        IPS_SetEventActive($eid, true);                                                       // Ereignis aktivieren
        }

    //Reset Jahr
    //***************************************************************************
    // Skript "Reset Moant" erzeugen (siehe function)
   $scriptid_reset_jahr = CreateScriptByName("Reset Jahr", $parentID, $skript_reset_jahr);
        if($debug) { echo "Skript -Reset Jahr- angelegt\n"; }                                //Debug Ausgabe

    // Triggerbedingung/Ereignis für Skript "Reset Tag" erstellen falls nicht vorhanden
    //*****************************************************************
    $EreignisID = @IPS_GetEventIDByName( "Reset Jahr" , $scriptid_reset_jahr);
        if ($EreignisID == 0){
        $eid = IPS_CreateEvent(1);                                                            // Ausgelöstes Ereignis
        IPS_SetEventCyclic($eid, 5, 1, 0, 1, 0, 0);                                           // Jaehrlich
        IPS_SetEventCyclicTimeFrom($eid, 0, 0, 01);                            // immer um 00:00:01Uhr
        IPS_SetParent($eid, $scriptid_reset_jahr);                                             // Ereignis zuordnen
        IPS_SetName($eid, "Reset Jahr" );                                                    // Ereignis umbennen
        IPS_SetEventActive($eid, true);                                                       // Ereignis aktivieren
        }

    //Triggerintervall für Baustein einstellen
    //*****************************************************************
    //TMEX_SetInterval($ds2423, $pollzeit);
      //  if($debug) {echo "DS2423 Triggerintervall programmiert\n";}                            //Debug Ausgabe

    //Triggerbedingung fuer dieses Skript erzeugen
    //***************************************************************************
    // Triggerbedingung/Ereignis für Skript erstellen falls nicht vorhanden
    // Ereignis für Skript erstellen falls nicht vorhanden
    $EreignisID = @IPS_GetEventIDByName($zaehler_variable,$_IPS['SELF']);
    if ($EreignisID == 0) {
        $eid = IPS_CreateEvent(0);                                                            // Ausgelöstes Ereignis
        IPS_SetEventTrigger($eid, 1, $ds2423counter);                                         // Bei Änderung von Variable
        IPS_SetParent($eid, $_IPS['SELF']);                                                     // Ereignis zuordnen
        IPS_SetName($eid, $zaehler_variable);                                                // Ereignis umbennen
        IPS_SetEventActive($eid, true);                                                       // Ereignis aktivieren
    }
    else {
    if($debug) {echo "Ereignis bereits erstellt"; }
    }


}
// ****************** Ende Erstinitialisierung *********************************


//Berechnung
//******************************************************************************
//Variablen
//******************************************
// Variablen IDs zuweisen und gegebenenfalls anlegen
$id_counter_alt        = CreateVariableByName($parentID, "counter_alt", "I"  );
$id_counter_delta    = CreateVariableByName($parentID, "counter_delta", "I"  );

//Zählerwerte abholen
$counter_neu         = GetValueInteger ($ds2423counter );
$counter_alt         = GetValueInteger ($id_counter_alt );

//Delta berechnen
$delta = $counter_neu - $counter_alt;                                                       //alter Wert von neuen Wert abziehen

SetValueInteger($id_counter_alt  , $counter_neu );                                           //Zaehlerwert ablegen
SetValueInteger($id_counter_delta  , $delta );                                              //Ausgabe Differenz
    if($debug) {echo  "Counter: $counter_neu \r\nDelta: $delta\r\n";}                        // Debug Ausgabe Berechung


//*******************************************************************
// Akueller Wert:

If     ($zaehler_impulse == 100){$zaehlerfaktor = 0.01;}                                    //Gaszähler 1 m³ / Impulse  (100)  = 0.01 m³ Impuls
elseif ($zaehler_impulse == 10){$zaehlerfaktor = 0.1;}                                         //Gaszähler 1 m³ / Impulse  (10)  = 0.1 m³ Impuls
elseif ($zaehler_impulse == 1){$zaehlerfaktor = 1.0;}                                         //Gaszähler 1 m³ / Impulse  (1)  = 1 m³ Impuls

else {echo "Falscher Zaehler Impulswert eingegeben, nur 100, 10 und 1 möglich!\n\r";}
if($debug) {echo  "Zaehler Impulse pro m³: $zaehler_impulse \r\n";}

If ($pollzeit == 60){$Umrechungsfaktor = 60;}                                                 //Umrechnungsfaktor = Stunde (Minuten / Auslesezeit (Min.)
elseif ($pollzeit == 120){$Umrechungsfaktor = 30;}
elseif ($pollzeit == 180){$Umrechungsfaktor = 20; }
else {echo "Falscher Auslesezykluszeit eingegeben, nur 60, 120 oder 180 Sekunden möglich!\n\r";}
if($debug) {echo  " Auslesezeit:  $pollzeit \r\n";}

$deltam3 = ($delta * $zaehlerfaktor) * $Umrechungsfaktor  ;

//Aktuelle Leistung / aktueller Verbrauch
//*******************************************************************

$id_aktuell_leistung           = CreateVariableByName($parentID, "Aktuell", "m³/h" );
$id_aktuell_leistung_string   = CreateVariableByName($parentID, "Aktuell_1", "S" );
$id_max_leistung               = CreateVariableByName($parentID, "Maximal_Tag", "m³/h" );
$id_max_leistung_string       = CreateVariableByName($parentID, "Maximal_Tag_1", "S" );
$id_max_leistung_time_string  = CreateVariableByName($parentID, "Maximal Tag Zeit", "S" );

//Anzeige Verbrauch aktuell
SetValueFloat ($id_aktuell_leistung    , $deltam3);

//Ausgabe fuer String vorbereiten
//Ausgabe fuer Watt
#$round_aktuell_summe_1 = round ($deltam3 * 1000, 2);                             // auf 2 Stellen runden
#$round_aktuell_summe_2 = sprintf("%2.0f", $round_aktuell_summe_1);             // Formatierung 2vor und 0 Nachkommastellen

//Ausgabe fuer m³/h
$round_aktuell_summe_3 = round ($deltam3, 2);                                     // auf 0 Stellen runden
$round_aktuell_summe_4 = sprintf("%2.2f", $round_aktuell_summe_3);                 // Formatierung auf 2vor und 2 Nachkommastellen

//Maximalwert Tag + Zeit:
$leistung_max = GetValueFloat ($id_max_leistung);

If ($deltam3 >= $leistung_max)
    {
    SetValueFloat ($id_max_leistung    , $deltam3);
    SetValueString ($id_max_leistung_string , $round_aktuell_summe_4. " m³/h " );
    SetValueString ($id_max_leistung_time_string , date("H:i"));                              //aktuelle Uhrzeit, Stunde und Minuten
        if($debug_auswertung) {Echo "Max. Leistung Neu: $round_aktuell_summe_4 m³/h \r\n"; } // Debug Ausgabe Berechung
    }

//Anzeige für Dashboard und LCD Display
   SetValueString ($id_aktuell_leistung_string , $round_aktuell_summe_4. " m³/h ");
        if($debug_auswertung) {Echo "Aktuelle Leistung: $round_aktuell_summe_4 m³/h \r\n"; }  // Debug Ausgabe Berechung

//Tageswerte
//*******************************************************************
$id_tag_leistung             = CreateVariableByName($parentID, "Tag", "m³" );
$id_tag_leistung_string     = CreateVariableByName($parentID, "Tag_1", "S" );
$id_vortag_leistung         = CreateVariableByName($parentID, "Vortag", "m³" );
$id_vortag_leistung_string  = CreateVariableByName($parentID, "Vortag_1", "S" );
$reset_tag                     = CreateVariableByName($parentID, "Reset Tag", "an" );
$id_tag_counter             = CreateVariableByName($parentID, "counter_tag", "I" );

$counter_tag = GetValueInteger ($id_tag_counter );
$counter_tag_neu = $counter_tag + $delta ;
SetValueInteger($id_tag_counter  , $counter_tag_neu);

    //Anzeige Tagsverbrauch
    $tag_leistung_summe = $counter_tag_neu * $zaehlerfaktor ;
    SetValueFloat ($id_tag_leistung , $tag_leistung_summe);

    //Anzeige für LCD Display
    $round_tag_summe_1 = round ($tag_leistung_summe, 2);                               // auf 2 Stellen runden
    $round_tag_summe_2 = sprintf("%2.2f", $round_tag_summe_1);                           // Formatierung 2 vor und 2 Nachkommastellen
   SetValueString ($id_tag_leistung_string , $round_tag_summe_2. " m³");
        if($debug_auswertung) {Echo "Tag Summe: $round_tag_summe_2 m³\r\n"; }         // Debug Ausgabe Berechung


//Monatswerte
//*******************************************************************
// Variablen IDs zuweisen und gegebenenfalls anlegen
$id_monat_leistung                 = CreateVariableByName($parentID, "Monat", "m³" );
$id_monat_leistung_string         = CreateVariableByName($parentID, "Monat_1", "S" );
$id_vormonat_leistung             = CreateVariableByName($parentID, "Vormonat", "m³" );
$id_vormonat_leistung_string     = CreateVariableByName($parentID, "Vormonat_1", "S" );
$reset_monat                     = CreateVariableByName($parentID, "Reset Monat", "an" );
$id_monat_counter                 = CreateVariableByName($parentID, "counter_monat", "I"  );

$counter_monat = GetValueInteger ($id_monat_counter);
$counter_monat_neu = $counter_monat + $delta ;
SetValueInteger($id_monat_counter  , $counter_monat_neu);  //

    //Anzeige Monatsverbrauch
    $monat_leistung_summe = $counter_monat_neu * $zaehlerfaktor ;
    SetValueFloat ($id_monat_leistung    , $monat_leistung_summe);

    //Anzeige für LCD Display
    $round_monat_summe_1 = round ($monat_leistung_summe, 2);                             // auf 2 Stellen runden
    $round_monat_summe_2 = sprintf("%2.2f", $round_monat_summe_1);                         // Formatierung auf 2 vor und 2 Nachkommastellen
   SetValueString ($id_monat_leistung_string   , $round_monat_summe_2. " m³");          //
        if($debug_auswertung) {Echo "Monat Summe: $round_monat_summe_2 m³\r\n"; }        // Debug Ausgabe Berechung

//Jahreswerte
//*******************************************************************
$id_jahr_leistung             = CreateVariableByName($parentID, "Jahr", "m³" );
$id_jahr_leistung_string     = CreateVariableByName($parentID, "Jahr_1", "S" );
$id_vorjahr_leistung         = CreateVariableByName($parentID, "Vorjahr", "m³" );
$reset_jahr                 = CreateVariableByName($parentID, "Reset Jahr", "an" );
$id_vorjahr_leistung_string = CreateVariableByName($parentID, "Vorjahr_1", "S" );
$id_jahr_counter             = CreateVariableByName($parentID, "counter_jahr", "I" );

$counter_jahr = GetValueInteger ($id_jahr_counter);
$counter_jahr_neu = $counter_jahr + $delta ;
SetValueInteger($id_jahr_counter  , $counter_jahr_neu);  //

    //Anzeige jahrsverbrauch
    $jahr_leistung_summe = $counter_jahr_neu * $zaehlerfaktor ;
    SetValueFloat ($id_jahr_leistung  , $jahr_leistung_summe);

    //Anzeige für LCD Display
    $round_jahr_summe_1 = round ($jahr_leistung_summe, 2);                                     // auf 2 Stellen runden
    $round_jahr_summe_2 = sprintf("%2.2f", $round_jahr_summe_1);                             // Formatierung auf 2vor und 2 Nachkommastellen
   SetValueString ($id_jahr_leistung_string   , $round_jahr_summe_2. " m³");       // Ausgabe in Variable
        if($debug_auswertung) {Echo "Jahr Summe: $round_jahr_summe_2 m³\r\n"; }      // Debug Ausgabe Berechung

// Ende Berechnung
// ****************************************************************************


// ****************************************************************************
// Funktionen
// ****************************************************************************

// Nicht Standardprofile erstellen
if (!IPS_VariableProfileExists('Volumenstrom'))
{
    IPS_CreateVariableProfile('Volumenstrom', 2);
    IPS_SetVariableProfileDigits('Volumenstrom', 2);
    IPS_SetVariableProfileText('Volumenstrom', '', ' m³/h');
}

// Variablen erstellen falls nicht vorhanden und ID entsprechend zuordnen
function CreateVariableByName($id, $name, $type) {
    global $ScriptID;
    $vid = @IPS_GetVariableIDByName($name, $id);
    if($vid === false) {
        // $vartype: Boolean=0, Integer=1, Float=2, String=3
        if ($type == 'm³/h')               $vartype = 2;
        if ($type == 'm³')              $vartype = 2;
        if ($type == 'I')                 $vartype = 1;
        if ($type == 'S')                 $vartype = 3;
        if ($type == 'OK')                 $vartype = 0;

        $vid = IPS_CreateVariable($vartype);
        IPS_SetParent($vid, $id);
        IPS_SetName($vid, $name);
        //IPS_SetInfo($vid, "this variable was created by script #$_IPS['SELF']");

        if ($type == 'm³')    {
            IPS_SetVariableCustomProfile ($vid, "~Gas");
            IPS_SetPosition($vid, 10); }
        if ($type == 'm³/h')    {
            IPS_SetVariableCustomProfile ($vid, "Volumenstrom");
            IPS_SetPosition($vid, 10); }
        if ($type == 'I')    {
            //IPS_SetVariableCustomProfile ($vid, " ");
            IPS_SetPosition($vid, 30);  }
        if ($type == 'OK') {
            IPS_SetVariableCustomProfile ($vid, "~Alert.Reversed");
            IPS_SetVariableCustomAction($vid, $ScriptID);
            IPS_SetPosition($vid, 40);  }
      if ($type == 'an') {
            IPS_SetVariableCustomProfile ($vid, "~Switch");
            IPS_SetVariableCustomAction($vid, $ScriptID);
            IPS_SetPosition($vid, 50);  }
          if ($type == 'S')    {
            //IPS_SetVariableCustomProfile ($vid, " ");
            IPS_SetPosition($vid, 60);  }
        }
        return $vid;
    }
// Eine Funktion um ein Script im Script-Verzeichnis zu erzeugen
// erstellt von hirschbrat, angepasst wgreipl
function CreateScriptByName($ScriptNAME, $ParentID, $ScriptTEXT)
	{
	$ScriptID = @IPS_GetScriptIDByName($ScriptNAME, $ParentID);
	if ($ScriptID == 0){
		$ScriptID = IPS_CreateScript(0);
		IPS_SetName($ScriptID, $ScriptNAME);
		IPS_SetParent($ScriptID, $ParentID);
		//IPS_SetInfo($ScriptID, "This script was created by: #$_IPS['SELF']#");
		$fh = fopen(IPS_GetKernelDir()."scripts\\".$ScriptID.".ips.php", 'w') or die("can't open file");
		fwrite($fh, $ScriptTEXT);
		fclose($fh);
		$ScriptPath = $ScriptID.".ips.php";
		IPS_SetScriptFile($ScriptID, $ScriptPath);
		IPS_SetHidden($ScriptID, true);
		IPS_SetPosition($ScriptID, 80);
 		}
	return $ScriptID;
	}
?> 

Das funktioniert noch nicht so richtig, da wird nochmal Hilfe benötigt
Danke im Voraus

Ralf