Alpha Innotec Wärmepumpe über Lan anbinden

Hallo,

vielen Dank. Steuern klappt. Nur leider bekomme ich keine Vollständige Rückmeldung. Als Antwort bekomme ich „nur“:
Port: 8889 read:3002 Status:3

Generell würde mich mal interessieren wie ich den Status der WP (Aus, Party, Automatik, Ferien) auslesen kann. Ich finde in der Tabelle (Java Webinterface - loxwiki - loxwiki) keinen passenden Eintrag.

Hallo,

aktueller Status steht bei mir im Integer Status Zeile 3 - 119. Siehe oben Beitrag 82.

Viele Grüße
Rudi

Danke für deine Antwort, allerdings meine ich nicht diesen Status sondern den „Modus?!“
-Aus
-Automatik
-Party
-Ferien

Hallo,

steht bei mir in den Feldern 124 - 127 (SH_BWW / SH_HZ / SH_MK1 / SH_MK2).

Viele Grüße Rudi

Hallo Rudi,

vielen Dank, ich habe es durch testen herausbekommen. Bei mir ist es das Feld SH_MK1 (126):
0 = Auto
2 = Ferien
3 = Aus
4 = Party

Hallo

Hat jemand herausgefunden, wie die aktuelle Leistung abgegriffen wird.
Die fehlt mir noch…

Hallo matterazi

Kommst du unterdessen an die aktuelle Leistung?

Hallo Kiter11

Wie kriegst Du die Steuerung der Betriebsart hin
Mit diesem Script habe ich keine Chance
Ich habe mit einer boolean und integer Variable versucht…

<?php

//includes

include "39064.ips.php";

// 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>";

// Daten senden

$msg = pack('N*',3002); //3002 senden aktivieren

$send=socket_write($socket, $msg, 4);

//SetParameter senden;

$msg = pack('N*',3); //Parameter: 3: Heizung Betriebsart

$send=socket_write($socket, $msg, 4);

if (GetValueBoolean(41477))

    {//Value senden;

    $msg = pack('N*',0); // Party      Value: 0:Auto - 2: Party  - 4:Off

    } else {

    $msg = pack('N*',2); //aus         Value: 0:Auto - 2: Party  - 4:Off

    }

$send=socket_write($socket, $msg, 4);

/*

gefunden bei:

https://github.com/mhop/fhem-mirror/blob/master/fhem/FHEM/23_LUXTRONIK2.pm

Parameter:

1: Temperatur SetBack

    Value: -5 bis +5

   Allow only integer temperature or with decimal .5

    $setValue = int($realValue * 2) * 5;

2: Brauchwasser Soll Temperatur

    Value 30 - 65

   Allow only integer temperature or with decimal .5

    $setValue = int($realValue * 2) * 5;

3: Heizung Betriebsart

   Value: 0:Auto - 2: Party  - 4:Off

4: Warmwasser Betriebsart

   Value: 0:Auto - 2: Party  - 4:Off

*/

socket_recv($socket,$Test,4,MSG_WAITALL);  // lesen, sollte 3002 zurückkommen

$Test = unpack('N*',$Test);

printf('read:%s <br>',implode($Test));

socket_recv($socket,$Test,4,MSG_WAITALL); // lesen, sollte Status zurückkommen

$Test = unpack('N*',$Test);

printf('Status:%s <br>',implode($Test));

socket_close($socket);

?>

Leider nicht hat sich nix geändert

Hallo mb-stern,

ich habe der Variablen SH_MK1 das folgende Skript angehangen welches auch extern durch, in meinem Fall, KNX angesteuert wird, zugewiesen.
Im Ausleseskript ist SH_MK1 der Parameter 126
siehe hier:

if ($i == 126 ) // Modus WP
	{
	//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
	setValueFloat($varid,$daten_raw[$i]);
      
}
<?
$KNX = GetValueInteger(37604);


if ($IPS_SENDER == "WebFront")
    {
    SetValue($IPS_VARIABLE, $IPS_VALUE);
    }
elseif ($IPS_SENDER == "53246") // Bedienung von KNX
    {
    if ($KNX == 1) // Auto
        {
        $IPS_VALUE = 0;  
        }
     elseif ($KNX == 2) // Party
        {
        $IPS_VALUE = 1;  
        }
     elseif ($KNX == 3) // Aus
        {
        $IPS_VALUE = 4;  
        }
    }

//includes
include "config.php";

// 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>";
//    }
if ($connect != 1)
    {
    echo "ERROR: Nicht verbunden mit WWC Java Console  <br>";
    }

// Daten senden
$msg = pack('N*',3002); //3002 senden aktivieren
$send=socket_write($socket, $msg, 4);

//SetParameter senden;
$msg = pack('N*',3); //Parameter: 3: Heizung Betriebsart
$send=socket_write($socket, $msg, 4);

if ($IPS_VALUE == 0) 
    {
	$msg = pack('N*',0); //Auto        Value: 0:Auto - 2: Party  - 4:Off  - 3:Ferien 
	}
elseif ($IPS_VALUE == 1)
	{
	$msg = pack('N*',2); // Party      Value: 0:Auto - 2: Party  - 4:Off  - 3:Ferien 
	} 
elseif ($IPS_VALUE == 3) 
    {
	$msg = pack('N*',4); //Aus         Value: 0:Auto - 2: Party  - 4:Off  - 3:Ferien 
	}
elseif ($IPS_VALUE == 2) // 
    {
	$msg = pack('N*',3); //Ferien         Value: 0:Auto - 2: Party  - 4:Off  - 3:Ferien 
	}

$send=socket_write($socket, $msg, 4);

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

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

socket_close($socket);


//}


?>

Hallo Kiter11
Danke für die Tips

