Alpha Innotec Wärmepumpe über Lan anbinden

Wo ist denn dein Script her oder hast du das selber erstellt?

Bitte die Tags
grafik
nutzen und keine Bilder, dann muss man den Code nicht neu schreiben :wink: .

Zeile 5

include "28806" ; <-- die Anführungsstriche fehlen

aber so wird das trotzdem nichts.

Was ist denn 28806? Ein existierendes andere Script das due hier includen möchtest? Wenn ja, dann müsste es so aussehen

include "28806.ips.php" ;

Bei einem Client Socket, wenn also Daten automatisch reinkommen, müsstest du ja auch eine Register Variable haben und dort dein Verarbeitungsscript eingetragen haben.

Im Beitrag 7 kannst du dir ansehen, wie es vermutlich aussehen müsste:

include "innotec_wp";
include "java_daten";

//Dummy Modul anlegen als Heimat der Messdaten im Selben Pfad wie das Script
$parentobject = IPS_GetObject($_IPS['SELF']);
$parentID = $parentobject['ParentID'];

oh Mann!

erstmal 1000 Dank, das du versuchst mir zu helfen.

wie gesagt bei mir fehlen bereits die Grundlagen.

die 28806 ist das Script aus der ZIP Datei

oder braucht man die ZIP Datei gar nicht mehr?

mein Script ist das aus Beitrag 7.

Hallo sym-patix

Ich mach das ohne Client Socket
Das ganze geht mit drei php-Scripts
Hier mal ein Screen damit du dir was vorstellen kannst und die Nummern der Scripts siehst.
Die Variabeln werden nach Ausführen des Scripts automatisch erstellt, die musst Du nicht anlegen :wink:

Hier die drei php-scripts

wp_daten_holen_3004.txt (8,2 KB)
java_daten.txt (5,8 KB)
config.txt (178 Bytes)

Du kannst den Inhalt einfach in deine zuvor angelegten php-scripts kopieren und die beiden ‚include‘ Zeilen in ‚wp_daten_holen‘ auf deine script-IDs anpassen. Ebenfalls natürlich die ip-adresse in ‚config‘ anpassen.
Wenn du das gemacht hat einfach mal ‚wp_daten_holen‘ ausführen

Das sollte eigentlich fürs erst mal ein paar Variablen hergeben :smiley:

Viel Erfolg…

Viele Grüsse
Stefan

ui Danke :+1:

Das probiere ich später mal in Ruhe aus.

Vielen vielen Dank

Grüße zurück von einem Stephan :smiley:

Hallo Stefan
deine Anleitung war klasse :+1:

ich kann das Script ohne Fehlermeldung ausführen, da bin schon sehr glücklich mit.

Nur werden bei mir keine Variablen angelegt. :thinking:

Muss ich noch ein Dummy Modul anlegen??

also soweit ich das als Anfänger beurteilen kann, läuft das Script fehlerfrei.

es werden aber keine Variablen angelegt.

Ich vermute das der Lux Controller der WP nicht antwortet.

das Webinterface des WP Controller kann ich problemlos erreichen.

wie kann man testen ob die Kommunikation überhaupt statt findet

Nein, Dummy Modul sind nur kosmetischer Natur.
Versuch mal Port 8888 statt 8889.
Ältere Lux haben diese Port….

1 „Gefällt mir“

Leck mich am Arsch

Ich hatte den falschen Port

ich danke allen Beteiligten für die Hilfestellung, speziell dir mb-stern

danke

Hallo Community

Ich bin sehr glücklich mit der Itegration meiner AIT Wärmepumpe in IPS.

Nun gibt es die Parameter " Verdampfertemperatur" und Verdampferheizung"

wäre es möglich auch diese 2 Parameter noch zusätzlich in das Script einzufügen.

Hallo,

