Ce Forum passera en lecture seule en janvier 2020
Image
Merci de vous rendre sur https://community.jeedom.com maintenant pour vos prochains postes ;)

[DEV] Plugin Alexa-Api en BETA uniquement

Sous forum pour les plugins Dialogflow et Google Assistant
Répondre
Jeje-2607
Timide
Messages : 10
Inscription : 20 déc. 2016, 16:00

[DEV] Plugin Alexa-Api en BETA uniquement

Message par Jeje-2607 » 20 oct. 2018, 09:55

Bonjour à tous,

Je vais vous faire un court tutoriel pour que vous puissiez faire dire et faire faire tout ce que vous voulez a Alexa (ici on va la faire parler).
C'est un script qui ne vient pas de moi, qui se charge de passer des ordres a Alexa sans que l'on est à la commander avec notre voix.

Avant de commencer, je ne suis nul responsable de vos mauvaise manipulation, je précise que je maitrise linux en "debutant"

Alors commençons.
Tout d'abords il sera indispensable de pouvoir se connecter en SSH a votre Jeedom sans ca il ne sera pas possible d'intégrer le bash correctement
Pour ma part j'utilise en Raspberry pi.

Connecter vous en SSH :

Code : Tout sélectionner

Last login: Fri Oct 19 23:07:43 2018 from 192.168.132.14
$ 
Ensuite rendez vous dans le dossier etc, en tapant :

Code : Tout sélectionner

cd /etc
On va commencer par créer un dossier pour accueillir le script pour éviter de le mettre n'importe ou.

On va créer le dossier alexa-remote-control en tapant :

Code : Tout sélectionner

sudo mkdir alexa-remote-control
(le mot de passe sera surement demander)

Le dossier est donc créer (pour verifier vous pouvez taper la commande : ls -la, la liste de tout les dossiers va apparaitre)

Maintenant on se rend dans celui ci :

Code : Tout sélectionner

cd /etc/alexa-remote-control
On va créer un fichier qui sera notre bash qui va accueillir toute les commandes nécessaires et on va lui attribuer les droits

Code : Tout sélectionner

sudo touch alexa-remote-control.sh
sudo chmod 777 alexa-remote-control.sh
Vous voila avec votre fichier tout fraie.

Maintenant on va lui ajouter les commandes, pour cela :

Code : Tout sélectionner

sudo nano alexa-remote-control.sh
On arrive dans le fichier que vous trouverez normalement intégralement vide. Le script a copier étant assez long je vous conseil dans un premier tant de passer par un fichier de traitement de texte sur votre ordinateur car il y a quelque modification a faire.

On se rend sur se lien https://github.com/thorsten-gehrig/alex ... l_plain.sh et on copie intégralement les lignes de commande sur notre logiciel de traitement de texte.

A l'intérieur il y a 4-5 lignes a modifier qui sont :

Code : Tout sélectionner

EMAIL='amazon_account@email.address'
PASSWORD='Very_Secret_Amazon_Account_Password'

LANGUAGE="de-DE"
#LANGUAGE="en-US"

AMAZON='amazon.de'
#AMAZON='amazon.com'

ALEXA='layla.amazon.de'
#ALEXA='pitangui.amazon.com'
Pour la ligne "EMAIL" taper votre mail amazon qui gère Alexa (laisser les ' ')
Pour la ligne "PASSWORD" taper le mot de passe du compte (laisser les ' ' )
Pour la ligne LANGUAGE modifier en mettant "fr-FR"
Pour la ligne AMAZON modifier en mettant 'amazon.fr'
Pour la ligne ALEXA modifier en mettant 'alexa.amazon.fr'
PS : On ne s'occupe pas des ligne avec les # qui ne sont que des informations.

Quand cela est terminer je vous invite a copié le texte en entier pour cela faite CTRL + A et CTRL + C

On retourne donc dans notre accès SSH et notre fichier vide et vous l'aurez deviné, on colle l'intégralité du texte et ca donne ça (cela peut prendre plusieurs seconde donc patience):

Code : Tout sélectionner

#!/bin/sh
#
# Amazon Alexa Remote Control (PLAIN shell)
#  alex(at)loetzimmer.de
#
# 2018-06-18: v0.10b (for updates see http://blog.loetzimmer.de/2017/10/amazon-alexa-hort-auf-die-shell-echo.html)
#
###
#
# (no BASHisms were used, should run with any shell)
# - requires cURL for web communication
# - (GNU) sed and awk for extraction
#
##########################################

EMAIL='COMPTE AMAZON'
PASSWORD='MDP AMAZON'

LANGUAGE="fr-FR"
#LANGUAGE="en-US"

AMAZON='amazon.fr'
#AMAZON='amazon.com'

ALEXA='alexa.amazon.fr'
#ALEXA='pitangui.amazon.com'

# cURL binary
CURL='/usr/bin/curl'

# cURL options
#  -k : if your cURL cannot verify CA certificates, you'll have to trust any
#  --compressed : if your cURL was compiled with libz you may use compression
#  --http1.1 : cURL defaults to HTTP/2 on HTTPS connections if available
OPTS='--compressed --http1.1'
#OPTS='-k --compressed --http1.1'

# browser identity
BROWSER='Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0'

###########################################
# nothing to configure below here
#
TMP="/tmp"
COOKIE="${TMP}/.alexa.cookie"
DEVLIST="${TMP}/.alexa.devicelist.json"
DEVTXT="${TMP}/.alexa.devicelist.txt"

GUIVERSION=0

LIST=""
LOGOFF=""
COMMAND=""
TTS=""
SEQUENCECMD=""
STATIONID=""
QUEUE=""
SONG=""
ALBUM=""
ARTIST=""
ASIN=""
SEEDID=""
HIST=""
LEMUR=""
CHILD=""
PLIST=""
BLUETOOTH=""
LASTALEXA=""

usage()
{
	echo "$0 [-d <device>|ALL] -e <pause|play|next|prev|fwd|rwd|shuffle|vol:<0-100>> |"
	echo "          -b [list|<\"AA:BB:CC:DD:EE:FF\">] | -q | -r <\"station name\"|stationid> |"
	echo "          -s <trackID|'Artist' 'Album'> | -t <ASIN> | -u <seedID> | -v <queueID> | -w <playlistId> |"
	echo "          -a | -m <multiroom_device> [device_1 .. device_X] | -lastalexa | -l | -h"
	echo
	echo "   -e : run command, additional SEQUENCECMDs:"
	echo "        weather,traffic,flashbriefing,goodmorning,singasong,tellstory,speak:'<text>'"
	echo "   -q : query queue"
	echo "   -b : connect/disconnect/list bluetooth device"
	echo "   -r : play tunein radio"
	echo "   -s : play library track/library album"
	echo "   -t : play Prime playlist"
	echo "   -u : play Prime station"
	echo "   -v : play Prime historical queue"
	echo "   -w : play library playlist"
	echo "   -a : list available devices"
	echo "   -m : delete multiroom and/or create new multiroom containing devices"
	echo "   -lastalexa : print serial number that received the last voice command"
	echo "   -l : logoff"
	echo "   -h : help"
}

