“Dernier dialogue avec Alexa” vide depuis fin juillet

Je crois que @sigalou est en vacances.
Donc les potentielles MAJ devront un peu attendre.

2 « J'aime »

@Lecreole74 , ça donne quoi ceci?

floor(microtime(true) * 1000)
1 « J'aime »

Tu as assuré :+1:
C’est top :ok_hand:

Genial !

Du coup la derniere version du petit code est :

if ($nom=='ws-volume-change') {
	$jsonHist = file_get_contents("http://" . config::byKey('internalAddr') . ":3456/history?maxRecordSize=1");
	$jsonHist = json_decode($jsonHist, true);
	for ($i = 0; $i <= count($jsonHist) - 1; $i++) {
		$newOrder = $jsonHist[$i]['summary'];
  		$newCreationTimestamp = $jsonHist[$i]['creationTimestamp']; // Timestamp in milliseconds
  		$deviceSerialNumber = $jsonHist[$i]['deviceSerialNumber'];
  		if ($newOrder!='' && $newCreationTimestamp!='' && $deviceSerialNumber!='') {
      		$alexaEqLogic = eqLogic::byLogicalId($deviceSerialNumber, 'alexaapi');
      		$cmd = $alexaEqLogic->getCmd(null, 'interactioninfo');
      		$valInteractioninfo = $cmd->execCmd();
          	$milliNow = floor(microtime(true) * 1000);
      		$timeDiffCreation = $milliNow - $newCreationTimestamp;
      		$collectDate = $cmd->getValueDate();
      		$milliCollectDate = strtotime($collectDate) * 1000;
       		$timeDiffCollect = $milliNow - $milliCollectDate;
       		if ($timeDiffCreation<2000 &&  $timeDiffCollect>2000) {
        		metAJour("Interaction", $newOrder, 'interactioninfo', true, "ECHO", $deviceSerialNumber);
				log::add('alexaapi', 'debug', 'Mise a jour de la commande "interactioninfo" avec device=' . $deviceSerialNumber . ', Ancien Message = ' . $valInteractioninfo . ', Nouveau Message = ' . $newOrder . ',  Message Timestamp = ' . $newCreationTimestamp . ', Now = ' . $milliNow . ', CollectDate = ' . $milliCollectDate . ', Name = ' . $nom);
          		break;
        	}
    	}
	}
}

Sebastien

2 « J'aime »

Bonjour,
j’ai essayé le bout de code en ayant fait une copie de sauvegarde du fichier original par sécurité. Pour moi pas de retour, même après avoir redémarré le démon.
Je suis novice donc j’ai du mettre cette partie de code au mauvais endroit… Si tu as des précisions sur l’emplacement ou cela fonctionne pour toi (testé à la fin, aussi après le début).
Merci

Salut,

A mettre dans ce fichier:

Je l’ai mis ici mais tu peux le placer apres la definition de la variable ‹ $nom › :

Attention : si vous ne comprenez pas ce que vous faites il vaut mieux attendre une version stable de @sigalou

Sebastien

1 « J'aime »

Merci pour ta réponse rapide et précise.
J’ai eu un seul retour
image
Hélas plus de retour des alexa, comme je suis un gros nul en langage, je vais surement laisser tomber, c’est frustrant.
C’est peux-être parce que j’ai 5 Alexa que ça bloque…

On va laisser Sigalou tester et apporter les modifs necessaires.
J’ai peut-etre loupe un truc, par example le truc du ‹ ws-volume-change › ou chez moi ca vient a chaque fois qu’il y a une commande vocale (et jusqu’a aujourd’hui c’est toujours le cas chez moi et le code fonctionne tres bien). J’ai 3 Alexa Echo Show chez moi.
Il faudrait debugger en rajoutant des logs entre chaque conditions du code mais je prefere attendre le retour de vacance du boss :slight_smile:

Sebastien

Bonjour, de retour des vacances :slight_smile: , ou en est-on ?

Bonjour,

J’ai bien essayé les différentes méthodes de dépannage proposées, avec ou sans scénario, en modifiant jeeAlexaapi.php … mais je n’ai pas réussi à obtenir un résultat. Dommage c’était bien pratique de dire à Alexa de fermer le portail ou le garage …

Je pense que ce sera possible, quand les développeurs seront rentré de vacances et qu’il auront le temps d’y travailler.

On espère tous :grinning:

ah je suis heureux d’avoir trouvé ce poste :slight_smile:
Plus rien ne fonctionnait et je pensais que j’avais fait une bêtise :stuck_out_tongue:

Je me place en follow-up afin de suivre l’évolution du plugin pour gérer cette problèmatique.

On dirait que la dernière solution ne fonctionne plus…
Je suis repassé au Scheduler5s avec le petit scénario qui va avec et ça marche encore car la page d’historique est toujours renseignée.
Là on a besoin de monsieur @sigalou pour l’intégration au plugin…

Je n’arrive pas à faire fonctionner avec le principe des 2 scénarios : j’ai bien ma variable Trigger_5s qui alterne de 0 à 1 et que j’ai mis en déclencheur du scénario « Alexa ». Après tu dis