also ich habe das jetzt auch geschafft auf die Wärmepumpe zu schreiben.
Ich ändere somit den Fusspunkt bei PV Überschuss, nach dem Heiztakt stelle ich den Fusspunkt wieder automatisch runter.
Somit erhöhe ich ich den Rücklauf Soll, die WP heizt dann bei Überschuss höher rauf.

Die Schreibbefehle werde dann ca. 300mal im Jahr ausgeführt.
Die Luxtronic Steuerung der meiner Novelan hat laut Doku einen Flashspeicher.
Jetzt habe ich etwas bedenken, ob die 300 Schreibbefehle im Jahr meinen Speicher vorzeitigin den Ruhestand schicken?
Oder sind meine Bedenken unbegründet.

Wer von Euch scheibt auch auf die Luxtronic und wie oft macht ihr das?

Ich ändere aktuell nur sehr selten Werte (nur bei Abwesenheit)
Das wird sich aber nächstes Jahr ändern, wenn wir dann eine PV-Anlage haben.
Aber ehrlich gesagt kann ich mir nicht vorstellen, dass dies den Flash-Speicher vorzeitig verschleisst.
Es gibt da auch verschiedene Speicher Qualitäten, wenn man zB auch an ein SSD denkt.
Ich kenne die verschlissenen Flash-Speicher eigentlich nur von den RASPI und den fingernagelgrossen Micro-SD Karten…

1 „Gefällt mir“

Ja vielleicht mache ich mir da einfach zu viele Gedanken.
Es bringt jedenfalls eine Menge Eigenverbrauch wenn man tagsüber die FBH überheizt und nachts die WP dann sperrt.
Es wird dann bei optimalen COP der Heiztakt durchgeführt, weil es tagsüber ja wärmer ist…

Ich mache das jetzt einfach mal so.

Seit IPS 7.0 und PHP V8, stimmen meine negativen Wert nicht mehr.
Wenn ich negative Werte von meiner Heizung erhalte z.B. -0,1 Grad dann bekomme ich einen Wert von z.B. 429496729,5 geliefert. Ab 12:58:29 war der Minus-Test integriert.
Unbenannt

Bei mir war das aber nicht vor der IPS V7.0, ich habe die Var geloggt und da finde ich immer nur plausible Werte.
Kann es sein das seit PHP 8 was ja ab IPS 7.0 integriert ist, Funktionen anders behandelt werden als in PHP 7? Siehe folständiges Skript wieter unten.
Das würde es erklären.
Ich bin leider nicht so tief drin das ich das ganze Skript verstehe, vielleicht kann mir das einer von euch erklären.
Ich möchte nämlich diesen Minus-Test anders lösen, weil mir das so nicht gefällt, das Problem muss an der Wurzel gepackt werden.

Trotzdem Danke an @tschewie für den Schnipsel.

Das Problem besteht allerdings schon länger also vor IPS7.0 und es wurde im Post Nr. 94 folgende Lösung angeboten.

if ($i >= 10 & $i <= 28) // Temperaturen	
{
		//echo	printf($i.":".$daten_raw[$i]." ");
		$minusTest = $daten_raw[$i]*0.1;
		if($minusTest > 429496000){
			$daten_raw[$i] = $daten_raw[$i]-=4294967296;
			$daten_raw[$i] = $daten_raw[$i]*0.1;
		}else{
			$daten_raw[$i] = $daten_raw[$i]*0.1;
		}
			//printf('(%d)%s : %.1f &#176C<br>',$i,$java_dataset[$i],$daten_raw[$i]);
		  	$varid = CreateVariableByName($parentID, $java_dataset[$i], 2, 'WP_'.$java_dataset[$i], "Temperatur_200_C", $i);//float
		  setValueFloat($varid,$daten_raw[$i]);
	}

Mein Skript sieht so aus:
Ab Zeile 92 beginnt dieser MinusTest. Der subrahiert einfach den hohen float Wert.

<?php
//includes
//include "/home/pi/Novelan/config.php";
//include "/home/pi/Novelan/java_daten.php";