while [ "$#" -gt 0 ] ; do
	case "$1" in
		-d)
			if [ "${2#-}" != "${2}" -o -z "$2" ] ; then
				echo "ERROR: missing argument for ${1}"
				usage
				exit 1
			fi
			DEVICE=$2
			shift
			;;
		-e)
			if [ "${2#-}" != "${2}" -o -z "$2" ] ; then
				echo "ERROR: missing argument for ${1}"
				usage
				exit 1
			fi
			COMMAND=$2
			shift
			;;
		-b)
			if [ "${2#-}" = "${2}" -a -n "$2" ] ; then
				BLUETOOTH=$2
				shift
			else
				BLUETOOTH="null"
			fi
			;;
		-m)
			if [ "${2#-}" != "${2}" -o -z "$2" ] ; then
				echo "ERROR: missing argument for ${1}"
				usage
				exit 1
			fi
			LEMUR=$2
			shift
			while [ "${2#-}" = "${2}" -a -n "$2" ] ; do
				CHILD="${CHILD} ${2}"
				shift
			done
			;;
		-r)
			if [ "${2#-}" != "${2}" -o -z "$2" ] ; then
				echo "ERROR: missing argument for ${1}"
				usage
				exit 1
			fi
			STATIONID=$2
			shift
			;;
		-s)
			if [ "${2#-}" != "${2}" -o -z "$2" ] ; then
				echo "ERROR: missing argument for ${1}"
				usage
				exit 1
			fi
			SONG=$2
			shift
			if [ "${2#-}" = "${2}" -a -n "$2" ] ; then
				ALBUM=$2
				ARTIST=$SONG
				shift
			fi
			;;
		-t)
			if [ "${2#-}" != "${2}" -o -z "$2" ] ; then
				echo "ERROR: missing argument for ${1}"
				usage
				exit 1
			fi
			ASIN=$2
			shift
			;;
		-u)
			if [ "${2#-}" != "${2}" -o -z "$2" ] ; then
				echo "ERROR: missing argument for ${1}"
				usage
				exit 1
			fi
			SEEDID=$2
			shift
			;;
		-v)
			if [ "${2#-}" != "${2}" -o -z "$2" ] ; then
				echo "ERROR: missing argument for ${1}"
				usage
				exit 1
			fi
			HIST=$2
			shift
			;;
		-w)
			if [ "${2#-}" != "${2}" -o -z "$2" ] ; then
				echo "ERROR: missing argument for ${1}"
				usage
				exit 1
			fi
			PLIST=$2
			shift
			;;
		-d)
			if [ "${2#-}" != "${2}" -o -z "$2" ] ; then
				echo "ERROR: missing argument for ${1}"
				usage
				exit 1
			fi
			DEVICE=$2
			shift
			;;
		-l)
			LOGOFF="true"
			;;
		-a)
			LIST="true"
			;;
		-q)
			QUEUE="true"
			;;
		-lastalexa)
			LASTALEXA="true"
			;;
		-h|-\?|--help)
			usage
			exit 0
			;;
		*)
			echo "ERROR: unknown option ${1}"
			usage
			exit 1
			;;
	esac
	shift
done

case "$COMMAND" in
	pause)
			COMMAND='{"type":"PauseCommand"}'
			;;
	play)
			COMMAND='{"type":"PlayCommand"}'
			;;
	next)
			COMMAND='{"type":"NextCommand"}'
			;;
	prev)
			COMMAND='{"type":"PreviousCommand"}'
			;;
	fwd)
			COMMAND='{"type":"ForwardCommand"}'
			;;
	rwd)
			COMMAND='{"type":"RewindCommand"}'
			;;
	shuffle)
			COMMAND='{"type":"ShuffleCommand","shuffle":"true"}'
			;;
	vol:*)
			VOL=${COMMAND##*:}
			# volume as integer!
			if [ $VOL -le 100 -a $VOL -ge 0 ] ; then
				COMMAND='{"type":"VolumeLevelCommand","volumeLevel":'${VOL}'}'
			else
				echo "ERROR: volume should be an integer between 0 and 100"
				usage
				exit 1
			fi
			;;
	speak:*)
			SEQUENCECMD='Alexa.Speak'
			TTS=$(echo ${COMMAND##*:} | sed -r 's/[^-a-zA-Z0-9_,?! ]//g' | sed 's/ /_/g')
			TTS=",\\\"textToSpeak\\\":\\\"${TTS}\\\""
			;;
	weather)
			SEQUENCECMD='Alexa.Weather.Play'
			;;
	traffic)
			SEQUENCECMD='Alexa.Traffic.Play'
			;;
	flashbriefing)
			SEQUENCECMD='Alexa.FlashBriefing.Play'
			;;
	goodmorning)
			SEQUENCECMD='Alexa.GoodMorning.Play'
			;;
	singasong)
			SEQUENCECMD='Alexa.SingASong.Play'
			;;
	tellstory)
			SEQUENCECMD='Alexa.TellStory.Play'
			;;
	"")
			;;
	*)
			echo "ERROR: unknown command \"${COMMAND}\"!"
			usage
			exit 1
			;;
esac

