Alpha Innotec Wärmepumpe über Lan anbinden

Ist es möglich hier auch noch den aktuellen Status der Wärmepumpe auszulesen? Also z.B „Wärmepumpe läuft“, „Wärmepumpe steht seit …“ und "Störung … "
Würde das funktionieren wäre echt klasse.

Gesendet von iPad mit Tapatalk

Habe ein bißchen gegoogelt und bei KNX-User folgendes gefunden;

Hier noch ein paar Infos zur Kodierung der aktuellen Betriebsart in Feld 119,

0 : Heizbetrieb

1 : Keine Anforderung

2 : Netz-Einschaltverzoegerung

3 : SSP Zeit

4 : Sperrzeit

5 : Brauchwasser

6 : Estrich-Programm

7 : Abtauen

8 : Pumpenvorlauf

9 : Thermische Desinfektion

10: Kuehlbetrieb

11: ?

12: Schwimmbad

13: Heizen Ext.

14: Brauchwasser Ext.

15: ?

16: Durchflussueberwachung

17: ZWE Betrieb

Habe in java_daten.php den Eintrag " Hauptmenü_Status_Zeile3 " in Anlagenstatus umbenannt und dann folgendes in das "wp_daten_holen"skript eingefügt;

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 = "SSP Zeit";
break;
case 4:
$status = "Sperrzeit";
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);
    }

Oben unter variablen muss noch $status = „“; eingetragen werden…

Mit nem Array wäre das natürlich schneller und eleganter, damit steh ich aber (noch) aufm Kriegsfuss…

Ich hoffe, es hilft dem Ein oder Anderen.

Sven
Edit: Quergecheckt hab ich das Ganze noch nicht,ich hoffe das passt auch so!

Hallo,

ich brauch hier mal Hilfe. Ich habe das Skript wp_daten_holen angelegt und es kommen auch Daten aber es werden keine Variablen angelegt. Kann es sein das mir das Instal Skript fehlt was die Variablen anlegt? Die 25100 ist das java_daten Skript.

<?php
//includes
$IpWwc = "192.168.2.155"; // IP der Wärmepumpe
$WwcJavaPort = "8889"; // Port der Wärmepumpe
 include"25100.ips.php";

//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*',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 <= 28) // Temperaturen
	{($daten_raw[$i] = $daten_raw[$i]*0.1);
	  printf('(%d)%s : %.1f &#176C<br>',$i,$java_dataset[$i],$daten_raw[$i]);
	}

if ($i >= 29 & $i <= 34) // Eingänge
{if ($daten_raw[$i] == 1)
	printf('(%d)%s : EIN<br>',$i,$java_dataset[$i]);
 else
	printf('(%d)%s : AUS<br>',$i,$java_dataset[$i]);
}

if ($i == 35) // Ausgänge
	printf('(%d)%s : %.1f Volt<br>',$i,$java_dataset[$i],$daten_raw[$i]);

if ($i >= 36 & $i <= 55) // Ausgänge
{if ($daten_raw[$i] == 1)
	printf('(%d)%s : EIN<br>',$i,$java_dataset[$i]);
 else
	printf('(%d)%s : AUS<br>',$i,$java_dataset[$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]);
	}
if ($i == 57) // Zähler
	{($daten_raw[$i] = $daten_raw[$i]);
	  printf('(%d)%s : %d<br>',$i,$java_dataset[$i],$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]);
	}
if ($i == 59) // Zähler
	{($daten_raw[$i] = $daten_raw[$i]);
	  printf('(%d)%s : %d<br>',$i,$java_dataset[$i],$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]);
	}

if ($i >= 67 & $i <= 77) // AblaufZeiten
	{($daten_raw[$i] = date("H:i:s",$daten_raw[$i]));
	  printf('(%d)%s : %s<br>',$i,$java_dataset[$i],$daten_raw[$i]);
	}

