Hat hier wer eine Wolf ism8?

Hi,

seit Dezember habe ich ein Script was mir die Werte aus der ism8 empfängt und in Variablen darstellt.

Das funktioniert soweit auch gut.

Das schreiben ist theoretisch auch möglich, es fehlt aber noch eine oder mehrere Funktion(en) dafür, da man erst einiges berechnen muss bevor man das ganze an die ism8 senden kann.

Besteht Interesse das ich die Scripte hier veröffentliche? Vielleicht kommt sogar meine motivation wieder, da weiter zu machen :wink:

Viele Grüße

Wie bereits im ISM7 Thread geschrieben habe ich mir auch das ISM8 Modul bestellt, damit ich die Daten lokal auslesen kann und nicht mehr auf das externe Portal angewiesen bin, das die Accounts gerne sperrt :wink:

Kurzum: Ich hätte durchaus Interesse an deinen bisherigen Funktionen, das würde mir den Einstieg stark erleichtern.
Wenn du magst können wir da auch gerne gemeinsam ein Modul dafür entwickeln. Ich habe aktuell da zwar nicht ganz so viel Zeit, aber das auslesen der Daten hast du ja quasi schon fertig. Das müsste man dann ja „nur“ noch in ein Modul packen und sich an die Schreibfunktion setzen.

Diese bräuchte ich nämlich spätestens zum Herbst hin um diverse Werte automatisch setzen zu können.

HI,

ok, dann gibt es hier eine kleine Anleitung. Doch vorab.

WARNUNG, dieses Script ist Alpha. Für etwaige Schäden übernehme ich keine Haftung.

Nachdem Du das ISM8 eingebaut hast, musst du via Webinterface deinen Server angeben. Das ganze nennt sich „Kommunikationspartner“, die IP Adresse ist die von deinem IPS und Port ist beliebig. Ich habe als Port 12004 benutzt. Wichtig ist, du musst nun die Wolf Anlage aus- und wiedereinschalten! Sonst passiert einfach gar nichts :wink:

Zeitgleich schau mal nach, welche Firmware-Version deine Anlage hat, meine hat 1.50 (steht auf der ersten Seite des Webinterface) und meine Scripte sind darauf ausgelegt.

Das war es Heizungsseitig, nun widmen wir uns IPS. Erstell als erstes eine neue I/O-Instanz vom Typ „Server Socket“, den Damen kannst Du beliebig wählen, ich habe der Übersichtshalber „ISM8 Server Socket“ als Namen gewählt. Als Port nutzt Du 12004 oder deinen selbst gewählten Port den du in der ISM8 eingetragen hast.

Das ganze kann man nun testen, einfach auf „Debug“ im „Server Socket“ anwählen und warten. Am besten änderst Du manuell etwas an der Anlage bspw. „1x Warmwasser“ einschalten. Im Debug-Fenster siehst Du nun Änderungen die ca 5x gesendet werden bspw „06 20 F0 80 00 15 04 00 00 00 F0 06 00 C2 00 01 00 C2 03 01 01“ für Warmwasser.

In dem Fall ist die kommunikation mit der Anlage erfolgreich, lass das Debug Fenster ruhig noch auf, dann siehst Du am Ende was abläuft. Merk dir aber schonmal die Objekt-ID der Server-Socket Instanz.

Nun erstelllst Du eine Kategorie, von mir aus mit dem Namen „Wolf“ und erstellst darin ein Script mit dem Namen „_ISM8_DATAPOINTS“ dieser Name ist Wichtig!.

Folgenden Inhalt halt dieses Script

<?
$DP = array(
						array("0","Gerät","Datenpunkt","Datenpunkttyp","Out","In","Einheit"),
						array("1","Heizgerät 1","Störung","DPT_Switch","Out","-","-"),
						array("2","Heizgerät 1","Betriebsart","DPT_HVACContrMode","Out","-","-"),
						array("3","Heizgerät 1","Modulationsgrad / Brennerleistung","DPT_Scaling","Out","-","%"),
						array("4","Heizgerät 1","Kesseltemperatur","DPT_Value_Temp","Out","-","°C"),
						array("5","Heizgerät 1","Sammlertemperatur","DPT_Value_Temp","Out","-","°C"),
						array("6","Heizgerät 1","Rücklauftemperatur","DPT_Value_Temp","Out","-","°C"),
						array("7","Heizgerät 1","Warmwassertemperatur","DPT_Value_Temp","Out","-","°C"),
						array("8","Heizgerät 1","Außentemperatur","DPT_Value_Temp","Out","-","°C"),
						array("9","Heizgerät 1","Status Brenner / Flamme","DPT_Switch","Out","-","-"),
						array("10","Heizgerät 1","Status Heizkreispumpe","DPT_Switch","Out","-","-"),
						array("11","Heizgerät 1","Status Speicherladepumpe","DPT_Switch","Out","-","-"),
						array("12","Heizgerät 1","Status 3-Wege-Umschaltventil","DPT_OpenClose","Out","-","-"),
						array("13","Heizgerät 1","Anlagendruck","DPT_Value_Pres","Out","-","Pa"),
						array("14","Heizgerät 2","Störung","DPT_Switch","Out","-","-"),
						array("15","Heizgerät 2","Betriebsart","DPT_HVACContrMode","Out","-","-"),
						array("16","Heizgerät 2","Modulationsgrad / Brennerleistung","DPT_Scaling","Out","-","%"),
						array("17","Heizgerät 2","Kesseltemperatur","DPT_Value_Temp","Out","-","°C"),
						array("18","Heizgerät 2","Sammlertemperatur","DPT_Value_Temp","Out","-","°C"),
						array("19","Heizgerät 2","Rücklauftemperatur","DPT_Value_Temp","Out","-","°C"),
						array("20","Heizgerät 2","Warmwassertemperatur","DPT_Value_Temp","Out","-","°C"),
						array("21","Heizgerät 2","Außentemperatur","DPT_Value_Temp","Out","-","°C"),
						array("22","Heizgerät 2","Status Brenner / Flamme","DPT_Switch","Out","-","-"),
						array("23","Heizgerät 2","Status Heizkreispumpe","DPT_Switch","Out","-","-"),
						array("24","Heizgerät 2","Status Speicherladepumpe","DPT_Switch","Out","-","-"),
						array("25","Heizgerät 2","Status 3-Wege-Umschaltventil","DPT_OpenClose","Out","-","-"),
						array("26","Heizgerät 2","Anlagendruck","DPT_Value_Pres","Out","-","Pa"),
						array("27","Heizgerät 3","Störung","DPT_Switch","Out","-","-"),
						array("28","Heizgerät 3","Betriebsart","DPT_HVACContrMode","Out","-","-"),
						array("29","Heizgerät 3","Modulationsgrad / Brennerleistung","DPT_Scaling","Out","-","%"),
						array("30","Heizgerät 3","Kesseltemperatur","DPT_Value_Temp","Out","-","°C"),
						array("31","Heizgerät 3","Sammlertemperatur","DPT_Value_Temp","Out","-","°C"),
						array("32","Heizgerät 3","Rücklauftemperatur","DPT_Value_Temp","Out","-","°C"),
						array("33","Heizgerät 3","Warmwassertemperatur","DPT_Value_Temp","Out","-","°C"),
						array("34","Heizgerät 3","Außentemperatur","DPT_Value_Temp","Out","-","°C"),
						array("35","Heizgerät 3","Status Brenner / Flamme","DPT_Switch","Out","-","-"),
						array("36","Heizgerät 3","Status Heizkreispumpe","DPT_Switch","Out","-","-"),
						array("37","Heizgerät 3","Status Speicherladepumpe","DPT_Switch","Out","-","-"),
						array("38","Heizgerät 3","Status 3-Wege-Umschaltventil","DPT_OpenClose","Out","-","-"),
						array("39","Heizgerät 3","Anlagendruck","DPT_Value_Pres","Out","-","Pa"),
						array("40","Heizgerät 4","Störung","DPT_Switch","Out","-","-"),
						array("41","Heizgerät 4","Betriebsart","DPT_HVACContrMode","Out","-","-"),
						array("42","Heizgerät 4","Modulationsgrad / Brennerleistung","DPT_Scaling","Out","-","%"),
						array("43","Heizgerät 4","Kesseltemperatur","DPT_Value_Temp","Out","-","°C"),
						array("44","Heizgerät 4","Sammlertemperatur","DPT_Value_Temp","Out","-","°C"),
						array("45","Heizgerät 4","Rücklauftemperatur","DPT_Value_Temp","Out","-","°C"),
						array("46","Heizgerät 4","Warmwassertemperatur","DPT_Value_Temp","Out","-","°C"),
						array("47","Heizgerät 4","Außentemperatur","DPT_Value_Temp","Out","-","°C"),
						array("48","Heizgerät 4","Status Brenner / Flamme","DPT_Switch","Out","-","-"),
						array("49","Heizgerät 4","Status Heizkreispumpe","DPT_Switch","Out","-","-"),
						array("50","Heizgerät 4","Status Speicherladepumpe","DPT_Switch","Out","-","-"),
						array("51","Heizgerät 4","Status 3-Wege-Umschaltventil","DPT_OpenClose","Out","-","-"),
						array("52","Heizgerät 4","Anlagendruck","DPT_Value_Pres","Out","-","Pa"),
						array("53","BM-2 0","Störung","DPT_Switch","Out","-","-"),
						array("54","BM-2 0","Außentemperatur","DPT_Value_Temp","Out","-","°C"),
						array("55","BM-2 0","Raumtemperatur","DPT_Value_Temp","Out","-","°C"),
						array("56","BM-2 0","Warmwassersolltemperatur","DPT_Value_Temp","Out","In","°C"),
						array("57","BM-2 0","Programmwahl Heizkreis","DPT_HVACMode","Out","In","-"),
						array("58","BM-2 0","Programmwahl Warmwasser","DPT_DHWMode","Out","In","-"),
						array("59","BM-2 0","Heizkreis Zeitprogramm 1","DPT_Switch","Out","In","-"),
						array("60","BM-2 0","Heizkreis Zeitprogramm 2","DPT_Switch","Out","In","-"),
						array("61","BM-2 0","Heizkreis Zeitprogramm 3","DPT_Switch","Out","In","-"),
						array("62","BM-2 0","Warmwasser Zeitprogramm 1","DPT_Switch","Out","In","-"),
						array("63","BM-2 0","Warmwasser Zeitprogramm 2","DPT_Switch","Out","In","-"),
						array("64","BM-2 0","Warmwasser Zeitprogramm 3","DPT_Switch","Out","In","-"),
						array("65","BM-2 0","Sollwertkorrektur","DPT_Value_Tempd","Out","In","K"),
						array("66","BM-2 0","Sparfaktor","DPT_Value_Tempd","Out","In","K"),
						array("67","BM-2 1","Störung","DPT_Switch","Out","-","-"),
						array("68","BM-2 1","Raumtemperatur","DPT_Value_Temp","Out","-","°C"),
						array("69","BM-2 1","Warmwassersolltemperatur","DPT_Value_Temp","Out","In","°C"),
						array("70","BM-2 1","Programmwahl Mischer","DPT_HVACMode","Out","In","-"),
						array("71","BM-2 1","Programmwahl Warmwasser","DPT_DHWMode","Out","In","-"),
						array("72","BM-2 1","Mischer Zeitprogramm 1","DPT_Switch","Out","In","-"),
						array("73","BM-2 1","Mischer Zeitprogramm 2","DPT_Switch","Out","In","-"),
						array("74","BM-2 1","Mischer Zeitprogramm 3","DPT_Switch","Out","In","-"),
						array("75","BM-2 1","Warmwasser Zeitprogramm 1","DPT_Switch","Out","In","-"),
						array("76","BM-2 1","Warmwasser Zeitprogramm 2","DPT_Switch","Out","In","-"),
						array("77","BM-2 1","Warmwasser Zeitprogramm 3","DPT_Switch","Out","In","-"),
						array("78","BM-2 1","Sollwertkorrektur","DPT_Value_Tempd","Out","In","K"),
						array("79","BM-2 1","Sparfaktor","DPT_Value_Tempd","Out","In","K"),
						array("80","BM-2 2","Störung","DPT_Switch","Out","-","-"),
						array("81","BM-2 2","Raumtemperatur","DPT_Value_Temp","Out","-","°C"),
						array("82","BM-2 2","Warmwassersolltemperatur","DPT_Value_Temp","Out","In","°C"),
						array("83","BM-2 2","Programmwahl Mischer","DPT_HVACMode","Out","In","-"),
						array("84","BM-2 2","Programmwahl Warmwasser","DPT_DHWMode","Out","In","-"),
						array("85","BM-2 2","Mischer Zeitprogramm 1","DPT_Switch","Out","In","-"),
						array("86","BM-2 2","Mischer Zeitprogramm 2","DPT_Switch","Out","In","-"),
						array("87","BM-2 2","Mischer Zeitprogramm 3","DPT_Switch","Out","In","-"),
						array("88","BM-2 2","Warmwasser Zeitprogramm 1","DPT_Switch","Out","In","-"),
						array("89","BM-2 2","Warmwasser Zeitprogramm 2","DPT_Switch","Out","In","-"),
						array("90","BM-2 2","Warmwasser Zeitprogramm 3","DPT_Switch","Out","In","-"),
						array("91","BM-2 2","Sollwertkorrektur","DPT_Value_Tempd","Out","In","K"),
						array("92","BM-2 2","Sparfaktor","DPT_Value_Tempd","Out","In","K"),
						array("93","BM-2 3","Störung","DPT_Switch","Out","-","-"),
						array("94","BM-2 3","Raumtemperatur","DPT_Value_Temp","Out","-","°C"),
						array("95","BM-2 3","Warmwassersolltemperatur","DPT_Value_Temp","Out","In","°C"),
						array("96","BM-2 3","Programmwahl Mischer","DPT_HVACMode","Out","In","-"),
						array("97","BM-2 3","Programmwahl Warmwasser","DPT_DHWMode","Out","In","-"),
						array("98","BM-2 3","Mischer Zeitprogramm 1","DPT_Switch","Out","In","-"),
						array("99","BM-2 3","Mischer Zeitprogramm 2","DPT_Switch","Out","In","-"),
						array("100","BM-2 3","Mischer Zeitprogramm 3","DPT_Switch","Out","In","-"),
						array("101","BM-2 3","Warmwasser Zeitprogramm 1","DPT_Switch","Out","In","-"),
						array("102","BM-2 3","Warmwasser Zeitprogramm 2","DPT_Switch","Out","In","-"),
						array("103","BM-2 3","Warmwasser Zeitprogramm 3","DPT_Switch","Out","In","-"),
						array("104","BM-2 3","Sollwertkorrektur","DPT_Value_Tempd","Out","In","K"),
						array("105","BM-2 3","Sparfaktor","DPT_Value_Tempd","Out","In","K"),
						array("106","Kaskadenmodul","Störung","DPT_Switch","Out","-","-"),
						array("107","Kaskadenmodul","Sammlertemperatur","DPT_Value_Temp","Out","-","°C"),
						array("108","Kaskadenmodul","Gesamtmodulationsgrad","DPT_Scaling","Out","-","%"),
						array("109","Kaskadenmodul","Vorlauftemperatur Mischerkreis","DPT_Value_Temp","Out","-","°C"),
						array("110","Kaskadenmodul","Status Mischerkreispumpe","DPT_Switch","Out","-","-"),
						array("111","Kaskadenmodul","Status Ausgang A1","DPT_Enable","Out","-","-"),
						array("112","Kaskadenmodul","Eingang E1","DPT_Value_Temp","Out","-","°C"),
						array("113","Kaskadenmodul","Eingang E2","DPT_Value_Temp","Out","-","°C"),
						array("114","Mischermodul 1","Störung","DPT_Switch","Out","-","-"),
						array("115","Mischermodul 1","Warmwassertemperatur","DPT_Value_Temp","Out","-","°C"),
						array("116","Mischermodul 1","Vorlauftemperatur Mischerkreis","DPT_Value_Temp","Out","-","°C"),
						array("117","Mischermodul 1","Status Mischerkreispumpe","DPT_Switch","Out","-","-"),
						array("118","Mischermodul 1","Status Ausgang A1","DPT_Enable","Out","-","-"),
						array("119","Mischermodul 1","Eingang E1","DPT_Value_Temp","Out","-","°C"),
						array("120","Mischermodul 1","Eingang E2","DPT_Value_Temp","Out","-","°C"),
						array("121","Mischermodul 2","Störung","DPT_Switch","Out","-","-"),
						array("122","Mischermodul 2","Warmwassertemperatur","DPT_Value_Temp","Out","-","°C"),
						array("123","Mischermodul 2","Vorlauftemperatur Mischerkreis","DPT_Value_Temp","Out","-","°C"),
						array("124","Mischermodul 2","Status Mischerkreispumpe","DPT_Switch","Out","-","-"),
						array("125","Mischermodul 2","Status Ausgang A1","DPT_Enable","Out","-","-"),
						array("126","Mischermodul 2","Eingang E1","DPT_Value_Temp","Out","-","°C"),
						array("127","Mischermodul 2","Eingang E2","DPT_Value_Temp","Out","-","°C"),
						array("128","Mischermodul 3","Störung","DPT_Switch","Out","-","-"),
						array("129","Mischermodul 3","Warmwassertemperatur","DPT_Value_Temp","Out","-","°C"),
						array("130","Mischermodul 3","Vorlauftemperatur Mischerkreis","DPT_Value_Temp","Out","-","°C"),
						array("131","Mischermodul 3","Status Mischerkreispumpe","DPT_Switch","Out","-","-"),
						array("132","Mischermodul 3","Status Ausgang A1","DPT_Enable","Out","-","-"),
						array("133","Mischermodul 3","Eingang E1","DPT_Value_Temp","Out","-","°C"),
						array("134","Mischermodul 3","Eingang E2","DPT_Value_Temp","Out","-","°C"),
						array("135","Solarmodul","Störung","DPT_Switch","Out","-","-"),
						array("136","Solarmodul","Warmwassertemperatur Solar 1","DPT_Value_Temp","Out","-","°C"),
						array("137","Solarmodul","Temperatur Kollektor 1","DPT_Value_Temp","Out","-","°C"),
						array("138","Solarmodul","Eingang E1","DPT_Value_Temp","Out","-","°C"),
						array("139","Solarmodul","Eingang E2 (Durchfluss)","DPT_Value_Volume_Flow","Out","-","l/h"),
						array("140","Solarmodul","Eingang E3","DPT_Value_Temp","Out","-","°C"),
						array("141","Solarmodul","Status Solarkreispumpe SKP1","DPT_Switch","Out","-","-"),
						array("142","Solarmodul","Status Ausgang A1","DPT_Enable","Out","-","-"),
						array("143","Solarmodul","Status Ausgang A2","DPT_Enable","Out","-","-"),
						array("144","Solarmodul","Status Ausgang A3","DPT_Enable","Out","-","-"),
						array("145","Solarmodul","Status Ausgang A4","DPT_Enable","Out","-","-"),
						array("146","Solarmodul","Durchfluss","DPT_Value_Volume_Flow","Out","-","l/h"),
						array("147","Solarmodul","aktuelle Leistung","DPT_Power","Out","-","kW"),
						array("148","CWL Excellent","Störung","DPT_Switch","Out","-","-"),
						array("149","CWL Excellent","Programm","DPT_HVACMode","Out","In","-"),
						array("150","CWL Excellent","Zeitprogramm 1","DPT_Switch","Out","In","-"),
						array("151","CWL Excellent","Zeitprogramm 2","DPT_Switch","Out","In","-"),
						array("152","CWL Excellent","Zeitprogramm 3","DPT_Switch","Out","In","-"),
						array("153","CWL Excellent","Zeitweise Intensivlüftung AN/AUS","DPT_Switch","Out","In","-"),
						array("154","CWL Excellent","Zeitweise Intensivlüftung Startdatum","DPT_Date","Out","In","-"),
						array("155","CWL Excellent","Zeitweise Intensivlüftung Enddatum","DPT_Date","Out","In","-"),
						array("156","CWL Excellent","Zeitweise Intensivlüftung Startzeit","DPT_TimeOfDay","Out","In","-"),
						array("157","CWL Excellent","Zeitweise Intensivlüftung Endzeit","DPT_TimeOfDay","Out","In","-"),
						array("158","CWL Excellent","Zeitweiser Feuchteschutz AN/AUS","DPT_Switch","Out","In","-"),
						array("159","CWL Excellent","Zeitweiser Feuchteschutz Startdatum","DPT_Date","Out","In","-"),
						array("160","CWL Excellent","Zeitweiser Feuchteschutz Enddatum","DPT_Date","Out","In","-"),
						array("161","CWL Excellent","Zeitweiser Feuchteschutz Startzeit","DPT_TimeOfDay","Out","In","-"),
						array("162","CWL Excellent","Zeitweiser Feuchteschutz Endzeit","DPT_TimeOfDay","Out","In","-"),
						array("163","CWL Excellent","Lüftungsstufe","DPT_Scaling","Out","-","%"),
						array("164","CWL Excellent","Ablufttemperatur","DPT_Value_Temp","Out","-","°C"),
						array("165","CWL Excellent","Frischlufttemperatur","DPT_Value_Temp","Out","-","°C"),
						array("166","CWL Excellent","Luftdurchsatz Zuluft","DPT_FlowRate_m3/h","Out","-","m³/h"),
						array("167","CWL Excellent","Luftdurchsatz Abluft","DPT_FlowRate_m3/h","Out","-","m³/h"),
						array("168","CWL Excellent","Bypass Initialisierung","DPT_Bool","Out","-","-"),
						array("169","CWL Excellent","Bypass öffnet/offen","DPT_Bool","Out","-","-"),
						array("170","CWL Excellent","Bypass schließt/geschlossen","DPT_Bool","Out","-","-"),
						array("171","CWL Excellent","Bypass Fehler","DPT_Bool","Out","-","-"),
						array("172","CWL Excellent","Frost Status: Initialisierung/Warte","DPT_Bool","Out","-","-"),
						array("173","CWL Excellent","Frost Status: Kein Frost","DPT_Bool","Out","-","-"),
						array("174","CWL Excellent","Frost Status: Vorwärmer","DPT_Bool","Out","-","-"),
						array("175","CWL Excellent","Frost Status: Fehler/Unausgeglichen","DPT_Bool","Out","-","-"),
						array("176","Heizgerät 1 (BWL-1-S)","Störung","DPT_Switch","Out","-","-"),
						array("177","Heizgerät 1 (BWL-1-S)","Betriebsart","DPT_HVACContrMode","Out","-","-"),
						array("178","Heizgerät 1 (BWL-1-S)","Heizleistung","DPT_Power","Out","-","kW"),
						array("179","Heizgerät 1 (BWL-1-S)","Kühlleistung","DPT_Power","Out","-","kW"),
						array("180","Heizgerät 1 (BWL-1-S)","Kesseltemperatur","DPT_Value_Temp","Out","-","°C"),
						array("181","Heizgerät 1 (BWL-1-S)","Sammlertemperatur","DPT_Value_Temp","Out","-","°C"),
						array("182","Heizgerät 1 (BWL-1-S)","Rücklauftemperatur","DPT_Value_Temp","Out","-","°C"),
						array("183","Heizgerät 1 (BWL-1-S)","Warmwassertemperatur","DPT_Value_Temp","Out","-","°C"),
						array("184","Heizgerät 1 (BWL-1-S)","Außentemperatur","DPT_Value_Temp","Out","-","°C"),
						array("185","Heizgerät 1 (BWL-1-S)","Status Heizkreispumpe","DPT_Switch","Out","-","-"),
						array("186","Heizgerät 1 (BWL-1-S)","Status Zubringer-/Heizkreispumpe","DPT_Switch","Out","-","-"),
						array("187","Heizgerät 1 (BWL-1-S)","Status 3-Wege-Umschaltventil HZ/WW","DPT_OpenClose","Out","-","-"),
						array("188","Heizgerät 1 (BWL-1-S)","Status 3-Wege-Umschaltventil HZ/K","DPT_OpenClose","Out","-","-"),
						array("189","Heizgerät 1 (BWL-1-S)","Status E-Heizung","DPT_Switch","Out","-","-"),
						array("190","Heizgerät 1 (BWL-1-S)","Anlagendruck","DPT_Value_Pres","Out","-","Pa"),
						array("191","Heizgerät 1 (BWL-1-S)","Leistungsaufnahme","DPT_Power","Out","-","kW"),
						array("192","CWL Excellent","Filterwarnung aktiv","DPT_Switch","Out","-","-"),
						array("193","CWL Excellent","Filterwarnung zurücksetzen","DPT_Switch","Out","In","-"),
						array("194","BM-2 0","1x Warmwasserladung","DPT_Switch","Out","In","-"),
						array("195","Solarmodul","Tagesertrag","DPT_ActiveEnergy","Out","-","Wh"),
						array("196","Solarmodul","Gesamtertrag","DPT_ActiveEnergy_kWh","Out","-","kWh"),
						array("197","Heizgerät 1","Abgastemperatur","DPT_Value_Temp","Out","-","°C"),
						array("198","Heizgerät 1","Leistungsvorgabe","DPT_Scaling","Out","In","%"),
						array("199","Heizgerät 1","Kesselsolltemperaturvorgabe","DPT_Value_Temp","Out","In","°C"),
						array("200","Heizgerät 2","Abgastemperatur","DPT_Value_Temp","Out","-","°C"),
						array("201","Heizgerät 2","Leistungsvorgabe","DPT_Scaling","Out","In","%"),
						array("202","Heizgerät 2","Kesselsolltemperaturvorgabe","DPT_Value_Temp","Out","In","°C"),
						array("203","Heizgerät 3","Abgastemperatur","DPT_Value_Temp","Out","-","°C"),
						array("204","Heizgerät 3","Leistungsvorgabe","DPT_Scaling","Out","In","%"),
						array("205","Heizgerät 3","Kesselsolltemperaturvorgabe","DPT_Value_Temp","Out","In","°C"),
						array("206","Heizgerät 4","Abgastemperatur","DPT_Value_Temp","Out","-","°C"),
						array("207","Heizgerät 4","Leistungsvorgabe","DPT_Scaling","Out","In","%"),
						array("208","Heizgerät 4","Kesselsolltemperaturvorgabe","DPT_Value_Temp","Out","In","°C"),
						array("209","Kaskadenmodul","Gesamtmodulationsgradvorgabe","DPT_Scaling","Out","In","%"),
						array("210","Kaskadenmodul","Sammlersolltemperaturvorgabe","DPT_Value_Temp","Out","In","°C")			
);