#
# Amazon Login
#
log_in()
{
################################################################
#
# following headers are required:
#	Accept-Language	(possibly for determining login region)
#	User-Agent	(CURL wouldn't store cookies without)
#
################################################################

rm -f ${DEVLIST}
rm -f ${DEVTXT}
rm -f ${COOKIE}

#
# get first cookie and write redirection target into referer
#
${CURL} ${OPTS} -s -D "${TMP}/.alexa.header" -c ${COOKIE} -b ${COOKIE} -A "${BROWSER}" -H "Accept-Language: ${LANGUAGE}" -H "DNT: 1" -H "Connection: keep-alive" -H "Upgrade-Insecure-Requests: 1" -L\
 https://alexa.${AMAZON} | grep "hidden" | sed 's/hidden/\n/g' | grep "value=\"" | sed -r 's/^.*name="([^"]+)".*value="([^"]+)".*/\1=\2\&/g' > "${TMP}/.alexa.postdata"

#
# login empty to generate session
#
${CURL} ${OPTS} -s -c ${COOKIE} -b ${COOKIE} -A "${BROWSER}" -H "Accept-Language: ${LANGUAGE}" -H "DNT: 1" -H "Connection: keep-alive" -H "Upgrade-Insecure-Requests: 1" -L\
 -H "$(grep 'Location: ' ${TMP}/.alexa.header | sed 's/Location: /Referer: /')" -d "@${TMP}/.alexa.postdata" https://www.${AMAZON}/ap/signin | grep "hidden" | sed 's/hidden/\n/g' | grep "value=\"" | sed -r 's/^.*name="([^"]+)".*value="([^"]+)".*/\1=\2\&/g' > "${TMP}/.alexa.postdata2"

#
# login with filled out form
#  !!! referer now contains session in URL
#
${CURL} ${OPTS} -s -D "${TMP}/.alexa.header2" -c ${COOKIE} -b ${COOKIE} -A "${BROWSER}" -H "Accept-Language: ${LANGUAGE}" -H "DNT: 1" -H "Connection: keep-alive" -H "Upgrade-Insecure-Requests: 1" -L\
 -H "Referer: https://www.${AMAZON}/ap/signin/$(awk "\$0 ~/.${AMAZON}.*session-id[ \\s\\t]+/ {print \$7}" ${COOKIE})" --data-urlencode "email=${EMAIL}" --data-urlencode "password=${PASSWORD}" -d "@${TMP}/.alexa.postdata2" https://www.${AMAZON}/ap/signin > "${TMP}/.alexa.login"

# check whether the login has been successful or exit otherwise
if [ -z "$(grep 'Location: https://alexa.*html' ${TMP}/.alexa.header2)" ] ; then
	echo "ERROR: Amazon Login was unsuccessful. Possibly you get a captcha login screen."
	echo " Try logging in to https://alexa.${AMAZON} with your browser. In your browser"
	echo " make sure to have all Amazon related cookies deleted and Javascript disabled!"
	echo
	echo " (For more information have a look at ${TMP}/.alexa.login)"

	rm -f ${COOKIE}
	rm -f "${TMP}/.alexa.header"
	rm -f "${TMP}/.alexa.header2"
	rm -f "${TMP}/.alexa.postdata"
	rm -f "${TMP}/.alexa.postdata2"
	exit 1
fi
	
#
# get CSRF
#
${CURL} ${OPTS} -s -c ${COOKIE} -b ${COOKIE} -A "${BROWSER}" -H "DNT: 1" -H "Connection: keep-alive" -L\
 -H "Referer: https://alexa.${AMAZON}/spa/index.html" -H "Origin: https://alexa.${AMAZON}"\
 https://${ALEXA}/api/language > /dev/null

rm -f "${TMP}/.alexa.login"
rm -f "${TMP}/.alexa.header"
rm -f "${TMP}/.alexa.header2"
rm -f "${TMP}/.alexa.postdata"
rm -f "${TMP}/.alexa.postdata2"
}

#
# get JSON device list
#
get_devlist()
{
${CURL} ${OPTS} -s -b ${COOKIE} -A "${BROWSER}" -H "DNT: 1" -H "Connection: keep-alive" -L\
 -H "Content-Type: application/json; charset=UTF-8" -H "Referer: https://alexa.${AMAZON}/spa/index.html" -H "Origin: https://alexa.${AMAZON}"\
 -H "csrf: $(awk "\$0 ~/.${AMAZON}.*csrf[ \\s\\t]+/ {print \$7}" ${COOKIE})"\
 "https://${ALEXA}/api/devices-v2/device?cached=false" > ${DEVLIST}
 
	if [ ! -f ${DEVTXT} ] ; then
		cat ${DEVLIST}| sed 's/\\\\\//\//g' | sed 's/[{}]//g' | awk -v k="text" '{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}' | sed 's/\"\:\"/\|/g' | sed 's/[\,]/ /g' | sed 's/\"//g' > ${DEVTXT}
	fi
}