if ($i >= 78 & $i <= 158) // AblaufZeiten
	{
	  printf('(%d)%s : %d<br>',$i,$java_dataset[$i],$daten_raw[$i]);
	}
}
$time2 = time();
print( "Auslesedauer: " . ($time2 - $time1) . " secs
");

?>

Und das wird beim Ausführen angezeigt, nur keine Variablen angelegt.
PASS: Verbunden mit WWC Java Console 192.168.2.155 Port: 8889 ============================================================== Ausleszeit: 29.10.2017 - 19:54:31 Uhr Refresh alle 5s !! TEST !============================================================== Status:0 Länge der nachfolgenden Werte:249 ============================================================== (10)Temperatur_TVL_Vorlauf : 21.3 &#176C(11)Temperatur_TRL_Ruecklauf : 21.5 &#176C(12)Sollwert_TRL_HZ_Ruecklauf_Soll : 22.7 &#176C(13)Temperatur_TRL_ext_Ruecklauf_Extern : 5.0 &#176C(14)Temperatur_THG_Heissgas : 35.4 &#176C(15)Temperatur_TA_Aussenfuehler : 8.6 &#176C(16)Mitteltemperatur : 10.2 &#176C(17)Temperatur_TBW : 45.4 &#176C(18)Einst_BWS_akt : 45.0 &#176C(19)Temperatur_TWE_Waermequelle_Ein : 17.1 &#176C(20)Temperatur_TWA_Waermequelle_Aus : 17.0 &#176C(21)Temperatur_TFB1 : 75.0 &#176C(22)Sollwert_TVL_MK : 0.0 &#176C(23)Temperatur_RFV : 0.0 &#176C(24)Temperatur_TFB2 : 0.0 &#176C(25)Sollwert_TVL_MK2 : 0.0 &#176C(26)Temperatur_TSK : 0.0 &#176C(27)Temperatur_TSS : 0.0 &#176C(28)Temperatur_TEE : 0.0 &#176C(29)ASDin : EIN(30)BWTin : AUS(31)EVUin : EIN(32)HDin : AUS(33)MOTin : EIN(34)NDin : EIN(35)PEXin : 0.0 Volt(36)SWTin : AUS(37)AVout : AUS(38)BUPout : AUS(39)HUPout : EIN(40)MA1out : AUS(41)MZ1out : EIN(42)VENout : AUS(43)VBOout : AUS(44)VD1out : AUS(45)VD2out : AUS(46)ZIPout : EIN(47)ZUPout : AUS(48)ZW1out : AUS(49)ZW2SSTout : AUS(50)ZW3SSTout : AUS(51)FP2out : AUS(52)SLPout : AUS(53)SUPout : AUS(54)MZ2out : AUS(55)MA2out : AUS(56)Zaehler_BetrZeitVD1 : 1227.30 h(57)Zaehler_BetrZeitImpVD1_Impulse_Verdichter : 2293(58)Zaehler_BetrZeitVD2 : 0.00 h(59)Zaehler_BetrZeitImpVD2 : 0(60)Zaehler_BetrZeitZWE1 : 39 h(61)Zaehler_BetrZeitZWE2 : 187 h(62)Zaehler_BetrZeitZWE3 : 0 h(63)Zaehler_BetrZeitWP : 1227 h(64)Zaehler_BetrZeitHz : 862 h(65)Zaehler_BetrZeitBW : 364 h(66)Zaehler_BetrZeitKue : 0 h(67)Time_WPein_akt : 01:00:01(68)Time_ZWE1_akt : 01:00:00(69)Time_ZWE2_akt : 01:00:00(70)Timer_EinschVerz : 01:00:00(71)Time_SSPAUS_akt : 01:00:00(72)Time_SSPEIN_akt : 01:00:00(73)Time_VDStd_akt : 02:36:04(74)Time_HRM_akt : 01:00:00(75)Time_HRW_akt : 01:04:38(76)Time_LGS_akt : 01:00:00(77)Time_SBW_akt : 01:00:00(78)Code_WP_akt : 62(79)BIV_Stufe_akt : 1(80)WP_BZ_akt : 5(81)SoftStand1 : 86(82)SoftStand2 : 51(83)SoftStand3 : 46(84)SoftStand4 : 55(85)SoftStand5 : 57(86)SoftStand6 : 0(87)SoftStand7 : 0(88)SoftStand8 : 0(89)SoftStand9 : 0(90)SoftStand10 : 0(91)AdresseIP_akt : -1062731109(92)SubNetMask_akt : -256(93)Add_Broadcast : -256(94)Add_StdGateway : -1062731263(95)ERROR_Time0 : 1481121600(96)ERROR_Time1 : 1481121595(97)ERROR_Time2 : 1481121535(98)ERROR_Time3 : 1481121530(99)ERROR_Time4 : 1481121119(100)ERROR_Nr0 : 725(101)ERROR_Nr1 : 725(102)ERROR_Nr2 : 725(103)ERROR_Nr3 : 725(104)ERROR_Nr4 : 725(105)AnzahlFehlerInSpeicher : 5(106)Switchoff_file_Nr0 : 9(107)Switchoff_file_Nr1 : 9(108)Switchoff_file_Nr2 : 9(109)Switchoff_file_Nr3 : 9(110)Switchoff_file_Nr4 : 9(111)Switchoff_file_Time0 : 1509208046(112)Switchoff_file_Time1 : 1509253561(113)Switchoff_file_Time2 : 1509257926(114)Switchoff_file_Time3 : 1509271445(115)Switchoff_file_Time4 : 1509297539(116)Comfort_exists : 0(117)HauptMenuStatus_Zeile1 : 1(118)HauptMenuStatus_Zeile2 : 0(119)HauptMenuStatus_Zeile3 : 1(120)HauptMenuStatus_Zeit : 5745(121)HauptMenuAHP_Stufe : 0(122)HauptMenuAHP_Temp : 0(123)HauptMenuAHP_Zeit : 0(124)SH_BWW : 1(125)SH_HZ : 1(126)SH_MK1 : 0(127)SH_MK2 : 1(128)Einst_Kurzrpgramm : 0(129)StatusSlave_1 : 0(130)StatusSlave_2 : 0(131)StatusSlave_3 : 0(132)StatusSlave_4 : 0(133)StatusSlave_5 : 0(134)AktuelleTimeStamp : 1509303304(135)SH_MK3 : 1(136)Sollwert_TVL_MK3 : 0(137)Temperatur_TFB3 : 0(138)MZ3out : 0(139)MA3out : 0(140)FP3out : 0(141)Time_AbtIn : 0(142)Temperatur_RFV2 : 0(143)Temperatur_RFV3 : 0(144)SH_SW : 3(145)Zaehler_BetrZeitSW : 0(146)FreigabKuehl : 0(147)AnalogIn : 0(148)SonderZeichen : 0(149)SH_ZIP : 1(150)WebsrvProgrammWerteBeobarten : 0(151)WMZ_Heizung : 126071(152)WMZ_Brauchwasser : 56904(153)WMZ_Schwimmbad : 0(154)WMZ_Seit : 129233(155)WMZ_Durchfluss : 0(156)AnalogOut1 : 0(157)AnalogOut2 : 0(158)Time_Heissgas : 0Auslesedauer: 0 secs

Das von Dir gepostete Skript arbeitet wie es soll. Da sind keine Befehle enthalten, die Variablen anlegen oder Werte zuweisen würden.

Zum Variablen anlegen brauchst Du IPS_CreateVariable und zum Zuweisen eines Wertes brauchst Du SetValue.

Hallo,
ja das Skript macht was es soll. Der Michael hat in Post #57 die Variablen angelegt und in dem Bild ist zu sehen das es ein install Skript gibt was die Variablen anlegt(Denk ich mir so). Ich habe wenn ich die Zip aus Post #2 Downloade aber leider kein install Skript dabei. Kann mir jemand dieses Skript zur Verfügung stellen??

Vielen Dank.

Du kannst diese Funktion in der wp_daten_holen.php einfügen.
Mindestens ist das bei mir so drin und funktioniert.

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;
}

