IPS 5.0: hmxml.inc und xmlrpc.inc nicht mehr kompatibel zu PHP 7

Die genannten Dateien sind leider nicht mehr kompatibel zu PHP7. Bislang aufgefallen ist mir, dass

[ul]
[li]die verwendeten Namen der Konstruktoren und
[/li][li]die each() Funktion
[/li][/ul]
nicht mehr unterstützt werden.

Hat bereits jemand eine Idee, wie man bestehende Projekte umstellen kann oder es gar schon gemacht?

Gruß

Burkhard

Hier :
Heizkörperthermostat Heizprogramme per WebFront einstellen - Seite 50
Michael

Hallo Burkhard,

ich habe die alte xmlrpc (Version 3.0.1) genau wie Boui auch nur auf die Weise umgestellt, dass ich diese Meldungen

//Warning:  count(): Parameter must be an array or an object that implements Countable in C:\IP-Symcon\scripts\xmlrpc.inc.php on line 2649

durch Änderung von

// xmlrpc.inc.php ab zeile 2649

			// nicht mehr zulässig bei 5.0 - ersetzt aus der request.php der Version 4.3.0
			//if(!xml_parse($parser, $data, count($data)))
			if (!xml_parse($parser, $data, 1))
 

beseitigt habe.

Mit diesen Meldungen kann ich im Moment noch leben und weiß auch nicht, wie ich die beseitigen kann aufgrund der neuen Struktur der xmlrpc mit vielen einzelnen Dateien. Und mit objektorientierter Programmierung stehe ich auf Kriegsfuß :smiley:


/*

Refresh HM inventory und das Testprogramm für die hmxml geben folgende Warnungen aus

Deprecated:  Methods with the same name as their class will not be constructors in a future version of PHP; xmlrpc_client has a deprecated constructor in C:\IP-Symcon\scripts\xmlrpc.inc.php on line 804
Deprecated:  Methods with the same name as their class will not be constructors in a future version of PHP; xmlrpcresp has a deprecated constructor in C:\IP-Symcon\scripts\xmlrpc.inc.php on line 1949
Deprecated:  Methods with the same name as their class will not be constructors in a future version of PHP; xmlrpcmsg has a deprecated constructor in C:\IP-Symcon\scripts\xmlrpc.inc.php on line 2114
Deprecated:  Methods with the same name as their class will not be constructors in a future version of PHP; xmlrpcval has a deprecated constructor in C:\IP-Symcon\scripts\xmlrpc.inc.php on line 2750
*/

Gruß
Hans

Hallo,

nachdem bumaas (Burkhard) mir geholfen hatte die neue V 4.3 xmlrpc komplett in IPS zu integrieren stellte ich fest, dass ich keine Temperaturen mit xx.5 Grad aufrufen und setzen konnte. Meine Vermutung war, dass dies mit der neuen xmlrpc zu tun hat, was aber nicht der Fall ist.

Betroffen sind die Varianten der hmxml. Burkhard war aufgefallen, dass an diversen Stellen sich diese Befehle für die double, int und boolean Werte befinden:

$params = array($param => new xmlrpcval("$value", "double"));

Dies führt dazu, dass letztendlich der float Wert als String übergeben wird. Da dieser nun in php 7 als z. B. „20,5“ übergeben wird, wurde der Wert nicht korrekt gesetzt. Im CCU Log bekam man auch eine Fehlermeldung. Unter php 5 wurde zwar auch fälschlicherweise der float Wert als String übergeben allerdings mit dem Inhalt „20.5“ was dann zum korrekten Setzen der Temperatur führte.

Hier zur Anschauung die Dumps bei php 7 direkt in der hmxml:

array(1) {
  ["MANU_MODE"]=>
  object(xmlrpcval)#8 (3) {
    ["me"]=>
    array(1) {
      ["double"]=>
      string(4) "21,5"
    }
    ["mytype"]=>
    int(1)
    ["_php_class"]=>
    NULL
  }
}

Ersetzt man die Befehle durch

$params = array($param => new xmlrpcval($value, "double"));

sieht es so aus und es wird eine korrekte Float Variable übergeben:

array(1) {
  ["MANU_MODE"]=>
  object(xmlrpcval)#589 (3) {
    ["me"]=>
    array(1) {
      ["double"]=>
      float(21,5)
    }
    ["mytype"]=>
    int(1)
    ["_php_class"]=>
    NULL
  }
}

Noch ein Hinweis auf HMXML_getParamSetDesc. Dieser Aufruf liefert bei Heizungs- und Wandthermostaten - nicht jedoch bei Heizungsgruppen - in der alten 3.0 xmlrpc den folgenden Fehler:

Warning:  mb_convert_encoding(): Illegal character encoding specified in C:\IP-Symcon\scripts\xmlrpc.inc.php on line 2614

Dieser Fehler besteht auch noch in der neuen 4.3 xmlrpc nur das der Fehlertext nun

Error: HMXML_send() Request to BidCos-Service failed (192.168.178.35) -> Invalid return payload: enable debugging to examine incoming payload (XML error: Invalid character at line 3, column 68935)

lautet.

Burkhard hat im HM Forum bereits eine Anfrage gestellt XML-RPC Response mit ungültigem Zeichen? • HomeMatic-Forum / FHZ-Forum.

Nun noch kurz zur neuen 4.3 xmlrpc. Diese kann man hier https://github.com/gggeek/phpxmlrpc/releases/tag/4.3.0 herunterladen. Danach in das scripts Verzeichnis von IP-Symcon entpacken und in den Skripten die Verweise auf die alte xmlrpc.inc zu ersetzen:

z.B.
require „./xmlrpc.inc.php“ ;

durch

require „./phpxmlrpc-4.3.0/lib/xmlrpc.inc“;

Gruß
Hans

Mhmm, ich habe gerade mal das mit den 0,5er Werten bei mir getestet. Ich bekomme da keinen Fehler. Die Werte werden an die CCU2 gesendet und dort auch klaglos übernommen.

Gesendet von iPad mit Tapatalk

Hallo Boui,

bei mir läuft alles unter Win 10 und bei dir vermutlich auf einem pi oder? Das Verhalten kann durchaus OS abhängig sein - siehe hier https://www.symcon.de/forum/threads/36429-Tankerkoenig-%28Script%29-Umstellung-auf-5-0-erfordert-%C3%84nderungen

Gruß
Hans

Genau, PI 3.

Na dann viel Erfolg.

Gesendet von iPad mit Tapatalk

Na, dann ist bestimmt deine Sprache auf dem Pi nicht korrekt eingestellt, oder ? :wink:
Der Fehler müsste sofern Deutsch mit Trennzeichen Komma eingestellt ist, auch auftreten.
Michael

Steht auf
de_DE.UTF-8 UTF-8

Gesendet von iPad mit Tapatalk

Hallo und guten Abend,

Zwischenzeitlich hat mir Burkhard auch die Lösung mitgeteilt und ich habe mein Testprogramm nochmals laufen lassen - alles scheint ok zu sein :slight_smile:

Einzutragen ist hinter

require "./phpxmlrpc-4.3.0/lib/xmlrpc.inc";
$GLOBALS['xmlrpc_detectencodings'] = 'ISO-8859-1';
PhpXmlRpc\PhpXmlRpc::importGlobals();

Ich selbst bin nun auf V 5.0 und konnte bislang keine Auffälligkeiten feststellen.

Gruß
Hans

1 „Gefällt mir“

Danke für die Informationen bei der Umstellung auf IP-Symcon 5.x
:slight_smile:

Aua, ich hab Kopfweh.

Was muss ich machen ?
2 Dateien herunterladen und irgendwo überschreiben ?

Oder wie sind jetzt genau die weiteren Schritte ?

Leider kann ich mit den einzelnen Bruchstücken gerade für mich keine Lösung finden :frowning:

Kann mir jemand ein kleines „How to“ erklären ?
Ich steh gerade völlig auf dem Schlauch…

Vielen lieben Dank
Sascha

Hallo Sascha,

um den Fehler zu beheben habe ich wie hier (siehe letzter Absatz) beschrieben die neue4.3 xmlrpc heruntergeladen (das komplette zip-Archiv), selbiges im Skriptverzeichnis von IP-Symcon entpackt und in der hmxml.inc.php (so ca. Zeile 70) den Eintrag wie folgt ersetzt:

require „./xmlrpc.inc.php“ ;

durch

require „./phpxmlrpc-4.3.0/lib/xmlrpc.inc“;

Bei mir läufts auch unter IPS 5.0

Gruß

Swifty

Super,

vielen Dank.
Mit der Erklärung läuft das jetzt wieder

Schöne Woche :slight_smile:
Sascha

Hallo,

ich wollte das auch gerade machen, habe aber gar keine „hmxml.inc.php:frowning:

Bei mir gibt es nur eine „xmlrpc.inc.php“ .
Dort ist aber kein require „./xmlrpc.inc.php“ ; drin.

Hat jemand eine Idee?

Geht es bei dir um das Inventory Skript? Alternativ gibt es jetzt auch ein Modul dazu:
https://www.symcon.de/forum/threads/37615-Modul-HMInventory?highlight=hminventory

OK, danke.