Debian 13 fichier page Events : array_slice(): Argument #1 ($array) must be of type array, null given

Frigate Beta plugin version 1.4.7. Serveur Firgate en 0.16.3. Systeme JEedom Core 4.5.2 et DEbian 13.

Bonjour, j’ai cette erreur en bandeau rouge je pense depuis mon passage en debian 13 : « array_slice(): Argument #1 ($array) must be of type array, null given » sur la page events et panel en Debian 13, dans plugins/frigate/desktop/php/events.php et plugins/frigate/desktop/php/panel.php

Ligne 101

if (!$full) { $strings = array_slice($strings, 0, 1); } return $strings ? 'il y a ' . implode(', ', $strings) : 'à l\'instant'; }

Remplacé par

if (!$full) {
    $strings = array_slice($strings ?? [], 0, 1);
}
return ($strings && is_array($strings)) ? 'il y a ' . implode(', ', $strings) : 'à l\'instant';
}

CA enleve le bandeau rouge mais c’est surement lié à un problème autre que je dois avoir, vu que je ne recois plus les vignettes, elles sont vides et crées l’erreur.

du coup dans frigate.class.php sur la fonction processImage

private static function processImage($dir, $event, $isThumbnail = false, $force = false)
{
    log::add(__CLASS__, 'debug', "║════════════════════════ :fg-success:Process Image:/fg: ═══════════════════");

    $id = (string)$event['id']; // Force le type string pour l'ID
    $camera = (string)$event['camera'];
    $type = $isThumbnail ? 'thumbnail' : 'snapshot';
    
    $basePath = $dir . '/' . $id . "_{$type}";
    $jpgPath = $basePath . '.jpg';
    $webpPath = $basePath . '.webp';

    // --- PRIORITÉ AU WEBP ---
    if (file_exists($webpPath) && !$force) {
        if (file_exists($jpgPath)) {
            @unlink($jpgPath);
            log::add(__CLASS__, 'debug', "║ Suppression du fichier JPG (doublon) pour $type ID: $id");
        }
        log::add(__CLASS__, 'debug', "║ Fichier WEBP déjà existant pour $type ID: $id");
        return ['url' => "/plugins/frigate/data/$camera/{$id}_{$type}.webp", 'has' => 1];
    }

    // --- Vérifie si un fichier (jpg ou webp) existe sinon téléchargement ---
    if (!file_exists($jpgPath) && !file_exists($webpPath) || $force) {
        log::add(__CLASS__, 'debug', "║ Aucun fichier local trouvé pour $type ID: $id");

        // Pour les snapshots seulement, on vérifie has_snapshot avant de télécharger
        if (!$isThumbnail) {
            // Comparaison souple pour Frigate 0.16 (peut être booléen ou string "true")
            $hasSnapshot = $event['has_snapshot'] ?? false;
            if ($hasSnapshot !== true && $hasSnapshot !== "true") {
                log::add(__CLASS__, 'debug', "║ Has Snapshot: false → téléchargement annulé pour ID: $id");
                return ['url' => 'null', 'has' => 0];
            }
        }

        log::add(__CLASS__, 'debug', "║ Téléchargement du fichier $type pour ID: $id");
        // Appel de saveURL pour récupérer le fichier sur le serveur Frigate
        $img = self::saveURL($id, $isThumbnail ? null : "snapshot", $camera, $isThumbnail);
        
        $resUrl = ($img == "error" || empty($img)) ? "null" : (string)$img;
        return ['url' => $resUrl, 'has' => ($resUrl !== "null" ? 1 : 0)];
    }

    // --- Fichier déjà présent : Sécurisation de l'extension ---
    $ext = file_exists($webpPath) ? 'webp' : 'jpg';
    log::add(__CLASS__, 'debug', "║ Fichier $ext trouvé localement pour $type ID: $id");

    // Construction explicite de l'URL pour éviter les coupures PHP 8.3
    $finalUrl = "/plugins/frigate/data/" . $camera . "/" . $id . "_" . $type . "." . $ext;
    
    return ['url' => $finalUrl, 'has' => 1];
}

j’ai de nouveau mes vignettes avec ces modifications. Je ne sais pas si c’est la bonne manière de faire je ne suis pas développeur.

Bonjour,

Merci pour ton retour.

Je regarderai en détail ce que tu proposes et surtout si cela fonctionne sur debian 11 et 12.

Pour le moment, je n’ai pas étudié plus que cela la compatibilité avec deb13, Jeedom conseille toujours officiellement la version 11.

1 « J'aime »

Tu utilises une version de Jeedom sur Deb13 installée de quelle façon ?

Je viens de tester de mon côté et je n’ai aucune erreur.

Tu utilises le plugin Frigate avec mqtt-explorer ?

Tu as des logs dans HTTP_ERROR qui correspondent à Frigate ?

Je viens de synchroniser ma version dev avec les bêta et stable, à voir si c’est mieux de ton côté.

Pour le moment je n’applique pas tes corrections, j’aimerais reproduire le bug pour être sûr.

Edit : bon n’étant pas dev de formation mais juste bidouilleur j’avais oublié d’initialiser la variable $string avant le foreach, et php8 est moins laxiste.

Je corrige dans la prochain béta, je vais checker les autres fichiers.

Bonjour je suis sous debian 12 et j’ai le même message d’erreur. Lors de la première installation du plugin les panels fonctionnaient (il y a 4 mois), je ne sais pas depuis quand cela ne fonctionne plus (peut être là dernière mise à jour ?).

Je suis sur la version stable (j’ai également essayé la version bêta avec le même résultat).

Merci en tout cas pour le travail accompli.

Je n’ai pas encore mis a disposition la bêta avec les corrections, j’essaie de faire cela cette fin de semaine.

A tester avec la dernière beta.

Les vignettes refonctionnent :slight_smile: .

J’ai par contre un nouveau problème sur les pages des events j’ai une centaine d’événements qui son toujours a la date et heure de l’instant sans image qui se régénère en permanence.

Bizarre, dans les logs frigate mqtt tu as un spam de ton interphone ?

C’est tout bon j’ai refait une synchronisation avec frigate et tout est rentré dans l’ordre.

Merci encore

1 « J'aime »