?>

In der gleichen Kategorie legst Du nun ein Script mit dem Namen „_ISM8_FUNCTIONS“ an (auch hier ist der Name Wichtig!)
Update 17.05.18

<?
$SERVERSOCKET = 28041 /*[ISM8 Server Socket]*/;

//  liest den HEX Wert, teilt diesen, macht wandelt in großbuchstaben um wenn vorhanden und packt diesen in ein Array
function _ISM8_READ_DATA_TO_ARRAY($HEX) 
{
	$HEX = unpack("H*" ,$HEX);
	$HEX = explode(" ", (wordwrap((strtoupper($HEX[1])), 2, " ", true)));
	return $HEX;
}

// nach jedem erhaltenem Wert, erwartet die Anlage eine Bestätigung.
function _ISM8_SEND_ACK($HEX)
{
	global $SERVERSOCKET;
	$HEADER = "$HEX[0]$HEX[1]$HEX[2]$HEX[3]";
	$FRAMESIZE = "0011";
	$CONNECTHEADER = "$HEX[6]$HEX[7]$HEX[8]$HEX[9]";
	$OBJECTSERVER = "$HEX[10]86$HEX[12]$HEX[13]000000";
	$ACK = pack("H*" ,"$HEADER$FRAMESIZE$CONNECTHEADER$OBJECTSERVER");
	SSCK_SendText($SERVERSOCKET,$ACK);
	return;
}

// Aktives auslesen aller Datenpunkte
function _ISM8_RELOAD_ALL_DATA()
{
	global $SERVERSOCKET;
	$HEX = pack("H*" ,"0620F080001604000000F0D0");
	SSCK_SendText($SERVERSOCKET,$HEX);
	return;
}

// Sobald man diese Funktion aufruft mit den Heizungstelegram als wert, wird das ganze als array aufgelöst. 
//            [DATAPOINT_ID] 		= 	Integer, der Wert kann dann in den Datenpunkten-Include gesucht werden
//            [DATAPOINT_NAME] 		= 	Name des Datenpunkte
//            [DATAPOINT_TYPE] 		= 	Datenpunkttyp
//			  [DATAPOINT_TYPE_VALUE]=	Wert des Datenpunkttypes 
//            [DATAPOINT_VALUE]		=	Wert des Datenpunktes 
//			  [DATAPOINT_OUT]		=	wenn Ausgabe = Out dann gibt es einen Ausgabewert
//		      [DATAPOINT_IN]		= 	wenn Ausgabe = In dann nimmt dieser Datenpunkt auch Daten an.
//		      [DATAPOINT_UNIT]		=	wenn eine Ausgabe erfolgt, dann ist das die Einheit bspw % oder °C	
//			  [DATAPOINT_IPS_TYPE ] = 0 =bool, 1 = integer , 2=Float, 3 = String

