Historique d'une info génère Uncaught TypeError ($haystack) dans http.error

Bonjour

J’utilise le core en version 4.5.2 et je suis passé sous Debian 12.13 il y a quelques semaines.

Depuis quelque temps j’ai constaté des erreurs dans le log http qui pointaient vers l’IP de mon PC et je n’avais pas trouvé l’origine, mais j’ai réussi à reproduire l’erreur.

Dans un virtuel, j’ai une info numérique que j’historise ainsi :

J’ai toujours eu l’habitude l’afficher sous cette forme :

Et il ne me semble ne jamais avoir eu de soucis alors que j’étais sous Debian 11.11, mais peut-être suis-je passé à coté.

Aujourd’hui, lorsque je vais dans Historique pour l’afficher, l’affichage fait comme une sorte de clignotement rapide, puis n’affiche rien. Je suis obligé de passer par un affichage sous forme de ligne, puis barre, puis enfin séléctionner année pour finalement avoir ce dont j’ai besoin.

Voir ce gif, même si ce n’est pas très flagrant :

Historique

C’est lors de cette demande d’historique que cela me génère ces erreurs dans le log http

0526|[Sat Apr 04 14:08:27.893241 2026] [php:error] [pid 4142986:tid 4142986] [client 192.168.1.37:56690] PHP Fatal error:  Uncaught TypeError: strpos(): Argument #1 ($haystack) must be of type string, array given in /var/www/html/core/class/history.class.php:369\nStack trace:\n#0 /var/www/html/core/class/history.class.php(369): strpos()\n#1 /var/www/html/core/class/cmd.class.php(2534): history::all()\n#2 /var/www/html/core/ajax/cmd.ajax.php(431): cmd->getHistory()\n#3 {main}\n  thrown in /var/www/html/core/class/history.class.php on line 369
0527|[Sat Apr 04 14:08:28.113353 2026] [php:error] [pid 4083961:tid 4083961] [client 192.168.1.37:56691] PHP Fatal error:  Uncaught TypeError: strpos(): Argument #1 ($haystack) must be of type string, array given in /var/www/html/core/class/history.class.php:369\nStack trace:\n#0 /var/www/html/core/class/history.class.php(369): strpos()\n#1 /var/www/html/core/class/cmd.class.php(2534): history::all()\n#2 /var/www/html/core/ajax/cmd.ajax.php(431): cmd->getHistory()\n#3 {main}\n  thrown in /var/www/html/core/class/history.class.php on line 369
0528|[Sat Apr 04 14:08:28.274668 2026] [php:error] [pid 4138994:tid 4138994] [client 192.168.1.37:56692] PHP Fatal error:  Uncaught TypeError: strpos(): Argument #1 ($haystack) must be of type string, array given in /var/www/html/core/class/history.class.php:369\nStack trace:\n#0 /var/www/html/core/class/history.class.php(369): strpos()\n#1 /var/www/html/core/class/cmd.class.php(2534): history::all()\n#2 /var/www/html/core/ajax/cmd.ajax.php(431): cmd->getHistory()\n#3 {main}\n  thrown in /var/www/html/core/class/history.class.php on line 369
0529|[Sat Apr 04 14:08:28.440433 2026] [php:error] [pid 4139009:tid 4139009] [client 192.168.1.37:56693] PHP Fatal error:  Uncaught TypeError: strpos(): Argument #1 ($haystack) must be of type string, array given in /var/www/html/core/class/history.class.php:369\nStack trace:\n#0 /var/www/html/core/class/history.class.php(369): strpos()\n#1 /var/www/html/core/class/cmd.class.php(2534): history::all()\n#2 /var/www/html/core/ajax/cmd.ajax.php(431): cmd->getHistory()\n#3 {main}\n  thrown in /var/www/html/core/class/history.class.php on line 369

Ce n’est pas invalidant maintenant que je sais d’où cela provient, mais peut-être qu’il y a moyen d’y remédier, ne serait-ce que pour ne plus avoir les erreurs http

Salut,

Ca serait bien de voir un peu plus comment est paramétré ton virtuel et pas juste ses paramètres d’historique

Il n’y a rien de particulier, ce n’est qu’une info numérique

Et c’est ainsi depuis bien longtemps

il faudrait, via la console dev du navigateur, récupérer l’appel ajax vers cmd.ajax.php (possible de filtrer dessus) et montrer les paramètres envoyés:

je voudrais aussi voir ce qui se trouve dans la config de la commande, le bouton information:
image

surtout le contenu du champ « Display »