check_status()
{
#
# bootstrap with GUI-Version writes GUI version to cookie
#  returns among other the current authentication state
#
	AUTHSTATUS=$(${CURL} ${OPTS} -s -b ${COOKIE} -A "${BROWSER}" -H "DNT: 1" -H "Connection: keep-alive" -L https://${ALEXA}/api/bootstrap?version=${GUIVERSION} | sed -r 's/^.*"authenticated":([^,]+),.*$/\1/g')

	if [ "$AUTHSTATUS" = "true" ] ; then
		return 1
	fi

	return 0
}

#
# set device specific variables from JSON device list
#
set_var()
{
	ATTR="accountName"
	NAME=`grep ${ATTR}\| ${DEVTXT} | sed "s/^.*${ATTR}|//" | sed 's/ /_/g'`

	ATTR="deviceType"
	TYPE=`grep ${ATTR}\| ${DEVTXT} | sed "s/^.*${ATTR}|//" | sed 's/ /_/g'`

	ATTR="serialNumber"
	SERIAL=`grep ${ATTR}\| ${DEVTXT} | sed "s/^.*${ATTR}|//" | sed 's/ /_/g'`

	ATTR="deviceOwnerCustomerId"
	MEDIAID=`grep ${ATTR}\| ${DEVTXT} | sed "s/^.*${ATTR}|//" | sed 's/ /_/g'`

	ATTR="deviceFamily"
	FAMILY=`grep ${ATTR}\| ${DEVTXT} | sed "s/^.*${ATTR}|//" | sed 's/ /_/g'`


	if [ -z "${DEVICE}" ] ; then
		# if no device was supplied, use the first Echo(dot) in device list
        	IDX=0
		for I in $FAMILY ; do
			if [ "$I" = "ECHO" -o "$I" = "KNIGHT" -o "$I" = "ROOK" ] ; then
			break;
			fi
			IDX=$((IDX+1))
		done

		C=0
		for I in $NAME ; do
			if [ $C -eq $IDX ] ; then
				DEVICE=$I
				break
			fi
			C=$((C+1))
		done
		echo "setting default device to:"
		echo ${DEVICE}
	else
		DEVICE=`echo $DEVICE | sed 's/ /_/g'`
		IDX=0
		for I in $NAME ; do
			if [ "$I" = "$DEVICE" ] ; then
				break;
			fi
			IDX=$((IDX+1))
		done
	fi

	C=0
	for I in $MEDIAID ; do
		if [ $C -eq $IDX ] ; then
			MEDIAOWNERCUSTOMERID=$I
			break
		fi
		C=$((C+1))
	done

	C=0
	for I in $TYPE ; do
		if [ $C -eq $IDX ] ; then
			DEVICETYPE=$I
			break
		fi
		C=$((C+1))
	done

	C=0
	for I in $SERIAL ; do
		if [ $C -eq $IDX ] ; then
			DEVICESERIALNUMBER=$I
			break
		fi
		C=$((C+1))
	done

	if [ -z "${DEVICESERIALNUMBER}" ] ; then
		echo "ERROR: unkown device dev:${DEVICE}"
		exit 1
	fi
}

#
# execute command
# (SequenceCommands by Michael Geramb and Ralf Otto)
#
run_cmd()
{
if [ -n "${SEQUENCECMD}" ]
	then
		echo "Sequence command: ${SEQUENCECMD}"
		COMMAND="{\"behaviorId\":\"PREVIEW\",\"sequenceJson\":\"{\\\"@type\\\":\\\"com.amazon.alexa.behaviors.model.Sequence\\\",\\\"startNode\\\":{\\\"@type\\\":\\\"com.amazon.alexa.behaviors.model.OpaquePayloadOperationNode\\\",\\\"type\\\":\\\"${SEQUENCECMD}\\\",\\\"operationPayload\\\":{\\\"deviceType\\\":\\\"${DEVICETYPE}\\\",\\\"deviceSerialNumber\\\":\\\"${DEVICESERIALNUMBER}\\\",\\\"locale\\\":\\\"${LANGUAGE}\\\",\\\"customerId\\\":\\\"${MEDIAOWNERCUSTOMERID}\\\"${TTS}}}}\",\"status\":\"ENABLED\"}"

		${CURL} ${OPTS} -s -b ${COOKIE} -A "${BROWSER}" -H "DNT: 1" -H "Connection: keep-alive" -L\
		 -H "Content-Type: application/json; charset=UTF-8" -H "Referer: https://alexa.${AMAZON}/spa/index.html" -H "Origin: https://alexa.${AMAZON}"\
		 -H "csrf: $(awk "\$0 ~/.${AMAZON}.*csrf[ \\s\\t]+/ {print \$7}" ${COOKIE})" -X POST -d ${COMMAND}\
		 "https://${ALEXA}/api/behaviors/preview"
else
	${CURL} ${OPTS} -s -b ${COOKIE} -A "${BROWSER}" -H "DNT: 1" -H "Connection: keep-alive" -L\
	 -H "Content-Type: application/json; charset=UTF-8" -H "Referer: https://alexa.${AMAZON}/spa/index.html" -H "Origin: https://alexa.${AMAZON}"\
	 -H "csrf: $(awk "\$0 ~/.${AMAZON}.*csrf[ \\s\\t]+/ {print \$7}" ${COOKIE})" -X POST -d ${COMMAND}\
	 "https://${ALEXA}/api/np/command?deviceSerialNumber=${DEVICESERIALNUMBER}&deviceType=${DEVICETYPE}"
fi
}

#
# play TuneIn radio station
#
play_radio()
{
${CURL} ${OPTS} -s -b ${COOKIE} -A "${BROWSER}" -H "DNT: 1" -H "Connection: keep-alive" -L\
 -H "Content-Type: application/json; charset=UTF-8" -H "Referer: https://alexa.${AMAZON}/spa/index.html" -H "Origin: https://alexa.${AMAZON}"\
 -H "csrf: $(awk "\$0 ~/.${AMAZON}.*csrf[ \\s\\t]+/ {print \$7}" ${COOKIE})" -X POST\
 "https://${ALEXA}/api/tunein/queue-and-play?deviceSerialNumber=${DEVICESERIALNUMBER}&deviceType=${DEVICETYPE}&guideId=${STATIONID}&contentType=station&callSign=&mediaOwnerCustomerId=${MEDIAOWNERCUSTOMERID}"
}

#
# play library track
#
play_song()
{
	if [ -z "${ALBUM}" ] ; then
		JSON="{\"trackId\":\"${SONG}\",\"playQueuePrime\":true}"
	else
		JSON="{\"albumArtistName\":\"${ARTIST}\",\"albumName\":\"${ALBUM}\"}"
	fi

${CURL} ${OPTS} -s -b ${COOKIE} -A "${BROWSER}" -H "DNT: 1" -H "Connection: keep-alive" -L\
 -H "Content-Type: application/json; charset=UTF-8" -H "Referer: https://alexa.${AMAZON}/spa/index.html" -H "Origin: https://alexa.${AMAZON}"\
 -H "csrf: $(awk "\$0 ~/.${AMAZON}.*csrf[ \\s\\t]+/ {print \$7}" ${COOKIE})" -X POST -d "${JSON}"\
 "https://${ALEXA}/api/cloudplayer/queue-and-play?deviceSerialNumber=${DEVICESERIALNUMBER}&deviceType=${DEVICETYPE}&mediaOwnerCustomerId=${MEDIAOWNERCUSTOMERID}&shuffle=false"
}

#
# play library playlist
#
play_playlist()
{
${CURL} ${OPTS} -s -b ${COOKIE} -A "${BROWSER}" -H "DNT: 1" -H "Connection: keep-alive" -L\
 -H "Content-Type: application/json; charset=UTF-8" -H "Referer: https://alexa.${AMAZON}/spa/index.html" -H "Origin: https://alexa.${AMAZON}"\
 -H "csrf: $(awk "\$0 ~/.${AMAZON}.*csrf[ \\s\\t]+/ {print \$7}" ${COOKIE})" -X POST -d "{\"playlistId\":\"${PLIST}\",\"playQueuePrime\":true}"\
 "https://${ALEXA}/api/cloudplayer/queue-and-play?deviceSerialNumber=${DEVICESERIALNUMBER}&deviceType=${DEVICETYPE}&mediaOwnerCustomerId=${MEDIAOWNERCUSTOMERID}&shuffle=false"
}

#
# play PRIME playlist
#
play_prime_playlist()
{
${CURL} ${OPTS} -s -b ${COOKIE} -A "${BROWSER}" -H "DNT: 1" -H "Connection: keep-alive" -L\
 -H "Content-Type: application/json; charset=UTF-8" -H "Referer: https://alexa.${AMAZON}/spa/index.html" -H "Origin: https://alexa.${AMAZON}"\
 -H "csrf: $(awk "\$0 ~/.${AMAZON}.*csrf[ \\s\\t]+/ {print \$7}" ${COOKIE})" -X POST -d "{\"asin\":\"${ASIN}\"}"\
 "https://${ALEXA}/api/prime/prime-playlist-queue-and-play?deviceSerialNumber=${DEVICESERIALNUMBER}&deviceType=${DEVICETYPE}&mediaOwnerCustomerId=${MEDIAOWNERCUSTOMERID}"
}

#
# play PRIME station
#
play_prime_station()
{
${CURL} ${OPTS} -s -b ${COOKIE} -A "${BROWSER}" -H "DNT: 1" -H "Connection: keep-alive" -L\
 -H "Content-Type: application/json; charset=UTF-8" -H "Referer: https://alexa.${AMAZON}/spa/index.html" -H "Origin: https://alexa.${AMAZON}"\
 -H "csrf: $(awk "\$0 ~/.${AMAZON}.*csrf[ \\s\\t]+/ {print \$7}" ${COOKIE})" -X POST -d "{\"seed\":\"{\\\"type\\\":\\\"KEY\\\",\\\"seedId\\\":\\\"${SEEDID}\\\"}\",\"stationName\":\"none\",\"seedType\":\"KEY\"}"\
 "https://${ALEXA}/api/gotham/queue-and-play?deviceSerialNumber=${DEVICESERIALNUMBER}&deviceType=${DEVICETYPE}&mediaOwnerCustomerId=${MEDIAOWNERCUSTOMERID}"
}

#
# play PRIME historical queue
#
play_prime_hist_queue()
{
${CURL} ${OPTS} -s -b ${COOKIE} -A "${BROWSER}" -H "DNT: 1" -H "Connection: keep-alive" -L\
 -H "Content-Type: application/json; charset=UTF-8" -H "Referer: https://alexa.${AMAZON}/spa/index.html" -H "Origin: https://alexa.${AMAZON}"\
 -H "csrf: $(awk "\$0 ~/.${AMAZON}.*csrf[ \\s\\t]+/ {print \$7}" ${COOKIE})" -X POST -d "{\"deviceType\":\"${DEVICETYPE}\",\"deviceSerialNumber\":\"${DEVICESERIALNUMBER}\",\"mediaOwnerCustomerId\":\"${MEDIAOWNERCUSTOMERID}\",\"queueId\":\"${HIST}\",\"service\":null,\"trackSource\":\"TRACK\"}"\
 "https://${ALEXA}/api/media/play-historical-queue"
}

#
# current queue
#
show_queue()
{
	echo "/api/np/player"
${CURL} ${OPTS} -s -b ${COOKIE} -A "${BROWSER}" -H "DNT: 1" -H "Connection: keep-alive" -L\
 -H "Content-Type: application/json; charset=UTF-8" -H "Referer: https://alexa.${AMAZON}/spa/index.html" -H "Origin: https://alexa.${AMAZON}"\
 -H "csrf: $(awk "\$0 ~/.${AMAZON}.*csrf[ \\s\\t]+/ {print \$7}" ${COOKIE})" -X GET \
 "https://${ALEXA}/api/np/player?deviceSerialNumber=${DEVICESERIALNUMBER}&deviceType=${DEVICETYPE}"
	echo
	echo "/api/np/queue"
${CURL} ${OPTS} -s -b ${COOKIE} -A "${BROWSER}" -H "DNT: 1" -H "Connection: keep-alive" -L\
 -H "Content-Type: application/json; charset=UTF-8" -H "Referer: https://alexa.${AMAZON}/spa/index.html" -H "Origin: https://alexa.${AMAZON}"\
 -H "csrf: $(awk "\$0 ~/.${AMAZON}.*csrf[ \\s\\t]+/ {print \$7}" ${COOKIE})" -X GET \
 "https://${ALEXA}/api/np/queue?deviceSerialNumber=${DEVICESERIALNUMBER}&deviceType=${DEVICETYPE}"
	echo
	echo "/api/media/state"
 ${CURL} ${OPTS} -s -b ${COOKIE} -A "${BROWSER}" -H "DNT: 1" -H "Connection: keep-alive" -L\
 -H "Content-Type: application/json; charset=UTF-8" -H "Referer: https://alexa.${AMAZON}/spa/index.html" -H "Origin: https://alexa.${AMAZON}"\
 -H "csrf: $(awk "\$0 ~/.${AMAZON}.*csrf[ \\s\\t]+/ {print \$7}" ${COOKIE})" -X GET \
 "https://${ALEXA}/api/media/state?deviceSerialNumber=${DEVICESERIALNUMBER}&deviceType=${DEVICETYPE}"
	echo
}

#
# deletes a multiroom device
#
delete_multiroom()
{
${CURL} ${OPTS} -s -b ${COOKIE} -A "${BROWSER}" -H "DNT: 1" -H "Connection: keep-alive" -L\
 -H "Content-Type: application/json; charset=UTF-8" -H "Referer: https://alexa.${AMAZON}/spa/index.html" -H "Origin: https://alexa.${AMAZON}"\
 -H "csrf: $(awk "\$0 ~/.${AMAZON}.*csrf[ \\s\\t]+/ {print \$7}" ${COOKIE})" -X DELETE \
 "https://${ALEXA}/api/lemur/tail/${DEVICESERIALNUMBER}"
}

#
# creates a multiroom device
#
create_multiroom()
{
	JSON="{\"id\":null,\"name\":\"${LEMUR}\",\"members\":["
	for DEVICE in $CHILD ; do
		set_var
		JSON="${JSON}{\"dsn\":\"${DEVICESERIALNUMBER}\",\"deviceType\":\"${DEVICETYPE}\"},"
	done
	JSON="${JSON%,}]}"

${CURL} ${OPTS} -s -b ${COOKIE} -A "${BROWSER}" -H "DNT: 1" -H "Connection: keep-alive" -L\
 -H "Content-Type: application/json; charset=UTF-8" -H "Referer: https://alexa.${AMAZON}/spa/index.html" -H "Origin: https://alexa.${AMAZON}"\
 -H "csrf: $(awk "\$0 ~/.${AMAZON}.*csrf[ \\s\\t]+/ {print \$7}" ${COOKIE})" -X POST -d "${JSON}" \
 "https://${ALEXA}/api/lemur/tail"
}

#
# list bluetooth devices
#
list_bluetooth()
{
${CURL} ${OPTS} -s -b ${COOKIE} -A "${BROWSER}" -H "DNT: 1" -H "Connection: keep-alive" -L\
 -H "Content-Type: application/json; charset=UTF-8" -H "Referer: https://alexa.${AMAZON}/spa/index.html" -H "Origin: https://alexa.${AMAZON}"\
 -H "csrf: $(awk "\$0 ~/.${AMAZON}.*csrf[ \\s\\t]+/ {print \$7}" ${COOKIE})" -X GET \
 "https://${ALEXA}/api/bluetooth?cached=false"
}

#
# connect bluetooth device
#
connect_bluetooth()
{
${CURL} ${OPTS} -s -b ${COOKIE} -A "${BROWSER}" -H "DNT: 1" -H "Connection: keep-alive" -L\
 -H "Content-Type: application/json; charset=UTF-8" -H "Referer: https://alexa.${AMAZON}/spa/index.html" -H "Origin: https://alexa.${AMAZON}"\
 -H "csrf: $(awk "\$0 ~/.${AMAZON}.*csrf[ \\s\\t]+/ {print \$7}" ${COOKIE})" -X POST -d "{\"bluetoothDeviceAddress\":\"${BLUETOOTH}\"}"\
 "https://${ALEXA}/api/bluetooth/pair-sink/${DEVICETYPE}/${DEVICESERIALNUMBER}"
}

#
# disconnect bluetooth device
#
disconnect_bluetooth()
{
${CURL} ${OPTS} -s -b ${COOKIE} -A "${BROWSER}" -H "DNT: 1" -H "Connection: keep-alive" -L\
 -H "Content-Type: application/json; charset=UTF-8" -H "Referer: https://alexa.${AMAZON}/spa/index.html" -H "Origin: https://alexa.${AMAZON}"\
 -H "csrf: $(awk "\$0 ~/.${AMAZON}.*csrf[ \\s\\t]+/ {print \$7}" ${COOKIE})" -X POST \
 "https://${ALEXA}/api/bluetooth/disconnect-sink/${DEVICETYPE}/${DEVICESERIALNUMBER}"
}

#
# device that sent the last command
# (by Markus Wennesheimer)
#
last_alexa()
{
${CURL} ${OPTS} -s -b ${COOKIE} -A "Mozilla/5.0" -H "DNT: 1" -H "Connection: keep-alive" -L\
 -H "Content-Type: application/json; charset=UTF-8" -H "Referer: https://alexa.${AMAZON}/spa/index.html" -H "Origin: https://alexa.${AMAZON}"\
 -H "csrf: $(awk "\$0 ~/.${AMAZON}.*csrf[ \\s\\t]+/ {print \$7}" ${COOKIE})" -X GET \
 "https://${ALEXA}/api/activities?startTime=&size=1&offset=1" | sed -r 's/^.*serialNumber":"([^"]+)".*$/\1/'
 }

#
# logout
#
log_off()
{
${CURL} ${OPTS} -s -c ${COOKIE} -b ${COOKIE} -A "${BROWSER}" -H "DNT: 1" -H "Connection: keep-alive" -L\
 https://${ALEXA}/logout > /dev/null

rm -f ${DEVLIST}
rm -f ${DEVTXT}
rm -f ${COOKIE}
}

if [ -z "$LASTALEXA" -a -z "$BLUETOOTH" -a -z "$LEMUR" -a -z "$PLIST" -a -z "$HIST" -a -z "$SEEDID" -a -z "$ASIN" -a -z "$QUEUE" -a -z "$COMMAND" -a -z "$STATIONID" -a -z "$SONG" -a -n "$LOGOFF" ] ; then
	echo "only logout option present, logging off ..."
	log_off
	exit 0
fi

if [ ! -f ${COOKIE} ] ; then
	echo "cookie does not exist. logging in ..."
	log_in
fi

check_status
if [ $? -eq 0 ] ; then
	echo "cookie expired, logging in again ..."
	log_in
	check_status
	if [ $? -eq 0 ] ; then
		echo "log in failed, aborting"
		exit 1
	fi
fi

if [ ! -f ${DEVTXT} ] ; then
	echo "device list does not exist. downloading ..."
	get_devlist
	if [ ! -f ${DEVTXT} ] ; then
		echo "failed to download device list, aborting"
		exit 1
	fi
fi

if [ -n "$COMMAND" ] ; then
	set_var
	if [ -n "$COMMAND" ] ; then
		echo "sending cmd:${COMMAND} to dev:${DEVICE} type:${DEVICETYPE} serial:${DEVICESERIALNUMBER} customerid:${MEDIAOWNERCUSTOMERID}"
		run_cmd
	fi
elif [ -n "$LEMUR" ] ; then
	DEVICE="${LEMUR}"
	set_var
	if [ -n "$DEVICESERIALNUMBER" ] ; then
		delete_multiroom
	fi
	if [ -z "$CHILD" ] ; then
		echo "Deleted multi room dev:${LEMUR} serial:${DEVICESERIALNUMBER}"
	else
		echo "Creating multi room dev:${LEMUR} member_dev(s):${CHILD}"
		create_multiroom
	fi
	rm -f ${DEVLIST}
	rm -f ${DEVTXT}
	get_devlist
elif [ -n "$BLUETOOTH" ] ; then
	set_var
	if [ "$BLUETOOTH" = "null" ] ; then
		echo "disconnecting dev:${DEVICE} type:${DEVICETYPE} serial:${DEVICESERIALNUMBER} from bluetooth"
		disconnect_bluetooth
	elif [ "$BLUETOOTH" = "list" -o "$BLUETOOTH" = "List" -o "$BLUETOOTH" = "LIST" ] ; then
		echo "bluetooth api list:"
		list_bluetooth
	else
		echo "connecting dev:${DEVICE} type:${DEVICETYPE} serial:${DEVICESERIALNUMBER} to bluetooth device:${BLUETOOTH}"
		connect_bluetooth
	fi
elif [ -n "$STATIONID" ] ; then
	set_var
	echo "playing stationID:${STATIONID} on dev:${DEVICE} type:${DEVICETYPE} serial:${DEVICESERIALNUMBER} mediaownerid:${MEDIAOWNERCUSTOMERID}"
	play_radio
elif [ -n "$SONG" ] ; then
	set_var
	echo "playing library track:${SONG} on dev:${DEVICE} type:${DEVICETYPE} serial:${DEVICESERIALNUMBER} mediaownerid:${MEDIAOWNERCUSTOMERID}"
	play_song
elif [ -n "$PLIST" ] ; then
	set_var
	echo "playing library playlist:${PLIST} on dev:${DEVICE} type:${DEVICETYPE} serial:${DEVICESERIALNUMBER} mediaownerid:${MEDIAOWNERCUSTOMERID}"
	play_playlist
elif [ -n "$ASIN" ] ; then
	set_var
	echo "playing PRIME playlist ${ASIN}"
	play_prime_playlist
elif [ -n "$SEEDID" ] ; then
	set_var
	echo "playing PRIME station ${SEEDID}"
	play_prime_station
elif [ -n "$HIST" ] ; then
	set_var
	echo "playing PRIME historical queue ${HIST}"
	play_prime_hist_queue
elif [ -n "$QUEUE" ]; then
	set_var
	echo "queue info for dev:${DEVICE} type:${DEVICETYPE} serial:${DEVICESERIALNUMBER}"
	show_queue
elif [ -n "$LIST" ] ; then
	ATTR="accountName"
	echo "the following devices exist in your account:"
	grep ${ATTR}\| ${DEVTXT} | sed "s/^.*${ATTR}|//" | sed 's/ /_/g'
elif [ -n "$LASTALEXA" ] ; then
	last_alexa
else
	echo "no alexa command received"
fi

if [ -n "$LOGOFF" ] ; then
	echo "logout option present, logging off ..."
	log_off
fi
Quand c'est fait on fait CTRL + O, entrer pour sauvegarder CTRL + X pour quitter

On peut maintenant quitter l'accès SSH en tapant : TOUT EST PRET.

Maintenant, que tout cela est rentré, on se rend dans Jeedom pour tester. On va alors dans la section plugin et on télécharge le plugin SCRIPT et on l'active.

On créer un script que vous allez appelé pour l'occasion "test"
Image

On se rend maintenant dans Commande et on clique sur ajouter une commande script.

On lui donne un nom et on passe le mode en type "action"

Dans la petite case blanche on va donc rentrer l'execution du bash, pour cela on tape :

Code : Tout sélectionner

cd /etc/alexa-remote-control
./alexa-remote-control.sh -d "VOTRE ECHO" -e speak:"TEXTE"
Le script va donc aller dans le dossier /etc/alexa-remote-control et ensuite executer la commande SPEAK

Ensuite on va remplacer VOTRE ECHO par le nom de l'appareil Echo que vous souhaitez faire parler (pour savoir on se rend sur l'application amazon Alexa) je conseil si vous avez des appareils avec des nom a majuscule et accent de les supprimer de les renommer.