function _ISM8_READ_TELEGRAM($HEX)
{
		GLOBAL $DP;
		
		$FRAMESIZE	=	"$HEX[4] $HEX[5]";
		$MAINSERVICE	=	"$HEX[10]";
		$SUBSERVICE	=	"$HEX[11]";
		$NUMBER_OF_DP	=	hexdec("$HEX[14] $HEX[15]");
		
		$DATAPOINT_POS	=	"0";
		$DATAPOINT_VALUE	=	"" ;

	if ($MAINSERVICE == "F0" and $SUBSERVICE == "06"){	
	
		for( $i=1; $i <= $NUMBER_OF_DP; $i++ ){
				
				$DATAPOINT_VALUE		=	"0";				
				$DATAPOINT_ID			=	$HEX["$DATAPOINT_POS" + 16].$HEX["$DATAPOINT_POS" + 17];
				$DATAPOINT_CMD			=	$HEX["$DATAPOINT_POS" + 18];
				$DATAPOINT_LENGTH		=	$HEX["$DATAPOINT_POS" + 19];
							
				$DATAPOINT_ID_VAL		=	hexdec("$DATAPOINT_ID");				
				$DATAPOINT_CMD_VAL		=	hexdec("$DATAPOINT_CMD");
				$DATAPOINT_LENGTH_VAL	=	hexdec("$DATAPOINT_LENGTH");
				
				for( $n=0; $n <= $DATAPOINT_LENGTH_VAL -1; $n++ ){
						$DATAPOINT_VALUE	.=	$HEX["$DATAPOINT_POS" + 20 + $n];
					}
					
				$DATAPOINT_VALUE_VAL	=	hexdec("$DATAPOINT_VALUE");
				$DATAPOINT_TYPE			=	$DP[$DATAPOINT_ID_VAL][3];	
				$DATAPOINT_NAME			=	$DP[$DATAPOINT_ID_VAL][2];
				$DATAPOINT_OUT			=	$DP[$DATAPOINT_ID_VAL][4];
				$DATAPOINT_IN			=	$DP[$DATAPOINT_ID_VAL][5];
				$DATAPOINT_UNIT			=	$DP[$DATAPOINT_ID_VAL][6];
				$DATAPOINT_TYPE_VALUE 	= 	"";
				$DATAPOINT_IPS_TYPE			= "";
								
				switch($DATAPOINT_TYPE)
				{
					case "DPT_Switch":
						if ($DATAPOINT_VALUE_VAL == 0 ){ $DATAPOINT_TYPE_VALUE = "off";}elseif($DATAPOINT_VALUE_VAL == 1){ $DATAPOINT_TYPE_VALUE = "on";}
						$DATAPOINT_IPS_TYPE = 0;
					break;
					case "DPT_Bool":
						if ($DATAPOINT_VALUE_VAL == 0 ){ $DATAPOINT_TYPE_VALUE = "false";}elseif($DATAPOINT_VALUE_VAL == 1){ $DATAPOINT_TYPE_VALUE = "true";}
						$DATAPOINT_IPS_TYPE = 0;
					break;
					case "DPT_Enable":
						if ($DATAPOINT_VALUE_VAL == 0 ){ $DATAPOINT_TYPE_VALUE = "disable";}elseif($DATAPOINT_VALUE_VAL == 1){ $DATAPOINT_TYPE_VALUE = "enable";}
						$DATAPOINT_IPS_TYPE = 0;
					break;
					case "DPT_OpenClose":
						if ($DATAPOINT_VALUE_VAL == 0 ){ $DATAPOINT_TYPE_VALUE = "open";}elseif($DATAPOINT_VALUE_VAL == 1){ $DATAPOINT_TYPE_VALUE = "close";}
						$DATAPOINT_IPS_TYPE = 0;
					break;
					case "DPT_Scaling":
						$DATAPOINT_TYPE_VALUE = _ISM8_PDT_SCALING($DATAPOINT_VALUE_VAL);
						$DATAPOINT_IPS_TYPE = 2;
					break;
					case "DPT_Value_Temp":
						$DATAPOINT_TYPE_VALUE = _ISM8_PDT_KNX_FLOAT($DATAPOINT_VALUE_VAL);
						$DATAPOINT_IPS_TYPE = 2;
					break;
					case "DPT_Value_Tempd":
						$DATAPOINT_TYPE_VALUE = _ISM8_PDT_KNX_FLOAT($DATAPOINT_VALUE_VAL);
						$DATAPOINT_IPS_TYPE = 2;
					break;
					case "DPT_Value_Pres":
						$DATAPOINT_TYPE_VALUE = _ISM8_PDT_KNX_FLOAT($DATAPOINT_VALUE_VAL);
						$DATAPOINT_IPS_TYPE = 2;
					break;
					case "DPT_Power":
						$DATAPOINT_TYPE_VALUE = _ISM8_PDT_KNX_FLOAT($DATAPOINT_VALUE_VAL);
						$DATAPOINT_IPS_TYPE = 2;
					break;
					case "DPT_TimeOfDay":
					$DATAPOINT_IPS_TYPE = 3;
						//
					break;
					case "DPT_Date":
					$DATAPOINT_IPS_TYPE = 3;
						//
					break;
					case "DPT_FlowRate_m3/h":
						$DATAPOINT_IPS_TYPE = 2;
						//
					break;
					case "DPT_HVACMode":
						switch($DATAPOINT_VALUE_VAL)
						{
							case "0":
											$DATAPOINT_TYPE_VALUE = 0; //"Auto"
							break;
							case "1":
											$DATAPOINT_TYPE_VALUE = 1; //"Comfort"
							break;
							case "2":
											$DATAPOINT_TYPE_VALUE = 2; //"Standby"
							break;
							case "3":
											$DATAPOINT_TYPE_VALUE = 3; //"Economy"
							break;
							case "4":
											$DATAPOINT_TYPE_VALUE = 4; //"Building Protection"
							break;
						}
						$DATAPOINT_IPS_TYPE = 1;
					break;
					case "DPT_DHWMode":
							switch($DATAPOINT_VALUE_VAL)
							{
								case "0":
												$DATAPOINT_TYPE_VALUE = 0; //"Auto"
								break;
								case "1":
												$DATAPOINT_TYPE_VALUE = 1; //"LegioProtect"
								break;
								case "2":
												$DATAPOINT_TYPE_VALUE = 2; //"Normal"
								break;
								case "3":
												$DATAPOINT_TYPE_VALUE = 3; //"Reduced"
								break;
								case "4":
												$DATAPOINT_TYPE_VALUE = 4; //"Off/FrostProtect"
								break;
						}
						$DATAPOINT_IPS_TYPE = 1;
					break;
					case "DPT_HVACContrMode":
							switch($DATAPOINT_VALUE_VAL)
							{
								case "0":
												$DATAPOINT_TYPE_VALUE = 0; //"Auto"
								break;
								case "1":
												$DATAPOINT_TYPE_VALUE = 1; //"Heat"
								break;
								case "2":
												$DATAPOINT_TYPE_VALUE = 2; //"Morning Warmup"
								break;
								case "3":
												$DATAPOINT_TYPE_VALUE = 3; //"Cool"
								break;
								case "4":
												$DATAPOINT_TYPE_VALUE = 4; //"Night Purge"
								break;
								case "5":
												$DATAPOINT_TYPE_VALUE = 5; // "Precool"
								break;
								case "6":
												$DATAPOINT_TYPE_VALUE = 6; // "Off"
								break;
								case "7":
												$DATAPOINT_TYPE_VALUE = 7; // "Test"
								break;
								case "8":
												$DATAPOINT_TYPE_VALUE = 8; // "Emergency Heat"
								break;
								case "9":
												$DATAPOINT_TYPE_VALUE = 9; // "Fan Only"
								break;
								case "10":
												$DATAPOINT_TYPE_VALUE = 10; // "Free Cool"
								break;
								case "11":
												$DATAPOINT_TYPE_VALUE = 11; // "Ice"
								break;
								case "12":
												$DATAPOINT_TYPE_VALUE = 12; // "Maximum Heating Mode"
								break;
								case "13":
												$DATAPOINT_TYPE_VALUE = 13; //"Economic Heat/Cool Mode"
								break;
								case "14":
												$DATAPOINT_TYPE_VALUE = 14; //"Dehumidifiation"
								break;
								case "15":
												$DATAPOINT_TYPE_VALUE = 15; // "Calibration Mode"
								break;
								case "16":
												$DATAPOINT_TYPE_VALUE = 16; //"Emergency Cool Mode"
								break;
								case "17":
												$DATAPOINT_TYPE_VALUE = 17; //"Emergency Steam Mode"
								break;
								case "20":
												$DATAPOINT_TYPE_VALUE = 20; //"NoDem"
								break;	
						}
						$DATAPOINT_IPS_TYPE = 1;
					break;
					case "DPT_ActiveEnergy":
						$DATAPOINT_IPS_TYPE = 2;
						//
					break;
					case "DPT_ActiveEnergy_kWh":
						$DATAPOINT_IPS_TYPE = 2;
						//
					break;
					case "DPT_Value_Volume_Flow":
						$DATAPOINT_TYPE_VALUE = _ISM8_PDT_KNX_FLOAT($DATAPOINT_VALUE_VAL);
						$DATAPOINT_IPS_TYPE = 2;
					break;						
											
				}
				// Die Datapoint Länge setzt sich zusammen aus Datapoint ID (2) Datapoint Kommado (1) und Länge (1)
				$DATAPOINT_POS += 4 + "$DATAPOINT_LENGTH_VAL";
				
				// Schreibe Array für die Ausgabe								
				$ReturnArray[] = array(
					"DATAPOINT_ID"				=>		"$DATAPOINT_ID_VAL",
					"DATAPOINT_NAME"		=>		"$DATAPOINT_NAME",
					"DATAPOINT_TYPE"		=>		"$DATAPOINT_TYPE",
					"DATAPOINT_TYPE_VALUE"	=>		"$DATAPOINT_TYPE_VALUE",
					"DATAPOINT_VALUE"		=>		"$DATAPOINT_VALUE_VAL",		
					"DATAPOINT_OUT"			=>		"$DATAPOINT_OUT",
					"DATAPOINT_IN"			=>		"$DATAPOINT_IN",
					"DATAPOINT_UNIT"		=>		"$DATAPOINT_UNIT",
					"DATAPOINT_IPS_TYPE"		=>		"$DATAPOINT_IPS_TYPE"							
				);	
		}
		return $ReturnArray;	
	}
}

function _ISM8_CREATE_VARIABLE_PROFILE($DATAPOINT_TYPE)
{
				switch($DATAPOINT_TYPE)
				{
					case "DPT_Switch": // Bool (0)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 0);
						IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 1, "on", "", 0x00FF00);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 0, "off", "", 0xFF0000);
					break;
					case "DPT_Bool": // Bool (0)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 0);
						IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 1, "true", "", 0x00FF00);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 0, "false", "", 0xFF0000);
					break;
					case "DPT_Enable": // Bool (0)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 0);
						IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 1, "enable", "", 0x00FF00);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 0, "disable", "", 0xFF0000);
					break;
					case "DPT_OpenClose": // Bool (0)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 0);
						IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 1, "close", "", 0x00FF00);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 0, "open", "", 0xFF0000);
					break;
					case "DPT_Scaling": // Float (2)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 2);
            			IPS_SetVariableProfileText("_ISM8_$DATAPOINT_TYPE", "", "%");
						IPS_SetVariableProfileValues("_ISM8_$DATAPOINT_TYPE", "", "", "1");
					break;
					case "DPT_Value_Temp": // Float (2)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 2);
            			IPS_SetVariableProfileText("_ISM8_$DATAPOINT_TYPE", "", "°C");
					break;
					case "DPT_Value_Tempd": // Float (2)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 2);
            			IPS_SetVariableProfileText("_ISM8_$DATAPOINT_TYPE", "", "K");
					break;
					case "DPT_Value_Pres": // Float (2)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 2);
            			IPS_SetVariableProfileText("_ISM8_$DATAPOINT_TYPE", "", "Pa");
					break;
					case "DPT_Power": // Float (2)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 2);
            			IPS_SetVariableProfileText("_ISM8_$DATAPOINT_TYPE", "", "kW");
					break;
					case "DPT_TimeOfDay": // String (3)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 3);
					break;
					case "DPT_Date": // String (3)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 3);
					break;
					case "DPT_FlowRate_m3/h": // Float (2) 
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 2);
            			IPS_SetVariableProfileText("_ISM8_$DATAPOINT_TYPE", "", "m3/h");
						//
					break;
					case "DPT_HVACMode": // Integer (1)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 1);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 0, "Auto", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 1, "Comfort", "", 0xFFFFFF);
						IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 2, "Standby", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 3, "Economy", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 4, "Building Protection", "", 0xFFFFFF);
					break;
					case "DPT_DHWMode": // Integer (1)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 1);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 0, "Auto", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 1, "LegioProtect", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 2, "Normal", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 3, "Reduced", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 4, "Off/Frost/Protect", "", 0xFFFFFF);						
					break;
					case "DPT_HVACContrMode": // Integer (1)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 1);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 0, "Auto", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 1, "Heat", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 2, "Morning Warmup", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 3, "Cool", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 4, "Night Purge", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 5, "Precool", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 6, "Off", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 7, "Test", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 8, "Emergency Heat", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 9, "Fan Only", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 10, "Free Cool", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 11, "Ice", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 12, "Maximum Heating Mode", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 13, "Economic Heat/Cool Mode", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 14, "Dehumidifiation", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 15, "Calibration Mode", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 16, "Emergency Cool Mode", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 17, "Emergency Steam Mode", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 20, "NoDem", "", 0xFFFFFF);
 					break;
					case "DPT_ActiveEnergy": // Float (2)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 2);
            			IPS_SetVariableProfileText("_ISM8_$DATAPOINT_TYPE", "", "Wh");
					break;
					case "DPT_ActiveEnergy_kWh": // Float (2)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 2);
            			IPS_SetVariableProfileText("_ISM8_$DATAPOINT_TYPE", "", "kWh");
					break;
					case "DPT_Value_Volume_Flow": // Float (2)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 2);
            			IPS_SetVariableProfileText("_ISM8_$DATAPOINT_TYPE", "", "l/h");
					break;																	
				}
} 

function _ISM8_CREATE_VARIABLE_INPUT_PROFILE($DATAPOINT_TYPE, $DATAPOINT_ID)
{
				switch($DATAPOINT_TYPE)
				{
					case "DPT_Switch": // Bool (0)
						// Profile für INPUT-ID 59-64/72-77/85-90/98-103/150-153/158/193/194/
						IPS_CreateVariableProfile("_ISM8_IN_$DATAPOINT_TYPE", 0);
						IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 1, "on", "", 0x00FF00);
            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 0, "off", "", 0xFF0000);
					break;
					case "DPT_Scaling": // Float (2)
						// Profile für INPUT-ID 198/201/204/207/209
						IPS_CreateVariableProfile("_ISM8_IN_$DATAPOINT_TYPE", 2);
            			IPS_SetVariableProfileText("_ISM8_IN_$DATAPOINT_TYPE", "", "%");
						IPS_SetVariableProfileValues("_ISM8_IN_$DATAPOINT_TYPE", "", "", "1");
					break;
					case "DPT_Value_Temp": // Float (2)
						// Profile für INPUT-ID 56/69/82/95/199/202205/208/210
						IPS_CreateVariableProfile("_ISM8_IN_$DATAPOINT_TYPE", 2);
            			IPS_SetVariableProfileText("_ISM8_IN_$DATAPOINT_TYPE", "", "°C");
						IPS_SetVariableProfileValues("_ISM8_IN_$DATAPOINT_TYPE", "20", "80", "1");						
					break;
					case "DPT_Value_Tempd": // Float (2)
						// Profile für Input-ID 65/78/91/104
						if ($DATAPOINT_ID == 65 || $DATAPOINT_ID == 78 || $DATAPOINT_ID == 91 || $DATAPOINT_ID == 106)
						{ 
							IPS_CreateVariableProfile("_ISM8_IN_$DATAPOINT_TYPE", 2);
	            			IPS_SetVariableProfileText("_ISM8_IN_$DATAPOINT_TYPE", "", "K");
							IPS_SetVariableProfileValues("_ISM8_IN_$DATAPOINT_TYPE", "-4", "4", "0.5");
						}
						// Profile für Input-ID 66/79/92/105
						if ($DATAPOINT_ID == 66 || $DATAPOINT_ID == 79 || $DATAPOINT_ID == 92 || $DATAPOINT_ID == 105)
						{ 
							IPS_CreateVariableProfile("_ISM8_IN2_$DATAPOINT_TYPE", 2);
	            			IPS_SetVariableProfileText("_ISM8_IN2_$DATAPOINT_TYPE", "", "K");
							IPS_SetVariableProfileValues("_ISM8_IN2_$DATAPOINT_TYPE", "0", "10", "0.5");
						}
					break;
					case "DPT_HVACMode": // Integer (1)
						// Profil für INPUT-ID 149
						if ($DATAPOINT_ID == 149)
						{ 
							IPS_CreateVariableProfile("_ISM8_IN_$DATAPOINT_TYPE", 1);
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 0, "Automatikbetrieb", "", 0xFFFFFF);
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 1, "Nennlüftung", "", 0xFFFFFF);
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 3, "Economy", "", 0xFFFFFF);
						}
						// Profil für INPUT-ID 57/70/83/96
						if ($DATAPOINT_ID == 57 || $DATAPOINT_ID == 70 || $DATAPOINT_ID == 83 || $DATAPOINT_ID == 96)
						{ 
							IPS_CreateVariableProfile("_ISM8_IN2_$DATAPOINT_TYPE", 1);
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 0, "Automatikbetrieb", "", 0xFFFFFF);
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 1, "Heizbetrieb", "", 0xFFFFFF);
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 2, "Standby", "", 0xFFFFFF);
							IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 3, "Sparbetrieb", "", 0xFFFFFF);						
						}
					break;
					case "DPT_DHWMode": // Integer (1)
						// Profile für INPUT-ID 58/71/84/97
						IPS_CreateVariableProfile("_ISM8_IN_$DATAPOINT_TYPE", 1);
            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 0, "Automatikbetrieb", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 2, "Dauerbetrieb", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 4, "Standby", "", 0xFFFFFF);
					break;
					case "DPT_HVACContrMode": // Integer (1)
						// Profile für INPUT-ID 2/15/28/41/    ACHTUNG!!!! hinter dem Befehl steht der Wert der an die Anlage gesendet werden MUSS!!
						if ($DATAPOINT_ID == 2 || $DATAPOINT_ID == 15 || $DATAPOINT_ID == 28 || $DATAPOINT_ID == 41)
						{ 
							IPS_CreateVariableProfile("_ISM8_IN_$DATAPOINT_TYPE", 1);
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 0, "Test", "", 0xFFFFFF); // 7
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 1, "Start", "", 0xFFFFFF); // 1
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 2, "Frost Heizkreis", "", 0xFFFFFF); // 11
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 3, "Frost Warmwasser", "", 0xFFFFFF); // 11
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 4, "Schornsteinfeger", "", 0xFFFFFF); // 0
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 5, "Kombibetrieb", "", 0xFFFFFF); // 1
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 6, "Parallelbetrieb", "", 0xFFFFFF); // 1
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 7, "Warmwasserbetrieb", "", 0xFFFFFF); // 1
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 8, "Warmwassernachlauf", "", 0xFFFFFF); // 1
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 9, "Mindest-Kombizeit", "", 0xFFFFFF); // 1
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 10, "Heizbetrieb", "", 0xFFFFFF); // 1
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 11, "Nachlauf Heizkreispumpe", "", 0xFFFFFF); // 1
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 12, "Frostschutz", "", 0xFFFFFF); // 11
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 13, "Standby", "", 0xFFFFFF); // 6
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 14, "Kaskadenbetrieb", "", 0xFFFFFF); // 1
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 15, "GLT-Betrieb", "", 0xFFFFFF); // 7
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 16, "Kalibration", "", 0xFFFFFF); // 15
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 17, "Kalibration Heizbetrieb", "", 0xFFFFFF); // 15
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 18, "Kalibration Warmwasserbetrieb", "", 0xFFFFFF); // 15
							IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 19, "Kalibration Kombibetrieb", "", 0xFFFFFF); // 15
						}
						// Profile für INPUT-ID 178     ACHTUNG!!!! hinter dem Befehl steht der Wert der an die Anlage gesendet werden MUSS!!
						if ($DATAPOINT_ID == 178)
						{ 
							IPS_CreateVariableProfile("_ISM8_IN2_$DATAPOINT_TYPE", 1);
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 0, "ODU Test", "", 0xFFFFFF); // 7
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 1, "Test", "", 0xFFFFFF); // 7
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 2, "Frostschutz HK", "", 0xFFFFFF); // 11
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 3, "Frostschutz Warmwasser", "", 0xFFFFFF); // 11
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 4, "Durchfluss gering", "", 0xFFFFFF); // 1
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 5, "Vorwärmung", "", 0xFFFFFF); // 2
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 6, "Abtaubetrieb", "", 0xFFFFFF); // 11
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 7, "Antilegionellenfunktion", "", 0xFFFFFF); // 0
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 8, "Warmwasserbetrieb", "", 0xFFFFFF); // 1
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 9, "WW-Nachlauf", "", 0xFFFFFF); // 1
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 10, "Heizbetrieb", "", 0xFFFFFF); // 1
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 11, "HZ-Nachlauf", "", 0xFFFFFF); // 1
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 12, "Aktive Kühlung", "", 0xFFFFFF); // 3
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 13, "Kaskade", "", 0xFFFFFF); // 1
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 14, "GLT", "", 0xFFFFFF); // 7
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 15, "Standby", "", 0xFFFFFF); // 6
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 16, "Pump down", "", 0xFFFFFF); // 3
						}
 					break;
					case "DPT_TimeOfDay": // String (3)
						// Profile für INPUT-ID 156/157/161/162
						IPS_CreateVariableProfile("_ISM8_IN_$DATAPOINT_TYPE", 3);
					break;
					case "DPT_Date": // String (3)
						// Profile für INPUT-ID 154/155/159/160
						IPS_CreateVariableProfile("_ISM8_IN_$DATAPOINT_TYPE", 3);
					break;

				}
}

