Event-Haendler PHP 8

DirkMa

Neuer User
Mitglied seit
4 Apr 2016
Beiträge
195
Punkte für Reaktionen
27
Punkte
28
Hallo @riogrande75 ,

ich habe seid einiger Zeit den Event-Haendler auf einer Raspberry 4 am laufen. Ich bin gerade dabei auf eine Raspberry 5 umzusteigen.
In diesem Zusammenhang habe ich PHP 8 installiert. Hiermit scheint der Haendler nicht zu laufen.

Muss ich hier auf 7 wechseln oder gibt es eine Haendler Version die auch auf PHP 8 läuft?

Gruß

Dirk
 
Ich habe den (für mich adaptierten) Eventhandler auch mit PHP 8 laufen. Waren nur ein paar Änderungen soweit ich mich erinnere
Welche Fehlermeldung kommt denn beim Start?
 
Hi @riogrande75 ,

kenne mich damit wirklich nicht aus (-:

PHP Warning: Undefined property: Dahua_Functions::$username in /home/pi/dahua/event-haendler.php on line 174
PHP Fatal error: Uncaught TypeError: fwrite(): Argument #1 ($stream) must be of type resource, false given in /home/pi/dahua/event-haendler.php:103
Stack trace:
#0 /home/pi/dahua/event-haendler.php(103): fwrite()
#1 /home/pi/dahua/event-haendler.php(179): Dahua_Functions->Send()
#2 /home/pi/dahua/event-haendler.php(234): Dahua_Functions->Login()
#3 /home/pi/dahua/event-haendler.php(7): Dahua_Functions->Main()
#4 {main}
thrown in /home/pi/dahua/event-haendler.php on line 103

Gruß

Dirk
 
Hi,

erst einmal danke. Ich werde das die Tage mal ausprobieren und eine Rückmeldung geben.

Gruß

Dirk
 
Hi @riogrande75 ,

nochmals danke für deine Unterstützung.
Das Script lässt sich erst einmal starten. Bricht aber ab, sobald die Funktion "logging()" aufgerufen wird.

<** Dahua VTO Eventempfaenger START **>
PHP Fatal error: Uncaught Error: Call to undefined function curl_init() in /home/pi/dahua/vto_php8.php:420
Stack trace:
#0 /home/pi/dahua/vto_php8.php(285): Dahua_Functions->SaveSnapshot()
#1 /home/pi/dahua/vto_php8.php(68): Dahua_Functions->EventHandler()
#2 /home/pi/dahua/vto_php8.php(264): Dahua_Functions->KeepAlive()
#3 /home/pi/dahua/vto_php8.php(8): Dahua_Functions->Main()
#4 {main}
thrown in /home/pi/dahua/vto_php8.php on line 420

z.B.:
elseif($eventCode == 'VideoMotion'){
logging("Event VideoMotion");
$this->SaveSnapshot();
}

2025-03-07 08:09:32.000000: Login success
2025-03-07 08:09:32.000000: MAIN query args sent, SessionID:
2025-03-07 08:09:32.000000: Started keepAlive thread
2025-03-07 08:09:32.000000: Event Manager subscription reply
2025-03-07 08:10:44.000000: Event TimeChange, BeforeModifyTime: 07-03-2025 08:10:44, ModifiedTime: 07-03-2025 08:10:44
2025-03-07 08:10:44.000000: Event NTPAdjustTime with 172.16.0.1 success
2025-03-07 08:14:22.000000: Event VideoMotion

Evtl. liegt es daran, dass ich ein Raspberry 5 mit Bookworm in der 64bit Version nutze. Hast du da eine Idee?

Gruß

Dirk
 
Zuletzt bearbeitet:
Nein. Nicht auf die Schnelle.
Du kannst aber den Aufruf der logging Funktion einfach auskommentieren - dann sollte es laufen.
Oder du fragst ChatGPT, der hilft mir in solchen Fällen gleich mit der Korrektur.
 
Hi nochmal,

Fehler gefunden. Es lag an einer fehlenden, zur PHP-Version passenden, curl.

Vielen lieben Dank

Dirk
 
kann es sein, dass der Eventhandler mit einer neueren JS nicht klar kommt? Ich habe seit einiger Zeit eine extreme Verzögerung bei meinen Telegram Messages. Ich habe zwei Messages konfiguriert: "Es hat jemand geklingelt:" und dann das Foto vom klingeln.

Habe dann im ioBroker mal geschaut und ich bekomme folgende Fehlermeldung:
Code:
2025-03-13 18:21:33.335 - error: javascript.0 (26445) script.js.common.Dahua.DahuaEvent: SyntaxError: Unexpected non-whitespace character after JSON at position 238
2025-03-13 18:21:33.336 - error: javascript.0 (26445) at JSON.parse ()
2025-03-13 18:21:33.336 - error: javascript.0 (26445) at DahuaVTO.receive (script.js.common.Dahua.DahuaEvent:285:20)
2025-03-13 18:21:33.336 - error: javascript.0 (26445) at Socket.emit (node:events:518:28)
2025-03-13 18:21:33.336 - error: javascript.0 (26445) at Socket.emit (node:domain:489:12)
2025-03-13 18:21:33.336 - error: javascript.0 (26445) at addChunk (node:internal/streams/readable:561:12)
2025-03-13 18:21:33.336 - error: javascript.0 (26445) at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)
2025-03-13 18:21:33.336 - error: javascript.0 (26445) at Socket.Readable.push (node:internal/streams/readable:392:5)
2025-03-13 18:21:33.336 - error: javascript.0 (26445) at TCP.onStreamRead (node:internal/stream_base_commons:191:23)
2025-03-13 18:21:33.537 - error: host.iobroker Caught by controller[0]: SyntaxError: Unexpected non-whitespace character after JSON at position 238
2025-03-13 18:21:33.538 - error: host.iobroker Caught by controller[0]: at JSON.parse ()
2025-03-13 18:21:33.538 - error: host.iobroker Caught by controller[0]: at DahuaVTO.receive (script.js.common.Dahua.DahuaEvent:286:20)
2025-03-13 18:21:33.538 - error: host.iobroker Caught by controller[0]: at Socket.emit (node:events:518:28)
2025-03-13 18:21:33.538 - error: host.iobroker Caught by controller[0]: at Socket.emit (node:domain:489:12)
2025-03-13 18:21:33.538 - error: host.iobroker Caught by controller[0]: at addChunk (node:internal/streams/readable:561:12)
2025-03-13 18:21:33.538 - error: host.iobroker Caught by controller[0]: at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)
2025-03-13 18:21:33.538 - error: host.iobroker Caught by controller[0]: at Socket.Readable.push (node:internal/streams/readable:392:5)
2025-03-13 18:21:33.538 - error: host.iobroker Caught by controller[0]: at TCP.onStreamRead (node:internal/stream_base_commons:191:23)
2025-03-13 18:21:33.538 - error: host.iobroker instance system.adapter.javascript.0 terminated with code 1 (JS_CONTROLLER_STOPPED)
2025-03-13 18:21:33.538 - info: host.iobroker Restart adapter system.adapter.javascript.0 because enabled