Et ensuite on va remplacer TEXTE par le texte que vous souhaitez lui faire dire. (On laisse bien les " ")

Vous devez avoir un truc comme ceci :
Image

On va ensuite enregistrer et appuyer sur le bouton "Tester" et laisser faire ... Votre belle Alexa d'une voix sensuelle vas reciter votre belle phrase.

Et voila le tutoriel est terminé. Je n'ai réalisé que la partie SPEAK mais il est possible grace a ce Bash de lui faire faire tout type d'action comme lancer la radio, dire la météo, lancer des routines, et j'en passe. Vous aurez juste a modifier la dernière étapes du tutoriel dans le plugin script.

Je vous laisse le GITHUB avec toute les commandes ici : https://github.com/thorsten-gehrig/alexa-remote-control

Bon courage

EDIT :

Pour les gens qui ont un soucis d'authentification (Un grand MERCI à Graouxx pour son astuce) :
Il suffit de modifier la ligne

Code : Tout sélectionner

BROWSER='Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0'
Par

Code : Tout sélectionner

BROWSER='Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36'
Tout devrait rentrer dans l'ordre !
Dernière édition par Jeje-2607 le 29 nov. 2018, 20:13, édité 3 fois.

enguerrand
Timide
Messages : 24
Inscription : 24 août 2018, 19:40

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par enguerrand » 21 oct. 2018, 03:04