function _ISM8_PDT_SCALING($HEX)
{
	return round(($HEX & 0xff) * 100 / 255, 3);
}

function _ISM8_PDT_KNX_FLOAT($HEX, $RES=0.01)
{
	$sign = ($HEX & 0x8000) >> 15; //0x8000 = 1000 0000 0000 0000 dieses Bit ist das Vorzeichen (-)
	$exponent = ($HEX & 0x7800) >> 11; // 0x7800 = *0111 1000 0000 0000‬ diese bits sind für den exponeten. 
	$mantisse = $HEX & 0x07ff; // 0x07ff = *0000 0111 1111 1111 diese Bits stellen die Range dar‬
	if ($sign != 0) { 
		$mantisse = -(~($mantisse - 1) & 0x07ff);
		}
	$value = (1 << $exponent) * $RES * $mantisse;
	return $value;
}

function _ISM8_PDT_LONG($HEX)
{
   return ($HEX > 2147483647 and $HEX - 2147483648 or $HEX);
}

function _ISM8_PDT_TIME($HEX)
{
   $b1 = ($HEX & 0xff0000) >> 16;
   $b2 = ($HEX & 0x00ff00) >> 8;
   $b3 = ($HEX & 0x0000ff);
   $weekday = ($b1  & 0xe0) >> 5;
   //@weekdays = ["","Mo","Di","Mi","Do","Fr","Sa","So"];
   $hour = $b1 & 0x1f;
   $min = $b2 & 0x3f;
   $sec = $b3 & 0x3f;
   $value = sprintf("%s %d:%d:%d", $weekday, $hour, $min, $sec);
   return $value;
}

function _ISM8_PDT_DATE($HEX)
{
	$b1 = ($HEX & 0xff0000) >> 16;
	$b2 = ($HEX & 0x00ff00) >> 8;
	$b3 = ($HEX & 0x0000ff);
	$day = $b1 & 0x1f;
	$mon = $b2 & 0xf;
	$year = $b3 & 0x7f;

	if ($year < 90) { 
   		$year += 2000; }
		
	else { 
			$year += 1900; 
	}
   $value = sprintf("%02d.%02d.%04d", $day, $mon, $year);
   return $value;
}

function _ISM8_CREATE_VARIABLE($ID, $IDENT, $DPNAME, $TYPE, $SORTID=0, $PROFILE)
{
     $VARID = @IPS_GetObjectIDByIdent($IDENT, $ID);
	 
	 if($VARID === false)
     {
	     $VARID = IPS_CreateVariable($TYPE);
         IPS_SetParent($VARID, $ID);
         IPS_SetName($VARID, $DPNAME);
         IPS_SetIdent($VARID, $IDENT);
 		 IPS_SetPosition($VARID, $SORTID);
		 IPS_SetVariableCustomProfile($VARID, "_ISM8_$PROFILE");
     }
     return $VARID;
}  

function _ISM8_REVERSEBIT($BIT)
{
	return strtr($BIT,[1,0]);
}

function _ISM8_DECBIN($DEC, $MAXBIT=16)
{
	return str_pad(decbin($DEC), $MAXBIT, "0", STR_PAD_LEFT);
}

function _ISM8_PDT_KNX_FLOAT_DEC($DEC, $RES=0.01)
{
	$val = $DEC / $RES;
	$exp = 0;

	while (!($val <= 2047 && $val >= -2048 ))
	{
	    $val = $val / 2;
		$exp++;
	}
	// wenn DEC negativ, dann bilde das zweier-Komplement
	if ($DEC < 0)
	{ 
		$bin = _ISM8_DECBIN(-1 * $val, 11);
		$bin = _ISM8_REVERSEBIT($bin);
		$bin = decbin(bindec($bin) + 1);
		$sign = 1;
	}
	else
	{ 
		$bin = _ISM8_DECBIN($val, 11);
		$sign = 0; 
	}
	$expbin = _ISM8_DECBIN($exp, 4);
	$ret = dechex(bindec($sign.$expbin.$bin));
	return $ret;
}

// Wandelt die mit IPS_GetVariableProfile ermittelte Daten in Namen um, wird in _ISM8_HELP_DATAPOINT

function _ISM8_IPS_GETVARIABLEPROFILENAME($TYPE){

	switch($TYPE){
		case "0":
				$STATUS="Boolean";
		break;
		case "1":
				$STATUS="Integer";
		break;
		case "2":
				$STATUS="Float";
		break;
		case "3":
				$STATUS="String";
		break;
	}
	return $STATUS;
} 

// ruft man die Funktion ohne Wert auf, gibt sie eine Liste mit Datenpunkte aus die Inputs akzeptieren
// ruft man die Funktion dann mit dem Wert des Datenpunktes auf, so gibt es weitere Informationen aus.
function _ISM8_HELP_DATAPOINT($DPID="help"){
	global $DP;
	
			
	if ("$DPID" == "help") {
			
		echo "Hilfe: Folgende Datenpunkte nehmen Datem entgegen

";
		foreach ($DP as $ID){
			if ($ID[5] === "In") { 
				echo "".$ID[0]." 	 ".$ID[1]." 	 ".$ID[2]." 	".$ID[3]."
"; 
				} 
			}
		}
	else {
			$ID = $DP[$DPID];

			if ($ID[5] === "In") { 
				$CREATED_PROFILE_NAME = "_ISM8_$ID[3]";
				$IPS_PROFILE = IPS_GetVariableProfile($CREATED_PROFILE_NAME);
				$IPS_PROFILENAME = _ISM8_IPS_GETVARIABLEPROFILENAME($IPS_PROFILE['ProfileType']);
				echo "Datenpunkt: ".$ID[0]."
Gerät: ".$ID[1]."
Datenpunkt: ".$ID[2]."
IPS Profilname:".$CREATED_PROFILE_NAME."
";
				
				echo "Schrittweite min.: ".$IPS_PROFILE['MinValue']."
";
				echo "Schrittweite max.: ".$IPS_PROFILE['MaxValue']."
";
				echo "Schrittweite: ".$IPS_PROFILE['StepSize']."
";
				echo "Anzahl Stellen: ".$IPS_PROFILE['Digits']."
";
				echo "Prefix: ".$IPS_PROFILE['Prefix']."
";
				echo "Suffix: ".$IPS_PROFILE['Suffix']."
";
				
				echo "Profiltyp: $IPS_PROFILENAME
";
				
				foreach ($IPS_PROFILE['Associations'] AS $id => $Name){
					echo "	Wert: $Name[Value] $Name[Name]
";
				}
				
			} 
		else { echo "Dieser Datenpunkt nimmt keine Inputs an"; }
		}
	
	}
?>

Die erste Variable namens „SERVERSOCKET“ musst du anpassen. Dort kommt die Objekt-ID deiner Anlage rein (die du dir oben merken solltest :wink: )

Nun legst Du ein Script namens „Event Receiver“ mit folgendem Inhalt an.

<?
$FUNCTION_INC	=	IPS_GetScriptIDByName("_ISM8_FUNCTIONS", IPS_GetParent($_IPS['SELF']));
include("$FUNCTION_INC.ips.php");

$DATAPOINT_INC	=	IPS_GetScriptIDByName("_ISM8_DATAPOINTS", IPS_GetParent($_IPS['SELF']));
include("$DATAPOINT_INC.ips.php");

if($_IPS['SENDER'] == "RegisterVariable")
{
	$HEX = _ISM8_READ_DATA_TO_ARRAY($_IPS['VALUE']);
	
// wenn 	Mainservice - Array 10 = F0 und Subservice - Array = 06, dann sende eine Antwort. Unterbleibt eine Antwort, sendet die ISM8 die Nachricht noch 5x.
	if ($HEX[10] == "F0" and $HEX[11] == "06"){
		_ISM8_SEND_ACK($HEX);
	}
	
	$TELEGRAM = _ISM8_READ_TELEGRAM($HEX);
	
	foreach($TELEGRAM as $DTP){
		
	$DTP_VALUE = $DTP['DATAPOINT_TYPE_VALUE'];
	
		if ($DTP['DATAPOINT_IPS_TYPE'] == 0 ){
			switch ($DTP['DATAPOINT_TYPE_VALUE'])
			{
				case "on";
				case  "enable" ;
				case "true" ; 
				case "close";
					$DTP_VALUE = true;
				break;
				case "off";
				case  "disable" ;
				case "false" ; 
				case "open";
					$DTP_VALUE = false;
				break;
			}
		}
	
		$DATAPOINT_TYPE = $DTP['DATAPOINT_TYPE'];
		if (! IPS_VariableProfileExists("_ISM8_$DATAPOINT_TYPE"))
		{ 
			//echo "Profil existiert nicht!";
			_ISM8_CREATE_VARIABLE_PROFILE($DATAPOINT_TYPE);
		}

		$IPS_IDENT = "DTP_".$DTP['DATAPOINT_ID'];
		$IPS_NAME = $DTP['DATAPOINT_ID']."_".$DTP['DATAPOINT_NAME'];
		SetValue(_ISM8_CREATE_VARIABLE($_IPS['SELF'], $IPS_IDENT, $IPS_NAME, $DTP['DATAPOINT_IPS_TYPE'], $DTP['DATAPOINT_ID'], $DTP['DATAPOINT_TYPE']), $DTP_VALUE);
			
	
	}
}
?>

Jetzt legen wir eine „Register Variable“ an. Als Ziel nutzen wir unser Script „Event Receiver“ und als „übergeordnete Instanz“ unser „ISM8 Server Socket“.

Im Prinzup war es das. Sobald Daten ankommen, quittiert das Script „Event Receiver“ und die Daten kommen nicht min 5x an. Alle Vairablen werden automatisch angelegt, sowie alle Profile.

Initial würde ich aber ein Script namens „Get_all_Data“ anlegen.

<?
$FUNCTION_INC	=	IPS_GetScriptIDByName("_ISM8_FUNCTIONS", IPS_GetParent($_IPS['SELF']));
include("$FUNCTION_INC.ips.php");

$DATAPOINT_INC	=	IPS_GetScriptIDByName("_ISM8_DATAPOINTS", IPS_GetParent($_IPS['SELF']));
include("$DATAPOINT_INC.ips.php");

_ISM8_RELOAD_ALL_DATA();

?>

Dieses Script kannst Du nun ausführen, es wird ein Befehl an die ISM8 gesendet und alle Werte die Deine Anlage so besitzt werden zurückkgegeben.

Nun etwas Erklärung…
Die Anlage sendet immer 5x Daten es sei denn, diese werden nach dem ersten mal quittiert, dies übernimmt der „Event Receiver“. Daten Senden geht auch, das hast Du mit dem letzten Script „Get_all_Data“ schon gemacht.

Derzeit schreibe ich noch an drei Funktionen. Die eine schickt „Rohdaten“ an die Anlage (also fertige HEX Daten) und die andere prüft vorher, ob die Daten auch Valide sind.

Die letzte Funktion soll es erlauben, die Datenpunkt-ID anzugeben und den Wert mitzuliefern ohne das man die Daten hin und her rechnen muss (also Dezimal, Hex etc).

Ich habe noch als Problem das nach dem Senden der Daten nicht immer eine Rückmeldung kommt. Sende ich also an die Anlage bspw „1x Warmwasser“ über das Script, bekommst die Anlage das mit und die Temparatur steigt (was ich auch empfange) aber der Wert „1x Warmwasser“ wird eben nicht mehr mitgegeben. Ich muss über „_ISM8_RELOAD_ALL_DATA();“ die Werte neu Anfragen.

Anonsten fehlt mir nur Zeit :smiley:

Möchtest Du Testweise was senden, geht das am einfachsten, indem Du den Inhalt vom Script „Get_all_Data“ kopierst und die Function "_ISM8_RELOAD_ALL_DATA():wink: löscht. Füge stattdessen das hinzu


$HEX="HIER KOMMT DEIN HEX CODE REIN";
$HEX=str_replace(" ","",$HEX);
	$PREP_TELEGRAM = pack("H*" ,"$HEX");
	echo "SSCK_SendText($SERVERSOCKET,$PREP_TELEGRAM)";

Die Hexwerte kannst Du im Debug-Fenster „sammeln“ oder eben selber berechnen (wie, steht in der ISM8 Anleitung), die meisten Funktionen sind dafür aber da :wink:

Das ganze ist leider nicht ganz trivial, das wirst Du merken wenn Du dir die Anleitung durchliest und dir meine Funktionen dafür anschaust…

Ich werde natürlich weiterhin an dem Script arbeiten und meine Erfolge hier rein bringen, aber ein Modul werde ich wohl nicht erstellen. Das Script hier ist schon kompliziert genug :smiley:

VIele Grüße
Kris

Update 17.05.18

Ich habe zwei Neue Funktionen in die _ISM8_FUNCTIONS eingefügt.
_ISM8_IPS_GETVARIABLEPROFILENAME() und wandelt die mit IPS_GetVariableProfile ermittelte Daten in Namen um, die wird in _ISM8_HELP_DATAPOINT aufgerufen
_ISM8_HELP_DATAPOINT() gibt ohne Wert eine Liste mit alen Datenpunkten auf, die Inputs akzeptieren. Gibt man als Wert die Datenpunktid ein, gibt es weitere Infos zu diesem Datenpunkt aus.

Viele Grüße

Moin Kris,

mein ISM8 ist heute gekommen, eingebaut, deine Scripte hinzugefügt und die Daten wurden ausgelesen. Perfekt! :slight_smile:

Ich werde da auf jeden Fall mal ein Modul daraus basteln, das macht das programmieren und erweitern dann doch einfacher finde ich, als wenn man sich Scripte hin und her schiebt :wink: Vlt. komme ich am Wochenende schon dazu das Grundmodul zu erstellen, dann können wir da gemeinsam versuchen das Ganze nach und nach zu erweitern, insbesondere um Daten zu schreiben - damit hast du ja schon angefangen. Das Ganze eilt ja auch nicht, wenn wir da bis zur nächsten Heizperiode schon weiter sind wäre das vollkommen ausreichend.

Die Anleitung des ISM8 habe ich auch schon überflogen, das hätte Wolf auch sicher einfacher lösen können :wink:

Ich melde mich auf jeden Fall, wenn ich irgendwie weitergekommen bin.
Danke für deinen bisherigen Einsatz und das teilen deiner Erfolge!

Viele Grüße,

Frank

Super, das es bei dir geklappt hat. Welche Firmware Version hast du?

Wenn du ein Modul erstellen magst, sehr gerne. Ich bin einfach nicht dazu gekommen mir die Modulgeschichte anzuschauen.

Welche IPS Version nutzt du? Hab hier zwar schonmal einen neuen IPS Server auf ubuntu 18.04 Basis und sogar ips installiert aber sonst noch keine datenübernahme gemacht.

Würde mich interessieren ob es noch läuft :wink:

Gesendet von iPhone mit Tapatalk

Ich habe auf dem ISM8 die Firmware 1.50 drauf.

Bei IPS nutze ich momentan zum entwickeln (noch) die 4.4 auf Windows und im Produktivsystem die 5.0 auf Linux (docker). Funktioniert auf beiden Systemen problemlos, wenngleich natürlich nicht parallel aufgrund der unterschiedlichen IP/Ports.

Hi,

ich habe oben meinen Text aktualisiert. Ich habe zwei Neue Funktionen in die _ISM8_FUNCTIONS eingefügt.

_ISM8_IPS_GETVARIABLEPROFILENAME() und wandelt die mit IPS_GetVariableProfile ermittelte Daten in Namen um, die wird in _ISM8_HELP_DATAPOINT aufgerufen

_ISM8_HELP_DATAPOINT() gibt ohne Wert eine Liste mit alen Datenpunkten auf, die Inputs akzeptieren. Gibt man als Wert die Datenpunktid ein, gibt es weitere Infos zu diesem Datenpunkt aus.

Wer möchte kann auch nur die _ISM8_FUNCTIONS mit dem unteren Code ergänzen. Einfach am Ende (aber vor ?> ) einfügen.


// Wandelt die mit IPS_GetVariableProfile ermittelte Daten in Namen um, wird in _ISM8_HELP_DATAPOINT

