"vous devez vous connecter à jeedom avant de configurer la connexion avec google"

Bonjour,
suite à un déménagement en juillet (oui, ce n’est pas hier…)
Je révise petit à petit mon installation, ce qui veut dire migration d’un capteur d’une pièce à l’autre, changement d’utilité de tel ou tel actionneur ou capteur…

Je souhaite donc mettre à jour l’appli Google Home.

Je suis passé par la console action où j’ai bien fait le test…

Dans l’appli google home, j’ai dissocié le SmartHome pour le ré-associer.
Sauf que quand j’essaie d’appairer de nouveau Test Smart home, il m’annonce : « vous devez vous connecter à jeedom avant de configurer la connexion avec google »

Je suis bien connecté, j’ai bien démarré la session en tant qu’admin, mais rien n’y fait.
Faut il une session nommée Admin pour que cela fonctionne?

Bref, j’ai bien ouvert la doc, suivi toute les instructions pour vérifier mes configs, rien n’y fait, je dois avoir une faille quelque part dans mes actions.

Quelqu’un peut-il me venir en aide?
Merci d’avance,
Cyril

Bonjour. J’ai eu le même problème il faut bien être sur Android et être connecté sur ton Jeedom via le lien externe et surtout pas via l’ip locale

Yep c’est tout bon de ce côté: je suis bien sur mon téléphone sous Android et au bureau, du coup connecté via le dns :thinking:

mode cloud ou mode standalone ?

A l’ancienne : standalone :smile:

Mhh… bah comme moi du coup. T’as bien le même problème que moi et j’ai résolu juste parce que via chrome je ne m’étais pas connecté via mon jeedom lien externe … retry on ne sait jamais :frowning:

tu l’as résolu ? J’ai cette erreur en ce moment.

Bonjour,

J’ai exactement le même problème :
Installé et paramétré il y a quelques mois, l’association Jeedom ne fonctionne plus.
Les périphériques ajoutés il y a quelques mois continuent d’interagir normalement avec Google Home, mais impossible de mettre à jour la liste des périphériques coté Google Home pour en ajouter d’autres.

  • Jeedom 4.3.15 (sur pi4)
  • Google Smart Home (standalone) Version 2022-09-13 08:41:31

J’ai essayé de :

  • Renouveler mon certificat SSL
  • Désinstaller / réinstaller le plugIn GSH (et les dépendances)
  • Supprimer mes périphériques anciennement créés coté Google Home
  • Recommencer la procédure complète avec la console Actions de Google

Je n’ai pas d’autre appareil android pour tester sur un autre téléphone

je me connecte bien avec l’URL externe en https mais rien n’y fait, a chaque fois le message : « Merci de vous connecter à Jeedom avant de configurer la connexion avec Google »

Les logs du plugin coté Jeedom sont vides, j’avoue que je ne sais vraiment plus quoi faire…

Quelqu’un a résolu le problème ?

Comment es-tu sûr que cela soit le même problème ?
Parce que la c’est rebondir sur un post de 2 ans…

Es-tu sur de ne pas tomber dans ce cas décrit ici par Loic, à savoir un bug chez google !!

C’est pas faux,
en fait (c’est peut être maladroit de ma part) mais je voulais éviter de recréer un post sur un sujet déjà traité

Pour info, problème résolut.
Le problème ne venait ni de Jeedom, ni de Google, mais du Google Chrome
de mon téléphone… (Redmi Note 9S / Android 11 RKQ1)

Après avoir désinstallé les mises à jour de Google Chrome sur mon téléphone (Version 94.0.4606.85), la synchro s’est faite du 1er coup. Je refait une mise à jour de Google Chrome (Version 110.0.5481.153) : ça ne fonctionne plus.

Hello,

Alors oui et non…

Je viens de rencontrer le même souci et le problème est en fait le suivant : pour l’association entre Jeedom et GH, il faut que le navigateur soit authentifié sur Jeedom, or l’app mobile Google Home semble lancer un navigateur sans contexte, donc sans qu’il ne soit authentifié avec Jeedom.

Avec GSH en mode Cloud et donc l’app dans Google Home « Jeedom Smarthome », une authentification (Market) est demandée à l’arrivée sur la page de liaison, alors qu’en mode Standalone, le device est sensé déjà être authentifié, ce qui pose problème dans un navigateur sans contexte.