Das kommt immer wenn jemand klingelt?!
 
Wenn du das Script für deine Bedürfnisse mit JS, ioBroker,etc. anpasst, dann must du halt solche Fehler auch selber finden.
Das Script ist in PHP geschrieben, hier kann ich noch ein wenig helfen wenn da PHP Fehler kommen.
Außer dir hat aber wohl keiner Ahnung, was du da zusammengestrickt hast.

Kleiner Tip: Ich nutze mittlerweile ChatGPT, der mir die Fehler findet und Lösungen anbietet.
 
mit chatgpt hatte ich es auch versucht, aber dann bekomme ich das Script zwar zum Laufen, aber wichtige Events werden dann nicht mehr in den iobroker geschrieben. Am Script und Blockly habe ich nichts geändert, also kann es nur an iobroker oder jscript liegen... :|
 
Hi,

wenn du das nicht zum laufen bekommst, ich mache grundsätzlich das gleiche, versende allerdings E-Mails und das funktioniert. Das allerdings ohne den ioBroker. Wie übergibst du die Daten an den ioBroker?

Gruß

Dirk
 
Zuletzt bearbeitet:
ich habe das Script im iobroker laufen. Per mqtt bekommt iobroker die Daten. Telegram greift dann auf den Datenpunkt zu. Ich schicke zwei Nachrichten. Die erste ist der Text und dieser kommt auch sofort via Telegram an. Die zweite ist nur das Bild und das kommt verzögert an. Wie gesagt, bewusst an diesem Setup habe ich nichts verändert und das lief auch so seit knapp 4 Jahren.

EDIT: Sehe gerade in den älteren Logs (Anfang März), dass dieser Fehler auch kam und das Bild trotzdem pünktlich ankam. Interessanterweise wird das Klingelevent in den Logs aus Februar gar nicht angezeigt - dementsprechend auch kein Fehler...
 
Zuletzt bearbeitet:
Hi,

habe zwar auch den ioBroker laufen, allerdings nicht für dieses Skript. Bei mir läuft alles auf einer Raspberry. Das Skript läuft unter Bookworm direkt auf der Raspberry. Wenn ich aus dem Urlaub zurück bin schau ich mir das mal an.

Gruß

Dirk
 
  • Like
Reaktionen: Pseudoreal
was vielleicht noch interessant ist:
Das Bild wird korrekt auf der Synology abgelegt. Im Log sehe ich auch, dass Telegram das Bild quasi 2Sekunden später versendet. Nur kommt es eben 2 Minuten später an... vielleicht liegt es gar nicht am Script, da dieses eigentlich seine Arbeit erledigt hat. Trotzdem ist dieser JSON error und das anschließende Neustarten nervig.
 
Hi,

habe mir das nochmal angeschaut. Zugegebener Weise, bin ich da auch kein Experte. Da es bei mir wie gewünscht funktioniert und ich nicht genau weis, wie ich das Skript im ioBroker einbinde und die Informationen an den Telegrammadapter übergebe werde ich mich nicht weiter damit beschäftigen. Solltest du weiterhin Hilfe benötigen, müsstest du mir die entsprechenden Hilfestellungen geben. Das wiederum würde ich dann allerdings in einen neuen Thread machen.

Gruß

Dirk
 
Es muss irgendwie an Telegram oder so liegen. Das Bild wird zeitnah abgelegt, so dass das Script seine Arbeit erledigt hat. Aber dann dauert es eine Minute bis das Bild verschickt wird...
 
Kostenlos!

Statistik des Forums

Themen
247,011
Beiträge
2,260,681
Mitglieder
375,269
Neuestes Mitglied
wallyrt