function _ISM8_IPS_GETVARIABLEPROFILENAME($TYPE){

	switch($TYPE){
		case "0":
				$STATUS="Boolean";
		break;
		case "1":
				$STATUS="Integer";
		break;
		case "2":
				$STATUS="Float";
		break;
		case "3":
				$STATUS="String";
		break;
	}
	return $STATUS;
} 

// ruft man die Funktion ohne Wert auf, gibt sie eine Liste mit Datenpunkte aus die Inputs akzeptieren
// ruft man die Funktion dann mit dem Wert des Datenpunktes auf, so gibt es weitere Informationen aus.
function _ISM8_HELP_DATAPOINT($DPID="help"){
	global $DP;
	
			
	if ("$DPID" == "help") {
			
		echo "Hilfe: Folgende Datenpunkte nehmen Datem entgegen

";
		foreach ($DP as $ID){
			if ($ID[5] === "In") { 
				echo "".$ID[0]." 	 ".$ID[1]." 	 ".$ID[2]." 	".$ID[3]."
"; 
				} 
			}
		}
	else {
			$ID = $DP[$DPID];

			if ($ID[5] === "In") { 
				$CREATED_PROFILE_NAME = "_ISM8_$ID[3]";
				$IPS_PROFILE = IPS_GetVariableProfile($CREATED_PROFILE_NAME);
				$IPS_PROFILENAME = _ISM8_IPS_GETVARIABLEPROFILENAME($IPS_PROFILE['ProfileType']);
				echo "Datenpunkt: ".$ID[0]."
Gerät: ".$ID[1]."
Datenpunkt: ".$ID[2]."
IPS Profilname:".$CREATED_PROFILE_NAME."
";
				
				echo "Schrittweite min.: ".$IPS_PROFILE['MinValue']."
";
				echo "Schrittweite max.: ".$IPS_PROFILE['MaxValue']."
";
				echo "Schrittweite: ".$IPS_PROFILE['StepSize']."
";
				echo "Anzahl Stellen: ".$IPS_PROFILE['Digits']."
";
				echo "Prefix: ".$IPS_PROFILE['Prefix']."
";
				echo "Suffix: ".$IPS_PROFILE['Suffix']."
";
				
				echo "Profiltyp: $IPS_PROFILENAME
";
				
				foreach ($IPS_PROFILE['Associations'] AS $id => $Name){
					echo "	Wert: $Name[Value] $Name[Name]
";
				}
				
			} 
		else { echo "Dieser Datenpunkt nimmt keine Inputs an"; }
		}
	
	}

Hab auch mal einfach mein Produktivsystem auf meinen neuen Server basierend auf Ubuntu 18.04 und IPS5 umgezogen. Bisher sieht alles sehr gut aus.

Viele Grüße

Ich habe deinen bisherigen Stand schon mal in ein Modul gepackt, dabei aber auch einiges angepasst und umgeschrieben. Das aktuelle Ergebnis sieht derzeit so aus:

Übers Webfront kann man bereits die Temperaturen steuern und die Zeitprogramme aktivieren / deaktivieren. Bei den Zeitprogrammen setzt er das aber ein paar Minuten später wieder alles auf „aus“. Vermutlich muss man da vorher erst noch den Automatikmodus aktivieren, das muss ich noch testen und dann automatisch auswählen.

Für die Betriebswahl muss ich nämlich noch ein ID Mapping erstellen, damit die korrekten Werte übergeben werden.

Werde erst morgen wieder weiter machen können, heute müssen im Garten noch ein paar Bäume gefällt und der Zaun weiter gestrichen werden. Ich denke das ich am Montag eine erste Betaversion mal online schieben kann, dann kannst du da gerne mit drüber schauen, je nachdem wie du Zeit und Lust hast :slight_smile:

Ich habe deinen bisherigen Stand schon mal in ein Modul gepackt

melde vorsorglich schon mal Interesse an :slight_smile:

Das sieht sehr gut aus, schön sortiert. Immer her damit :slight_smile:

Meine Funktion zum prüfen ob das Telegram in Ordnung ist, ist auch fertig. Füge ich heute Abend mal hier rein.

Die zum senden ala datenpunkt = Wert braucht noch was.

Viele Grüße

Gesendet von iPhone mit Tapatalk

Die 1. Version des Moduls habe ich soweit fertig: GitHub - CodeKing/de.codeking.symcon.ism8: IP-Symcon Module for Wolf ISM8
Als erstes die Splitter Instanz anlegen und konfigurieren, darüber werden dann die einzelnen Geräte angelegt.

Ich bin aber bisher noch nicht viel weiter gekommen, das Wetter war zu schön :wink:

Nach wie vor fehlt noch das Mapping der korrekten Geräteprofile für den Betriebsstatus, als auch das Schreiben des selbigen. Werde mich heute Abend nochmal dran setzen.

Viele Grüße,

Frank

Huhu,

mir ist das ja ein wenig unangenehm, aber seit meiner letzen Nachricht habe ich auch keinen Handschlag mehr an den Scripten gemacht :banghead:

Das ist das Problem an „provisiorien“ die halten ewig (Warmwasser einschalten macht mein Pokey) :wink:

Dein Modul hab ich mir angeschaut, und gefällt mir sehr gut. Hast Du schonmal was in die Heizung geschrieben? Ich habe Testscript was auch soweit gut klappt (Also bspw Betriebsart aus und einschalten) aber ich habe da wie gesagt seit ewigkeiten nicht mehr weitergmacht

VIele Grüße

Schönen guten Tag,

ich weiß, der Thread ist schon älter, aber vielleicht könnt Ihr mir ein paar Infos zu dem ism8 geben.

Ich habe eine BWL1S Wärmepumpe mit wolf Raumbelüftung, diese würde ich gerne mit der ism8i erweitern um ohne Internetanbindung die Wärmepumpe und die Belüftung steuern zu können.
Ist das mit diesem Modul möglich, oder würde ich mir die ism8i umsonst kaufen?

mfg

Marek

Hi,

ich nutze selber das Modul nicht sondern meine Scripte. Bei mir läuft es ganz gut. Aber ob der ISM8 mit der Raumbelüftung läuft, weiß ich ebensowenig wie welche Daten ankommen.

Viele Grüße

Achso, nagut, dann werde ich es wohl einfach testen müssen :smiley:
In der Dokumentation über die ISM8 steht die Belüftung mit drin, aber ich weiß natürlich nicht, ob deine Scripte bzw. das Modul die auch auslesen und ändern können.

Trotzdem Danke für die Info

Hi,

wekeche Doku ist das? Meine ist versionsstand 1.5 glaub ich.

mein Script schreit einmal im ebus rum nach neue daten und die Anlage antwortet mit den vorhandenen datenpunkten. im Anschluss sendet das ism8 Änderungen an symcon.

Die Chancen stehen also gut das es klappt.

viele grüsse

In der Doku zum ism8 wird die Belüftung mit angegeben. Ich werde das Ding mal bestellen wenn ich Zeit habe und es testen.

Dankeschön für die Infos👍

Hallo Frank,
ich habe in diesem Jahr eine neue Wolfheizung bekommenund mir das ism8 zugelegt.
Wollte gerne dein Modul benutzen. Leider funktioniert das unter Symcon 5.5 nicht mehr.
Habe dann überlegt, da ich kaum Programmiererfahrungen habe, auf eine ältere Version zurück zu gehen. Habe aber leider keine 4.4 mehr. Wäre es möglich das Modul auf Symcon 5.5 anzupassen bzw eine neue Version zu erstellen?

Hätte vielleicht noch dazu schreiben sollen, dass es nichtmal um die Funktion an sich geht , denn soweit komme ich nicht . Beim erstellen eines ism8 device geht es schon nicht weiter

Ich habe zeitweise mal das Skript von kris ausprobiert. Ab Symcon 5 funktioniert es nicht mehr wegen einem Leerzeichen. Es scheint wohl bei der neuen PHP-Version nicht mehr erlaubt zu sein ein hexdec mit leerzeichen zu benutzen… leider passt Wolf-Seitig auch vieles nicht mehr. Ich habe FW 1.7. meine Gastherme ist in dem Daten nicht mit drin , dafür bekomme ich Datenpunkte weit über 300 mit denen das Skript dann nichts mehr anfangen kann.

Das mit dem Senden habe ich mal versucht . Habe den HEX für ww-solltemperatur 54 und 60 kopiert und zum senden eingetragen. Wenn ich das dann sende passiert in der Heizung nichts.

Hast du da evtl. Ne Idee kris?

Hi,

also mein Script funktioniert unter 6 auch noch. Gerade mal schnell an einer frischen Installation getestet. Ich habe aber auch hier nicht die letzte Version drin. Ich habe die Firmare 1.5, keine Ahnung was in der 1.7 alles anders ist.

Wirklich aktiv nutze ich das ganze aber nicht. Ich habe an einem parametrierbaren Eingang einen Pokey dran, der diesen schaltet wenn ich warmes Wasser brauche. Dort kommt die Reaktion sofort. Was ich schalte ist die Betriebsart.

Die _ISM8_FUNCTIONS sieht so aus.

<?php

$SERVERSOCKET = 55064; //id des Serversockets eintragen. 

if ($_IPS['SENDER'] == "RunScript"){
    IPS_SetIdent($_IPS['SELF'],"_ISM8_FUNCTIONS");
}

//  liest den HEX Wert, teilt diesen, macht wandelt in großbuchstaben um wenn vorhanden und packt diesen in ein Array
function _ISM8_READ_DATA_TO_ARRAY($HEX) 
{
	$HEX = unpack("H*" ,$HEX);
	$HEX = explode(" ", (wordwrap((strtoupper($HEX[1])), 2, " ", true)));
	return $HEX;
}

// nach jedem erhaltenem Wert, erwartet die Anlage eine Bestätigung.
function _ISM8_SEND_ACK($HEX)
{
	global $SERVERSOCKET;
	$HEADER = "$HEX[0]$HEX[1]$HEX[2]$HEX[3]";
	$FRAMESIZE = "0011";
	$CONNECTHEADER = "$HEX[6]$HEX[7]$HEX[8]$HEX[9]";
	$OBJECTSERVER = "$HEX[10]86$HEX[12]$HEX[13]000000";
	$ACK = pack("H*" ,"$HEADER$FRAMESIZE$CONNECTHEADER$OBJECTSERVER");
	SSCK_SendText($SERVERSOCKET,$ACK);
	return;
}

// Aktives auslesen aller Datenpunkte
function _ISM8_RELOAD_ALL_DATA()
{
	global $SERVERSOCKET;
	$HEX = pack("H*" ,"0620F080001604000000F0D0");
	SSCK_SendText($SERVERSOCKET,$HEX);
	return;
}

// Sobald man diese Funktion aufruft mit den Heizungstelegram als wert, wird das ganze als array aufgelöst. 
//            [DATAPOINT_ID] 		= 	Integer, der Wert kann dann in den Datenpunkten-Include gesucht werden
//            [DATAPOINT_NAME] 		= 	Name des Datenpunkte
//            [DATAPOINT_TYPE] 		= 	Datenpunkttyp
//			  [DATAPOINT_TYPE_VALUE]=	Wert des Datenpunkttypes 
//            [DATAPOINT_VALUE]		=	Wert des Datenpunktes 
//			  [DATAPOINT_OUT]		=	wenn Ausgabe = Out dann gibt es einen Ausgabewert
//		      [DATAPOINT_IN]		= 	wenn Ausgabe = In dann nimmt dieser Datenpunkt auch Daten an.
//		      [DATAPOINT_UNIT]		=	wenn eine Ausgabe erfolgt, dann ist das die Einheit bspw % oder °C	
//			  [DATAPOINT_IPS_TYPE ] = 0 =bool, 1 = integer , 2=Float, 3 = String

function _ISM8_READ_TELEGRAM($HEX)
{
		GLOBAL $DP;
		
		$FRAMESIZE	=	"$HEX[4] $HEX[5]";
		$MAINSERVICE	=	"$HEX[10]";
		$SUBSERVICE	=	"$HEX[11]";
		$NUMBER_OF_DP	=	hexdec("$HEX[14]$HEX[15]");
		
		$DATAPOINT_POS	=	"0";
		$DATAPOINT_VALUE	=	"" ;

	if ($MAINSERVICE == "F0" and $SUBSERVICE == "06"){	
	
		for( $i=1; $i <= $NUMBER_OF_DP; $i++ ){
				
				$DATAPOINT_VALUE		=	"0";				
				$DATAPOINT_ID			=	$HEX["$DATAPOINT_POS" + 16].$HEX["$DATAPOINT_POS" + 17];
				$DATAPOINT_CMD			=	$HEX["$DATAPOINT_POS" + 18];
				$DATAPOINT_LENGTH		=	$HEX["$DATAPOINT_POS" + 19];
							
				$DATAPOINT_ID_VAL		=	hexdec("$DATAPOINT_ID");				
				$DATAPOINT_CMD_VAL		=	hexdec("$DATAPOINT_CMD");
				$DATAPOINT_LENGTH_VAL	=	hexdec("$DATAPOINT_LENGTH");
				
				for( $n=0; $n <= $DATAPOINT_LENGTH_VAL -1; $n++ ){
						$DATAPOINT_VALUE	.=	$HEX["$DATAPOINT_POS" + 20 + $n];
					}
					
				$DATAPOINT_VALUE_VAL	=	hexdec("$DATAPOINT_VALUE");
				$DATAPOINT_TYPE			=	$DP[$DATAPOINT_ID_VAL][3];	
				$DATAPOINT_NAME			=	$DP[$DATAPOINT_ID_VAL][2];
				$DATAPOINT_OUT			=	$DP[$DATAPOINT_ID_VAL][4];
				$DATAPOINT_IN			=	$DP[$DATAPOINT_ID_VAL][5];
				$DATAPOINT_UNIT			=	$DP[$DATAPOINT_ID_VAL][6];
				$DATAPOINT_TYPE_VALUE 	= 	"";
				$DATAPOINT_IPS_TYPE			= "";
								
				switch($DATAPOINT_TYPE)
				{
					case "DPT_Switch":
						if ($DATAPOINT_VALUE_VAL == 0 ){ $DATAPOINT_TYPE_VALUE = "off";}elseif($DATAPOINT_VALUE_VAL == 1){ $DATAPOINT_TYPE_VALUE = "on";}
						$DATAPOINT_IPS_TYPE = 0;
					break;
					case "DPT_Bool":
						if ($DATAPOINT_VALUE_VAL == 0 ){ $DATAPOINT_TYPE_VALUE = "false";}elseif($DATAPOINT_VALUE_VAL == 1){ $DATAPOINT_TYPE_VALUE = "true";}
						$DATAPOINT_IPS_TYPE = 0;
					break;
					case "DPT_Enable":
						if ($DATAPOINT_VALUE_VAL == 0 ){ $DATAPOINT_TYPE_VALUE = "disable";}elseif($DATAPOINT_VALUE_VAL == 1){ $DATAPOINT_TYPE_VALUE = "enable";}
						$DATAPOINT_IPS_TYPE = 0;
					break;
					case "DPT_OpenClose":
						if ($DATAPOINT_VALUE_VAL == 0 ){ $DATAPOINT_TYPE_VALUE = "open";}elseif($DATAPOINT_VALUE_VAL == 1){ $DATAPOINT_TYPE_VALUE = "close";}
						$DATAPOINT_IPS_TYPE = 0;
					break;
					case "DPT_Scaling":
						$DATAPOINT_TYPE_VALUE = _ISM8_PDT_SCALING($DATAPOINT_VALUE_VAL);
						$DATAPOINT_IPS_TYPE = 2;
					break;
					case "DPT_Value_Temp":
						$DATAPOINT_TYPE_VALUE = _ISM8_PDT_KNX_FLOAT($DATAPOINT_VALUE_VAL);
						$DATAPOINT_IPS_TYPE = 2;
					break;
					case "DPT_Value_Tempd":
						$DATAPOINT_TYPE_VALUE = _ISM8_PDT_KNX_FLOAT($DATAPOINT_VALUE_VAL);
						$DATAPOINT_IPS_TYPE = 2;
					break;
					case "DPT_Value_Pres":
						$DATAPOINT_TYPE_VALUE = _ISM8_PDT_KNX_FLOAT($DATAPOINT_VALUE_VAL);
						$DATAPOINT_IPS_TYPE = 2;
					break;
					case "DPT_Power":
						$DATAPOINT_TYPE_VALUE = _ISM8_PDT_KNX_FLOAT($DATAPOINT_VALUE_VAL);
						$DATAPOINT_IPS_TYPE = 2;
					break;
					case "DPT_TimeOfDay":
					$DATAPOINT_IPS_TYPE = 3;
						//
					break;
					case "DPT_Date":
					$DATAPOINT_IPS_TYPE = 3;
						//
					break;
					case "DPT_FlowRate_m3/h":
						$DATAPOINT_IPS_TYPE = 2;
						//
					break;
					case "DPT_HVACMode":
						switch($DATAPOINT_VALUE_VAL)
						{
							case "0":
											$DATAPOINT_TYPE_VALUE = 0; //"Auto"
							break;
							case "1":
											$DATAPOINT_TYPE_VALUE = 1; //"Comfort"
							break;
							case "2":
											$DATAPOINT_TYPE_VALUE = 2; //"Standby"
							break;
							case "3":
											$DATAPOINT_TYPE_VALUE = 3; //"Economy"
							break;
							case "4":
											$DATAPOINT_TYPE_VALUE = 4; //"Building Protection"
							break;
						}
						$DATAPOINT_IPS_TYPE = 1;
					break;
					case "DPT_DHWMode":
							switch($DATAPOINT_VALUE_VAL)
							{
								case "0":
												$DATAPOINT_TYPE_VALUE = 0; //"Auto"
								break;
								case "1":
												$DATAPOINT_TYPE_VALUE = 1; //"LegioProtect"
								break;
								case "2":
												$DATAPOINT_TYPE_VALUE = 2; //"Normal"
								break;
								case "3":
												$DATAPOINT_TYPE_VALUE = 3; //"Reduced"
								break;
								case "4":
												$DATAPOINT_TYPE_VALUE = 4; //"Off/FrostProtect"
								break;
						}
						$DATAPOINT_IPS_TYPE = 1;
					break;
					case "DPT_HVACContrMode":
							switch($DATAPOINT_VALUE_VAL)
							{
								case "0":
												$DATAPOINT_TYPE_VALUE = 0; //"Auto"
								break;
								case "1":
												$DATAPOINT_TYPE_VALUE = 1; //"Heat"
								break;
								case "2":
												$DATAPOINT_TYPE_VALUE = 2; //"Morning Warmup"
								break;
								case "3":
												$DATAPOINT_TYPE_VALUE = 3; //"Cool"
								break;
								case "4":
												$DATAPOINT_TYPE_VALUE = 4; //"Night Purge"
								break;
								case "5":
												$DATAPOINT_TYPE_VALUE = 5; // "Precool"
								break;
								case "6":
												$DATAPOINT_TYPE_VALUE = 6; // "Off"
								break;
								case "7":
												$DATAPOINT_TYPE_VALUE = 7; // "Test"
								break;
								case "8":
												$DATAPOINT_TYPE_VALUE = 8; // "Emergency Heat"
								break;
								case "9":
												$DATAPOINT_TYPE_VALUE = 9; // "Fan Only"
								break;
								case "10":
												$DATAPOINT_TYPE_VALUE = 10; // "Free Cool"
								break;
								case "11":
												$DATAPOINT_TYPE_VALUE = 11; // "Ice"
								break;
								case "12":
												$DATAPOINT_TYPE_VALUE = 12; // "Maximum Heating Mode"
								break;
								case "13":
												$DATAPOINT_TYPE_VALUE = 13; //"Economic Heat/Cool Mode"
								break;
								case "14":
												$DATAPOINT_TYPE_VALUE = 14; //"Dehumidifiation"
								break;
								case "15":
												$DATAPOINT_TYPE_VALUE = 15; // "Calibration Mode"
								break;
								case "16":
												$DATAPOINT_TYPE_VALUE = 16; //"Emergency Cool Mode"
								break;
								case "17":
												$DATAPOINT_TYPE_VALUE = 17; //"Emergency Steam Mode"
								break;
								case "20":
												$DATAPOINT_TYPE_VALUE = 20; //"NoDem"
								break;	
						}
						$DATAPOINT_IPS_TYPE = 1;
					break;
					case "DPT_ActiveEnergy":
						$DATAPOINT_IPS_TYPE = 2;
						//
					break;
					case "DPT_ActiveEnergy_kWh":
						$DATAPOINT_IPS_TYPE = 2;
						//
					break;
					case "DPT_Value_Volume_Flow":
						$DATAPOINT_TYPE_VALUE = _ISM8_PDT_KNX_FLOAT($DATAPOINT_VALUE_VAL);
						$DATAPOINT_IPS_TYPE = 2;
					break;						
											
				}
				// Die Datapoint Länge setzt sich zusammen aus Datapoint ID (2) Datapoint Kommado (1) und Länge (1)
				$DATAPOINT_POS += 4 + "$DATAPOINT_LENGTH_VAL";
				
				// Schreibe Array für die Ausgabe								
				$ReturnArray[] = array(
					"DATAPOINT_ID"				=>		"$DATAPOINT_ID_VAL",
					"DATAPOINT_NAME"		=>		"$DATAPOINT_NAME",
					"DATAPOINT_TYPE"		=>		"$DATAPOINT_TYPE",
					"DATAPOINT_TYPE_VALUE"	=>		"$DATAPOINT_TYPE_VALUE",
					"DATAPOINT_VALUE"		=>		"$DATAPOINT_VALUE_VAL",		
					"DATAPOINT_OUT"			=>		"$DATAPOINT_OUT",
					"DATAPOINT_IN"			=>		"$DATAPOINT_IN",
					"DATAPOINT_UNIT"		=>		"$DATAPOINT_UNIT",
					"DATAPOINT_IPS_TYPE"		=>		"$DATAPOINT_IPS_TYPE"							
				);	
		}
		return $ReturnArray;	
	}
}