En commentant les lignes suivantes :

	if (!isConnect('admin')) {
		echo 'Merci de vous connecter à Jeedom avant de configurer la connexion avec Google';
		die();
	}

du fichier /plugins/gsh/core/php/jeeGshOauth.php, JUSTE LE TEMPS DE L’ASSOCIATION, j’ai pu connecter GSH en standalone avec GH sans problème.

Je pense que le bloc de code ci-dessus devrait être adapté pour demander une authentification Jeedom locale (comme en mode Cloud), plutôt que de s’attendre à ce que l’utilisateur soit déjà authentifié.

Bad

Bonjour,
Si tu as une idée pour le faire je suis preneur du code, pour avoir essayer pendant un petit moment c’est pas si simple car il y a des cookies et paramètre à garder pour y arriver et vu que la page de connexion de jeedom n’est pas faite pour du oauth comme celle du cloud c’est compliqué.

De plus pour être honnête ce genre de méthode DIY est loin d’etre prioritaire dans nos devs car très minoritaire malheureusement (bien que je la préfère personnellement).

Mais je note que la méthode ne marche plus suite a ton retour et je vais voir avec jeedom SAS si on se lance dans un dev très lourd du core pour corriger ou si on la supprime.

Bonjour.
Même problème, sauf que je venais juste de de configurer mon GSH, je n’étais donc pas sûr de mon système.
En lisant vos infos, je me suis dit que je pourrais peut-être contourner Chrome.
J’ai donc mis Samsung Internet comme browser par défaut.
Je me suis connecté depuis celui-ci a mon dashboard, puis j’ai relancé la connexion dans Google Home.
Plus de message d’erreur.
Mes équipements sont visibles.
A voir si ça tient …

Bonjour
Une fois la connexion faite ça je passe plus par la donc hormis si Google reset la clef pour te forcer à te reconnecter il n’y a aucune raison que ça ne marche plus.

Hello,

Voici une preuve de concept fonctionnelle.
Seul le fichier plugins/gsh/core/php/jeeGshOauth.php est à remplacer par :

<?php
require_once __DIR__ . '/../../../../core/php/core.inc.php';

