Datum/Uhrzeit nach KNX synchronisieren/senden

Gruppenadressen anpassen… Auf Ausführen drücken… Fertig :slight_smile:

Dann Ereignis erstellen wann aktualisiert werden soll :slight_smile:


<?

 //Bitte GAs anpassen und Ereignis erstellen, welches im gewünschten Intervall das Skript startet
 $GA_Datum = "0/0/1";
 $GA_Zeit = "0/0/2";

 //Nicht verändern
 $dateID = CreateKNXByIdent("Datum", $GA_Datum, "Date", "Standard");
 $timeID = CreateKNXByIdent("Uhrzeit", $GA_Zeit, "Time", "TimeOnly");

 EIB_Date($dateID, date("Ymd"));
 EIB_Time($timeID, date("His"));

 function CreateKNXByIdent($ident, $GA, $GF, $GI)
 {
    $iid = @IPS_GetObjectIDByIdent($ident, $_IPS['SELF']);
    if($iid === false)
    {
        $iid = IPS_CreateInstance("{D62B95D3-0C5E-406E-B1D9-8D102E50F64B}");
        IPS_SetParent($iid, $_IPS['SELF']);
		IPS_SetIdent($iid, $ident);
        IPS_SetName($iid, $ident);
		
		//Configure
        $GA = explode("/", $GA);
		IPS_SetProperty($iid, "GroupAddress1", intval($GA[0]));
		IPS_SetProperty($iid, "GroupAddress2", intval($GA[1]));
		IPS_SetProperty($iid, "GroupAddress3", intval($GA[2]));
        IPS_SetProperty($iid, "GroupFunction", $GF); 
        IPS_SetProperty($iid, "GroupInterpretation", $GI); 
        IPS_ApplyChanges($iid);	
    }
    return $iid;
 }

Hallo,

das Skript liest sich gut, aber wird das Skript auf einem KNX-HS ausgeführt oder auf einem „normalen“ Rechner, der per USB/RS232/LAN am KNX-hängt?

Wäre für genauere Infos dankbar, da ich zwar einen WHS habe, aber eben keinen „speziellen“ KNS-Server.

Vielen Dank im Voraus

Christoph

Normaler Rechner mit IP-Symcon und einem KNX Gateway.

paresy

Hallo,
vielen Dank für das Skript.

Ich habe das im Einsatz und seit dem Update auf IPS Version 3.10 bekomme ich Warnings bei Ausführung des Skripts.
Die Uhrzeit und das Datum kommen aber trotzdem richtig an.

Sollte ich trotzdem was ändern?

Warning:  Missing argument 2 for EIB_GetGroupAddress(), called in C:\IP-Symcon\scripts\22915.ips.php on line 26 and defined in C:\IP-Symcon\scripts\__compatibility.inc.php on line 3083

Warning:  Missing argument 3 for EIB_GetGroupAddress(), called in C:\IP-Symcon\scripts\22915.ips.php on line 26 and defined in C:\IP-Symcon\scripts\__compatibility.inc.php on line 3083

Warning:  Missing argument 4 for EIB_GetGroupAddress(), called in C:\IP-Symcon\scripts\22915.ips.php on line 26 and defined in C:\IP-Symcon\scripts\__compatibility.inc.php on line 3083

Warning:  Missing argument 2 for EIB_GetGroupAddress(), called in C:\IP-Symcon\scripts\22915.ips.php on line 26 and defined in C:\IP-Symcon\scripts\__compatibility.inc.php on line 3083

Warning:  Missing argument 3 for EIB_GetGroupAddress(), called in C:\IP-Symcon\scripts\22915.ips.php on line 26 and defined in C:\IP-Symcon\scripts\__compatibility.inc.php on line 3083

Warning:  Missing argument 4 for EIB_GetGroupAddress(), called in C:\IP-Symcon\scripts\22915.ips.php on line 26 and defined in C:\IP-Symcon\scripts\__compatibility.inc.php on line 3083