Hallo,

ich hätte auch gerne den Anlagenstatus eingebunden, bekomme aber eine Fehlermeldung wenn ich das wp_daten skript abändere…

könnt ihr hier einen Fehler entdecken?

<?php
//includes
include "38607 /*[Heizung\config]*/.ips.php";
include "51479 /*[Heizung\java_daten]*/.ips.php";

//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ä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]);
	}

if ($i >= 29 & $i <= 34) // Eingänge
{if ($daten_raw[$i] == 1)
	printf('(%d)%s : EIN<br>',$i,$java_dataset[$i]);
 else
	printf('(%d)%s : AUS<br>',$i,$java_dataset[$i]);
}

if ($i == 35) // Ausgänge
	printf('(%d)%s : %.1f Volt<br>',$i,$java_dataset[$i],$daten_raw[$i]);

if ($i >= 36 & $i <= 55) // Ausgänge
{if ($daten_raw[$i] == 1)
	printf('(%d)%s : EIN<br>',$i,$java_dataset[$i]);
 else
	printf('(%d)%s : AUS<br>',$i,$java_dataset[$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]);
	}
if ($i == 57) // Zähler
	{($daten_raw[$i] = $daten_raw[$i]);
	  printf('(%d)%s : %d<br>',$i,$java_dataset[$i],$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]);
	}