J’avoue que j’ai pas trop compris.

Je pense que dans le scénario , il faut aussi adapter

J’ai remplacé Alexa par le nom de mon dispositif Echo, mais est-ce que je dois remplacer « LastOrder » par « Dernier dialogue avec Alexa » et qu’est-ce que je dois mettre pour
[creationTimestamp] me provoque une erreur « commande introuvable ».

Même ça j’ai pas trop compris de quel scénario on parle …
Désolé de toutes ces questions mais je ne m’y connais pas grand chose en code mais j’ai passé hier soir plusieurs heures à essayer de faire fonctionner Alexa, en vain …
Merci pour ton aide.

Salut,

Pour faire simple :

  1. Un scenario nomme ‹ Scheduler 1s › pour alterner une variable « GlobalTrigger1s » (j’ai essaye avec 1 seconde et c’est stable):
    Juste un bloc code. Une fois enregistre il suffit de le demarrer 1 seule fois et ca tourne en boucle.
while(1)
 {
 	sleep(1);
  	$myVal = $scenario->getData('GlobalTrigger1s');
  	if ($myVal == 1) {
    	$scenario->setData('GlobalTrigger1s', '0');
    } else {
      	$scenario->setData('GlobalTrigger1s', '1');
    }
 }
  1. Un virtuel avec ces informations:
    image

Il faut aussi mettre la repetition des valeurs identiques sur ‹ OUI ›, au cas ou l’on redonne le meme ordre a Alexa:

  1. Le scenario suivant qui va cherher les donnees de l’historique Alexa et va les inscrire dans les commandes info de notre virtuel:
$ch = curl_init();
curl_setopt_array($ch, [
	CURLOPT_URL => 'http://192.168.1.xx:3456/history?maxRecordSize=20',
  	CURLOPT_RETURNTRANSFER => true,
  	CURLOPT_ENCODING => "",
  	CURLOPT_MAXREDIRS => 10,
  	CURLOPT_TIMEOUT => 10,
  	CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  	CURLOPT_CUSTOMREQUEST => 'GET',
  	CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
    ]);
$response = curl_exec($ch);
curl_close($ch);
$json = json_decode($response, true);
$newOrder='';
$deviceID='';
$newCreationTimestamp='';
for ($i = 0; $i <= 5; $i++) {
	$newOrder = $json[$i]['summary'];
  	$deviceID = $json[$i]['deviceSerialNumber'];
  	$newCreationTimestamp = $json[$i]['creationTimestamp'];
  	if ($newOrder!='' && $newCreationTimestamp!='') {
    	break;
    }
}
$lastCreationTimestamp = cmd::byString('#[Maison][Alexa][creationTimestamp]#')->execCmd();
if ($newOrder!='' && $lastCreationTimestamp!=$newCreationTimestamp) {
  cmd::byString('#[Maison][Alexa][LastOrder]#')->event($newOrder);
  cmd::byString('#[Maison][Alexa][DeviceID]#')->event($deviceID);
  cmd::byString('#[Maison][Alexa][creationTimestamp]#')->event($newCreationTimestamp);  
}

Ce scenario est declenche par notre variable ‹ GlobalTrigger1s ›:

  1. Ensuite on peut utiliser la commande ‹ LastOrder › de notre virtuel pour declencher n’importe quel autre de nos scenarios qui doit interragir avec la derniere commande passee avec Alexa.
    On peut aussi utiliser la commande ‹ DeviceID › afin de savoir quelle Alexa a emis l’ordre et la faire parler en retour si besoin … etc …

J’espere que c’est clair cette fois.

Sebastien

1 « J'aime »

Bonsoir @Sattaz,

Et un grand merci, ça tourne nickel. Je peux de nouveau demander à Alexa de gérer le portail, le garage …

Tes explications sont limpides. Il ne faut pas oublier de démarrer le scénario ‹ Scheduler 1s › à chaque démarrage jeedom, pour cela j’ai mis un déclencheur programmé toutes les minutes pour ce scénario, il y a peut-être plus « élégant » à faire … mais bon

Encore merci pour ton aide et bonne soirée. :grinning:

Bonsoir @Sattaz ,

Ca fonctionne parfaitement.
Merci pour cette solution facile à mettre en œuvre qui sera un bon fixe le temps d’une nouvelle version du plugin.

Bonjour, merci a tous ceux qui ont pris sur leurs temps pour résoudre ce problème et à rédiger toutes ces explications. Cela fonctionne parfaitement. Bonne journée. :grinning:

Bonjour à tous.

Merci beaucoup pour cette astuce.
Je vais tester ça dans la journée :innocent:.

Le bonheur ultime serait aussi de ne pas avoir à dire le mot de déclenchement “Alexa” pour répondre et que ce soit plus naturelle dans les échanges ! Peut être un jour qui sait!

En tout cas merci infiniment pour cette solution, vous êtes au top !

Ps : ahhhv bein pour que marche, il faudrait déjà que je renouvelle mon abonnement assistants vocaux pour Jeedom looool !!! Il est arrivé à échéance aujourd’hui :sweat_smile::joy::sweat_smile:

Pas besoin avec ce plugin.