include(IPS_GetScriptFile(31140));
include(IPS_GetScriptFile(11039));


//Dummy Modul anlegen als Heimat der Messdaten im Selben Pfad wie das Script
$parentobject = IPS_GetObject($_IPS['SELF']);
$parentID = $parentobject['ParentID'];


//Variablen
$sBuff = 0;
$time1 = time();
$filename = "test.tst";
$JavaWerte = 0;
$refreshtime = 5; //sekunden
$status="";

echo '<meta http-equiv="refresh" content="5" >';

// connecten
$socket = socket_create(AF_INET, SOCK_STREAM,0);
$connect = socket_connect($socket, $IpWwc, $WwcJavaPort) || exit("socket_connect fehlgeschlagen");


if ($connect = 1)
	echo "PASS: Verbunden mit WWC Java Console $IpWwc Port: $WwcJavaPort <br>";
else
	echo "ERROR: Nicht verbunden mit WWC Java Console  <br>";

$timestamp= time();
$datum = date("d.m.Y",$timestamp);
$uhrzeit = date("H:i:s",$timestamp);
printf('============================================================== <br>');
printf('Ausleszeit: %s - %s Uhr <br>',$datum,$uhrzeit);
printf('Refresh alle 5s !<br>');
printf('! TEST !<br>');
printf('============================================================== <br>');
//---------------------------------------------------------------------------

// Daten holen
$msg = pack('N*',3004);
//printf('msg:%s <br>',$msg);
$send=socket_write($socket, $msg, 4); //3004 senden
//printf('Bytes send:%d <br>',$send);


$msg = pack('N*',0);
//printf('msg:%s <br>',ord($msg));
$send=socket_write($socket, $msg, 4); //0 senden
//printf('Bytes send:%d <br>',$send);


socket_recv($socket,$Test,4,MSG_WAITALL);  // Lesen, sollte 3004 zurückkommen
$Test = unpack('N*',$Test);
//printf('read:%s <br>',implode($Test));

socket_recv($socket,$Test,4,MSG_WAITALL); // Status
$Test = unpack('N*',$Test);
printf('Status:%s <br>',implode($Test));

socket_recv($socket,$Test,4,MSG_WAITALL); // Länge der nachfolgenden Werte
$Test = unpack('N*',$Test);
printf('L&auml;nge der nachfolgenden Werte:%s <br>',implode($Test));

$JavaWerte = implode($Test);
printf('============================================================== <br>');

for ($i = 0; $i < $JavaWerte; ++$i)//vorwärts
{
socket_recv($socket,$InBuff[$i],4,MSG_WAITALL);  // Lesen, sollte 3004 zurückkommen
$daten_raw[$i] = implode(unpack('N*',$InBuff[$i]));
//printf('InBuff(%d): %d <br>',$i,$daten_raw[$i]);
}
//socket wieder schliessen
socket_close($socket);