Merci à toi, je vais essayer demain ton tuto

enguerrand
Timide
Messages : 24
Inscription : 24 août 2018, 19:40

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par enguerrand » 21 oct. 2018, 15:06

Super, ça fonctionne,
par contre dans ton tuto tu as inversé les commandes pour créer un fichier (touch) et créer un dossier (mkdir)

Jeje-2607
Timide
Messages : 10
Inscription : 20 déc. 2016, 16:00

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par Jeje-2607 » 21 oct. 2018, 16:35

Ah exact autant pour moi ! Merci c'est corrigé et content que ca fonctionne :D

dpm62980
Timide
Messages : 97
Inscription : 06 mars 2015, 21:01

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par dpm62980 » 22 oct. 2018, 11:13

Bonjour,
J'ai suivi ce super tuto et j'obtiens ce message d'erreur à l'exécution du script :

Code : Tout sélectionner

	Erreur exécution de la commande [Aucun][Alexa][Alexa] : Erreur dans l'exécution du terminal, la valeur retournée est : 1. Détails : Array ( [0] => cookie does not exist. logging in ... cookie expired, logging in again ... log in failed, aborting )
Je vais revérifier les infos mais je ne sais pas trop interpréter ce log.
Merci pour votre aide.

dpm62980
Timide
Messages : 97
Inscription : 06 mars 2015, 21:01

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par dpm62980 » 22 oct. 2018, 11:51

