UPDATE:
Inzwischen wurden die Module der IPSLibrary von @Brownson für IPS 7.0 fit gemacht. Es sind nun keine manuellen Änderungen an den Modulen mehr notwendig.
Stattdessen sollten - vor einem Update auf 7.0 - die Module der Library aktualisiert werden.
Angepasst wurden:
- IPSLogger 2.50.17
- IPSTwilight 2.50.10
- IPSHighcharts 2.50.13
VERALTET (oder wenn man die Änderungen manuell durchführen muss, weil mal zuerst auf Symcon Version 7.0 geupdatet hat):
Aktuell kommt es beim Einsatz der IPSLibrary noch zu Fehlern unter IPS 7.0
Bislang habe ich folgende Stellen abgeändert:
IPSLogger_PhpErrorHandler.inc.php:
//function IPSLogger_PhpErrorHandler ($ErrType, $ErrMsg, $FileName, $LineNum, $Vars)
function IPSLogger_PhpErrorHandler ($ErrType, $ErrMsg, $FileName, $LineNum) //$Vars entfernt
{
//if (error_reporting() == 0) {return false;} // No Reporting of suppressed Erros (suppressed @)
if (error_reporting() !== E_ALL ^ E_DEPRECATED) {return false;} // No Reporting of suppressed Erros (suppressed by @), see https://www.php.net/manual/en/language.operators.errorcontrol.php#125938
...
case E_DEPRECATED:
IPSLogger_Err("PHP", 'Deprecated: '.$ErrMsg.$ErrorDetails);
break;
...
}
...
//$old_error_handler = set_error_handler("IPSLogger_PhpErrorHandler",E_ALL);
$old_error_handler = set_error_handler("IPSLogger_PhpErrorHandler",E_ALL ^ E_DEPRECATED);
Hier gab es mehrere Probleme:
- die Signatur der Funktion hat einen Parameter zu viel ($Vars),
- E_DEPRECATED muss behandelt werden und
- E_DEPRECATED muss beim error_handler deaktiviert werden.
IPSHighcharts.inc.php:
function PopulateValue($val, $serie)
{
// Werte ersetzten (sinnvoll für Boolean, oder Integer - z.B.: Tür/Fenster-Kontakt oder Drehgriffkontakt)
if ($serie['ReplaceValues'] != false)
{
//if (isset($serie['ReplaceValues'][$val]))
if (is_int($val) && isset($serie['ReplaceValues'][$val]))
Hier kam es zu einem Fehler wenn $val ein Float übergeben wurde
(„Abort Processing during exceed of maximal ErrorCount: Implicit conversion from float 0.06666666666666667 to int loses precision
Error in Script C:\ProgramData\Symcon\scripts\IPSLibrary\app\modules\Charts\IPSHighcharts\IPSHighcharts.inc.php on Line 839“)
function GetContentVariableString($cfg, $callBy, $callIdent)
{
...
//$s = "<iframe src='./user/IPSHighcharts/IPSTemplates/$chartType.php?$callBy=" . $callIdent . "' " .
$s = "<iframe src='/user/IPSHighcharts/IPSTemplates/$chartType.php?$callBy=" . $callIdent . "' " .
Notwendige Pfadanpassung für neue Visualisierung.
function CreateConfigFile($stringForCfgFile, $id, $charttype = 'Highcharts')
{
//$path = "webfront\user\IPSHighcharts\\" . $charttype;
$path = "user\IPSHighcharts\\" . $charttype;
//to be compatible for older IPS versions (<7.0)
if (file_exists(IPS_GetKernelDir() . 'webfront')) {
$path = 'webfront\\' . $path;
}
Das Unterverzeichnis „webfront“ wurde aufgelöst
IPSTwilight.ips.php
//Zeile 365
//imagegif ($image, IPS_GetKernelDir().'media/'.$fileName.'.gif', 90);
imagegif ($image, IPS_GetKernelDir().'media/'.$fileName.'.gif');
//Zeile 477
//imagegif ($image, IPS_GetKernelDir().'media/'.$fileName.'.gif', 90);
imagegif ($image, IPS_GetKernelDir().'media/'.$fileName.'.gif');
Hier kam es unter PHP 8 zu einem ArgumentCountError.
IPSCam_Manager.class.php
Hier gibt es auch einige Stellen, bei denen das „webfront“ Verzeichnis genutzt wird. Das Modul setze ich aber nicht mehr ein.