// Werte anzeigen
for ($i = 0; $i < $JavaWerte; ++$i)//vorwärts
{
//if ($i >= 10 & $i <= 28) // Temperaturen
	//{($daten_raw[$i] = $daten_raw[$i]*0.1);
	  ////printf('(%d)%s : %.1f &#176C<br>',$i,$java_dataset[$i],$daten_raw[$i]);
	  //$varid = CreateVariableByName($parentID, $java_dataset[$i], 2, 'WP_'.$java_dataset[$i], "Temperatur_200_C", $i);//float
	  //setValueFloat($varid,$daten_raw[$i]);
	//}
//Mit Minustest Info: Seit IPS 7.0 PHP muss der Minustest eingefügt werden, das auskommentierte war der alte vorherige Teil
if ($i >= 10 & $i <= 28) // Temperaturen	
{
		//echo	printf($i.":".$daten_raw[$i]." ");
		$minusTest = $daten_raw[$i]*0.1;
     //var_dump($daten_raw);
		if($minusTest > 429496000){
			$daten_raw[$i] = $daten_raw[$i]-=4294967296;
			$daten_raw[$i] = $daten_raw[$i]*0.1;
     
		}else{
			$daten_raw[$i] = $daten_raw[$i]*0.1;
		}
			//printf('(%d)%s : %.1f &#176C<br>',$i,$java_dataset[$i],$daten_raw[$i]);
		  	$varid = CreateVariableByName($parentID, $java_dataset[$i], 2, 'WP_'.$java_dataset[$i], "Temperatur_200_C", $i);//float
		  setValueFloat($varid,$daten_raw[$i]);
	}

if ($i == 56) // Zähler
	{($daten_raw[$i] = $daten_raw[$i]/3600);
	  //printf('(%d)%s : %.2f h<br>',$i,$java_dataset[$i],$daten_raw[$i]);
	  $varid = CreateVariableByName($parentID, $java_dataset[$i], 2, 'WP_'.$java_dataset[$i], "", $i);//float
	  setValueFloat($varid,$daten_raw[$i]);
	}
if ($i == 57) // Zähler
	{($daten_raw[$i] = $daten_raw[$i]);
	  //printf('(%d)%s : %d<br>',$i,$java_dataset[$i],$daten_raw[$i]);
	  $varid = CreateVariableByName($parentID, $java_dataset[$i], 2, 'WP_'.$java_dataset[$i], "", $i);//float
	  setValue($varid,$daten_raw[$i]);
	}
if ($i == 58) // Zähler
	{($daten_raw[$i] = $daten_raw[$i]/3600);
	  //printf('(%d)%s : %.2f h<br>',$i,$java_dataset[$i],$daten_raw[$i]);
	  $varid = CreateVariableByName($parentID, $java_dataset[$i], 2, 'WP_'.$java_dataset[$i], "", $i);//float
	  setValueFloat($varid,$daten_raw[$i]);
	}
if ($i == 59) // Zähler
	{($daten_raw[$i] = $daten_raw[$i]);
	  //printf('(%d)%s : %d<br>',$i,$java_dataset[$i],$daten_raw[$i]);
	   $varid = CreateVariableByName($parentID, $java_dataset[$i], 2, 'WP_'.$java_dataset[$i], "", $i);//float
	  setValue($varid,$daten_raw[$i]);
	}
if ($i >= 60 & $i <= 66) // Zähler
	{($daten_raw[$i] = $daten_raw[$i]/3600);
	  //printf('(%d)%s : %d h<br>',$i,$java_dataset[$i],$daten_raw[$i]);
	   $varid = CreateVariableByName($parentID, $java_dataset[$i], 2, 'WP_'.$java_dataset[$i], "", $i);//float
	  setValueFloat($varid,$daten_raw[$i]);
	}
if ($i >= 95 & $i <= 99) // Errors
	{
	  //printf('(%d)%s : %d<br>',$i,$java_dataset[$i],$daten_raw[$i]);
   	$varid = CreateVariableByName($parentID, $java_dataset[$i], 3, 'WP_'.$java_dataset[$i], "", $i);//integer
		$FehlerDatum = date("m.d.y",$daten_raw[$i]);
		setValueString($varid,$FehlerDatum);
	}

if ($i >= 100 & $i <= 105) // Errors
	{
	  //printf('(%d)%s : %d<br>',$i,$java_dataset[$i],$daten_raw[$i]);
   	$varid = CreateVariableByName($parentID, $java_dataset[$i], 3, 'WP_'.$java_dataset[$i], "", $i);//integer
		setValueString($varid,$daten_raw[$i]);
	}

     if ($i == 119) // Anlagenstatus
{
    //  printf('(%d)%s : %d',$i,$java_dataset[$i],$daten_raw[$i]);
        switch ($daten_raw[$i]) {
        case 0:
        $status = "Heizbetrieb";
        break;
        case 1:
        $status = "Keine Anforderung";
        break;
        case 2:
        $status = "Netz-Einschaltverzögerung";
        break;
        case 3:
        $status = "Schaltspielsperre";
        break;
        case 4:
        $status = "Wärmepumpe gesperrt";
        break;
        case 5:
        $status = "Brauchwasser";
        break;
        case 6:
        $status = "Estrich-Programm";
        break;
        case 7:
        $status = "Abtauen";
        break;
        case 8:
        $status = "Pumpenvorlauf";
        break;
        case 9:
        $status = "Therm. Desinfektion";
        break;
        case 10:
        $status = "Kühlbetrieb";
        break;
        case 11:
        $status = "unbekannt";
        break;
        case 12:
        $status = "Schwimmbad";
        break;
        case 13:
        $status = "Heizen extern";
        break;
        case 14:
        $status = "Brauchwasser extern";
        break;
        case 15:
        $status = "unbekannt";
        break;
        case 16:
        $status = "Durchflussüberwachung";
        break;
        case 17:
        $status = "ZWE Betrieb";
        break;
        }
        //printf ($status);
            $varid = CreateVariableByName($parentID, $java_dataset[$i], 3, 'WP_'.$java_dataset[$i], "", $i);//integer
                setValueString($varid,$status);
            }
}