if ($i == 59) // Zähler
	{($daten_raw[$i] = $daten_raw[$i]);
	  printf('(%d)%s : %d<br>',$i,$java_dataset[$i],$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]);
	}

if ($i >= 67 & $i <= 77) // AblaufZeiten
	{($daten_raw[$i] = date("H:i:s",$daten_raw[$i]));
	  printf('(%d)%s : %s<br>',$i,$java_dataset[$i],$daten_raw[$i]);
	}

if ($i >= 78 & $i <= 158) // AblaufZeiten
	{
	  printf('(%d)%s : %d<br>',$i,$java_dataset[$i],$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 = "SSP Zeit";
break;
case 4:
$status = "Sperrzeit";
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);
    }  
}
$time2 = time();
print( "Auslesedauer: " . ($time2 - $time1) . " secs
");


?>

Auch die Variablen werden nicht angelegt…

Hier der Fehler:
)ERROR_Time0 : 1509600726(96)ERROR_Time1 : 1506169061(97)ERROR_Time2 : 1506096048(98)ERROR_Time3 : 1506095913(99)ERROR_Time4 : 1506095911(100)ERROR_Nr0 : 724(101)ERROR_Nr1 : 711(102)ERROR_Nr2 : 711(103)ERROR_Nr3 : 711(104)ERROR_Nr4 : 719(105)AnzahlFehlerInSpeicher : 5(106)Switchoff_file_Nr0 : 9(107)Switchoff_file_Nr1 : 9(108)Switchoff_file_Nr2 : 9(109)Switchoff_file_Nr3 : 9(110)Switchoff_file_Nr4 : 9(111)Switchoff_file_Time0 : 1510250485(112)Switchoff_file_Time1 : 1510238635(113)Switchoff_file_Time2 : 1510242268(114)Switchoff_file_Time3 : 1510245040(115)Switchoff_file_Time4 : 1510248115(116)Comfort_exists : 1(117)HauptMenuStatus_Zeile1 : 1(118)HauptMenuStatus_Zeile2 : 0(119)Anlagenstatus : 1
Fatal error: Call to undefined function CreateVariableByName() in /var/lib/symcon/scripts/11613.ips.php on line 190

Das sieht nicht nach einem Fehler aus, sondern nach der Ausgabe der Daten der Wärmepumpe.

Hi.
Ja, oben schon. Nur die letzte Zeile nicht, denke ich.
Irgendetwas scheint aber nicht zu passen, da die Variablen nicht angelegt werden.

Ach so, sorry. Habe nicht aufmerksam gelesen.

Das Skript versucht, die Funktion CreateVariableByName() aufzurufen, die es jedoch nicht zu geben scheint. Wie bereits in #86 erwähnt.

Grüße,
Christoph

Hallo im Anhang mein Skript, bei mir läuft es jetzt.