function _ISM8_CREATE_VARIABLE_PROFILE($DATAPOINT_TYPE)
{
				switch($DATAPOINT_TYPE)
				{
					case "DPT_Switch": // Bool (0)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 0);
						IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 1, "on", "", 0x00FF00);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 0, "off", "", 0xFF0000);
					break;
					case "DPT_Bool": // Bool (0)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 0);
						IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 1, "true", "", 0x00FF00);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 0, "false", "", 0xFF0000);
					break;
					case "DPT_Enable": // Bool (0)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 0);
						IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 1, "enable", "", 0x00FF00);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 0, "disable", "", 0xFF0000);
					break;
					case "DPT_OpenClose": // Bool (0)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 0);
						IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 1, "close", "", 0x00FF00);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 0, "open", "", 0xFF0000);
					break;
					case "DPT_Scaling": // Float (2)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 2);
            			IPS_SetVariableProfileText("_ISM8_$DATAPOINT_TYPE", "", "%");
						IPS_SetVariableProfileValues("_ISM8_$DATAPOINT_TYPE", "", "", "1");
					break;
					case "DPT_Value_Temp": // Float (2)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 2);
            			IPS_SetVariableProfileText("_ISM8_$DATAPOINT_TYPE", "", "°C");
					break;
					case "DPT_Value_Tempd": // Float (2)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 2);
            			IPS_SetVariableProfileText("_ISM8_$DATAPOINT_TYPE", "", "K");
					break;
					case "DPT_Value_Pres": // Float (2)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 2);
            			IPS_SetVariableProfileText("_ISM8_$DATAPOINT_TYPE", "", "Pa");
					break;
					case "DPT_Power": // Float (2)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 2);
            			IPS_SetVariableProfileText("_ISM8_$DATAPOINT_TYPE", "", "kW");
					break;
					case "DPT_TimeOfDay": // String (3)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 3);
					break;
					case "DPT_Date": // String (3)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 3);
					break;
					case "DPT_FlowRate_m3/h": // Float (2) 
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 2);
            			IPS_SetVariableProfileText("_ISM8_$DATAPOINT_TYPE", "", "m3/h");
						//
					break;
					case "DPT_HVACMode": // Integer (1)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 1);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 0, "Auto", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 1, "Comfort", "", 0xFFFFFF);
						IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 2, "Standby", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 3, "Economy", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 4, "Building Protection", "", 0xFFFFFF);
					break;
					case "DPT_DHWMode": // Integer (1)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 1);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 0, "Auto", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 1, "LegioProtect", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 2, "Normal", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 3, "Reduced", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 4, "Off/Frost/Protect", "", 0xFFFFFF);						
					break;
					case "DPT_HVACContrMode": // Integer (1)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 1);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 0, "Auto", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 1, "Heat", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 2, "Morning Warmup", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 3, "Cool", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 4, "Night Purge", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 5, "Precool", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 6, "Off", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 7, "Test", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 8, "Emergency Heat", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 9, "Fan Only", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 10, "Free Cool", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 11, "Ice", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 12, "Maximum Heating Mode", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 13, "Economic Heat/Cool Mode", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 14, "Dehumidifiation", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 15, "Calibration Mode", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 16, "Emergency Cool Mode", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 17, "Emergency Steam Mode", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_$DATAPOINT_TYPE", 20, "NoDem", "", 0xFFFFFF);
 					break;
					case "DPT_ActiveEnergy": // Float (2)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 2);
            			IPS_SetVariableProfileText("_ISM8_$DATAPOINT_TYPE", "", "Wh");
					break;
					case "DPT_ActiveEnergy_kWh": // Float (2)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 2);
            			IPS_SetVariableProfileText("_ISM8_$DATAPOINT_TYPE", "", "kWh");
					break;
					case "DPT_Value_Volume_Flow": // Float (2)
						IPS_CreateVariableProfile("_ISM8_$DATAPOINT_TYPE", 2);
            			IPS_SetVariableProfileText("_ISM8_$DATAPOINT_TYPE", "", "l/h");
					break;																	
				}
} 

function _ISM8_CREATE_VARIABLE_INPUT_PROFILE($DATAPOINT_TYPE, $DATAPOINT_ID)
{
				switch($DATAPOINT_TYPE)
				{
					case "DPT_Switch": // Bool (0)
						// Profile für INPUT-ID 59-64/72-77/85-90/98-103/150-153/158/193/194/
						IPS_CreateVariableProfile("_ISM8_IN_$DATAPOINT_TYPE", 0);
						IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 1, "on", "", 0x00FF00);
            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 0, "off", "", 0xFF0000);
					break;
					case "DPT_Scaling": // Float (2)
						// Profile für INPUT-ID 198/201/204/207/209
						IPS_CreateVariableProfile("_ISM8_IN_$DATAPOINT_TYPE", 2);
            			IPS_SetVariableProfileText("_ISM8_IN_$DATAPOINT_TYPE", "", "%");
						IPS_SetVariableProfileValues("_ISM8_IN_$DATAPOINT_TYPE", "", "", "1");
					break;
					case "DPT_Value_Temp": // Float (2)
						// Profile für INPUT-ID 56/69/82/95/199/202205/208/210
						IPS_CreateVariableProfile("_ISM8_IN_$DATAPOINT_TYPE", 2);
            			IPS_SetVariableProfileText("_ISM8_IN_$DATAPOINT_TYPE", "", "°C");
						IPS_SetVariableProfileValues("_ISM8_IN_$DATAPOINT_TYPE", "20", "80", "1");						
					break;
					case "DPT_Value_Tempd": // Float (2)
						// Profile für Input-ID 65/78/91/104
						if ($DATAPOINT_ID == 65 || $DATAPOINT_ID == 78 || $DATAPOINT_ID == 91 || $DATAPOINT_ID == 106)
						{ 
							IPS_CreateVariableProfile("_ISM8_IN_$DATAPOINT_TYPE", 2);
	            			IPS_SetVariableProfileText("_ISM8_IN_$DATAPOINT_TYPE", "", "K");
							IPS_SetVariableProfileValues("_ISM8_IN_$DATAPOINT_TYPE", "-4", "4", "0.5");
						}
						// Profile für Input-ID 66/79/92/105
						if ($DATAPOINT_ID == 66 || $DATAPOINT_ID == 79 || $DATAPOINT_ID == 92 || $DATAPOINT_ID == 105)
						{ 
							IPS_CreateVariableProfile("_ISM8_IN2_$DATAPOINT_TYPE", 2);
	            			IPS_SetVariableProfileText("_ISM8_IN2_$DATAPOINT_TYPE", "", "K");
							IPS_SetVariableProfileValues("_ISM8_IN2_$DATAPOINT_TYPE", "0", "10", "0.5");
						}
					break;
					case "DPT_HVACMode": // Integer (1)
						// Profil für INPUT-ID 149
						if ($DATAPOINT_ID == 149)
						{ 
							IPS_CreateVariableProfile("_ISM8_IN_$DATAPOINT_TYPE", 1);
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 0, "Automatikbetrieb", "", 0xFFFFFF);
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 1, "Nennlüftung", "", 0xFFFFFF);
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 3, "Economy", "", 0xFFFFFF);
						}
						// Profil für INPUT-ID 57/70/83/96
						if ($DATAPOINT_ID == 57 || $DATAPOINT_ID == 70 || $DATAPOINT_ID == 83 || $DATAPOINT_ID == 96)
						{ 
							IPS_CreateVariableProfile("_ISM8_IN2_$DATAPOINT_TYPE", 1);
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 0, "Automatikbetrieb", "", 0xFFFFFF);
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 1, "Heizbetrieb", "", 0xFFFFFF);
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 2, "Standby", "", 0xFFFFFF);
							IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 3, "Sparbetrieb", "", 0xFFFFFF);						
						}
					break;
					case "DPT_DHWMode": // Integer (1)
						// Profile für INPUT-ID 58/71/84/97
						IPS_CreateVariableProfile("_ISM8_IN_$DATAPOINT_TYPE", 1);
            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 0, "Automatikbetrieb", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 2, "Dauerbetrieb", "", 0xFFFFFF);
            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 4, "Standby", "", 0xFFFFFF);
					break;
					case "DPT_HVACContrMode": // Integer (1)
						// Profile für INPUT-ID 2/15/28/41/    ACHTUNG!!!! hinter dem Befehl steht der Wert der an die Anlage gesendet werden MUSS!!
						if ($DATAPOINT_ID == 2 || $DATAPOINT_ID == 15 || $DATAPOINT_ID == 28 || $DATAPOINT_ID == 41)
						{ 
							IPS_CreateVariableProfile("_ISM8_IN_$DATAPOINT_TYPE", 1);
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 0, "Test", "", 0xFFFFFF); // 7
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 1, "Start", "", 0xFFFFFF); // 1
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 2, "Frost Heizkreis", "", 0xFFFFFF); // 11
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 3, "Frost Warmwasser", "", 0xFFFFFF); // 11
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 4, "Schornsteinfeger", "", 0xFFFFFF); // 0
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 5, "Kombibetrieb", "", 0xFFFFFF); // 1
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 6, "Parallelbetrieb", "", 0xFFFFFF); // 1
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 7, "Warmwasserbetrieb", "", 0xFFFFFF); // 1
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 8, "Warmwassernachlauf", "", 0xFFFFFF); // 1
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 9, "Mindest-Kombizeit", "", 0xFFFFFF); // 1
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 10, "Heizbetrieb", "", 0xFFFFFF); // 1
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 11, "Nachlauf Heizkreispumpe", "", 0xFFFFFF); // 1
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 12, "Frostschutz", "", 0xFFFFFF); // 11
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 13, "Standby", "", 0xFFFFFF); // 6
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 14, "Kaskadenbetrieb", "", 0xFFFFFF); // 1
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 15, "GLT-Betrieb", "", 0xFFFFFF); // 7
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 16, "Kalibration", "", 0xFFFFFF); // 15
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 17, "Kalibration Heizbetrieb", "", 0xFFFFFF); // 15
	            			IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 18, "Kalibration Warmwasserbetrieb", "", 0xFFFFFF); // 15
							IPS_SetVariableProfileAssociation("_ISM8_IN_$DATAPOINT_TYPE", 19, "Kalibration Kombibetrieb", "", 0xFFFFFF); // 15
						}
						// Profile für INPUT-ID 178     ACHTUNG!!!! hinter dem Befehl steht der Wert der an die Anlage gesendet werden MUSS!!
						if ($DATAPOINT_ID == 178)
						{ 
							IPS_CreateVariableProfile("_ISM8_IN2_$DATAPOINT_TYPE", 1);
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 0, "ODU Test", "", 0xFFFFFF); // 7
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 1, "Test", "", 0xFFFFFF); // 7
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 2, "Frostschutz HK", "", 0xFFFFFF); // 11
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 3, "Frostschutz Warmwasser", "", 0xFFFFFF); // 11
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 4, "Durchfluss gering", "", 0xFFFFFF); // 1
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 5, "Vorwärmung", "", 0xFFFFFF); // 2
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 6, "Abtaubetrieb", "", 0xFFFFFF); // 11
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 7, "Antilegionellenfunktion", "", 0xFFFFFF); // 0
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 8, "Warmwasserbetrieb", "", 0xFFFFFF); // 1
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 9, "WW-Nachlauf", "", 0xFFFFFF); // 1
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 10, "Heizbetrieb", "", 0xFFFFFF); // 1
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 11, "HZ-Nachlauf", "", 0xFFFFFF); // 1
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 12, "Aktive Kühlung", "", 0xFFFFFF); // 3
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 13, "Kaskade", "", 0xFFFFFF); // 1
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 14, "GLT", "", 0xFFFFFF); // 7
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 15, "Standby", "", 0xFFFFFF); // 6
	            			IPS_SetVariableProfileAssociation("_ISM8_IN2_$DATAPOINT_TYPE", 16, "Pump down", "", 0xFFFFFF); // 3
						}
 					break;
					case "DPT_TimeOfDay": // String (3)
						// Profile für INPUT-ID 156/157/161/162
						IPS_CreateVariableProfile("_ISM8_IN_$DATAPOINT_TYPE", 3);
					break;
					case "DPT_Date": // String (3)
						// Profile für INPUT-ID 154/155/159/160
						IPS_CreateVariableProfile("_ISM8_IN_$DATAPOINT_TYPE", 3);
					break;

				}
}

