PHP 7.4 in Homegear

Hallo,

wir haben Homegear auf PHP 7.4 umgestellt. Größte damit verbundene Änderung ist, dass pthreads nicht mehr unterstützt wird und durch parallel ersetzt wurde. Der Hauptentwickler begründet dies mit (https://github.com/krakjoe/pthreads/issues/929):

It [pthreads] is, in my opinion, broken by design, and fixing it, is simply not worth it.

parallel findet sich auf GitHub und ist hier dokumentiert: https://php.net/parallel.

Insgesamt läuft parallel sehr viel besser und stabiler als pthreads. Die Umstellung lohnt sich also. Es ist allerdings sehr anders…

Auf ein paar Eigenarten sei hingewiesen:

  • Als Vorlage lässt sich das OpenWeatherMap-Gerät (https://github.com/Homegear/Homegear/blob/dev/homegear-miscellaneous/misc/Device%20Description%20Files/OpenWeatherMap.xml) und die Optional-Nodes (z. B. https://github.com/Homegear/homegear-nodes-optional/blob/dev/telegram-bot/telegram-bot.s.php) verwenden.
  • Eine wichtige Eigenart von parallel ist, dass im Thread nicht auf den umgebenden Quelltext zugegriffen werden kann. D. h. im Thread müssen z. B. Klassen wieder mit include oder require eingebunden werden. Es gibt auch einen funktional gleichwertigen Parameter an die Runtime-Klasse zum Bootstrapping, dieser hat bei uns aber auf Anhieb nicht funktioniert.
  • Weiterhin wichtig ist, dass Kanalnamen über alle aktuell laufenden Skripte hinweg einzigartig sein müssen. Sonst werden Ereignisse u. U. an andere Skripte gesendet. Homegear prüft bei jedem Skriptstart, ob dieses Skript in einem neuen Prozess ausgeführt werden muss. Es kann also sein, dass zwei Skripte in zwei unterschiedlichen Prozessen laufen (alle von einem Skript gestarteten Prozesse, Threads und eingebundenen Dateien werden aber im gleichen Prozess ausgeführt). Die Kanalkommunikation funktioniert nicht über diese Grenze hinweg. Nutzt diese Funktion also bitte ausschließlich für die Kommunikation zwischen Threads, welche von einem Skriptaufruf aus gestartet werden und keinesfalls als Feature für die Kommunikation zwischen unabhängig voneinander gestarteten Skripten.

Wir warten noch auf die Anpassungen einiger Module an parallel, bevor PHP 7.4 in Testing und Stable aufgenommen wird. Für alle nicht öffentlichen Homegear-Module gilt, dass diese zeitnah angepasst werden müssen. Sobald Testing und Stable auf PHP 7.4 umgestellt werden, werden die Module sonst nicht mehr funktionieren. Die Testing-Version ist für Mitte Mai geplant, die Stable-Version für Ende Mai.

Fragen zu diesem Thema bitte in diesem Post.

Viele Grüße

Sathya

3 Likes

Ergänzend möchte ich für alle Nutzer der PHP Implmentierung für die Xiaomi Komponenten (https://github.com/pfandfrei/Homegear-Xiaomi-Smarthome) folgendes hinzufügen:
Aufgrund der PHP-Umstellung wird diese Implementierung in zukünftigen Homegear Versionen nicht mehr funktionieren. Ich habe aber bereits eine neue Version erstellt, die mit Hilfe von @Sim bereits getestet werden konnte.
Zur Umstellung bedarf es nur, die alten Dateien zu entfernen und die Dateien aus dem neuen Repository (https://github.com/pfandfrei/MiSmartHome) hinzuzufügen.
Die angelernten Geräte bleiben erhalten und es müssen außer einem Neustart keine weiteren Aktionen vorgenommen werden.
Die neue Version ist bereits unter der letzten Stable Version 0.7.45 von Homegear oder den Nightlies lauffähig.
Sollte es Fragen oder Probleme geben, dann macht bitte einen eigenen Thread hier oder in Github auf. Ich werde mich dann gerne darum kümmern.

3 Likes