J'avais oublié le "a" final de "alexa.amazon.fr".
Je n'ai plus ce message d'erreur.

Jeje-2607
Timide
Messages : 10
Inscription : 20 déc. 2016, 16:00

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par Jeje-2607 » 22 oct. 2018, 17:30

Parfait alors :)

dpm62980
Timide
Messages : 97
Inscription : 06 mars 2015, 21:01

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par dpm62980 » 22 oct. 2018, 18:48

Pas vraiment, j'ai une autre erreur.
Quand je teste depuis Jeedom, pas d'erreur mais mon echo reste muet.
Quand j'exécute la commande en ssh j'obtiens :

Code : Tout sélectionner

root@jeedom:/etc/alexa-remote-control# ./alexa-remote-control.sh -d "sejour" -e speak:"bonjour pierrot"
sending cmd:speak:bonjour pierrot to dev:sejour type:xxxxxxxxxxxxxx serial:xxxxxxxxxxxxxxxxx customerid:
Sequence command: Alexa.Speak
HTTP/1.1 0 x-amzn-RequestId: xxxxx-d618-11e8-aaa6-xxxxxxxxxx
Access-Control-Allow-Origin: https://alexa.amazon.fr
Content-Encoding: deflate
Vary: Origin
Access-Control-Expose-Headers: x-amzn-dat-gui-client-upgrade,X-Amzn-Error,loginUrl,X-Amzn-RequestId,x-amzn-alt-domain,Date,Location
Access-Control-Allow-Credentials: true
Date: Mon, 22 Oct 2018 16:35:36 GMT
Connection: close

Après avoir vérifié, je ne vois pas ce qui bloque.
Est-ce normal que customerid soit vide ?

kenshirohokuto
Timide
Messages : 162
Inscription : 07 déc. 2017, 10:02

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par kenshirohokuto » 23 oct. 2018, 00:02

bonsoir,
script inséré en 5 minutes chrono (voire moins ;) )
fonctionne impec !

merci de cette achtuche :)

ownleex
Timide
Messages : 412
Inscription : 22 avr. 2016, 13:51
Localisation : Alpes-Maritimes

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par ownleex » 23 oct. 2018, 17:34

Bonjour, un grand merci pour ce script :)
Une question : y a-t-il un moyen de régler le volume sonore ?
Rpi3 sur SSD, Rfxcom, stick Zwave+, clé Bluetooth, plugin Hue et netatmo

jschwab
Timide
Messages : 41
Inscription : 17 oct. 2018, 10:20

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par jschwab » 23 oct. 2018, 18:36

Je ne trouve pas le nom de mon appareil Echo, c'est ou dans l'appli/sur le site ?

Edit: Ok sur l'appli j'ai trouvé :p
Je l'ai renommé, mais la commande ne marche pas.
Il y a un moyen d'effacer le liste des devices qui est importé à la première exécution du script ?

Edit2: je me répond:
root@s-jeedom:/tmp# rm .alexa.cookie
root@s-jeedom:/tmp# rm .alexa.devicelist.json
root@s-jeedom:/tmp# rm .alexa.devicelist.txt

Jeje-2607
Timide
Messages : 10
Inscription : 20 déc. 2016, 16:00

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par Jeje-2607 » 23 oct. 2018, 19:01

ownleex a écrit :
23 oct. 2018, 17:34
Bonjour, un grand merci pour ce script :)
Une question : y a-t-il un moyen de régler le volume sonore ?
Pour le volume tu peux le régler en tapant -e vol: (0 a 100) mais le soucis c'est que tu ne pourras pas la régler pour faire "parler" Alexa (tester ca fonctionne pas) ! Par contre tu pourras régler le son de la musique !

Astuce que je fais, j'ai créer 2 routines qui mettent le son a 5 a minuit, midi,
dpm62980 a écrit :
22 oct. 2018, 18:48
Pas vraiment, j'ai une autre erreur.
Quand je teste depuis Jeedom, pas d'erreur mais mon echo reste muet.
Quand j'exécute la commande en ssh j'obtiens :

Code : Tout sélectionner

root@jeedom:/etc/alexa-remote-control# ./alexa-remote-control.sh -d "sejour" -e speak:"bonjour pierrot"
sending cmd:speak:bonjour pierrot to dev:sejour type:xxxxxxxxxxxxxx serial:xxxxxxxxxxxxxxxxx customerid:
Sequence command: Alexa.Speak
HTTP/1.1 0 x-amzn-RequestId: xxxxx-d618-11e8-aaa6-xxxxxxxxxx
Access-Control-Allow-Origin: https://alexa.amazon.fr
Content-Encoding: deflate
Vary: Origin
Access-Control-Expose-Headers: x-amzn-dat-gui-client-upgrade,X-Amzn-Error,loginUrl,X-Amzn-RequestId,x-amzn-alt-domain,Date,Location
Access-Control-Allow-Credentials: true
Date: Mon, 22 Oct 2018 16:35:36 GMT
Connection: close