function _ISM8_PDT_SCALING($HEX)
{
	return round(($HEX & 0xff) * 100 / 255, 3);
}

function _ISM8_PDT_KNX_FLOAT($HEX, $RES=0.01)
{
	$sign = ($HEX & 0x8000) >> 15; //0x8000 = 1000 0000 0000 0000 dieses Bit ist das Vorzeichen (-)
	$exponent = ($HEX & 0x7800) >> 11; // 0x7800 = ‭0111 1000 0000 0000‬ diese bits sind für den exponeten. 
	$mantisse = $HEX & 0x07ff; // 0x07ff = ‭0000 0111 1111 1111 diese Bits stellen die Range dar‬
	if ($sign != 0) { 
		$mantisse = -(~($mantisse - 1) & 0x07ff);
		}
	$value = (1 << $exponent) * $RES * $mantisse;
	return $value;
}

function _ISM8_PDT_LONG($HEX)
{
   return ($HEX > 2147483647 and $HEX - 2147483648 or $HEX);
}

function _ISM8_PDT_TIME($HEX)
{
   $b1 = ($HEX & 0xff0000) >> 16;
   $b2 = ($HEX & 0x00ff00) >> 8;
   $b3 = ($HEX & 0x0000ff);
   $weekday = ($b1  & 0xe0) >> 5;
   //@weekdays = ["","Mo","Di","Mi","Do","Fr","Sa","So"];
   $hour = $b1 & 0x1f;
   $min = $b2 & 0x3f;
   $sec = $b3 & 0x3f;
   $value = sprintf("%s %d:%d:%d", $weekday, $hour, $min, $sec);
   return $value;
}

function _ISM8_PDT_DATE($HEX)
{
	$b1 = ($HEX & 0xff0000) >> 16;
	$b2 = ($HEX & 0x00ff00) >> 8;
	$b3 = ($HEX & 0x0000ff);
	$day = $b1 & 0x1f;
	$mon = $b2 & 0xf;
	$year = $b3 & 0x7f;

	if ($year < 90) { 
   		$year += 2000; }
		
	else { 
			$year += 1900; 
	}
   $value = sprintf("%02d.%02d.%04d", $day, $mon, $year);
   return $value;
}

function _ISM8_CREATE_VARIABLE($ID, $IDENT, $DPNAME, $TYPE, $SORTID=0, $PROFILE)
{
     $VARID = @IPS_GetObjectIDByIdent($IDENT, $ID);
	 
	 if($VARID === false)
     {
	     $VARID = IPS_CreateVariable($TYPE);
         IPS_SetParent($VARID, $ID);
         IPS_SetName($VARID, $DPNAME);
         IPS_SetIdent($VARID, $IDENT);
 		 IPS_SetPosition($VARID, $SORTID);
		 IPS_SetVariableCustomProfile($VARID, "_ISM8_$PROFILE");
     }
     return $VARID;
}  

function _ISM8_REVERSEBIT($BIT)
{
	return strtr($BIT,[1,0]);
}

function _ISM8_DECBIN($DEC, $MAXBIT=16)
{
	return str_pad(decbin($DEC), $MAXBIT, "0", STR_PAD_LEFT);
}

function _ISM8_PDT_KNX_FLOAT_DEC($DEC, $RES=0.01)
{
	$val = $DEC / $RES;
	$exp = 0;

	while (!($val <= 2047 && $val >= -2048 ))
	{
	    $val = $val / 2;
		$exp++;
	}
	// wenn DEC negativ, dann bilde das zweier-Komplement
	if ($DEC < 0)
	{ 
		$bin = _ISM8_DECBIN(-1 * $val, 11);
		$bin = _ISM8_REVERSEBIT($bin);
		$bin = decbin(bindec($bin) + 1);
		$sign = 1;
	}
	else
	{ 
		$bin = _ISM8_DECBIN($val, 11);
		$sign = 0; 
	}
	$expbin = _ISM8_DECBIN($exp, 4);
	$ret = dechex(bindec($sign.$expbin.$bin));
	return $ret;
}

// Wandelt die mit IPS_GetVariableProfile ermittelte Daten in Namen um, wird in _ISM8_HELP_DATAPOINT

function _ISM8_IPS_GETVARIABLEPROFILENAME($TYPE){

	switch($TYPE){
		case "0":
				$STATUS="Boolean";
		break;
		case "1":
				$STATUS="Integer";
		break;
		case "2":
				$STATUS="Float";
		break;
		case "3":
				$STATUS="String";
		break;
	}
	return $STATUS;
} 

// ruft man die Funktion ohne Wert auf, gibt sie eine Liste mit Datenpunkte aus die Inputs akzeptieren
// ruft man die Funktion dann mit dem Wert des Datenpunktes auf, so gibt es weitere Informationen aus.
function _ISM8_HELP_DATAPOINT($DPID="help"){
	global $DP;
	
			
	if ("$DPID" == "help") {
			
		echo "Hilfe: Folgende Datenpunkte nehmen Datem entgegen\n\n";
		foreach ($DP as $ID){
			if ($ID[5] === "In") { 
				echo "".$ID[0]." \t ".$ID[1]." \t ".$ID[2]." \t".$ID[3]."\n"; 
				} 
			}
		}
	else {
			$ID = $DP[$DPID];

			if ($ID[5] === "In") { 
				$CREATED_PROFILE_NAME = "_ISM8_$ID[3]";
				$IPS_PROFILE = IPS_GetVariableProfile($CREATED_PROFILE_NAME);
				$IPS_PROFILENAME = _ISM8_IPS_GETVARIABLEPROFILENAME($IPS_PROFILE['ProfileType']);
				echo "Datenpunkt: ".$ID[0]."\nGerät: ".$ID[1]."\nDatenpunkt: ".$ID[2]."\nIPS Profilname:".$CREATED_PROFILE_NAME."\n";
				
				echo "Schrittweite min.: ".$IPS_PROFILE['MinValue']."\n";
				echo "Schrittweite max.: ".$IPS_PROFILE['MaxValue']."\n";
				echo "Schrittweite: ".$IPS_PROFILE['StepSize']."\n";
				echo "Anzahl Stellen: ".$IPS_PROFILE['Digits']."\n";
				echo "Prefix: ".$IPS_PROFILE['Prefix']."\n";
				echo "Suffix: ".$IPS_PROFILE['Suffix']."\n";
				
				echo "Profiltyp: $IPS_PROFILENAME\n";
				
				foreach ($IPS_PROFILE['Associations'] AS $id => $Name){
					echo "\tWert: $Name[Value] $Name[Name]\n";
				}
				
			} 
		else { echo "Dieser Datenpunkt nimmt keine Inputs an"; }
		}
	
	}

die _ISM8_DATAPOINTS sieht so aus

<?php

if ($_IPS['SENDER'] == "RunScript"){
IPS_SetIdent($_IPS['SELF'],,"_ISM8_DATAPOINTS");
}