<?php
//includes
$IpWwc = "192.168.2.155"; // IP der Wärmepumpe
$WwcJavaPort = "8889"; // Port der Wärmepumpe
 include"25100 /*[Stammdaten\Heizungsanlage\Skript/Heizungsanlage\Werte-Wärmepumpe\java_daten]*/.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*',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 <= 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]); 
    } 
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]); 
    } 
} 

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; 
} 
?>

Danke, damit hat es geklappt!

Gesendet von iPad mit Tapatalk

Hallo Leute,

ich grab das hier mal nach oben, da es dazu passt:

Nachdem das Auslesen der Daten bisher 1a funktioniert hat, habe ich seit kurzen utopische Werte für Außentemperatur und Mitteltemperatur. (~430 Mio °C) :eek:

Das komische ist, dass auf der Webseite (‚ip‘/Webserver/index.html) und auf dem Display die normalen Werte angezeigt werden.

Dazu kommt, das die Wärmemengen auch nicht passen, diese werden allerdings schon auf der Webseite der Wärmepumpe und auch am Display falsch angezeigt: Wärmemenge Heizung -21,5Mio kWh. :eek:
Anfrage bei AI läuft seit Monaten…

Hat das Phänomen sonst noch wer oder liegt es an mir? :confused:

Softwarestand ist V2.81

Grüße

Nach intensivem Studium der CSV-Werte scheint der Fehler mit den Temperaturen aufzutreten wenn diese negativ werden. Ist das eventuell ein PHP5 Problem mit Float-Werten?

Hallo User813

Du bist nicht der einzige… Php Crack bin ich auch nicht deshalb sieht die Lösung nicht gerade schön aus, funktioniert aber.

Im Script die Stelle suchen if ($i >= 10 & $i <= 28) // Temperaturen
dann den MinusTest hinzufügen.

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]);
	}

hoffe es klappt.
thx
tschewie

Guten Tag,

Läßt sich die Anbindung derart erweitern, dass sich auch Einstellungen ändern kann?
Bis jetzt, so,habe ich es verstanden, kann ich nur Werte einlesen.
Wie kann Ich Sollwerte übergeben?

Danke, freundliche Grüsse, erwe

Leider komme ich nicht an die Daten der Bivalenzstufe und die aktuelle Leistung.
Habt ihr einen Tip für mich ?
Den Rest hole ich mir per Modbus mit dem GLT Modul.

Hallo,

wäre einer von Euch so nett und würde die Zip Datei nochmal anhängen, in der die dll Datei sowie die PHP Dateien enthalten sind? Sind anscheinend verschwunden!!!
Ich möchte das ganze auch gerne mit einer Novelan Wärmepumpe mit Luxtronic 2 testen…
Ich danke Euch.

Hallo, ich habe seit gestern meine Wärmepumpe am laufen. Das Script funktioniert soweit, nur die Erweiterung um den Status zeigt mir leider immer nur „Heizbetrieb“ an (Status ändert sich nicht). Kann mir da jemand weiterhelfen?

Gibt es schon eine Möglichkeit von IPS aus den Betrieb (Automatik, Party, Aus) und eventuell sogar die Temperatur +/- zu verstellen?

Hallo,

Brauchwasser schalte ich wie folgt (aus oder Party):

<?



//includes
include "WP-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>";
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(15593))
	{//Value senden;
	$msg = pack('N*',2); // Party      Value: 0:Auto - 2: Party  - 4:Off
	} else {
	$msg = pack('N*',4); //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);


?>

Heizbetrieb (aus oder Party):

<?



//includes
include "WP-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>";
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(15593))
	{//Value senden;
	$msg = pack('N*',2); // Party      Value: 0:Auto - 2: Party  - 4:Off
	} else {
	$msg = pack('N*',4); //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);


?>

WP-config.php:

<?
// Hier werden die Config Variablen gespeichert
$IpWwc = "192.168.0.248";
$WwcJavaPort = "8888";
$SiteTitle = "WÄRMEPUMPE";
?>