function CreateVariableByName($id, $name, $type, $ident, $profile, $position)
{
    $vid = @IPS_GetObjectIDByIdent ($ident, $id);
    if($vid === false)
    {
        $vid = IPS_CreateVariable($type);
        IPS_SetParent($vid, $id);
        IPS_SetName($vid, $name);
        IPS_SetIdent($vid, $ident);
        IPS_SetInfo($vid, "");
        IPS_SetPosition($vid, $position);

		  if($profile !== "")
        {
            IPS_SetVariableCustomProfile($vid, $profile);
        }
    }
    return $vid;
}
?>

Ein bisschen modifiziert, aber du wirst nicht drumrum kommen…

if ($i >= 10 && $i <= 28) // Temperaturen
{
    $minusTest = $daten_raw[$i] * 0.1;
    if ($minusTest > 429496000) {
        $daten_raw[$i] -= 4294967296;
        $daten_raw[$i] *= 0.1;
    } else {
        $daten_raw[$i] *= 0.1;
    }

    $varid = CreateVariableByName($parentID, $java_dataset[$i], 2, 'WP_'.$java_dataset[$i], "", $i);//float
    setValueFloat($varid, $daten_raw[$i]);
}

Ja deine Anpassung ist ähnlich wie meine, macht das gleiche.
Komisch nur das es seit IPS V7.0 erst ist.

Hast du den Minustest schon vor V7.0 drin gehabt?

Vielleicht liegt hier das Problem.

// Daten holen
$msg = pack('N*',3004);
//printf('msg:%s <br>',$msg);
$send=socket_write($socket, $msg, 4); //3004 senden
//printf('Bytes send:%d <br>',$send);

Statt dem ‚N*‘ in der Packfunktion was anderes, gibt lt Doku einige Möglichkeiten.

$msg = pack('N*',3004);

Ja, hatte das Problem schon immer…

Muss ehrlich sagen, habe mich noch gar nie mit der pack() Funktion beschäftigt, aber da alles so reibungslos funktioniert hatte ich nicht das Bedürfnis.

Habe aber das Script noch ein wenig abgeändert.
Folgende Änderungen sind eingeflossen

  • Es wird ein Dummymodul erstellt und die Variablen werden darin platziert.

  • Das Dummymodul und die Variablen lassen sich nun umbenennen

  • Viele überflüssigen Einträge entfernt und nicht benötigte Variablen ausgefiltert

<?php
// includes
include "29151.ips.php";
include "48554.ips.php";

// Dummy Modul anlegen als Heimat der Messdaten im selben Pfad wie das Script
$parentobject = IPS_GetObject($_IPS['SELF']);
$parentID = $parentobject['ParentID'];