$DP = array(
						array("0","Gerät","Datenpunkt","Datenpunkttyp","Out","In","Einheit"),
						array("1","Heizgerät 1","Störung","DPT_Switch","Out","-","-"),
						array("2","Heizgerät 1","Betriebsart","DPT_HVACContrMode","Out","-","-"),
						array("3","Heizgerät 1","Modulationsgrad / Brennerleistung","DPT_Scaling","Out","-","%"),
						array("4","Heizgerät 1","Kesseltemperatur","DPT_Value_Temp","Out","-","°C"),
						array("5","Heizgerät 1","Sammlertemperatur","DPT_Value_Temp","Out","-","°C"),
						array("6","Heizgerät 1","Rücklauftemperatur","DPT_Value_Temp","Out","-","°C"),
						array("7","Heizgerät 1","Warmwassertemperatur","DPT_Value_Temp","Out","-","°C"),
						array("8","Heizgerät 1","Außentemperatur","DPT_Value_Temp","Out","-","°C"),
						array("9","Heizgerät 1","Status Brenner / Flamme","DPT_Switch","Out","-","-"),
						array("10","Heizgerät 1","Status Heizkreispumpe","DPT_Switch","Out","-","-"),
						array("11","Heizgerät 1","Status Speicherladepumpe","DPT_Switch","Out","-","-"),
						array("12","Heizgerät 1","Status 3-Wege-Umschaltventil","DPT_OpenClose","Out","-","-"),
						array("13","Heizgerät 1","Anlagendruck","DPT_Value_Pres","Out","-","Pa"),
						array("14","Heizgerät 2","Störung","DPT_Switch","Out","-","-"),
						array("15","Heizgerät 2","Betriebsart","DPT_HVACContrMode","Out","-","-"),
						array("16","Heizgerät 2","Modulationsgrad / Brennerleistung","DPT_Scaling","Out","-","%"),
						array("17","Heizgerät 2","Kesseltemperatur","DPT_Value_Temp","Out","-","°C"),
						array("18","Heizgerät 2","Sammlertemperatur","DPT_Value_Temp","Out","-","°C"),
						array("19","Heizgerät 2","Rücklauftemperatur","DPT_Value_Temp","Out","-","°C"),
						array("20","Heizgerät 2","Warmwassertemperatur","DPT_Value_Temp","Out","-","°C"),
						array("21","Heizgerät 2","Außentemperatur","DPT_Value_Temp","Out","-","°C"),
						array("22","Heizgerät 2","Status Brenner / Flamme","DPT_Switch","Out","-","-"),
						array("23","Heizgerät 2","Status Heizkreispumpe","DPT_Switch","Out","-","-"),
						array("24","Heizgerät 2","Status Speicherladepumpe","DPT_Switch","Out","-","-"),
						array("25","Heizgerät 2","Status 3-Wege-Umschaltventil","DPT_OpenClose","Out","-","-"),
						array("26","Heizgerät 2","Anlagendruck","DPT_Value_Pres","Out","-","Pa"),
						array("27","Heizgerät 3","Störung","DPT_Switch","Out","-","-"),
						array("28","Heizgerät 3","Betriebsart","DPT_HVACContrMode","Out","-","-"),
						array("29","Heizgerät 3","Modulationsgrad / Brennerleistung","DPT_Scaling","Out","-","%"),
						array("30","Heizgerät 3","Kesseltemperatur","DPT_Value_Temp","Out","-","°C"),
						array("31","Heizgerät 3","Sammlertemperatur","DPT_Value_Temp","Out","-","°C"),
						array("32","Heizgerät 3","Rücklauftemperatur","DPT_Value_Temp","Out","-","°C"),
						array("33","Heizgerät 3","Warmwassertemperatur","DPT_Value_Temp","Out","-","°C"),
						array("34","Heizgerät 3","Außentemperatur","DPT_Value_Temp","Out","-","°C"),
						array("35","Heizgerät 3","Status Brenner / Flamme","DPT_Switch","Out","-","-"),
						array("36","Heizgerät 3","Status Heizkreispumpe","DPT_Switch","Out","-","-"),
						array("37","Heizgerät 3","Status Speicherladepumpe","DPT_Switch","Out","-","-"),
						array("38","Heizgerät 3","Status 3-Wege-Umschaltventil","DPT_OpenClose","Out","-","-"),
						array("39","Heizgerät 3","Anlagendruck","DPT_Value_Pres","Out","-","Pa"),
						array("40","Heizgerät 4","Störung","DPT_Switch","Out","-","-"),
						array("41","Heizgerät 4","Betriebsart","DPT_HVACContrMode","Out","-","-"),
						array("42","Heizgerät 4","Modulationsgrad / Brennerleistung","DPT_Scaling","Out","-","%"),
						array("43","Heizgerät 4","Kesseltemperatur","DPT_Value_Temp","Out","-","°C"),
						array("44","Heizgerät 4","Sammlertemperatur","DPT_Value_Temp","Out","-","°C"),
						array("45","Heizgerät 4","Rücklauftemperatur","DPT_Value_Temp","Out","-","°C"),
						array("46","Heizgerät 4","Warmwassertemperatur","DPT_Value_Temp","Out","-","°C"),
						array("47","Heizgerät 4","Außentemperatur","DPT_Value_Temp","Out","-","°C"),
						array("48","Heizgerät 4","Status Brenner / Flamme","DPT_Switch","Out","-","-"),
						array("49","Heizgerät 4","Status Heizkreispumpe","DPT_Switch","Out","-","-"),
						array("50","Heizgerät 4","Status Speicherladepumpe","DPT_Switch","Out","-","-"),
						array("51","Heizgerät 4","Status 3-Wege-Umschaltventil","DPT_OpenClose","Out","-","-"),
						array("52","Heizgerät 4","Anlagendruck","DPT_Value_Pres","Out","-","Pa"),
						array("53","BM-2 0","Störung","DPT_Switch","Out","-","-"),
						array("54","BM-2 0","Außentemperatur","DPT_Value_Temp","Out","-","°C"),
						array("55","BM-2 0","Raumtemperatur","DPT_Value_Temp","Out","-","°C"),
						array("56","BM-2 0","Warmwassersolltemperatur","DPT_Value_Temp","Out","In","°C"),
						array("57","BM-2 0","Programmwahl Heizkreis","DPT_HVACMode","Out","In","-"),
						array("58","BM-2 0","Programmwahl Warmwasser","DPT_DHWMode","Out","In","-"),
						array("59","BM-2 0","Heizkreis Zeitprogramm 1","DPT_Switch","Out","In","-"),
						array("60","BM-2 0","Heizkreis Zeitprogramm 2","DPT_Switch","Out","In","-"),
						array("61","BM-2 0","Heizkreis Zeitprogramm 3","DPT_Switch","Out","In","-"),
						array("62","BM-2 0","Warmwasser Zeitprogramm 1","DPT_Switch","Out","In","-"),
						array("63","BM-2 0","Warmwasser Zeitprogramm 2","DPT_Switch","Out","In","-"),
						array("64","BM-2 0","Warmwasser Zeitprogramm 3","DPT_Switch","Out","In","-"),
						array("65","BM-2 0","Sollwertkorrektur","DPT_Value_Tempd","Out","In","K"),
						array("66","BM-2 0","Sparfaktor","DPT_Value_Tempd","Out","In","K"),
						array("67","BM-2 1","Störung","DPT_Switch","Out","-","-"),
						array("68","BM-2 1","Raumtemperatur","DPT_Value_Temp","Out","-","°C"),
						array("69","BM-2 1","Warmwassersolltemperatur","DPT_Value_Temp","Out","In","°C"),
						array("70","BM-2 1","Programmwahl Mischer","DPT_HVACMode","Out","In","-"),
						array("71","BM-2 1","Programmwahl Warmwasser","DPT_DHWMode","Out","In","-"),
						array("72","BM-2 1","Mischer Zeitprogramm 1","DPT_Switch","Out","In","-"),
						array("73","BM-2 1","Mischer Zeitprogramm 2","DPT_Switch","Out","In","-"),
						array("74","BM-2 1","Mischer Zeitprogramm 3","DPT_Switch","Out","In","-"),
						array("75","BM-2 1","Warmwasser Zeitprogramm 1","DPT_Switch","Out","In","-"),
						array("76","BM-2 1","Warmwasser Zeitprogramm 2","DPT_Switch","Out","In","-"),
						array("77","BM-2 1","Warmwasser Zeitprogramm 3","DPT_Switch","Out","In","-"),
						array("78","BM-2 1","Sollwertkorrektur","DPT_Value_Tempd","Out","In","K"),
						array("79","BM-2 1","Sparfaktor","DPT_Value_Tempd","Out","In","K"),
						array("80","BM-2 2","Störung","DPT_Switch","Out","-","-"),
						array("81","BM-2 2","Raumtemperatur","DPT_Value_Temp","Out","-","°C"),
						array("82","BM-2 2","Warmwassersolltemperatur","DPT_Value_Temp","Out","In","°C"),
						array("83","BM-2 2","Programmwahl Mischer","DPT_HVACMode","Out","In","-"),
						array("84","BM-2 2","Programmwahl Warmwasser","DPT_DHWMode","Out","In","-"),
						array("85","BM-2 2","Mischer Zeitprogramm 1","DPT_Switch","Out","In","-"),
						array("86","BM-2 2","Mischer Zeitprogramm 2","DPT_Switch","Out","In","-"),
						array("87","BM-2 2","Mischer Zeitprogramm 3","DPT_Switch","Out","In","-"),
						array("88","BM-2 2","Warmwasser Zeitprogramm 1","DPT_Switch","Out","In","-"),
						array("89","BM-2 2","Warmwasser Zeitprogramm 2","DPT_Switch","Out","In","-"),
						array("90","BM-2 2","Warmwasser Zeitprogramm 3","DPT_Switch","Out","In","-"),
						array("91","BM-2 2","Sollwertkorrektur","DPT_Value_Tempd","Out","In","K"),
						array("92","BM-2 2","Sparfaktor","DPT_Value_Tempd","Out","In","K"),
						array("93","BM-2 3","Störung","DPT_Switch","Out","-","-"),
						array("94","BM-2 3","Raumtemperatur","DPT_Value_Temp","Out","-","°C"),
						array("95","BM-2 3","Warmwassersolltemperatur","DPT_Value_Temp","Out","In","°C"),
						array("96","BM-2 3","Programmwahl Mischer","DPT_HVACMode","Out","In","-"),
						array("97","BM-2 3","Programmwahl Warmwasser","DPT_DHWMode","Out","In","-"),
						array("98","BM-2 3","Mischer Zeitprogramm 1","DPT_Switch","Out","In","-"),
						array("99","BM-2 3","Mischer Zeitprogramm 2","DPT_Switch","Out","In","-"),
						array("100","BM-2 3","Mischer Zeitprogramm 3","DPT_Switch","Out","In","-"),
						array("101","BM-2 3","Warmwasser Zeitprogramm 1","DPT_Switch","Out","In","-"),
						array("102","BM-2 3","Warmwasser Zeitprogramm 2","DPT_Switch","Out","In","-"),
						array("103","BM-2 3","Warmwasser Zeitprogramm 3","DPT_Switch","Out","In","-"),
						array("104","BM-2 3","Sollwertkorrektur","DPT_Value_Tempd","Out","In","K"),
						array("105","BM-2 3","Sparfaktor","DPT_Value_Tempd","Out","In","K"),
						array("106","Kaskadenmodul","Störung","DPT_Switch","Out","-","-"),
						array("107","Kaskadenmodul","Sammlertemperatur","DPT_Value_Temp","Out","-","°C"),
						array("108","Kaskadenmodul","Gesamtmodulationsgrad","DPT_Scaling","Out","-","%"),
						array("109","Kaskadenmodul","Vorlauftemperatur Mischerkreis","DPT_Value_Temp","Out","-","°C"),
						array("110","Kaskadenmodul","Status Mischerkreispumpe","DPT_Switch","Out","-","-"),
						array("111","Kaskadenmodul","Status Ausgang A1","DPT_Enable","Out","-","-"),
						array("112","Kaskadenmodul","Eingang E1","DPT_Value_Temp","Out","-","°C"),
						array("113","Kaskadenmodul","Eingang E2","DPT_Value_Temp","Out","-","°C"),
						array("114","Mischermodul 1","Störung","DPT_Switch","Out","-","-"),
						array("115","Mischermodul 1","Warmwassertemperatur","DPT_Value_Temp","Out","-","°C"),
						array("116","Mischermodul 1","Vorlauftemperatur Mischerkreis","DPT_Value_Temp","Out","-","°C"),
						array("117","Mischermodul 1","Status Mischerkreispumpe","DPT_Switch","Out","-","-"),
						array("118","Mischermodul 1","Status Ausgang A1","DPT_Enable","Out","-","-"),
						array("119","Mischermodul 1","Eingang E1","DPT_Value_Temp","Out","-","°C"),
						array("120","Mischermodul 1","Eingang E2","DPT_Value_Temp","Out","-","°C"),
						array("121","Mischermodul 2","Störung","DPT_Switch","Out","-","-"),
						array("122","Mischermodul 2","Warmwassertemperatur","DPT_Value_Temp","Out","-","°C"),
						array("123","Mischermodul 2","Vorlauftemperatur Mischerkreis","DPT_Value_Temp","Out","-","°C"),
						array("124","Mischermodul 2","Status Mischerkreispumpe","DPT_Switch","Out","-","-"),
						array("125","Mischermodul 2","Status Ausgang A1","DPT_Enable","Out","-","-"),
						array("126","Mischermodul 2","Eingang E1","DPT_Value_Temp","Out","-","°C"),
						array("127","Mischermodul 2","Eingang E2","DPT_Value_Temp","Out","-","°C"),
						array("128","Mischermodul 3","Störung","DPT_Switch","Out","-","-"),
						array("129","Mischermodul 3","Warmwassertemperatur","DPT_Value_Temp","Out","-","°C"),
						array("130","Mischermodul 3","Vorlauftemperatur Mischerkreis","DPT_Value_Temp","Out","-","°C"),
						array("131","Mischermodul 3","Status Mischerkreispumpe","DPT_Switch","Out","-","-"),
						array("132","Mischermodul 3","Status Ausgang A1","DPT_Enable","Out","-","-"),
						array("133","Mischermodul 3","Eingang E1","DPT_Value_Temp","Out","-","°C"),
						array("134","Mischermodul 3","Eingang E2","DPT_Value_Temp","Out","-","°C"),
						array("135","Solarmodul","Störung","DPT_Switch","Out","-","-"),
						array("136","Solarmodul","Warmwassertemperatur Solar 1","DPT_Value_Temp","Out","-","°C"),
						array("137","Solarmodul","Temperatur Kollektor 1","DPT_Value_Temp","Out","-","°C"),
						array("138","Solarmodul","Eingang E1","DPT_Value_Temp","Out","-","°C"),
						array("139","Solarmodul","Eingang E2 (Durchfluss)","DPT_Value_Volume_Flow","Out","-","l/h"),
						array("140","Solarmodul","Eingang E3","DPT_Value_Temp","Out","-","°C"),
						array("141","Solarmodul","Status Solarkreispumpe SKP1","DPT_Switch","Out","-","-"),
						array("142","Solarmodul","Status Ausgang A1","DPT_Enable","Out","-","-"),
						array("143","Solarmodul","Status Ausgang A2","DPT_Enable","Out","-","-"),
						array("144","Solarmodul","Status Ausgang A3","DPT_Enable","Out","-","-"),
						array("145","Solarmodul","Status Ausgang A4","DPT_Enable","Out","-","-"),
						array("146","Solarmodul","Durchfluss","DPT_Value_Volume_Flow","Out","-","l/h"),
						array("147","Solarmodul","aktuelle Leistung","DPT_Power","Out","-","kW"),
						array("148","CWL Excellent","Störung","DPT_Switch","Out","-","-"),
						array("149","CWL Excellent","Programm","DPT_HVACMode","Out","In","-"),
						array("150","CWL Excellent","Zeitprogramm 1","DPT_Switch","Out","In","-"),
						array("151","CWL Excellent","Zeitprogramm 2","DPT_Switch","Out","In","-"),
						array("152","CWL Excellent","Zeitprogramm 3","DPT_Switch","Out","In","-"),
						array("153","CWL Excellent","Zeitweise Intensivlüftung AN/AUS","DPT_Switch","Out","In","-"),
						array("154","CWL Excellent","Zeitweise Intensivlüftung Startdatum","DPT_Date","Out","In","-"),
						array("155","CWL Excellent","Zeitweise Intensivlüftung Enddatum","DPT_Date","Out","In","-"),
						array("156","CWL Excellent","Zeitweise Intensivlüftung Startzeit","DPT_TimeOfDay","Out","In","-"),
						array("157","CWL Excellent","Zeitweise Intensivlüftung Endzeit","DPT_TimeOfDay","Out","In","-"),
						array("158","CWL Excellent","Zeitweiser Feuchteschutz AN/AUS","DPT_Switch","Out","In","-"),
						array("159","CWL Excellent","Zeitweiser Feuchteschutz Startdatum","DPT_Date","Out","In","-"),
						array("160","CWL Excellent","Zeitweiser Feuchteschutz Enddatum","DPT_Date","Out","In","-"),
						array("161","CWL Excellent","Zeitweiser Feuchteschutz Startzeit","DPT_TimeOfDay","Out","In","-"),
						array("162","CWL Excellent","Zeitweiser Feuchteschutz Endzeit","DPT_TimeOfDay","Out","In","-"),
						array("163","CWL Excellent","Lüftungsstufe","DPT_Scaling","Out","-","%"),
						array("164","CWL Excellent","Ablufttemperatur","DPT_Value_Temp","Out","-","°C"),
						array("165","CWL Excellent","Frischlufttemperatur","DPT_Value_Temp","Out","-","°C"),
						array("166","CWL Excellent","Luftdurchsatz Zuluft","DPT_FlowRate_m3/h","Out","-","m³/h"),
						array("167","CWL Excellent","Luftdurchsatz Abluft","DPT_FlowRate_m3/h","Out","-","m³/h"),
						array("168","CWL Excellent","Bypass Initialisierung","DPT_Bool","Out","-","-"),
						array("169","CWL Excellent","Bypass öffnet/offen","DPT_Bool","Out","-","-"),
						array("170","CWL Excellent","Bypass schließt/geschlossen","DPT_Bool","Out","-","-"),
						array("171","CWL Excellent","Bypass Fehler","DPT_Bool","Out","-","-"),
						array("172","CWL Excellent","Frost Status: Initialisierung/Warte","DPT_Bool","Out","-","-"),
						array("173","CWL Excellent","Frost Status: Kein Frost","DPT_Bool","Out","-","-"),
						array("174","CWL Excellent","Frost Status: Vorwärmer","DPT_Bool","Out","-","-"),
						array("175","CWL Excellent","Frost Status: Fehler/Unausgeglichen","DPT_Bool","Out","-","-"),
						array("176","Heizgerät 1 (BWL-1-S)","Störung","DPT_Switch","Out","-","-"),
						array("177","Heizgerät 1 (BWL-1-S)","Betriebsart","DPT_HVACContrMode","Out","-","-"),
						array("178","Heizgerät 1 (BWL-1-S)","Heizleistung","DPT_Power","Out","-","kW"),
						array("179","Heizgerät 1 (BWL-1-S)","Kühlleistung","DPT_Power","Out","-","kW"),
						array("180","Heizgerät 1 (BWL-1-S)","Kesseltemperatur","DPT_Value_Temp","Out","-","°C"),
						array("181","Heizgerät 1 (BWL-1-S)","Sammlertemperatur","DPT_Value_Temp","Out","-","°C"),
						array("182","Heizgerät 1 (BWL-1-S)","Rücklauftemperatur","DPT_Value_Temp","Out","-","°C"),
						array("183","Heizgerät 1 (BWL-1-S)","Warmwassertemperatur","DPT_Value_Temp","Out","-","°C"),
						array("184","Heizgerät 1 (BWL-1-S)","Außentemperatur","DPT_Value_Temp","Out","-","°C"),
						array("185","Heizgerät 1 (BWL-1-S)","Status Heizkreispumpe","DPT_Switch","Out","-","-"),
						array("186","Heizgerät 1 (BWL-1-S)","Status Zubringer-/Heizkreispumpe","DPT_Switch","Out","-","-"),
						array("187","Heizgerät 1 (BWL-1-S)","Status 3-Wege-Umschaltventil HZ/WW","DPT_OpenClose","Out","-","-"),
						array("188","Heizgerät 1 (BWL-1-S)","Status 3-Wege-Umschaltventil HZ/K","DPT_OpenClose","Out","-","-"),
						array("189","Heizgerät 1 (BWL-1-S)","Status E-Heizung","DPT_Switch","Out","-","-"),
						array("190","Heizgerät 1 (BWL-1-S)","Anlagendruck","DPT_Value_Pres","Out","-","Pa"),
						array("191","Heizgerät 1 (BWL-1-S)","Leistungsaufnahme","DPT_Power","Out","-","kW"),
						array("192","CWL Excellent","Filterwarnung aktiv","DPT_Switch","Out","-","-"),
						array("193","CWL Excellent","Filterwarnung zurücksetzen","DPT_Switch","Out","In","-"),
						array("194","BM-2 0","1x Warmwasserladung","DPT_Switch","Out","In","-"),
						array("195","Solarmodul","Tagesertrag","DPT_ActiveEnergy","Out","-","Wh"),
						array("196","Solarmodul","Gesamtertrag","DPT_ActiveEnergy_kWh","Out","-","kWh"),
						array("197","Heizgerät 1","Abgastemperatur","DPT_Value_Temp","Out","-","°C"),
						array("198","Heizgerät 1","Leistungsvorgabe","DPT_Scaling","Out","In","%"),
						array("199","Heizgerät 1","Kesselsolltemperaturvorgabe","DPT_Value_Temp","Out","In","°C"),
						array("200","Heizgerät 2","Abgastemperatur","DPT_Value_Temp","Out","-","°C"),
						array("201","Heizgerät 2","Leistungsvorgabe","DPT_Scaling","Out","In","%"),
						array("202","Heizgerät 2","Kesselsolltemperaturvorgabe","DPT_Value_Temp","Out","In","°C"),
						array("203","Heizgerät 3","Abgastemperatur","DPT_Value_Temp","Out","-","°C"),
						array("204","Heizgerät 3","Leistungsvorgabe","DPT_Scaling","Out","In","%"),
						array("205","Heizgerät 3","Kesselsolltemperaturvorgabe","DPT_Value_Temp","Out","In","°C"),
						array("206","Heizgerät 4","Abgastemperatur","DPT_Value_Temp","Out","-","°C"),
						array("207","Heizgerät 4","Leistungsvorgabe","DPT_Scaling","Out","In","%"),
						array("208","Heizgerät 4","Kesselsolltemperaturvorgabe","DPT_Value_Temp","Out","In","°C"),
						array("209","Kaskadenmodul","Gesamtmodulationsgradvorgabe","DPT_Scaling","Out","In","%"),
						array("210","Kaskadenmodul","Sammlersolltemperaturvorgabe","DPT_Value_Temp","Out","In","°C")			
);

das Eventreceiver Script so


<?php

$FUNCTION_INC	=	IPS_GetScriptIDByName("_ISM8_FUNCTIONS", IPS_GetParent($_IPS['SELF']));
include("$FUNCTION_INC.ips.php");

$DATAPOINT_INC	=	IPS_GetScriptIDByName("_ISM8_DATAPOINTS", IPS_GetParent($_IPS['SELF']));
include("$DATAPOINT_INC.ips.php");

if($_IPS['SENDER'] == "RegisterVariable")
{
	$HEX = _ISM8_READ_DATA_TO_ARRAY($_IPS['VALUE']);
	
// wenn 	Mainservice - Array 10 = F0 und Subservice - Array = 06, dann sende eine Antwort. Unterbleibt eine Antwort, sendet die ISM8 die Nachricht noch 5x.
	if ($HEX[10] == "F0" and $HEX[11] == "06"){
		_ISM8_SEND_ACK($HEX);
	}
	
	$TELEGRAM = _ISM8_READ_TELEGRAM($HEX);
	
	foreach($TELEGRAM as $DTP){
		
	$DTP_VALUE = $DTP['DATAPOINT_TYPE_VALUE'];
	
		if ($DTP['DATAPOINT_IPS_TYPE'] == 0 ){
			switch ($DTP['DATAPOINT_TYPE_VALUE'])
			{
				case "on";
				case  "enable" ;
				case "true" ; 
				case "close";
					$DTP_VALUE = true;
				break;
				case "off";
				case  "disable" ;
				case "false" ; 
				case "open";
					$DTP_VALUE = false;
				break;
			}
		}
	
		$DATAPOINT_TYPE = $DTP['DATAPOINT_TYPE'];
		if (! IPS_VariableProfileExists("_ISM8_$DATAPOINT_TYPE"))
		{ 
			//echo "Profil existiert nicht!";
			_ISM8_CREATE_VARIABLE_PROFILE($DATAPOINT_TYPE);
		}

		$IPS_IDENT = "DTP_".$DTP['DATAPOINT_ID'];
		$IPS_NAME = $DTP['DATAPOINT_ID']."_".$DTP['DATAPOINT_NAME'];
		SetValue(_ISM8_CREATE_VARIABLE($_IPS['SELF'], $IPS_IDENT, $IPS_NAME, $DTP['DATAPOINT_IPS_TYPE'], $DTP['DATAPOINT_ID'], $DTP['DATAPOINT_TYPE']), $DTP_VALUE);
			
	
	}
}

Die scripte _ISM8_DATAPOINTS und _ISM8_FUNCTIONS müssen einmal ausgeführt werden damit die Idents geschrieben werden.

Ein mögliches script (achtung, ungestestet) sieht so aus


<?php

include("$FUNCTION_INC.ips.php");

include("$DATAPOINT_INC.ips.php");

//Warmwasser 65,60,55,50
// entspricht 338,15K
$TEMP65="0620F080001604000000F0C100380001003803021659";
// entspricht 333,15K
$TEMP60="0620F080001604000000F0C1003800010038030215DC";
// entspricht 328,15K
$TEMP55="0620F080001604000000F0C10038000100380302155F";
// entspricht 323,15K
$TEMP50="0620F080001604000000F0C1003800010038030214E2";

$PREP_TELEGRAM = pack("H*" ,$TEMP50);

SSCK_SendText($SERVERSOCKET,$PREP_TELEGRAM);
_ISM8_RELOAD_ALL_DATA();

Quick n Dirty…

vielleicht hilft es.
EDIT 23:35 habe noch was an den scripten geändert…