Da hat sich doch tatsächlich ein Fehler eingeschlichen. Fix kommt Morgen als Beta-Update.

paresy

Hallo - gibts hierfür bereits eine Lösung für 4.0?

Danke
JF

Du kannst entweder in den Spezialschaltern die Kompatibilitätsfunktionen aktivieren, oder das Skript entsprechend auf die 4.0 anpassen :slight_smile:

paresy

Hallo,

falls der eine oder andere noch Interesse daran hat - ich habe das Script auf Version 4 :loveips: angepasst.


<?
	$GA_Datum = "a/b/c";
	$GA_Zeit = "a/b/d";

	//Nicht veraendern

	$dateid = CreateKNXByName("Datum", $GA_Datum, "Date", "Standard");
	$timeid = CreateKNXByName("Uhrzeit", $GA_Zeit, "Time", "TimeOnly");
	CreateEventByName("SyncTimer");

	EIB_Date($dateid, date("Ymd"));
	EIB_Time($timeid, date("His"));

	function CreateKNXByName($name, $GA, $GF, $GI)
	{
		global $IPS_SELF;
		$GA = explode("/", $GA);
		$iid = @IPS_GetInstanceIDByName($name, $_IPS['SELF']);
		if($iid === false)
		{
			$iid = IPS_CreateInstance("{D62B95D3-0C5E-406E-B1D9-8D102E50F64B}");
			IPS_SetParent($iid, $_IPS['SELF']);
			IPS_SetName($iid, $name);
			IPS_SetInfo($iid, "this instance was created with love :-)");
    }

   $IGA = ($iid);
	if(($IGA['GA1'] != $GA[0]) || ($IGA['GA2'] != $GA[1]) || ($IGA['GA3'] != $GA[2]))
	{
		IPS_SetProperty($iid, 'GroupAddress1', (int)$GA[0]);
		IPS_SetProperty($iid, 'GroupAddress2', (int)$GA[1]);
		IPS_SetProperty($iid, 'GroupAddress3', (int)$GA[2]);
		//EIB_SetGroupAddress($iid, (int)$GA[0], (int)$GA[1], (int)$GA[2]);
		IPS_ApplyChanges($iid);
	}

	//if(EIB_GetGroupFunction($iid) != $GF)
	if(IPS_GetProperty($iid, 'GroupFunction') != $GF)
	{
		//EIB_SetGroupFunction($iid, $GF);
		IPS_SetProperty($iid, 'GroupFunction', $GF);
      IPS_ApplyChanges($iid);
	}

	//if(EIB_GetGroupInterpretation($iid) != $GI)
	if(IPS_GetProperty($iid, 'GroupInterpretation') != $GI)
   {
		//EIB_SetGroupInterpretation($iid, $GI);
		IPS_SetProperty($iid, 'GroupInterpretation', $GI);
		IPS_ApplyChanges($iid);
	}
	return $iid;
}

function CreateEventByName($name)
{
	global $IPS_SELF;
	$eid = @IPS_GetEventIDByName($name, $_IPS['SELF']);

	if($eid===false)
	{
		$eid = IPS_CreateEvent(1);
		IPS_SetEventCyclic($eid, 3, 1, 64, 0, 0, 0);
		//IPS_SetEventCyclicTimeBounds($eid, mktime(1, 0, 0), 0);
      IPS_SetEventCyclicTimeFrom ($eid, 4,30,0 );
      
		IPS_SetParent($eid, $_IPS['SELF']);
		IPS_SetName($eid, $name);
		IPS_SetInfo($eid, "This Event was created with love");
		IPS_SetEventActive($eid, true);
	}
   return $eid;
}

?>

Da hat mir jemand mit der Anpassung auf 4.0 viel Zeit erspart!! Deshalb DANKE Thorsten9 :smiley:

Keine Ursache.
Es freut mich, dass es noch jemandem genutzt hat :slight_smile:

Aber vielen Dank für den Dank :smiley:

Gruß
Thorsten

Oh. Danke :slight_smile:

Hätte ich das jetzt nicht gelesen, hätte ich mein altes Skript genommen und mich danach gewundert :banghead:

Wenn ich das Script ausführe, überschreibt es mir immer wieder die Gruppenadresse im IPS mit 0/0/0, standard für IPS_SetProperty. In der ETS sehe ich auch das die 0/0/0 ankommt. Will aber eine eigene vergeben!
Was mach ich falsch?

Ich habe das Skript mal für Version 4.2+ angepasst :slight_smile:

paresy

Jetzt Funktioniert es.
Vielen Dank!

Hallo Zusammen,
ohne es ausprobiert zu haben: Ist dieses Skript denn auch funktionsfähig für ETS 5?
Liebe Grüße Dennis.

Hallo Dennis,

meinst du die kommende Symcon-Version 5?
Mit der ETS-Version hat es nichts zu tun. Die KNX-Datentypen werden standardisiert und ändern sich dann nicht mehr, unabhängig von der ETS-Version.

Viele Grüße
Volker

Hallo zusammen,

ich habe mich mal daran versucht die Zeit-Synchronisierung für die neuen DPT-Instanzen ans Laufen zu kriegen. Für die Uhrzeit mit dem DPT 10.001 war das auch relativ einfach:

KNX_WriteDPT10($_IPS['TARGET'], date('N'), time());

Mit dem Datum komme ich allerdings nicht so richtig zum Ziel, der folgende Code-Schnipsel funktioniert leider nur zum Teil:

KNX_WriteDPT11($_IPS['TARGET'], time());

Und zwar wird hier intern anscheinend noch die übergebene Zeit von der Funktion KNX_WriteDPT11 modifiziert, zumindest steht am Ende ein anderer Zeitstempel in der Variable Date. Leider ist es aber auch so, dass der Tag aktuell erst um 1:00 Uhr nachts wechselt, zwischen Mitternacht und 1:00 Uhr früh wird noch der vorige Tag zurückgeliefert. Zeitzone auf dem Raspberry ist richtig eingestellt, Symcon wurde auch mehrmals neu gestartet um Probleme mit der Umstellung auf Winterzeit etc ausschließen zu können.

Hat sich schon jemand am DPT 19.001 versucht? Ich vermute hier kommt man um externe Abfragen nicht umher, gerade was die Bankarbeitstage angeht…

Bernd

Erstmal Danke für den Skript.

Bei mir kommt beim Ausführen dieser Fehler:

Warning: Eigenschaft 20/1/1 nicht gefunden in C:\ProgramData\Symcon\scripts\37331.ips.php on line 31

Warning: Eigenschaft 20/1/2 nicht gefunden in C:\ProgramData\Symcon\scripts\37331.ips.php on line 32

Warning: Eigenschaft 20/1/3 nicht gefunden in C:\ProgramData\Symcon\scripts\37331.ips.php on line 33

Was läuft hier schief?

Symcon Version ist 5.4

Hast du es nur kopiert und die GA oben angepasst? Es wirkt, als wenn du ggf. noch mehr verändert hättest?

paresy

Guten Abend zusammen,

leider bin ich mit dem codieren von Skripten nicht sehr bewandert.
Ist es möglich, dass man dieses Skript noch so erweitert, dass es den Status Tag bzw. Nach aus der Kern Instanz Location ausliest und als boolean Wert auf den KNX Bus in eine GA schreibt?
Wenn ja, wäre es nett wenn mir jemand auf die Sprüge hilft oder vielleicht die (vermutlich) wenigen Zeilen Code verrät.
Das Skript so funktioniert auf jeden Fall schon super - Danke an alle, die sich da eingebracht haben.

Gute Nacht Speed