// Überprüfen, ob das Dummy-Modul bereits existiert
$dummyModuleIdent = 'MyDummyModule';
$dummyModuleID = @IPS_GetObjectIDByIdent($dummyModuleIdent, $parentID);

if ($dummyModuleID === false) {
    // Dummy-Modul erstellen
    $dummyModuleID = IPS_CreateInstance('{485D0419-BE97-4548-AA9C-C083EB82E61E}'); // Dummy-Modul ID
    IPS_SetParent($dummyModuleID, $parentID);  // Setzen Sie das übergeordnete Objekt auf das übergeordnete Objekt des Scripts
    IPS_SetName($dummyModuleID, 'Wärmepumpe');
    IPS_SetIdent($dummyModuleID, $dummyModuleIdent);
    IPS_SetInfo($dummyModuleID, 'This is a dummy module for storing data.');
    IPS_ApplyChanges($dummyModuleID);
}

// Variablen
$sBuff = 0;
$time1 = time();
$filename = "test.tst";
$JavaWerte = 0;
$refreshtime = 5; // Sekunden

// Connecten
$socket = socket_create(AF_INET, SOCK_STREAM, 0);
$connect = socket_connect($socket, $IpWwc, $WwcJavaPort);

if (!$connect) {
    $error_code = socket_last_error();
    exit("Socket connect failed with error code: $error_code\n");
}

// Daten holen
$msg = pack('N*',3004);
//printf('msg:%s <br>',$msg);
$send=socket_write($socket, $msg, 4); //3004 senden
//printf('Bytes send:%d <br>',$send);

$msg = pack('N*',0);
//printf('msg:%s <br>',ord($msg));
$send=socket_write($socket, $msg, 4); //0 senden
//printf('Bytes send:%d <br>',$send);

socket_recv($socket,$Test,4,MSG_WAITALL);  // Lesen, sollte 3004 zurückkommen
$Test = unpack('N*',$Test);
//printf('read:%s <br>',implode($Test));

socket_recv($socket,$Test,4,MSG_WAITALL); // Status
$Test = unpack('N*',$Test);
//printf('Status:%s <br>',implode($Test));

socket_recv($socket,$Test,4,MSG_WAITALL); // Länge der nachfolgenden Werte
$Test = unpack('N*',$Test);
//printf('Länge der nachfolgenden Werte:%s <br>',implode($Test));

$JavaWerte = implode($Test);
//printf('============================================================== <br>');

for ($i = 0; $i < $JavaWerte; ++$i)//vorwärts
{
socket_recv($socket,$InBuff[$i],4,MSG_WAITALL);  // Lesen, sollte 3004 zurückkommen
$daten_raw[$i] = implode(unpack('N*',$InBuff[$i]));
//printf('InBuff(%d): %d <br>',$i,$daten_raw[$i]);
}
//socket wieder schliessen
socket_close($socket);

// Werte anzeigen
for ($i = 0; $i < $JavaWerte; ++$i)//vorwärts
{

if ($i >= 10 && $i <= 18) // Temperaturen
{
    $minusTest = $daten_raw[$i] * 0.1;
    if ($minusTest > 429496000) {
        $daten_raw[$i] -= 4294967296;
        $daten_raw[$i] *= 0.1;
    } else {
        $daten_raw[$i] *= 0.1;
    }

    $varid = CreateVariableByName($dummyModuleID, $java_dataset[$i], 2, 'WP_'.$java_dataset[$i], "", $i);//float
    setValueFloat($varid, $daten_raw[$i]);
}

/* Wird aktuell nicht ausgewertet
if ($i == 56) // Zähler
	{
        ($daten_raw[$i] = $daten_raw[$i]/3600);
	  //printf('(%d)%s : %.2f h<br>',$i,$java_dataset[$i],$daten_raw[$i]);
	  $varid = CreateVariableByName($dummyModuleID, $java_dataset[$i], 2, 'WP_'.$java_dataset[$i], "", $i);//float
	  setValue($varid,$daten_raw[$i]);
	}

if ($i == 57) // Zähler
	{
	  $varid = CreateVariableByName($dummyModuleID, $java_dataset[$i], 2, 'WP_'.$java_dataset[$i], "", $i);//float
	  setValue($varid,$daten_raw[$i]);
	}

if ($i == 58) // Zähler
	{
        ($daten_raw[$i] = $daten_raw[$i]/3600);
	  //printf('(%d)%s : %.2f h<br>',$i,$java_dataset[$i],$daten_raw[$i]);
	  $varid = CreateVariableByName($dummyModuleID, $java_dataset[$i], 2, 'WP_'.$java_dataset[$i], "", $i);//float
	  setValue($varid,$daten_raw[$i]);
	}
if ($i == 59) // Zähler
	{  
	   $varid = CreateVariableByName($dummyModuleID, $java_dataset[$i], 2, 'WP_'.$java_dataset[$i], "", $i);//float
	  setValue($varid,$daten_raw[$i]);
	}

if ($i >= 60 & $i <= 66) // Zähler
	{
        ($daten_raw[$i] = $daten_raw[$i]/3600);
	  //printf('(%d)%s : %d h<br>',$i,$java_dataset[$i],$daten_raw[$i]);
	   $varid = CreateVariableByName($dummyModuleID, $java_dataset[$i], 2, 'WP_'.$java_dataset[$i], "", $i);//float
	  setValue($varid,$daten_raw[$i]);
	}
*/

if ($i == 67) // WP läuft seit

	{
	   $varid = CreateVariableByName($dummyModuleID, $java_dataset[$i], 3, 'WP_'.$java_dataset[$i], "", $i);//integer
	    $time = $daten_raw[$i]; // time duration in seconds

        $hours = floor($time / (60 * 60));
        $time -= $hours * (60 * 60);

        $minutes = floor($time / 60);
        $time -= $minutes * 60;
        
        $WPseit = "{$hours}h {$minutes}m";
		SetValue($varid,$WPseit);
    }

if ($i == 73) // WP steht seit
	{
	   $varid = CreateVariableByName($dummyModuleID, $java_dataset[$i], 3, 'WP_'.$java_dataset[$i], "", $i);//integer
		
        $time = $daten_raw[$i]; // time duration in seconds

        $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;
        
        $WPseit = "{$days}d {$hours}h {$minutes}m";
		SetValue($varid,$WPseit);
    }

/* Wird aktuell nicht ausgewertet
if ($i >= 95 & $i <= 99) // Errors
	{
   	$varid = CreateVariableByName($dummyModuleID, $java_dataset[$i], 3, 'WP_'.$java_dataset[$i], "", $i);//integer
		$FehlerDatum = date("d.m.y",$daten_raw[$i]);
		setValueString($varid,$FehlerDatum);
	}

if ($i >= 100 & $i <= 105) // Errors
	{
   	$varid = CreateVariableByName($dummyModuleID, $java_dataset[$i], 3, 'WP_'.$java_dataset[$i], "", $i);//integer
		setValueString($varid,$daten_raw[$i]);
    }
*/

if ($i == 141) // Abtauen in ...
	{
	   $varid = CreateVariableByName($dummyModuleID, $java_dataset[$i], 3, 'WP_'.$java_dataset[$i], "", $i);//integer
$time = $daten_raw[$i]; // time duration in seconds

        $hours = floor($time / (60 * 60));
        $time -= $hours * (60 * 60);

        $minutes = floor($time / 60);
        $time -= $minutes * 60;
        
        $WPseit = "{$hours}h {$minutes}m";
		SetValue($varid,$WPseit);
    }
    
if ($i == 154) // Wärmemenge seit Reset
	{
	  $varid = CreateVariableByName($dummyModuleID, $java_dataset[$i], 2, 'WP_'.$java_dataset[$i], "", $i);//float
	  setValue($varid,$daten_raw[$i] / 10);
   } 

   if ($i == 173) // Durchfluss
	{
	  $varid = CreateVariableByName($dummyModuleID, $java_dataset[$i], 2, 'WP_'.$java_dataset[$i], "", $i);//float
	  setValue($varid,$daten_raw[$i]);
    }

    if ($i == 184) // Ventilatordrehzahl
	{
	  $varid = CreateVariableByName($dummyModuleID, $java_dataset[$i], 2, 'WP_'.$java_dataset[$i], "", $i);//float
	  setValue($varid,$daten_raw[$i]);
   } 

   if ($i == 257) // Leistung
	{
        ($daten_raw[$i] = $daten_raw[$i]/1000);
	  $varid = CreateVariableByName($dummyModuleID, $java_dataset[$i], 2, 'WP_'.$java_dataset[$i], "", $i);//float
      $daten_raw[$i] = sprintf("%5.2f", $daten_raw[$i]);
	  setValue($varid,$daten_raw[$i]);
    }
   
   if ($i == 231) // Verdichterdrehzahl
	{
	  $varid = CreateVariableByName($dummyModuleID, $java_dataset[$i], 2, 'WP_'.$java_dataset[$i], "", $i);//float
	  setValue($varid,$daten_raw[$i]);
   } 

   if ($i == 80) // Betriebszustand
	{
   	$varid = CreateVariableByName($dummyModuleID, $java_dataset[$i], 1, 'WP_'.$java_dataset[$i], "", $i);//integer
		SetValue($varid,$daten_raw[$i]);
    }

/* Wird aktuell nicht ausgewertet 
if ($i == 80) // Betriebszustand
{
switch ($daten_raw[$i]) {
case 0:
$status = "Heizen";
break;
case 1:
$status = "Warmwasser";
break;
case 2:
$status = "Schwimmbad / Photovoltaik";
break;
case 3:
$status = "EVU-Sperre";
break;
case 4:
$status = "Abtauen";
break;
case 5:
$status = "Keine Anforderung";
break;
case 6:
$status = "Heizen ext. Energiequelle";
break;
case 7:
$status = "Kühlbetrieb";
break;
}
    $varid = CreateVariableByName($dummyModuleID, $java_dataset[$i], 3, 'WP_'.$java_dataset[$i], "", $i);//integer
        setValueString($varid,$status);
    }
*/
}

// Funktion zur Erstellung von Variablen nach Name
function CreateVariableByName($dummyModuleID, $name, $type, $ident, $profile, $position) {
    $vid = @IPS_GetObjectIDByIdent($ident, $dummyModuleID);
    if ($vid === false) {
        $vid = IPS_CreateVariable($type);
        IPS_SetParent($vid, $dummyModuleID);  // Setzen Sie das Dummy-Modul als Eltern-Objekt
        IPS_SetName($vid, $name);
        IPS_SetIdent($vid, $ident);
        IPS_SetInfo($vid, "");
        IPS_SetPosition($vid, $position);

        if ($profile !== "") {
            IPS_SetVariableCustomProfile($vid, $profile);
        }
    }
    return $vid;
}
1 „Gefällt mir“

Kein Erfolg mit dem Testen der pack Funktion.
Ich lasse es jetzt so, dass funktioniert genaus so.

Evt. ist das auch ein Problem von der Luxtronic, dann können wir sowieso nichts machen.

Danke für dein Skript.

Habe nun ein Modul gemacht für die LUX.
Hinweis: Aktuell ist nur die Abfrage der Istwerte möglich, Steuerung wird später dazu kommen.

Bitte testen und Kommentare zum Modul dort platzieren…
[Modul] WPLUX Symcon - IP-Symcon / PHP-Module (Diskussion) - IP-Symcon Community

1 „Gefällt mir“

Sehr gut.
Finde ich gut.
Mittlerweile habe ich zwar alles über mein eigenes Skript gelöst, aber einige andere werden sich über das Modul sehr freuen…

Danke.