if (init('response_type') == 'code') {

	// Allow access from local network only
	if (network::getUserLocation() != 'internal')
		die();

	include_file('core', 'authentification', 'php');

	// Check for a logged in user
	if (!isConnect()) {
		// If login and password supplied, try to login the user
		if (init('username', '') != '' || init('password', '') != '') {
			$user = user::connect(init('username'), init('password'));
			if (is_object($user)
					&& network::getUserLocation() != 'internal'
					&& $user->getOptions('twoFactorAuthentification', 0) == 1
					&& $user->getOptions('twoFactorAuthentificationSecret') != ''
					&& init('twoFactorCode') == '') {
				$error = __("Merci de fournir un Token 2FA", __FILE__);
				$mfa = true;

			} elseif (!login(init('username'), init('password'), init('twoFactorCode'))) {
				$error = __("Mot de passe ou nom d'utilisateur incorrect", __FILE__);
			}
		} else {
			$error = '';
		}
	}

	// Check if user is an Admin
	if (!isConnect('admin') && !isset($error)) {
		$error = __('Merci de vous connecter avec un compte Admin', __FILE__);
	}

	// If something failed prompt a login page
	if (isset($error)) {
?>
<html>
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, minimum-scale=1, initial-scale=1, user-scalable=yes">
	<title>Jeedom</title>
	<link rel="icon" href="/core/img/logo-jeedom-petit-nom-couleur-128x128.png">
	<meta name="theme-color" content="#3f51b5">
	<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
</head>
<body>
	<br/>
	<center>
		<img src='/core/img/logo-jeedom-petit-nom-couleur-128x128.png' /><br/><br/>
<?php
if ($error != '')
	echo '		<div class="alert alert-danger" role="alert" style="margin:10px">' . $error . '</div>';
?>
		<h2 id="welcome_message">{{Merci de vous connecter à votre Jeedom pour configurer la connexion avec Google}}</h2>
		<form method='post' action='<?php echo $_SERVER["PHP_SELF"]; ?>' style="margin:10px">
			<div class="form-group row"><div class="col-sm-4 col-md-4 col-lg-2 offset-md-4 offset-lg-5">
				<input class="form-control" name="username" placeholder="{{Nom d'utilisateur}}">
			</div></div>
			<div class="form-group row"><div class="col-sm-4 col-md-4 col-lg-2 offset-md-4 offset-lg-5">
				<input type="password" class="form-control" name="password" placeholder="{{Mot de passe}}">
			</div></div>
<?php
if ($mfa) {
?>
			<div class="form-group row"><div class="col-sm-4 col-md-4 col-lg-2 offset-md-4 offset-lg-5">
				<input class="form-control" name="twoFactorCode" placeholder="{{Authentification à 2 facteurs}}">
			</div></div>
<?php
}

foreach(array('response_type', 'client_id', 'redirect_uri', 'state') as $param) {
	$value = init($param);
	if($value != '')
		echo '			<input type="hidden" name="'. htmlspecialchars($param) .'" value="'. htmlspecialchars($value) .'" />';
}
?>
			<button type="submit" class="btn btn-primary mb-2">{{Valider}}</button>
		</form>
	</center>
	<pre><?php print_r($_REQUEST); ?></pre>
</body>
</html>
<?php

		die();
	}

	if (init('client_id') == config::byKey('gshs::clientId', 'gsh')) {
		$authorization_code = config::genKey();
		config::save('OAuthAuthorizationCode', $authorization_code, 'gsh');
		header('Location: ' . init('redirect_uri') . '?code=' . $authorization_code . '&state=' . init('state'));
	}

} else if ($_POST['client_id'] == config::byKey('gshs::clientId', 'gsh') && $_POST['client_secret'] == config::byKey('gshs::clientSecret', 'gsh')) {
	if (!in_array(init('type', 'sh'), array('df', 'sh'))) {
		echo 'Le type ne peut etre que sh ou df';
		die();
	}
	header('Content-type: application/json');
	header('HTTP/1.1 200 OK');
	header('\'Access-Control-Allow-Origin\': *');
	header('\'Access-Control-Allow-Headers\': \'Content-Type, Authorization\'');
	if ($_POST['grant_type'] == 'authorization_code' && $_POST['code'] == config::byKey('OAuthAuthorizationCode', 'gsh') && config::byKey('OAuthAuthorizationCode', 'gsh') != '') {
		config::save('OAuthAuthorizationCode', '', 'gsh');
		$access_token = config::genKey();
		config::save('OAuthAccessToken' . init('type', 'sh'), $access_token, 'gsh');
		$refresh_token = config::genKey();
		config::save('OAuthRefreshToken' . init('type', 'sh'), $refresh_token, 'gsh');
		$response = array(
			'token_type' => 'bearer',
			'access_token' => $access_token,
			'refresh_token' => $refresh_token,
			'expires_in' => 3600 * 24,
		);
		echo json_encode($response);
	} elseif ($_POST['grant_type'] == 'refresh_token' && $_POST['refresh_token'] == config::byKey('OAuthRefreshToken' . init('type', 'sh'), 'gsh') && config::byKey('OAuthRefreshToken' . init('type', 'sh'), 'gsh') != '') {
		$access_token = config::genKey();
		config::save('OAuthAccessToken' . init('type', 'sh'), $access_token, 'gsh');
		$response = array(
			'token_type' => 'bearer',
			'access_token' => $access_token,
			'expires_in' => 3600 * 24,
		);
		echo json_encode($response);
	}
}
?>

Bad

Bonjour,
Merci pour le code ca sera disponible dans la beta de demain

Attention, c’est une preuve de concept, « ça marche », mais je pense qu’il faut encore au moins adapter la partie CSS (chargé en extérieur) et peut être la partie sécurité.

Bonjour,
Je vais voir si jeedom sas a de la dispo pour ça je n’arriverais malheureusement pas a dégager du temps pour ce type de tache (surtout que j’ai viré tout les google truc de chez moi).

Salut !

Je suis tombé sur ce soucis hier. @Loic m’a indiqué ta proposition de correction publiée en béta, sauf que dans mon cas ce n’est pas fonctionnel je reste sur une page blanche jeedom, sans redirection pour finir le flow.

Est ce que par hasard tu as retesté récemment la béta, est ce que ca fonctionne toujours pour toi et surtout … aurais tu une idée de ce que je pourrais tester ou vérifier pour voir ce qui cloche ?

Merci !