Oui et non.
Parfois, il y a des loupés et ce qui devrait être un numérique ne l’est pas toujours, en particulier valeur nule.
Donc la demande de aurel a un but réel et ce n’est pas pour t’embêter.

Je vais commencer par le plus simple. Pour la partie Dev j’ai du mal à trouver ce qui est demandé.

La partie configuration de la commande :

{"calcul":"#3878# + #8705# + #8959#","returnStateValue":"","returnStateTime":"","updateCmdId":"","minValue":"","maxValue":"","timeline::enable":"0","timeline::folder":"","influx::enable":"0","influx::namecmd":"","influx::nameEq":"","influx::nameVal":"","interact::auto::disable":"0","calculValueOffset":"","historizeRound":"1","jeedomCheckCmdOperator":"==","jeedomCheckCmdTest":"","jeedomCheckCmdTime":"","historizeMode":"max","history::smooth":"","historyPurge":"-1 year","denyValues":"","repeatEventManagement":"never","jeedomPushUrl":"","alert::messageReturnBack":"0","actionCheckCmd":[],"jeedomPreExecCmd":[],"jeedomPostExecCmd":[]}

La partie display :

{"invertBinary":"0","showStatsOnmobile":0,"showStatsOndashboard":0,"showNameOndashboard":"0","showNameOnmobile":"0","showIconAndNamedashboard":"0","showIconAndNamemobile":"0","forceReturnLineBefore":"0","forceReturnLineAfter":"0","parameters":[],"graphType":"column","groupingType":"high::month","graphDerive":"0","graphStep":"0"}

Entre temps j’ai essayé en recopiant l’historique de cette commande sur une nouvelle commande de test, et je constate le même phénomène

  • touche F12 du navigateur
  • onglet réseau
  • filtrer sur cmd.ajax.php
  • cliquer sur la tuile pour ouvrir l’historique
  • noter la requete faite qui va apparaitre

selon moi c’est un problème avec le groupement, c’est le seul cas avec un strpos() mais je ne reproduis pas et je ne comprend pas
la valeur en DB est correct (high::month) mais si qlqch est reçu avec la requête ca prend le dessus

Je ne sais pas si c’est ce qui est attendu

On voit les 4 erreurs qui sont générées dans le log

Mais pour la partie droite, je ne suis pas certain d’afficher ce qui est demandé :(. Je suis sur Chrome

En cliquant sur l’url de l’erreur, j’arrive ici:

je voudrais voir le payload (c’est le contenu de la requete donc j’ai besoin)
image

image

action=getHistory&id=8768&dateRange=all&dateStart=2025-04-04&dateEnd=2026-04-04+15%3A49%3A13&derive=&allowZero=&groupingType%5Bfunction%5D=high&groupingType%5Btime%5D=month&lastPointToEnd=0&allowFuture=0&addFirstPreviousValue=0

La deuxieme :

image

action=getHistory&id=8768&dateRange=all&dateStart=2025-04-04&dateEnd=2026-04-04+15%3A49%3A13&derive=&allowZero=&groupingType%5Bfunction%5D=high&groupingType%5Btime%5D=month&lastPointToEnd=0&allowFuture=0&addFirstPreviousValue=0

La troisième :

image

action=getHistory&id=8768&dateRange=all&dateStart=2025-04-04&dateEnd=2026-04-04+15%3A49%3A13&derive=&allowZero=&groupingType%5Bfunction%5D=high&groupingType%5Btime%5D=month&lastPointToEnd=0&allowFuture=0&addFirstPreviousValue=0

Et enfin la dernière

image

action=getHistory&id=8768&dateRange=all&dateStart=2025-04-04&dateEnd=2026-04-04+15%3A49%3A13&derive=&allowZero=&groupingType%5Bfunction%5D=high&groupingType%5Btime%5D=month&lastPointToEnd=0&allowFuture=0&addFirstPreviousValue=0

pas la peine de le mettre 4 fois, c’est 4 fois la meme erreur; jeedom fait 4 essais lorsqu’il recoit une erreur;

mais voila le problème, c’est ce groupingType%5Bfunction%5D=high&groupingType%5Btime%5D=month

je vais voir si je trouve d’où ca vient, c’est curieux…

essayez avec un autre navigateur ou en navigation privée pour être sur que ce n’est pas une extension qui cause cela.
c’est quel navigateur?

J’utilise Chrome sans extensions
Je viens de faire l’essai en navigation privée et c’est pareil.

autre navigateur?

idem sur Edge

Testé églament avec Chrome depuis mon mobile et même constat

Ca sera fixé dans la prochaine version de jeedom

1 « J'aime »

Merci :+1:
Et bravo pour la réactivité !