Après avoir vérifié, je ne vois pas ce qui bloque.
Est-ce normal que customerid soit vide ?
Je suis désolé mais la je vois pas. Es tu sur de pas avoir faire de faute dans le script au debut ? Ou même question très bête mais a tu montais le son ? Car pour moi tout se passe bien dans le script là ...

dpm62980
Timide
Messages : 97
Inscription : 06 mars 2015, 21:01

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par dpm62980 » 23 oct. 2018, 19:13

Merci jschwab, les rm .alexa*.* ont réglé mon problème.
J'avais renommé un appareil après une première exécution du script.

jschwab
Timide
Messages : 41
Inscription : 17 oct. 2018, 10:20

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par jschwab » 23 oct. 2018, 19:18

You're welcolme :)

C'est génial ce truc, merci pour le tuto :). Bon pour le moment à part lui faire dire des conneries, j'ai pas trop avancé :p

Quelqu'un sait simplement comment passer une variable dans une commande ? C'est pas forcément le bon topic j'imagine ..
Mais l'idée ce serait de demander à Alexa:
"Alexa, il fait quelle température dehors" > alexa lance un scénario Jeedom
Le scénario récupère la valeur de ma sonde extérieur, puis lance la commande 'speak' avec en paramètre la valeur de température

dpm62980
Timide
Messages : 97
Inscription : 06 mars 2015, 21:01

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par dpm62980 » 23 oct. 2018, 19:39

Merci Jeje-2607 pour ce tuto et ce script très utile.

J'aimerais bien que l'idée de jschwab soit réalisable, mais j'ai bien peur que l'on devra se contenter des diverses possibilités existantes et qui ne prévoient pas cette possibilité.

jschwab
Timide
Messages : 41
Inscription : 17 oct. 2018, 10:20

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par jschwab » 23 oct. 2018, 20:13

Bon en fait c'est tout bête, j'ai crée un 'script' via le plugin:

Image

La valeur est directement celle de mon capteur aqara qui se trouve dehors.

J'ai pris l'URL de ce script pour le coller dans un device HABridge, puis j'ai fais une routine dans Alexa.

Bon par contre alexa me dit "il fait actuellement 1446 degré celsius" alors qu'il fait en fait 14.46.
Mais il y a moyen de traiter ça avec une commande intermédiaire dans le commande script

Edit:
Image

'expr substr $param 1 2' > renvoit uniquement les caractère de 1 à 2 de la variable $param.

Networks514
Actif
Messages : 578
Inscription : 02 sept. 2016, 22:22

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par Networks514 » 23 oct. 2018, 23:37

Hello,
une idée de comment gérer la double authentification ? Quand j'execute le script, je reçois un sms avec le code :(
Networks514
Jeedom / Synology DS411j / Synology DS916+8G / Rpi3 / Zibase
Zwave / Enocean / Rflink / Xiaomi / Bluetooth

Networks514
Actif
Messages : 578
Inscription : 02 sept. 2016, 22:22

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par Networks514 » 24 oct. 2018, 00:18

Networks514 a écrit :
23 oct. 2018, 23:37
Hello,
une idée de comment gérer la double authentification ? Quand j'execute le script, je reçois un sms avec le code :(
Je m'auto réponds
Suite message suivant, chez moi pb double authentification chez Amazon

Code : Tout sélectionner

root@jeedom:/etc/alexa-remote-control# ./alexa-remote-control.sh -d "Salon" -e speak:"Bonjour"cookie does not exist. logging in ...
ERROR: Amazon Login was unsuccessful. Possibly you get a captcha login screen.
Try logging in to https://alexa.amazon.fr with your browser. In your browser
make sure to have all Amazon related cookies deleted and Javascript disabled!
Dans Chrome, installer l'extension cookies.txt
Vider tous les cookies du navigateur
Aller sur https://alexa.amazon.fr/
Se connecter
Lancer l'extension (petit icone installé dans le navigateur) cookies.txt pour récupérer le contenu
En SSH sur Jeedom dans /tmp, créer un fichier .alexa.cookie
Copier dans le fichier .alexa.cookie le contenu des cookies précédemment récupérés.

la commande fonctionne à présent.
/etc/alexa-remote-control/alexa-remote-control.sh -d "Salon" -e speak:"Bonjour"

A priori, cette méthode ne fonctionne pas dans la durée .. (2 semaines ?). A voir dans le temps car je ne souhaite pas supprimer ma double authent d'amazon pour faire parler alexa ...
A+
Networks514
Jeedom / Synology DS411j / Synology DS916+8G / Rpi3 / Zibase
Zwave / Enocean / Rflink / Xiaomi / Bluetooth

dpm62980
Timide
Messages : 97
Inscription : 06 mars 2015, 21:01

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par dpm62980 » 24 oct. 2018, 09:19

Merci jschwab et un grand Bravo pour ce partage.
Du coup, ça ouvre plein d'autres possibilités très intéressantes.
Je vais pouvoir ajouter des trucs sympas avec ce script et ha-bridge.
Merci encore

ownleex
Timide
Messages : 412
Inscription : 22 avr. 2016, 13:51
Localisation : Alpes-Maritimes

Re: [Tuto] Faire dire et faire faire ce que l'on veut a Alexa grâce a un script

Message par ownleex » 24 oct. 2018, 16:49

Merci Jeje-2607, et sais-tu comment régler le débit de parole ?
Jeje-2607 a écrit :
23 oct. 2018, 19:01
ownleex a écrit :
23 oct. 2018, 17:34
Bonjour, un grand merci pour ce script :)
Une question : y a-t-il un moyen de régler le volume sonore ?
Pour le volume tu peux le régler en tapant -e vol: (0 a 100) mais le soucis c'est que tu ne pourras pas la régler pour faire "parler" Alexa (tester ca fonctionne pas) ! Par contre tu pourras régler le son de la musique !

Astuce que je fais, j'ai créer 2 routines qui mettent le son a 5 a minuit, midi,

Tu peux aussi ajouter ta variable sous cette forme variable(nom-de-ta-variable) directement
jschwab a écrit :
23 oct. 2018, 20:13
Bon en fait c'est tout bête, j'ai crée un 'script' via le plugin:

Image

La valeur est directement celle de mon capteur aqara qui se trouve dehors.

J'ai pris l'URL de ce script pour le coller dans un device HABridge, puis j'ai fais une routine dans Alexa.

Bon par contre alexa me dit "il fait actuellement 1446 degré celsius" alors qu'il fait en fait 14.46.
Mais il y a moyen de traiter ça avec une commande intermédiaire dans le commande script

Edit:
Image

'expr substr $param 1 2' > renvoit uniquement les caractère de 1 à 2 de la variable $param.
Rpi3 sur SSD, Rfxcom, stick Zwave+, clé Bluetooth, plugin Hue et netatmo

Répondre

Revenir vers « [Plugin Officiel] Assistant vocaux »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité