Wärmepumpen mit Luxtronik 2 auslesen, verarbeiten und erweitern - AlphaInnotec, Novelan und andere

Nachdem ich nun endlich die Zeit gefunden habe, mich mit der Wärmepumpe zu beschäftigen ist am Ende folgendes Script heraus gekommen.

Die Scripte sind für alle Wärmepumpen die den Luxtronik 2 Controller verwenden. Der sieht so aus…

Warum noch ein Script? Es gibt doch schon so viele…auch hier im Forum!

Als ich angefangen habe zu bauen, war für mich klar, das ich die WP vollständig auslesen WILL(!). Das wurde mir seitens des Installateur auch versichert, das dies möglich sei. Wir haben also ein Angebot bekommen, was wie bei WP üblich nicht günstig ist. Aber es stand die Position „Serveraufschaltung“ drauf die für mich einleuchtend war. Dachte ich. Nachdem ich mich bereits letztes Jahr damit beschäftigt habe, stellte ich fest, das dies gar nicht so geht wie ich ursprünglich dachte. Man sagte mir ich müsse noch ein Dongel für 300,00 Euro netto dazukaufen. :frowning: Ich fühlte mich verarscht, jetzt war mein Ehrgeiz geweckt. Nach Stundenlangem suchen, habe ich dann auch in anderen Foren Lösungsansätze gefunden.

Ich mache selbst seit über 16 Jahren in PHP, habe diverse Hilfsscripte für meine berufliche Tätigkeit geschrieben. Ich denke also ein klein wenig Erfahrung mitzubringen. ABER auch hier konnte ich dann noch was neues lernen, nämlich die Socket Kommunikation. :slight_smile: (war mir bisher vollkommen unbekannt, da ich es auch nie gebraucht habe)

Mein Ziel war es ein Script zu entwerfen, dass auch die Neulingen und Unerfahrenen mit ihren individuellen Wünschen unendlich erweitern könnten ohne tiefer in die Materie eintauchen zu müssen. Dazu sind in den einzelnen Dateien reichlich Kommentare enthalten, was dort geschieht und was man erweitern könnte. Gerade den Unerfahrenen im Bereich PHP möchte ich hiermit zeigen, wie einfach es sein kann etwas seinen Wünschen entsprechend anzupassen.

Ich versuche hier jetzt alles strukturiert und übersichtlich darzustellen.

Zuallererst eine Auflistung der Dateien.

wpCommunication		 -> ist ausschließlich für die kommunikation mit der wp verantwortlicht
wpClass			     -> hier stehen die ganzen funktionen die es vereinfachen sollen, mehr dazu in den kommentaren
wpValue			     -> hier stehen nur die möglichen variablen die eure wp zurückliefern könnte (nicht muss)
wpValueConfiguration -> hier wird es interessant, hier werden die variablen mit den nummern definiert, die ihr in eure ipsymcon übernehmen bzw. auswerten wollt
wpWorking		     -> wie der name schon sagt, hier wird der arbeitsprozess angestoßen, das script sollte dann per ereigniss regelmäßig gestartet werden

Wie geht man nun vor? Ganz einfach (denke ich mir so)…

  1. Gehe in die Datei wpValue, such Dir eine Variable raus, anhand des Scripteditors und dessen Zeilennummerierung sieht man welche Nummer diese Varaible hat, daher steht die Nummer 1-4 in Zeile 3, denn was ich bisher gefunden habe sagte immer aus, das der Vorlauf in Variable Nummer 10 steht. Diese Nummer 10 wird dann in die wpValueConfiguration im Array $vType als Typ definiert. Du legst also fest um welchen Typ von Variable es sich handeln soll…bei einer Temperatur habe ich mich für den Wert Float entschieden.

  2. Als nächstes wird festgelegt ob diesem Wert ein bestimmtes VaraiblenProfil zugeordnet werden soll, das kann sein, muss aber nicht Ich habe hier meine eigenen Profile angelegt die alle mit dem Suffix WP beginnen. Ihr könnt hier eure eigenen Profilnamen anlegen. WICHTIG…der Profilname muss dann auch in dem $vProfile genau so heißen…Dazu ein paar Bilder, damit es besser verständlich ist.


  1. Danach wird noch festgelegt, ob der Wert von der WP umgerechnet werden muss…bei einer Temperatur ist dies der Fall. Gleiches Thema wie in Punkt 2, es kann definiert werden muss aber nicht. Ich habe hier eigene Funktionen in der WPClass angelegt, diese Funktionsnamen tauchen dann auch wieder in dem Array $uProfile genau so auf. Auch dazu ein paar Bilder, damit es besser verständlich ist.


  1. Da meine WP über 250 Werte zurück liefert, und ich bei weitem nicht alle in meiner Symcon haben will, habe ich mich dazu entschieden, das nur die Werte aufgenommen werden die eine parentID bekommen haben. Das erledigst du in der Datei wpValueConfiguration ab Zeile 48.
$array[xx]->SetParent = 12345;

Wobei das xx für die Nummer Deiner gewünschten Variable steht und die 12345 für die ObjektID deines IPSymcon System unter den dieser Wert eingeordnet werden soll.


Das sollte es gewesen sein. Also Variable bzw. dessen Nummer raussuchen, Variablentyp dieser Nummer festlegen, falls gewünscht Variablenprofil und oder Umrechnungsprofil festlegen.
wpWorking starten, glücklich sein.

Insgesamt ist das ganze etwas gewachsen. Die Profilzuordnungen hatte ich ursprünglich so gestaltet…

$array[$i]->Profile = (
	(in_array($i, $profileWPTemperatur)) ? ("WPTemperatur") : (
		(in_array($i, $profileOKError)) ? ("OkError") : (
			(in_array($i, $profileOKErrorRev)) ? ("OkErrorReversed") : (
				(in_array($i, $profileWPEinAus)) ? ("wpEinAus") : (FALSE)
			)
		)
	)
);

Aufgrund der Menge an möglichen Profilen, wird das dann schnell zu unübersichtlich. Daher habe ich nach einer Möglichkeit gesucht, das einfacher und übersichtlicher zu gestalten. Ich kann ja nicht
erwarten, das derjenige der die Scripte mal nutzen möchte, hier im Quellcode noch rumwerkelt, damit seine selbst erstellten Variablenprofile auch berücksichtigt werden. Entstanden ist dadurch eine kleine WPClasse. :slight_smile:

$profile = array(
    'WPTemperatur'      => array(10,11,12,14,15,16,17,18,19,20,21,22),
    'WPEinAus'          => array(37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55),
    'OKError'           => array(29,31,33,35),
    'OKErrorReversed'   => array(32),
);

Erweiterungen…

Möchtest du das Script werweitern, ist dies ganz simpel.

Beispiel 1
Du hast ein tolles Variablenprofil mit dem Namen wpMeinTollesProfil. Du gehst also in die wpValueConfiguration und schreibst in das Array unter $vProfile in der nächsten Zeile wpMeinTollesProfil. Diesem ordnest du dann die Nummern der Variable Deiner WP zu, die genauso diesem Profil zugeordnet werden sollen. VariablenProfile sind dazu da, Werte optisch hübsch darzustellen.

 $vProfile = array(
     'WPTemperatur'    		=> array(10,11,12,14,15,16,17,18,19,20,21,22),
     'WPEinAus'        		=> array(37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55),
     'OKError'         		=> array(29,31,33,35),
     'OKErrorReversed' 		=> array(32),
     'wpMeinTollesProfil'	=> array(),
 );

Beispiel 2
Du hast eine Variable die irgendwie anders umgerechnet werden soll. Dazu denkst du Dir einen Namen aus, der Übersicht halber empfehle ich auch hier den Suffix uProfile beizubehalten… In das Array $uProfile schreibst du in die nächste Zeile…sagen wir uProfileStatus. Diesem ordnest du dann die Nummern der Variablen Deiner WP zu, die genau diesem UmrechnungsProfil zugeordnet werden sollen.

 $uProfile = array(
     'uProfileTemp'  => array(10,11,12,14,15,16,17,18,19,20,21,22),
     'uProfileTime'  => array(69,76,77),
     'uProfileMDHis' => array(67,68,70,71,72,73),
     'uProfileWPZust'=> array(80),
     'uProfilStatus' => array(),
 );

In der wpClass legst du dann am Ende eine Funktion mit dem gleichen(!) Namen an. Was diese Funktion dann berechnen soll, musst du selbst wissen oder jemanden fragen der dir dann bei der Umsetzung hilft.

function uProfileStatus($data){
	.
	.
	.
	return $data;
}

Fehlersuche

Sollte irgendetwas nicht so gehen wie du erwartest, grenze den Fehler systematisch ein.

Starte zuerst das Script wpCommunication einzeln(!). Zeile 34 kommentierst du zur Fehlersuche einfach aus. In der Ausgabe sollten Werte Deine WP zurück geliefert werden. Wenn nicht, gibt es ein Kommunikationsproblem mit Deiner WP.

Sollten Werte zurück kommen, sollte es so aussehen…

Sollten Werte zurück geliefert werden, finde raus, ob den Wert den du haben willst auch an der richtigen Stelle, sprich Position, steht. (z.B. VorlaufTemperatur an Position 10)

Ist das der Fall, prüfe ob du diesem Wert eine parentID zugeordnet hast. Ist dies nicht der Fall, wird dieser Wert niemals in deine Symcon übernommen, das dient zum filtern, welche Werte du haben willst und welche nicht.

Das Script wpWorking kannst du auch einzeln starten und Zeile 18 vorher auskommentieren. Dann sollte sowas hier zurück kommen. Das ist immer zur Fehlersuche sinnvoll. Läuft alles wie gewünscht, kommentiere die Zeile 18 wieder mit „//“ aus…

Mehr fällt mir gerade nicht ein, was noch schief gehen könnte. Achso…Ihr müsst natürlich bei dem Include in der wpWorking Eure eigenen IPSymcon ObjektID´s eintragen. :slight_smile:

Hier lassen sich alle Einzelscripte runterladen.
wp.zip (5,6 KB)

Am Ende sieht es aktuell so bei mir aus…

Es ist natürlich noch nicht fertig, aber das Grundgerüst steht erst einmal so wie ich es haben will. Nun könnten noch weitere Anpassungen erfolgen. Zum Beispiel könnte bei der Wärmequelle noch eine weitere Variable einfegügt werden, dir mir die Differenz, also den Wärmeentzug, darstellt, und und und … ich persönlich find die Symcon unendlich geil.

So genug gequatscht, viel Spass beim ausprobieren und erweitern. Ich würde mich sehr freuen, wenn es jemandem weiter hilft.

Beste Grüße aus dem sonnigen Cottbus
tomquenten

1 „Gefällt mir“

Und prompt noch einen Fehler entdeckt. In der Entwicklung hatte ich bei den VariablenTypen mit Ziffern gearbeitet. Dann kamen die Profile. Das lässt sich aber sehr leicht beheben. In der wpClass wird die Funktion setVariable komplett gelöscht und durch folgenden vollständigen Code ersetzt. Dann läufts auch mit dem Anlegen neuer Variblen im System.

    function setVariable($array, $i){                                                                                   //variable in ipsymcon erstellen wenn nicht vorhanden
        if(@IPS_GETVARIABLEIDBYNAME($array[$i]->Name, $array[$i]->SetParent) == FALSE){
            if($array[$i]->SetParent != FALSE){
                $var = IPS_CreateVariable(self::getIPSymconVariablenType($array[$i]->VariablenTyp));                                                    //variablentyp festelegen
                IPS_SetName($var, $array[$i]->Name);                                                                    //variable benennen
                IPS_SetParent($var, $array[$i]->SetParent);                                                             //variable einsortieren unter dem objekt setparent
                (($array[$i]->Profile != FALSE) ? (IPS_SETVARIABLECUSTOMPROFILE($var, $array[$i]->Profile)) : (FALSE)); //variablenprofil zuordnen
            }
        }
    }

    function getIPSymconVariablenType($data){
        if($data == 'variableBoo')  return 0;
        if($data == 'variableInt')  return 1;
        if($data == 'variableFlo')  return 2;
        if($data == 'variableStr')  return 3;
    }

Servus

Sorry, aber du solltest im Topic oder zumindest in der Einleitung schreiben für welche Wärmepumpe bzw. Gateway deine Scriptsammlung vorgesehn ist. Für welche Hardware ist das Ding gedacht ?

Google spuckt für Luxcontrol auf den ersten zwei Seiten nur irgendwelche Lichtssteuerungen.

Weiters erschließt sich mir nach 2maligem Lesen auch nicht ob es sich um ein Komplettpacket zur Kommunikation oder um eine Art „Datenaufbereiter“ handelt.

Sorry für Kritik
Bernhard

Danke für den Hinweis.

Ich habe es im Topic aktualisiert und in der Einleitung näher erläutert. Außerdem handelt es sich bei der Sammlung sowohl um die Kommunikation als auch um die Aufbereitung.

Guten Morgen tomquenten1

Klasse :+1:

ich werde mir das am Wochenende mal genau anschauen.

hast du bei dir auch den Status und die Temperatur der Verdichterheizung mit drin?

das vermisse ich noch bei mir?

Ich wünschte ich könnte das auch so mit den Scripten :pensive:

so bin ich immer auf Hilfe angewiesen

Nun kommt Bewegung in die Sache. :slight_smile:

Die ObjektIDs die ich hier verwende, sind die aus meinem IPSymcon. In deiner Installation werden das andere sein!

Ich habe das ganze jetzt noch einmal erweitert. Es dürften jetzt alle möglichen Umrechnungen in der wpClass vorhanden sein.

Aufgrund der Fülle an Daten und der Tatsache geschuldet, das bei weitem nicht alle Datenfelder identifiziert sind, habe ich mich dazu entschieden ersteinmal ALLE Daten in einem separaten Ordner innerhalb der IPSymcon aufzunehmen. Diesen habe ich selbsterklärend alle Werte bezeichnet. Die ObjektID dieses Ordners habe ich dann in der wpValueConfiguration allen Variablen als ParentID zugewiesen.

Außerdem habe ich erst einmal ALLEN Variablen den Datentyp String gegeben. Nach dem ersten Start des Scriptes wpWorking füllte sich dann der Ordner alle Werte. Nachdem ich einen Wert zweifelsfrei identifizieren konnte, habe ich in der Datei wpValueConfiguration die ParentID der identifizierte Variabeln in die ObjektID des Ordners identifizierte Werte geändert.
Damit wird der Wert in den neuen Ordner geschrieben und aktualisiert. Aus dem Ordner alle Werte kann dieser jetzt getrost gelöscht werden.

Schaut dann so aus…

Durch diese Verfahrensweise ist es mir leichter gefallen, den Überblick zu behalten.

Identifizierte Werte habe ich dann per Link/Verknüpfung innerhalb der IPSymcon dahin verlinkt, wo ich den Wert haben will und die Bezeichnung meinen Wünschen entsprechend angepasst. Macht das nicht in der wpValue! Ihr kommt am Ende durcheinander, da es Bezeichnungen geben kann, die dann doppelt vorkommen. Zack, Überblick verloren. Herzlichen Glückwunsch. (eigene Erfahrung)

An der Verfahrensweise mit den vProfilen (VariablenProfilen) und den uProfilen (Umrechnungsprofilen) hat sich nichts geändert. Jede Variable kann dort eingeordnet werden. Die Profile habe ich jetzt, nachdem ich meine WP (AlphaInnotec) vollständig ausgelesen habe, erweitert. Bezeichnungen stehen jeweils in den Kommentaren.

Die aktualisierten Scripte hänge ich jetzt nocheinmal an.

Hier die erweiterten Scripte. An der wpWorking sowie der wpCommunication hat sich nichts geändert.

wpValue

<?php
$dataSet = array(
    "0","1","2","3",
    "4",
    "5",
    "6",
    "7",
    "8",
    "9",
    "Temperatur_TVL",                   //temperatur vorlauf
    "Temperatur_TRL",                   //temperatur rücklauf
    "Sollwert_TRL_HZ",                  //temperatur sollwert rücklauf heizung
    "Temperatur_TRL_ext",
    "Temperatur_THG",
    "Temperatur_TA",                    //temperatur aussenfühler
    "Mitteltemperatur",                 //temperatur mittel
    "Temperatur_TBW",                   //temperatur 
    "Einst_BWS_akt",
    "Temperatur_TWE",
    "Temperatur_TWA",
    "Temperatur_TFB1",
    "Sollwert_TVL_MK1",                 //temperatur sollwert vorlauf mischkreis 1
    "Temperatur_RFV",
    "Temperatur_TFB2",
    "Sollwert_TVL_MK2",                 //temperatur sollwert vorlauf mischkreis 2
    "Temperatur_TSK",
    "Temperatur_TSS",
    "Temperatur_TEE",
    "ASDin",
    "BWTin",
    "EVUin",
    "HDin",
    "MOTin",
    "NDin",
    "PEXin",
    "SWTin",
    "AVout",
    "BUPout",
    "HUPout",
    "MA1out",
    "MZ1out",
    "VENout",
    "VBOout",
    "VD1out",
    "VD2out",
    "ZIPout",
    "ZUPout",
    "ZW1out",
    "ZW2SSTout",
    "ZW3SSTout",
    "FP2out",
    "SLPout",
    "SUPout",
    "MZ2out",
    "MA2out",
    "Zaehler_BetrZeitVD1",
    "Zaehler_BetrZeitImpVD1",
    "Zaehler_BetrZeitVD2",
    "Zaehler_BetrZeitImpVD2",
    "Zaehler_BetrZeitZWE1",
    "Zaehler_BetrZeitZWE2",
    "Zaehler_BetrZeitZWE3",
    "Zaehler_BetrZeitWP",
    "Zaehler_BetrZeitHz",
    "Zaehler_BetrZeitBW",
    "Zaehler_BetrZeitKue",
    "Time_WPein_akt",                   //wp läuft seit
    "Time_ZWE1_akt",
    "Time_ZWE2_akt",
    "Timer_EinschVerz",
    "Time_SSPAUS_akt",                  //schaltspielsperre
    "Time_SSPEIN_akt",                  //schaltspielsperre
    "Time_VDStd_akt",                   //verdichter steht seit
    "Time_HRM_akt",
    "Time_HRW_akt",
    "Time_LGS_akt",
    "Time_SBW_akt",
    "Code_WP_akt",
    "BIV_Stufe_akt",
    "WP_BZ_akt",
    "SoftStand1",
    "SoftStand2",
    "SoftStand3",
    "SoftStand4",
    "SoftStand5",
    "SoftStand6",
    "SoftStand7",
    "SoftStand8",
    "SoftStand9",
    "SoftStand10",
    "AdresseIP_akt",
    "SubNetMask_akt",
    "Add_Broadcast",
    "Add_StdGateway",
    "ERROR_Time0",
    "ERROR_Time1",
    "ERROR_Time2",
    "ERROR_Time3",
    "ERROR_Time4",
    "ERROR_Nr0",
    "ERROR_Nr1",
    "ERROR_Nr2",
    "ERROR_Nr3",
    "ERROR_Nr4",
    "AnzahlFehlerInSpeicher",
    "Switchoff_file_Nr0",
    "Switchoff_file_Nr1",
    "Switchoff_file_Nr2",
    "Switchoff_file_Nr3",
    "Switchoff_file_Nr4",
    "Switchoff_file_Time0",
    "Switchoff_file_Time1",
    "Switchoff_file_Time2",
    "Switchoff_file_Time3",
    "Switchoff_file_Time4",
    "Comfort_exists",
    "HauptMenuStatus_Zeile1",
    "HauptMenuStatus_Zeile2",
    "HauptMenuStatus_Zeile3",
    "HauptMenuStatus_Zeit",
    "HauptMenuAHP_Stufe",
    "HauptMenuAHP_Temp",
    "HauptMenuAHP_Zeit",
    "SH_BWW",
    "SH_HZ",
    "SH_MK1",
    "SH_MK2",
    "Einst_Kurzrpgramm",
    "StatusSlave_1",
    "StatusSlave_2",
    "StatusSlave_3",
    "StatusSlave_4",
    "StatusSlave_5",
    "AktuelleTimeStamp",
    "SH_MK3",
    "Sollwert_TVL_MK3",
    "Temperatur_TFB3",
    "MZ3out",
    "MA3out",
    "FP3out",
    "Time_AbtIn",
    "Temperatur_RFV2",
    "Temperatur_RFV3",
    "SH_SW",
    "Zaehler_BetrZeitSW",
    "FreigabKuehl",
    "AnalogIn",
    "SonderZeichen",
    "SH_ZIP",
    "WebsrvProgrammWerteBeobarten",
    "WMZ_Heizung",
    "WMZ_Brauchwasser",
    "WMZ_Schwimmbad",
    "WMZ_Seit",
    "WMZ_Durchfluss",
    "AnalogOut1",
    "AnalogOut2",
    "Time_Heissgas",
    "Temp_Lueftung_Zuluft",
    "Temp_Lueftung_Abluft",
    "Zaehler_BetrZeitSolar",
    "AnalogOut3",
    "AnalogOut4",
    "Out_VZU",
    "Out_VAB",
    "Out_VSK",
    "Out_FRH",
    "AnalogIn2",
    "AnalogIn3",
    "SAXin",
    "SPLin",
    "Compact_exists",
    "Durchfluss_WQ",                          
    "LIN_exists",                             
    "LIN_ANSAUG_VERDAMPFER",                  
    "LIN_ANSAUG_VERDICHTER",                  
    "LIN_VDH",                                
    "LIN_UH",                              //temperaturen überhitzung in kelvin   
    "LIN_UH_Soll",                            
    "LIN_HD",                               //hd in bar                       
    "LIN_ND",  			                    //nd in bar                               
    "LIN_VDH_out",                            
    "HZIO_PWM",                               
    "HZIO_VEN",                               
    "HZIO_EVU2",                              
    "HZIO_STB",                               
    "SEC_Qh_Soll",                            
    "SEC_Qh_Ist",                             
    "SEC_TVL_Soll",                           
    "SEC_Software",                           
    "SEC_BZ",                                 
    "SEC_VWV",                                
    "SEC_VD",                                 
    "SEC_VerdEVI",                            
    "SEC_AnsEVI",                             
    "SEC_UEH_EVI",                            
    "SEC_UEH_EVI_S",                          
    "SEC_KondTemp",                           
    "SEC_FlussigEx",                          
    "SEC_UK_EEV",                             
    "SEC_EVI_Druck",                          
    "SEC_U_Inv",                              
    "Temperatur_THG_2",                       
    "Temperatur_TWE_2",                       
    "LIN_ANSAUG_VERDAMPFER_2",                
    "LIN_ANSAUG_VERDICHTER_2",                
    "LIN_VDH_2",                              
    "LIN_UH_2",                               
    "LIN_UH_Soll_2",                          
    "LIN_HD_2",                               
    "LIN_ND_2",                               
    "HDin_2",                                 
    "AVout_2",                                
    "VBOout_2",                               
    "VD1out_2",                               
    "LIN_VDH_out_2",                          
    "Switchoff2_Nr0",                         
    "Switchoff2_Nr1",                         
    "Switchoff2_Nr2",                         
    "Switchoff2_Nr3",                         
    "Switchoff2_Nr4",                         
    "Switchoff2_Time0",                       
    "Switchoff2_Time1",                       
    "Switchoff2_Time2",                       
    "Switchoff2_Time3",                       
    "Switchoff2_Time4",                       
    "RBE_RT_Ist",                             
    "RBE_RT_Soll",                            
    "Temperatur_BW_oben",                     
    "Code_WP_akt_2",                          
    "Freq_VD",                      //frequenz verdichter soll
    "UNBEKANNT01",
    "UNBEKANNT02",
    "UNBEKANNT03",
    "UNBEKANNT04",
    "UNBEKANNT05",                  //frequenz verdichter ist
    "UNBEKANNT06",
    "UNBEKANNT07",
    "UNBEKANNT08",
    "UNBEKANNT09",
    "AUSGANG_HUP",                  //ausgang hup
    "UNBEKANNT11",
    "UNBEKANNT12",
    "UNBEKANNT13",
    "UNBEKANNT14",
    "UNBEKANNT15",
    "UNBEKANNT16",
    "UNBEKANNT17",
    "UNBEKANNT18",
    "UNBEKANNT19",
    "UNBEKANNT20",
    "UNBEKANNT21",
    "UNBEKANNT22",
    "EINGANG_DURCHFLUSS",			//durchfluss l/h
    "UNBEKANNT24",
    "UNBEKANNT25",
    "STATUS_LEISTUNG",              //aktuelle Leistung in kw
    "UNBEKANNT27",
    "UNBEKANNT28",
);

wpValueConfiguration

<?php
//variablentypen
//jeder wert den man von der wärmepumpe in die ipsymcon übernehmen möchte MUSS hier eine variablendefinition bekommen
//es MUSS also festgelegt werden, um welchen typ von variable es sich in der ipsymcon handeln soll
//das array brauch nicht erweitert werden, ipsymcon kennt (aktuell) nur 4 variablentypen
$vType = array(
    'variableBoo'       	=> array(),					//variablentyp boolean
    'variableInt'       	=> array(),					//variablentyp integer
    'variableFlo'       	=> array(),					//variablentyp float
    'variableStr'       	=> array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,258,259),					//variablentyp string
);

//variablenprofile
//jeder wert den man von der wärmepumpe in die ipsymcon übernehmen möchte KANN hier ein variablenprofil bekommen
//es KANN also festgelegt werden, wie die werte in der ipsymcon optisch dargestellt werden
//das array könnte jetzt unendlich mit eigenen profilen erweitert werden
$vProfile = array(
    'WPTemperatur'      	=> array(),					//präfix °C
    'WPEinAus'          	=> array(),					//kein präfix sondern farblich ein/aus
    'WPBetriebsstunden' 	=> array(),					//präfix h
    'WPKilowattstunden' 	=> array(),					//präfix kWh
    'WPDruck'           	=> array(),					//präfix bar
    'WPLiterStunde'     	=> array(),					//präfix l/h
    'WPKilowatt'        	=> array(),					//präfix KW
    'WPProzent'         	=> array(),					//präfix %
    'WPKelvin'          	=> array(),					//präfix K
    'WPFrequenz'        	=> array(),					//präfix Hz
);

//umrechnungsprofile
//jeder wert den man von der wärmepumpe in die ipsymcon übernehmen möchte KANN hier ein umrechnungsprofil bekommen
//es KANN also festgelegt werden, ob der übermittelte rohwert noch bearbeitet werden muss
//das array kann jetzt unendlich mit eigenen profilen erweitert werden
$uProfile = array(
    'uProfileTemp'          	=> array(),					//umrechnung wert multiplizieren mit 0.1, 2 nachkommastellen
    'uProfileTimeToHours'   	=> array(),					//umrechnung wert teilen durch 3600, 2 nachkommastellen
    'uProfileMDHis'         	=> array(),					//formatiereung zu 00:00:00
    'uProfileWPZust'        	=> array(),					//ermittlt mithilfe des codes den zustand der wp
    'uProfileDMYHIS'        	=> array(),					//formatiereung zu tag.monat.jahr Stunden:minute:sekunde
    'uProfileDruck'         	=> array(),					//umrechnung wert teilen durch 100, 4 nachkommastellen
    'uProfileELeistung'     	=> array(),					//umrechnung wert teilen durch 1000, 2 nachkommastellen
    'uProfileKwh'           	=> array(),					//umrechnung wert teilen durch 10, 2 nachkommastellen
    'uProfileKw'            	=> array(),					//umrechnung wert teilen durch 10, 2 nachkommastellen
    'uProfileWPKelvin'      	=> array(),					//umrechnung wert teilen durch 10, 2 nachkommastellen
);

$array = array();
for($i=0; $i<=$valueCount; $i++){						//valueCount kommt aus der wpcommunication und enthält nur den wert der von der wp übermittelten anzahl an datenfelder
    $array[$i]                = $wpClass->getStdObj();				//erstelle erst einmal das standardobjekt
    $array[$i]->Name          = $dataSet[$i];					//weise diesem nun einen namen zu, der name steht in der wpValue
    $array[$i]->Profile       = $wpClass->getProfiles($vProfile, $i);		//hole das passende variablen profil damit es in der symcon optisch hübsch dargestellt wird
    $array[$i]->UmrechnungTyp = $wpClass->getProfiles($uProfile, $i);		//hole das passende umrechnungs profil
    $array[$i]->VariablenTyp  = $wpClass->getProfiles($vType, $i);		//hole das passende variablen type profil, also string, float, etc...
}

//wird ein spezifischer wert, den die wp über die datenschnittstelle liefert, zur auswertung gewünscht, so ist es erforderlich
//diesem wert hier eine parentID zu geben. standardmäßig ist die parentID immer false, wird also in der auswertung nicht
//berücksichtigt. die parentID gibt an unter welchem ip symcon objekt der wert eingeordnet werden soll.
//temperaturen
$array[0]->SetParent = 12476;
$array[1]->SetParent = 12476;
$array[2]->SetParent = 12476;
$array[3]->SetParent = 12476;
$array[4]->SetParent = 12476;
$array[5]->SetParent = 12476;
$array[6]->SetParent = 12476;
$array[7]->SetParent = 12476;
$array[8]->SetParent = 12476;
$array[9]->SetParent = 12476;
$array[10]->SetParent = 12476;  
$array[11]->SetParent = 12476;
$array[12]->SetParent = 12476;
$array[13]->SetParent = 12476;
$array[14]->SetParent = 12476;
$array[15]->SetParent = 12476;
$array[16]->SetParent = 12476;
$array[17]->SetParent = 12476;
$array[18]->SetParent = 12476;
$array[19]->SetParent = 12476;
$array[20]->SetParent = 12476;
$array[21]->SetParent = 12476;
$array[22]->SetParent = 12476;
$array[23]->SetParent = 12476;
$array[24]->SetParent = 12476;
$array[25]->SetParent = 12476;
$array[26]->SetParent = 12476;
$array[27]->SetParent = 12476;
$array[28]->SetParent = 12476;
//eingaenge
$array[29]->SetParent = 12476;
$array[30]->SetParent = 12476;
$array[31]->SetParent = 12476;
$array[32]->SetParent = 12476;
$array[33]->SetParent = 12476;
$array[34]->SetParent = 12476;
$array[35]->SetParent = 12476;
$array[36]->SetParent = 12476;
//ausgänge
$array[37]->SetParent = 12476;
$array[38]->SetParent = 12476;
$array[39]->SetParent = 12476;
$array[40]->SetParent = 12476;
$array[41]->SetParent = 12476;
$array[42]->SetParent = 12476;
$array[43]->SetParent = 12476;
$array[44]->SetParent = 12476;
$array[45]->SetParent = 12476;
$array[46]->SetParent = 12476;
$array[47]->SetParent = 12476;
$array[48]->SetParent = 12476;
$array[49]->SetParent = 12476;
$array[50]->SetParent = 12476;
$array[51]->SetParent = 12476;
$array[52]->SetParent = 12476;
$array[53]->SetParent = 12476;
$array[54]->SetParent = 12476;
$array[55]->SetParent = 12476;
//zaehler
$array[56]->SetParent = 12476;
$array[57]->SetParent = 12476;
$array[58]->SetParent = 12476;
$array[59]->SetParent = 12476;
$array[60]->SetParent = 12476;
$array[61]->SetParent = 12476;
$array[62]->SetParent = 12476;
$array[63]->SetParent = 12476;
$array[64]->SetParent = 12476;
$array[65]->SetParent = 12476;
$array[66]->SetParent = 12476;
//zeiten
$array[67]->SetParent = 12476;
$array[68]->SetParent = 12476;
$array[69]->SetParent = 12476;
$array[70]->SetParent = 12476;
$array[71]->SetParent = 12476;
$array[72]->SetParent = 12476;
$array[73]->SetParent = 12476;
$array[74]->SetParent = 12476;
$array[75]->SetParent = 12476;
$array[76]->SetParent = 12476;
$array[77]->SetParent = 12476;
$array[80]->SetParent = 12476;

$array[81]->SetParent = 12476;
$array[82]->SetParent = 12476;
$array[83]->SetParent = 12476;
$array[84]->SetParent = 12476;
$array[85]->SetParent = 12476;
$array[86]->SetParent = 12476;
$array[87]->SetParent = 12476;
$array[88]->SetParent = 12476;
$array[89]->SetParent = 12476;
$array[90]->SetParent = 12476;
$array[91]->SetParent = 12476;
$array[92]->SetParent = 12476;
$array[93]->SetParent = 12476;
$array[94]->SetParent = 12476;
$array[95]->SetParent = 12476;
$array[96]->SetParent = 12476;
$array[97]->SetParent = 12476;
$array[98]->SetParent = 12476;
$array[99]->SetParent = 12476;
$array[100]->SetParent = 12476;
$array[101]->SetParent = 12476;
$array[102]->SetParent = 12476;
$array[103]->SetParent = 12476;
$array[104]->SetParent = 12476;
$array[105]->SetParent = 12476;
$array[106]->SetParent = 12476;
$array[107]->SetParent = 12476;
$array[108]->SetParent = 12476;
$array[109]->SetParent = 12476;
$array[110]->SetParent = 12476;
$array[111]->SetParent = 12476;
$array[112]->SetParent = 12476;
$array[113]->SetParent = 12476;
$array[114]->SetParent = 12476;
$array[115]->SetParent = 12476;
$array[116]->SetParent = 12476;
$array[117]->SetParent = 12476;
$array[118]->SetParent = 12476;
$array[119]->SetParent = 12476;
$array[120]->SetParent = 12476;
$array[121]->SetParent = 12476;
$array[122]->SetParent = 12476;
$array[123]->SetParent = 12476;
$array[124]->SetParent = 12476;
$array[125]->SetParent = 12476;
$array[126]->SetParent = 12476;
$array[127]->SetParent = 12476;
$array[128]->SetParent = 12476;
$array[129]->SetParent = 12476;
$array[130]->SetParent = 12476;
$array[131]->SetParent = 12476;
$array[132]->SetParent = 12476;
$array[133]->SetParent = 12476;
$array[134]->SetParent = 12476;
$array[135]->SetParent = 12476;
$array[136]->SetParent = 12476;
$array[137]->SetParent = 12476;
$array[138]->SetParent = 12476;
$array[139]->SetParent = 12476;
$array[140]->SetParent = 12476;
$array[141]->SetParent = 12476;
$array[142]->SetParent = 12476;
$array[143]->SetParent = 12476;
$array[144]->SetParent = 12476;
$array[145]->SetParent = 12476;
$array[146]->SetParent = 12476;
$array[147]->SetParent = 12476;
$array[148]->SetParent = 12476;
$array[149]->SetParent = 12476;
$array[150]->SetParent = 12476;
//wärmemengenzählung
$array[151]->SetParent = 12476;
$array[152]->SetParent = 12476;
$array[153]->SetParent = 12476;
$array[154]->SetParent = 12476;
$array[155]->SetParent = 12476;

$array[156]->SetParent = 12476;
$array[157]->SetParent = 12476;
$array[158]->SetParent = 12476;
$array[159]->SetParent = 12476;
$array[160]->SetParent = 12476;
$array[161]->SetParent = 12476;
$array[162]->SetParent = 12476;
$array[163]->SetParent = 12476;
$array[164]->SetParent = 12476;
$array[165]->SetParent = 12476;
$array[166]->SetParent = 12476;
$array[167]->SetParent = 12476;
$array[168]->SetParent = 12476;
$array[169]->SetParent = 12476;
$array[170]->SetParent = 12476;
$array[171]->SetParent = 12476;
$array[172]->SetParent = 12476;
$array[173]->SetParent = 12476;
$array[174]->SetParent = 12476;
$array[175]->SetParent = 12476;
$array[176]->SetParent = 12476;
$array[177]->SetParent = 12476;
$array[178]->SetParent = 12476;
$array[179]->SetParent = 12476;
$array[180]->SetParent = 12476;
$array[181]->SetParent = 12476;
$array[182]->SetParent = 12476;
$array[183]->SetParent = 12476;
$array[184]->SetParent = 12476;
$array[185]->SetParent = 12476;
$array[186]->SetParent = 12476;
$array[187]->SetParent = 12476;
$array[188]->SetParent = 12476;
$array[189]->SetParent = 12476;
$array[190]->SetParent = 12476;
$array[191]->SetParent = 12476;
$array[192]->SetParent = 12476;
$array[193]->SetParent = 12476;
$array[194]->SetParent = 12476;
$array[195]->SetParent = 12476;
$array[196]->SetParent = 12476;
$array[197]->SetParent = 12476;
$array[198]->SetParent = 12476;
$array[199]->SetParent = 12476;
$array[200]->SetParent = 12476;
$array[201]->SetParent = 12476;
$array[202]->SetParent = 12476;
$array[203]->SetParent = 12476;
$array[204]->SetParent = 12476;
$array[205]->SetParent = 12476;
$array[206]->SetParent = 12476;
$array[207]->SetParent = 12476;
$array[208]->SetParent = 12476;
$array[209]->SetParent = 12476;
$array[210]->SetParent = 12476;
$array[211]->SetParent = 12476;
$array[212]->SetParent = 12476;
$array[213]->SetParent = 12476;
$array[214]->SetParent = 12476;
$array[215]->SetParent = 12476;
$array[216]->SetParent = 12476;
$array[217]->SetParent = 12476;
$array[218]->SetParent = 12476;
$array[219]->SetParent = 12476;
$array[220]->SetParent = 12476;
$array[221]->SetParent = 12476;
$array[222]->SetParent = 12476;
$array[223]->SetParent = 12476;
$array[224]->SetParent = 12476;
$array[225]->SetParent = 12476;
$array[226]->SetParent = 12476;
$array[227]->SetParent = 12476;
$array[228]->SetParent = 12476;
$array[229]->SetParent = 12476;
$array[230]->SetParent = 12476;
$array[231]->SetParent = 12476;
$array[232]->SetParent = 12476;
$array[233]->SetParent = 12476;
$array[234]->SetParent = 12476;
$array[235]->SetParent = 12476;
$array[236]->SetParent = 12476;
$array[237]->SetParent = 12476;
$array[238]->SetParent = 12476;
$array[239]->SetParent = 12476;
$array[240]->SetParent = 12476;
$array[241]->SetParent = 12476;
$array[242]->SetParent = 12476;
$array[243]->SetParent = 12476;
$array[244]->SetParent = 12476;
$array[245]->SetParent = 12476;
$array[246]->SetParent = 12476;
$array[247]->SetParent = 12476;
$array[248]->SetParent = 12476;
$array[249]->SetParent = 12476;
$array[250]->SetParent = 12476;
$array[251]->SetParent = 12476;
$array[252]->SetParent = 12476;
$array[253]->SetParent = 12476;
$array[254]->SetParent = 12476;
$array[255]->SetParent = 12476;
$array[256]->SetParent = 12476;
$array[257]->SetParent = 12476;
$array[258]->SetParent = 12476;
$array[259]->SetParent = 12476;

?>

wpClass

<?php
class getProfiles{

    function __construct(){
        //hier gibt es vorlaeufig noch nichts zu tun
    }

    function getProfile($i, $k, $v){                                                                                    //ermittle das variablenprofil
        return ((in_array($i, $v)) ? ($k) : (FALSE));                                                                   //bei erfolg wird der name des profils zurück gegeben, sonst false
    }

    function getProfiles($profile, $value){
        foreach($profile as $k => $v){                                                                                  //durchlaufe die variablenprofile
            $found = self::getProfile($value, $k, $v);                                                                  //wenn das profil gefunden wurde ...
            if($found != FALSE)                                                                                         //... wird ja kein false zurück geliefert ...
                break;                                                                                                  //... dann brich den weiteren verlauf der schleife ab
        }
        return $found;
    }

    function getStdObj(){                                                                                               //erstelle ein standardisiertes objekt
        $obj = new stdClass();
        $obj->Name          = FALSE;
        $obj->SetParent     = FALSE;
        $obj->UmrechnungTyp = FALSE;
        $obj->Profile       = FALSE;
        $obj->VariablenTyp  = FALSE;
        return $obj;
    }

    function setVariable($array, $i){                                                                                   //variable in ipsymcon erstellen wenn nicht vorhanden
        if(@IPS_GETVARIABLEIDBYNAME($array[$i]->Name, $array[$i]->SetParent) == FALSE){
            if($array[$i]->SetParent != FALSE){
                $var = IPS_CreateVariable(self::getIPSymconVariablenType($array[$i]->VariablenTyp));                    //variablentyp festelegen
                IPS_SetName($var, $array[$i]->Name);                                                        //variable benennen
                IPS_SetParent($var, $array[$i]->SetParent);                                                             //variable einsortieren unter dem objekt setparent
                IPS_SetPosition($var, $i);                                                                              //variable eine position zuweisen
                (($array[$i]->Profile != FALSE) ? (IPS_SETVARIABLECUSTOMPROFILE($var, $array[$i]->Profile)) : (FALSE)); //variablenprofil zuordnen
            }
        }
    }

    function getIPSymconVariablenType($data){
        if($data == 'variableBoo')  return 0;
        if($data == 'variableInt')  return 1;
        if($data == 'variableFlo')  return 2;
        if($data == 'variableStr')  return 3;
    }

    /* umrechnungsprofile beginnen mit dem suffix uProfile... */
    function uProfileTemp($data){                                                                                       //umrechnung temperaturen
        return bcmul($data, 0.1, 2);
    }

    function uProfileTimeToHours($data){                                                                                //umrechnung zeit in stunden
        return bcdiv($data, 3600, 2);
    }

    function uProfileMDHis($time){                                                                                      //umformatierung zeit in 00:00:00
        $days = floor($time / (60 * 60 * 24));
        $time -= $days * (60 * 60 * 24);
        $hours = floor($time / (60 * 60));
        $time -= $hours * (60 * 60);
        $minutes = floor($time / 60);
        $time -= $minutes * 60;
        $seconds = floor($time);
        $time -= $seconds;
        return sprintf("%'.02d", $hours).":".sprintf("%'.02d", $minutes).":".sprintf("%'.02d", $seconds);
    }

    function uProfileDMYHIS($time){                                                                                      //umformatierung in tag monat jahr stunde minute sekunde aus einem unix timestamp
        return date("d.m.Y H:i:s", $time);
    }

    function uProfileKwh($data){                                                                                         //umformatierung druck in kilowattstunden
        return bcdiv($data,10, 2);
    }

    function uProfileKw($data){                                                                                          //umformatierung druck in kilowatt
        return bcdiv($data,10, 2);
    }

    function uProfileDruck($data){                                                                                       //umformatierung druck in bar
        return bcdiv($data,100, 4);
    }

    function uProfileELeistung($data){                                                                                   //umformatierung in elektrische Leistung
        return bcdiv($data,1000, 2);
    }

    function uProfileWPZust($data){                                                                                      //wärmepumpen betriebszustände
        switch ($data){
            case 0:
                return "Heizen";
            break;
            case 1:
                return "Warmwasser";
            break;
            case 2:
                return "Schwimmbad / Photovoltaik";
            break;
            case 3:
                return "EVU-Sperre";
            break;
            case 4:
                return "Abtauen";
            break;
            case 5:
                return "Keine Anforderung";
            break;
            case 6:
                return "Heizen ext. Energiequelle";
            break;
            case 7:
                return "Kühlbetrieb";
            break;
        }
    }

    function uProfileWPKelvin($data){                                                                                    //umformatierung druck in kelvin
        return bcdiv($data,10, 2);
    }

}

$wpClass =  new getProfiles();

Jetzt kommt noch eine Kleinigkeit, mit denen die Fehlercodes, die die WP liefern könnte ausgewertet bzw. gewandelt werden in eine kurze Beschreibung. Die Anleitung der Luxtronik2 liefert mir ja schon die Fehlercodes.

So Schaut es jetzt bei mir aus…

Und hier nun noch ein vollständiger Download aller aktuellen Scripte.
wp.zip (7,7 KB)

Beste Grüße aus Cottbus
tomquenten

ich habe das heute mal umgesetzt.

und funktioniert einwandfrei.

ist aber echt eine Menge, was da an Werten zurück kommt.

schöne Beschäftigung für kalte Wintertage :smiley:

Schön das es bei Dir funktioniert! Freut mich.

Die Werte der VD Heizung suche ich auch noch. Konnte ich bisher bei mir nicht zweifelsfrei identifizieren. Aktuell bin ich bei mir wieder an den Scripten der Zisterne dran.

Beste Grüße aus Cottbus
tomquenten

Verdichterheizung

das ist der Temperaturwert der Verdichterheizung

jetzt suche ich noch den Status der VD Heizung.

Also die Rückmeldung ob die An oder Aus ist

Das müsste dann VD1_OUT sein… Mensch die Heizung hatte ich doch schon…schau mal oben in das Bild…rechte Seite unten bei den Temperaturen… :joy:

Beste Grüße aus Cottbus
tomquenten

ich hab ihn gefunden

Verdichterheizung Status

Was mir aufgefallen ist:

Wenn ich im Objektbaum einen Wert „Umbenenne“ dann wird dieser Wert nicht mehr aktualisiert.

muss man jetzt im Script alle Namen anpassen, oder kann man das anders lösen?

die Originalnamen sind sehr verwirrend, so das ein Umbenennen schon Pflicht ist

Lies noch mal weiter oben!!! Dort hatte ich geschrieben, das ich identifizierte Werte im Ordner belassen und nur eine Verknüpfung in meine Struktur übernehme. Diese Verknüpfung kann man dann umbenennen.

Im Beitrag 6 steht dazu

Identifizierte Werte habe ich dann per Link/Verknüpfung innerhalb der IPSymcon dahin verlinkt, wo ich den Wert haben will und die Bezeichnung meinen Wünschen entsprechend angepasst. Macht das nicht in der wpValue! Ihr kommt am Ende durcheinander, da es Bezeichnungen geben kann, die dann doppelt vorkommen. Zack, Überblick verloren. Herzlichen Glückwunsch. (eigene Erfahrung)

Beste Grüße aus Cottbus
tomquenten

ja, alles klar.

ich brauchte einige Zeit, um das „warum und wieso“ genau zu verstehen!

PHP ist nicht so meins :smile:

aber so langsam freunde ich mich damit an.

Auf jeden Fall bekommst du einen fetten Daumen hoch von mir für deine Arbeit.
Ich bin wirklich happy !

Könnte man nicht ein Modul für Module Store da raus machen?

Das wäre dann die Kirsche auf dem Sahnehäubchen der Schokotorte :smiling_face_with_three_hearts:

Hi Tomquenten1
Erstmal vielen Dank für deine Behmühungen den Luxtronic 2 in IPS auswerten zu können. Es ist schon immer mein Wunsch leider mangelt es an meinen Fähigkeiten.

ich bekomme die Meldung das ValueCount aus dem skript wpcommunication nicht definiert ist diese Variable wird ja öfters in den skripten benötigt.
Daten von der Wärmepumpe kommen aber an wenn ich das Skript WPcommunication einzeln ausführe.
Hast du einen Tipp was ich falsch mache ?

wpValue ist die Anzahl an Datenfelder, die die WP zurückliefert. Es ist nur ein Zähler. Wenn Deine WP also 100 Werte liefert, sollte wpValue 99 sein, da bei unix die 0 ebenfalls eine Zahl ist, es also bei 0 anfängt zu zählen.

Ist die Frage, warum der Wert nicht definiert sein soll. Gibt es eine Fehlermeldung von deiner WP, wenn du das Script EINZELN startest?

Ach jetzt erst gesehen…zeig mir mal zeile 48 und 49 von dem script.

Hi Tomquenten1
hier ein paar Screenshots aus meinem IPS. Wie gesagt Werte von der WP kommen an nur das Array 10 wird nicht in die Variable Temperatur Vorlauf übertragen. Fehler spuckt es in WLValueConfigurationsskript zeil 48 und 49 aus .




Hoffe du kannst mir helfen

Hallo,

ich habs. Das Objekt 24544 ist eine Variable. DAS GEHT SO NICHT! Schau mal weiter oben, wie ich vorgegangen bin. setParent steht für den Ordner in denen die identifizierten Werte gespeichert werden. ES MUSS ALSO die ObjektID des Ordners identifizierte Werte sein. Schau mal in Beitrag 6…da steht die Vorgehensweise genau drin.

Hi tomquenten1
Sorry aber ich blicks nicht, ich habe die Variable durch eine Kategorie ersetzt
( alle werte ObjektID 13789) in der WPValueConfiguration ab Zeile 60 setzte ich alle Arrays auf diese ObjektID, Der ordner bzw Kategorie füllt sich aber nicht :frowning: Stattdesen gleicher Fehlercode wie gestern valueCount undefinied in Zeile 48
Habe ich da etwas falsch verstanden?

Blockzitat

  1. Da meine WP über 250 Werte zurück liefert, und ich bei weitem nicht alle in meiner Symcon haben will, habe ich mich dazu entschieden, das nur die Werte aufgenommen werden die eine parentID bekommen haben. Das erledigst du in der Datei wpValueConfiguration ab Zeile 48.
$array[xx]->SetParent = 12345;

Wobei das xx für die Nummer Deiner gewünschten Variable steht und die 12345 für die ObjektID deines IPSymcon System unter den dieser Wert eingeordnet werden soll.


$array[10] müsste doch der Wert für Vorlauftemperatur in die Kategorie alle Werte geschrieben werden. Wie werden die dann aber ausgegeben ohne Variablen oder müssen die irgenwie manuell angelegt werden??

Sorry ich hoffe du kannst mir helfen stehe voll auf dem schlauch.

Skript WPValueConfiguration

Also was mich etwas verwundert ist die Tatsache das du Daten von der WP erhälst, der valueCount aber nicht definiert sein soll. Da tippe ich mal darauf, das die Scripte nicht in der korrekten Reihenfolge eingebunden sind. Eine andere Erklärung gibt es nicht mehr. Wenn die WP etwas zurück liefert, muss es auch einen valueCount geben, da das nichts weiter ist also die Anzahl der Datenfelder die reingekommen sind.

Script wpWorking

include(IPS_GetScriptFile(wpValue));              //objektID des script vpValue, definition der möglichen variablen die von der wp geliefert werden könnten
include(IPS_GetScriptFile(wpClass));              //objektID des script vpClass, herzstück der arbeit
include(IPS_GetScriptFile(wpCommunication));      //objektID des script vpCommunication,baut die verbindungen zur wp auf und holt die daten
include(IPS_GetScriptFile(wpValueConfiguration)); //objektID des script vpValueConfiguration, konstruiert aus verschiedenen einstellungen ein komplexes objekt

Wie du siehst, wird die wpValueConfiguration NACH der wpCommunication eingebunden. Der Wert valueCount wird in der wpCommunication erstellt und sollte demnach in der wpValueConfiguration verfügbar sein, da das Script erst eine Zeile später eingebunden wird.

Wenn das Problem gelöst ist, schauen wir uns gerne an, warum die Werte bei dir nicht im Ordner landen.

tomquenten

EDIT: Trage das mal in der wpCommunication ganz unten ein und starte das Script manuell.
var_dump(count($daten_raw));
var_dump($valueCount);