Ich konnte mit diesem Script und einer Integer-Variable nun eine Steuerung für das WebFront erstellen.

Dieselbe Steuerung habe ich für das Warmwasser eingerichtet…

<?php

//includes

include "39064.ips.php";

// 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>";

// Daten senden

$msg = pack('N*',3002); //3002 senden aktivieren

$send=socket_write($socket, $msg, 4);

//SetParameter senden;

$msg = pack('N*',3); //Parameter: 3: Heizung Betriebsart

$send=socket_write($socket, $msg, 4);

switch($_IPS['VALUE']) {

 

    case 0:

    $msg = pack('N*',0); // Auto                    Value: 0:Auto - 1: Zus. Wärmeerzeugung - 2:Party - 3:Ferien - 4:Off

            

    break;

 

    case 1:

    $msg = pack('N*',1); // Zus. Wärmeerzeugung     Value: 0:Auto - 1: Zus. Wärmeerzeugung - 2:Party - 3:Ferien - 4:Off

    break;

 

    case 2:

    $msg = pack('N*',2); // Party                   Value: 0:Auto - 1: Zus. Wärmeerzeugung - 2:Party - 3:Ferien - 4:Off

    break;

 

    case 3:

    $msg = pack('N*',3); // Ferien                  Value: 0:Auto - 1: Zus. Wärmeerzeugung - 2:Party - 3:Ferien - 4:Off

   

    break;

 

    case 4:

    $msg = pack('N*',4); // Off                     Value: 0:Auto - 1: Zus. Wärmeerzeugung - 2:Party - 3:Ferien - 4:Off

    }

SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);

$send=socket_write($socket, $msg, 4);

/*

gefunden bei:

https://github.com/mhop/fhem-mirror/blob/master/fhem/FHEM/23_LUXTRONIK2.pm

Parameter:

1: Temperatur SetBack

    Value: -5 bis +5

   Allow only integer temperature or with decimal .5

    $setValue = int($realValue * 2) * 5;

2: Brauchwasser Soll Temperatur

    Value 30 - 65

   Allow only integer temperature or with decimal .5

    $setValue = int($realValue * 2) * 5;

3: Heizung Betriebsart

   Value: 0:Auto - 2: Party  - 4:Off

4: Warmwasser Betriebsart

   Value: 0:Auto - 2: Party  - 4:Off

*/

socket_recv($socket,$Test,4,MSG_WAITALL);  // lesen, sollte 3002 zurückkommen

$Test = unpack('N*',$Test);

//printf('read:%s <br>',implode($Test));

socket_recv($socket,$Test,4,MSG_WAITALL); // lesen, sollte Status zurückkommen

$Test = unpack('N*',$Test);

//printf('Status:%s <br>',implode($Test));

socket_close($socket);

?>

Aus Parameter 126 (SH_MK1) erhalte ich aber nicht die richtigen zugehörigen Werte. Da kommt für einige Zustände dasselbe Ergebnis retour.
Stimmt die Werte bei Dir?

Ich lasse das auslese script jede Minute ausführen. Ich habe festgestellt, warum auch immer, das wenn ich das Script manuell ausführe die Werte teilweise nicht richtig aktualisiert werden. Der gelesenen Status von SH_MK1 ist bei mir wie folgt.
0 = Automatik
1 = Party
3 = Aus

Ich glaube gerade gesehen zu haben, das ich da beim schreiben durch KNX einen falschen Wert für Aus sende, das ist noch nicht aufgefallen, da ich die Anlage eigentlich nur zwei Mal im Jahr bediene (Automatik/Aus) und das dann scheinbar immer via Webfront.

Dasselbe habe ich auch beobachtet.
Die Werte, welche gesendet werden, und diejenigen welche über SH_MK1 retour kommen stimmen nicht überein. Nicht nur, dass z.B der Wert von ‚Aus‘ nicht identisch ist, sondern dass zB ‚Ferien‘ ebenfalls den Wert ‚0‘ retour gibt, als wäre die Anlage im Automatik-Modus. Wenn du dann diese Wert zurück in die Variable gibst schaltet die Anlage die ganze Zeit hin und her. Und für mich ist vor allem ‚Ferien‘ ein angestrebter Anlagenzustand.
Daher lässt sich SH_MK1 für mein System nicht verwenden. Aber wie Du schon erwähnst wird das höchstens ein- zweimal im Jahr geschaltet und wenn, dann immer über IPS. Daher ist der Status der Variable ja immer aktuell

Kann die aktuelle Leistung der WP nun abgreifen.
Es ist Wert 257
Hier der Code für die Ausgabe als zweistelligen kW-Wert

if ($i == 257) // Leistung

    {($daten_raw[$i] = $daten_raw[$i]/1000);

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

      $daten_raw[$i] = sprintf("%5.2f", $daten_raw[$i]);

      setValue($varid,$daten_raw[$i]);
1 „Gefällt mir“

Habe nun herausgefunden, wie ich die richtigen Werte für die Betriebsart erhalte. Und zwar kommen die über die 3003 Werte retour, nicht über die 3004 Werte. Dazu ist eine andere Abfrageroutine nötig und natürlich auch andere Java-Daten, damit keine Fehlermeldungen generiert werden.
Her mein Abfragescript für die beiden Werte für den Status des Heizkreises und des Warmwassers.

<?php

//includes

include "39064.ips.php";

include "37025.ips.php";

//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

//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*',3003);

//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); // 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 == 3) // Betriebsart Heizung

    {($daten_raw[$i] = $daten_raw[$i]);

      //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

      setValue($varid,$daten_raw[$i]);

    }

if ($i == 4) // Betriebsart Warmwasser

    {($daten_raw[$i] = $daten_raw[$i]);

      //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

      setValue($varid,$daten_raw[$i]);

    }

}

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;

}

?>