Obsah:
- Krok 1: Pozadie
- Krok 2: Zaregistrujte modul gadget v vývojárskej konzole Alexa Voice Service
- Krok 3: Vytvorte funkciu AWS Lambda a vlastnú zručnosť
- Krok 4: Nastavte kód na svojom Raspberry Pi
- Krok 5: Zbaliť sa
Video: Pridajte vlastné ovládanie Alexa k projektu Raspberry Pi: 5 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:57
Tento projekt je určený pre kohokoľvek, kto má projekt Raspberry Pi, ktorý používa Python, ktorý chce pridať hlasové ovládanie prostredníctvom svojich existujúcich zariadení Amazon Echo. Nemusíte byť skúseným programátorom, ale mal by vám byť príjemný príkazový riadok a prispôsobenie existujúceho kódu vašim požiadavkám.
Pôvodne som sa pustil do projektu, ktorý má umožniť hlasové ovládanie môjho Raspberry Pi pomocou Alexa, aby mohol ohrievať vodu v kanvici na konkrétnu teplotu. Aj keď interakcia, ktorú som chcel, bola celkom jednoduchá (odovzdať jedno číslo od Alexa Raspberry Pi), potrebovalo veľa práce dostať sa do tohto stavu z existujúcich návodov. Dúfam, že tento tutoriál uľahčí tento proces ostatným čo najrýchlejšie.
V mojom príklade začínam s Raspberry Pi Zero W s Raspbianom. Na svojom Pi mám program Python3, ktorý je schopný písať text na displej SPI, a mám sondu teplomera, ktorú dokážem čítať. Pre vás môže byť tento program takmer čokoľvek, ale ide o to, že môžete mať niektoré vstupné zariadenia, ktoré chcete čítať prostredníctvom systému Alexa, alebo niektoré výstupné zariadenia, ktoré chcete ovládať pomocou systému Alexa.
Cieľom je prejsť zo základného programu, ako je ten, ktorý je popísaný vyššie, na zariadenie, ktoré môžete ľahko ovládať pomocou funkcie moje Echo. Za predpokladu, že tento hardvér už máte, tento projekt by vás nemal stáť žiadne peniaze. Na konci sa dostanete do bodu, kedy môžete hovoriť napríklad o:
Ja: "Alexa, požiadaj môj gadget o kontrolu teploty na senzore 1."
Alexova odpoveď: „Sonda ukazuje 72,31 stupňa.“
alebo
Ja: „Alexa, povedz môjmu gadgetu, aby napísal George Washington“
Odpoveď: Displej pripojený k môjmu Raspberry Pi teraz zobrazuje „George Washington“
V ďalšej časti popíšem, čo sa musí stať v zákulisí, aby to fungovalo. Ak chcete, aby to na vašom projekte začalo fungovať, a nezaujíma vás, ako to funguje, pokojne to preskočte (aj keď to môže byť zložitejšie, ak sa niečo pokazí).
Krok 1: Pozadie
Na tomto obrázku (kredit: https://developer.amazon.com/en-US/docs/alexa/alex… vidíme všeobecnú architektúru pomôcok Alexa.
Keď niečo poviete svojmu zariadeniu Echo, odošle zvuk do cloudu Alexa, kde sa spracuje a kde sa vygeneruje odpoveď, ktorá vám odpovie. Keď sa pýtate, aké je počasie, komunikujú len títo dvaja. Teraz predpokladajme, že chcete k jednému z vašich malých projektov na Raspberry Pi pridať hlasové ovládanie. Spracovanie všetkého na palube by vyžadovalo značný hardvér a veľmi prepracovanú základňu kódov, aby sa veci dali do pohybu. Lepším riešením by bolo využiť Alexa Cloud, ktorý je veľmi prepracovaný a veľmi dobre zvládol zložité vzorce reči. Gadgety Alexa vám na to poskytujú dobrý spôsob.
Gadget Alexa komunikuje so zariadením Echo pomocou bluetooth. Akonáhle sa toto spojenie nadviaže, obaja si navzájom pošlú správy pomocou kódovania UTF-8. Keď Echo niečo odovzdá gadgetu, nazýva sa to smernica. Druhý smer sa označuje ako udalosť. Predtým, ako sa dostaneme k presnému toku toho všetkého, mali by sme predstaviť ďalší kľúčový prvok: vlastné schopnosti Alexa.
Alexa umožňuje vývojárom vytvárať si vlastné zručnosti, ktoré im umožňujú navrhovať vlastné interakcie a správanie pre použitie na všetkých zariadeniach Echo. Vývojár by napríklad mohol vytvoriť vlastnú zručnosť, ktorá vám povie vzdialenosť medzi dvoma letiskami v USA. Používateľ by povedal: „Alexa, opýtajte sa môjho vlastného kalkulačky vzdialenosti, aká je vzdialenosť medzi LAX a JFK“a mohol by odpovedať „2475 míľ“. Ako sa to robí? Keď vývojár získa vlastnú zručnosť, definuje to, čo sa nazýva „vlastné zámery“, pomocou „ukážkových výpovedí“obsahujúcich „sloty“. Napríklad v tejto schopnosti by som mohol mať zámer „calc_dist“na výpočet vzdialenosti medzi dvoma bodmi. Ukážkový výrok by bol „aká je vzdialenosť medzi {slot1} a {slot2}“alebo „ako ďaleko medzi {slot1} a {slot2}“. Drážky uvedené v zátvorkách majú špecifické typy. V tomto prípade by týmito typmi boli letiskové kódy, ako sú LAX, JFK, BOS, ATL. Keď používateľ požiada o vlastnú zručnosť, Alexa Cloud sa pokúsi priradiť to, čo používateľ hovorí k vlastnému zámeru, pomocou dodaných ukážkových výpovedí a pokúsi sa nájsť platné hodnoty slotov pre túto požiadavku. V tomto prípade by zistil, že užívateľ chce zámer "calc_dist" a že slot1 je LAX a slot2 je JFK. V tomto mieste Alexa Cloud odovzdá prácu vlastnému kódu vývojára. V zásade okrem iných podrobností hovorí kódu vývojárov, aký zámer dostal a aké boli všetky hodnoty automatov.
Vývojár sa môže rozhodnúť, kde žije ich kód, ale veľmi obľúbenou možnosťou je použiť funkciu AWS Lambda. Ak neviete, čo to je, je to v podstate služba, ktorá vám umožní nahrať kód, ktorý je možné spustiť kedykoľvek, a potom vám naúčtuje poplatok iba za čas, počas ktorého sa váš kód spustí. Ak budeme pokračovať v našom príklade, vývojovým kódom môže byť funkcia Python, ktorá prijme dva letiskové kódy, vyhľadá ich polohu, vypočíta vzdialenosti a potom odošle odpoveď späť do cloudu Alexa, aby používateľovi niečo povedal. Cloud Alexa potom odošle tieto informácie o reči späť do zariadenia používateľa a oni dostanú odpoveď.
Teraz sa môžeme vrátiť k modulu gadget. Môžeme vytvárať vlastné zručnosti, ktoré sú navrhnuté tak, aby pracovali konkrétne s gadgetmi. Vývojár môže napísať zručnosť, ktorá vyšle do pripojeného modulu gadget smernicu. Táto smernica má užitočné zaťaženie, ktoré je možné použiť, ale modul gadget to vyžaduje. Táto zručnosť môže tiež odoslať smernicu a potom počúvať udalosť z modulu gadget, aby mal kód zručnosti prístup k informáciám odoslaným z modulu gadget.
Vytvorenie tohto toku umožňuje vytvoriť veľmi účinný nástroj, pretože lacné gadgety môžu mať schopnosť komunikovať s kódom v cloude a reagovať na hlasové príkazy pomocou jedného z najlepších dostupných rozpoznávaní hlasu.
Je potrebné poznamenať, že väčšina zručností umožňuje rôzne spôsoby interakcie s nimi. Užívateľ môže napríklad skočiť priamo do zámeru tým, že povie „Alexa, spýtajte sa mojej vlastnej kalkulačky vzdialenosti, aká je vzdialenosť medzi LAX a JFK“(nazýva sa jednorazové vyvolanie) alebo môže jednoducho použiť zámer spustenia: „Alexa, otvoriť moju vlastnú kalkulačku vzdialenosti “. Po tomto poslednom príklade by spravidla Alexa odpovedala výzvou na poskytnutie ďalších informácií. Tento tutoriál zámerne vynecháva podporu pre tie druhé. Konkrétnejšie, bez úpravy funkcie Lambda môžete túto zručnosť vyvolať iba pomocou jednorazového vyvolania. Táto voľba dizajnu umožňuje, aby bol model jednoduchší (nemusí podporovať úmysly spustenia ani tok konverzácií) a zistil som, že so svojimi pomôckami chcem zvyčajne komunikovať pomocou jednorazových vyvolávaní, pretože sú zvyčajne rýchlejšie.
Krok 2: Zaregistrujte modul gadget v vývojárskej konzole Alexa Voice Service
Nasleduje opis potrebných krokov. Vytvoril som ekvivalentné video, ktoré ukazuje, ako vykonať všetky tieto kroky. Na dokončenie tohto kroku môžete použiť jedno alebo obidve.
- Prejdite na
- Ak ešte nemáte bezplatný účet, vytvorte si ho
- Kliknite na „Produkty“
- Vyplňte štítky a zvoľte „Gadget Alexa“
- Do ostatných polí zadajte, čo chcete
- Kliknite na Dokončiť
Krok 3: Vytvorte funkciu AWS Lambda a vlastnú zručnosť
Vytvorte si vlastnú zručnosť v vývojárskej konzole Alexa Skills Kit
Kód pre tento návod nájdete tu
Pred dokončením tohto kroku budete musieť vytvoriť súbor.zip, ktorý obsahuje balík nasadenia pre funkciu AWS Lambda, ako je uvedené v tomto návode.
- Stiahnite si priečinok „lambda“z môjho Githubu, ktorý obsahuje „lambda_function.py“a „requirements.txt“
- Otvorte terminál a zmeňte aktuálny adresár tak, aby sa nachádzal v tomto priečinku.
- Spustite nasledujúcu postupnosť:
pip install -r requirements.txt -t skill_env
cp lambda_function.py skill_env cd skill_env zip -r../../skill-code.zip
Váš.zip súbor bude teraz umiestnený v adresári, kde bol priečinok lambda a bude sa nazývať „skill-code.zip“.
Poznámka k nákladom na hostovanie na AWS: Tento tutoriál vyžaduje, aby ste mali účet AWS (bezplatné vytváranie). Funkcie Lambda stoja peniaze, ale ich súčasné ceny v oblasti N. Virgínie sú 0,000000208 USD za 100 ms používania so 128 MB pamäte. Pre porovnanie, každé vyvolanie mojich schopností účtuje asi 800 ms použitia v tejto úrovni. Na zostavenie účtu vo výške 1,00 USD by ste museli túto funkciu vyvolať asi 600 000 krát, čo vám (ak vám to trvá 5 sekúnd na vyvolanie) trvá 34 dní nepretržitého volania vašej funkcie. Náklady by nemali predstavovať významný problém, pokiaľ nezverejníte svoje schopnosti a nezačne ich používať obrovské množstvo ľudí. Ak máte obavy zo získavania účtov za AWS, zvážte nastavenie alarmov používania, ktoré vás upozornia, ak používanie prekročí definovaný prah.
Nasleduje opis potrebných krokov. Vytvoril som ekvivalentné video, ktoré ukazuje, ako vykonať všetky tieto kroky. Na dokončenie tohto kroku môžete použiť jedno alebo obidve.
- Prejdite na stránku https://aws.amazon.com/ a prihláste sa do konzoly alebo si vytvorte bezplatný účet, ak ho nemáte.
- Vyhľadajte službu Lambda a kliknite na ňu v rámci služieb
- Kliknite na „Vytvoriť funkciu“
- Vyberte „Autor od začiatku“, pomenujte ho a zvoľte najnovšiu verziu Pythonu 3 pre runtime
- Zmeňte „upraviť vložený kód“na „nahrať súbor.zip“a vyberte vyššie vytvorený súbor.zip
- V novom okne prejdite na stránku https://developer.amazon.com/alexa/console/ask a prihláste sa
- Kliknite na „Vytvoriť zručnosť“
- Označte ho štítkom, vyberte „Vlastný“model a „Poskytnite si vlastný“a kliknite na „Vytvoriť zručnosť“
- Kliknite na „Začať od začiatku“a potom na „Vybrať“
- V časti „Zámery“kliknite na „Pridať“
- Vytvorte vlastný zámer s názvom „alexa_to_pi“a ako vzorový prejav zadajte „napísať {osoba}“
- Vytvorte slot pre intenciu s názvom „osoba“typu „AMAZON. Person“
- Vytvorte vlastný zámer s názvom „pi_to_alexa“a zadajte „skontrolujte teplotu zo senzora {sensor_num}
- Vytvorte slot pre intenciu s názvom „sensor_num“s typom „AMAZON. NUMBER“
- V časti Rozhrania zapnite „Vlastný ovládač rozhrania“
- V časti Koncový bod vyberte „AWS Lambda ARN“a skopírujte „ID svojej zručnosti“
- Prejdite späť do konzoly AWS
- Kliknite na „Pridať spúšťač“
- Vyberte „Súpravu Alexa Skills“, začiarknite políčko „Povoliť“v časti Overenie identifikácie zručnosti, vložte ID zručnosti, ktoré ste práve skopírovali, a kliknite na tlačidlo Pridať
- Skopírujte Lambda ARN v pravom hornom rohu
- Prejdite späť do konzoly Alexa Developer Console a prilepte Lambda ARN do poľa „Predvolený región“
- V časti Vyvolanie nastavte názov vyvolania zručnosti na „môj modul gadget“
- Kliknite na „Uložiť model“a potom na „Zostaviť model“
- Na horných kartách kliknite na „Testovať“a zmeňte prepínač z „Vypnuté“na „Vývoj“
- Denníky pre funkciu Lambda sa nachádzajú v službe „CloudWatch“na AWS.
Krok 4: Nastavte kód na svojom Raspberry Pi
Na to, aby váš Raspberry Pi mohol komunikovať so zariadením Alexa, potrebuje okrem niekoľkých ďalších súborov aj kód na uľahčenie prenosu informácií cez bluetooth a udržanie tohto pripojenia. Najľahší spôsob, ako začať s najaktuálnejšími súbormi od Amazonu, je klonovať ich úložisko Raspberry Pi Gadgets. Prejdite do adresára aktuálneho projektu a spustite ho
git klon
To načíta celé ich úložisko so všetkým potrebným kódom do vášho Pi. Má niekoľko príkladov projektov, ktoré predvádzajú niektoré z funkcií miniaplikácií Alexa. Ak by ste chceli viac informácií, prečítajte si ich readme na ich stránke Github.
Spustite ich funkciu nastavenia a nakonfigurujte všetko.
cd/home/pi/Alexa-Gadgets-Raspberry-Pi-Ukážky
sudo python3 launch.py --setup
Postupujte podľa pokynov a odpovedzte „y“na otázku, či chcete konfigurovať pomocou poverení modulu gadget. Pripomeňte si Amazon ID a Gadget Secret z nastavovania vášho gadgetu na konzole pre vývojárov, pretože bude o to požiadaný tu. Pre svoj Raspberry Pi Zero W. som zvolil režim prenosu „bt“. BLE nie je podporovaný všetkými staršími zariadeniami Echo, ale môžete sa pozrieť na to, čo je váš hardvér schopný. Ak používate svoj Pi v režime Desktop, Amazon odporúča pravým tlačidlom myši kliknúť na ikonu bluetooth v pravom hornom rohu a kliknúť na „Odstrániť“Bluetooth z panelu”, aby sa predišlo problémom s pripojením.
Poznámka: tento krok môže chvíľu trvať v závislosti od toho, koľko je potrebné nainštalovať.
Teraz budete mať všetky potrebné podporné súbory, aby ste sa mohli vrátiť k svojmu projektu a začať pridávať funkcie, ktoré umožnia komunikáciu s vašim Echo.
Ak sa rozhodnete, môžete priečinok „príklady“odstrániť z „Alexa-Gadgets-Raspberry-Pi-Samples/src“
Môžete mať svoj projektový kód, kdekoľvek chcete, ale vytvorím preň priečinok v domácom adresári. Alternatívne si môžete priečinok s kódom stiahnuť z môjho Githubu, ale nezabudnite upraviť súbory.ini, ako je popísané nižšie.
cd /domov /pi
mkdir my_project cd my_project dotkni sa my_gadget.py dotkni sa my_gadget.ini
Teraz som vytvoril dva súbory v priečinku s názvom „my_project“. Súbor.ini je dôležitý. Uistite sa, že obsahuje nasledujúce a náhrady vo vašom Amazon ID a tajnom kóde gadgetu:
[GadgetSettings]
amazonId = INSERT_AMAZON_ID_HERE alexaGadgetSecret = INSERT_ALEXA_GADGET_SECRET_HERE [GadgetCapabilities] Custom. MyGadget = 1.0
Teraz sa pozrime na súbor python, než sa dostaneme do podrobností:
importovať json
z agt importu AlexaGadget
trieda MyGadget (AlexaGadget):
def _init _ (self):
super ()._ init _ ()
def on_custom_mygadget_alexatopi (self, direktíva):
užitočné zaťaženie = json.loads (guidelines.payload.decode ("utf-8")) print ("Prijaté údaje:" + str (užitočné zaťaženie)) write_text (str (užitočné zaťaženie ['údaje'] ['osoba'] ['hodnota ']))
def on_custom_mygadget_pitoalexa (self, direktíva):
užitočné zaťaženie = json.loads (guidelines.payload.decode ("utf-8")) print ("Prijaté údaje:" + str (užitočné zaťaženie)) užitočné zaťaženie = {'údaje': "Sonda číta" + str (get_temp (užitočné zaťaženie) ['data'] ['sensor_num'] ['value'])) + "stupňů."} self.send_custom_event ('Custom. MyGadget', 'PiToAlexa', payload) MyGadget (). main ()
Najprv si všimnete, že volá dve funkcie: write_text () a get_temp (). Vo svojom kóde definujem tieto funkcie v tom istom súbore, ale závisia od môjho hardvéru, takže som sa ich rozhodol vynechať. Priložil som tento súbor k tým funkciám, ktoré sú definované len na tlač a vrátenie falošných údajov v prípade, že chcete spustiť tento presný kód. Navrhoval by som testovanie s týmto presným kódom predtým, ako ho upravíte, aby fungovalo s vašim projektom. Tiež som pripojil súbor.ini, ale uistite sa, že vstúpite a zmeníte tajné ID a modul gadget. Špičková funkcia prijíma údaje odovzdané z Alexa. Spodná funkcia prijíma údaje v rovnakom formáte, ale zariadenie Alexa počká päť sekúnd, kým sa udalosť odovzdá späť s vlastným užitočným zaťažením. Toto užitočné zaťaženie je špeciálne v tom, že zariadenie Alexa bude hovoriť o svojom obsahu.
Akonáhle budete mať tieto súbory, prejdite do priečinka „my_project“a spustite súbor python.
sudo reštart
cd/home/pi/my_project sudo python3./my_gadget.py
Ak program spúšťate prvýkrát, budete ho musieť spárovať so zariadením Echo. Uistite sa, že sa vaše zariadenie Echo nachádza v blízkosti Raspberry Pi, pretože musíme povoliť pripojenie bluetooth.
V aplikácii Alexa na svojom mobilnom zariadení kliknite na „zariadenia“v pravom dolnom rohu.
Vľavo hore kliknite na „Echo a Alexa“.
Kliknite na svoje zariadenie Echo.
V časti „BEZDRÁTOVÉ pripojenie“klepnite na „Zariadenia Bluetooth“.
Klepnite na „SPÁROVAŤ NOVÉ ZARIADENIE“a váš modul gadget by sa vám mal zobraziť v zozname.
Klepnite na svoj modul gadget. Mali by ste vidieť správu Pi, že sa úspešne spárovala.
Pri sledovaní výstupu na vašom Pi skúste ozvučiť hlasovým príkazom:
Vy: „Alexa, požiadaj môj modul gadget o kontrolu teploty pomocou prvého senzora“
Ak všetko fungovalo správne, mali by ste počuť:
Ozvena: „Sonda číta 120,505 stupňa.“
Ty: „Alexa, povedz môjmu gadgetu, aby napísal George Washington.“
Pi by mal vytlačiť:
Prijaté údaje: {'data': {'osoba': {'meno': 'osoba', 'hodnota': 'George Washington', 'confirmationStatus': 'NONE'}}}
George Washington"
Krok 5: Zbaliť sa
Tu zobrazené video je príkladom pomôcky, ktorá pracuje s čítaním teploty (rovnaká sonda vo F vs. C) a zapisovaním mien na jednoduchý displej.
Teraz, keď už dúfate, že niečo funguje, by ste sa mali pokúsiť prispôsobiť to tak, aby bol váš vlastný projekt schopnejší. Nezabudnite, že v konzole Alexa Developer Console môžete ľahko upravovať zámery a že všetky sloty, ktoré použijete, budú prenesené do vášho Pi v užitočnom zaťažení. Okrem toho môžete Alexovi povedať čokoľvek, čo by ste chceli, iba úpravou užitočného zaťaženia, ktoré odovzdáte späť v udalosti, pomocou kódu Raspberry Pi.
Upozorňujeme, že tento návod nemá byť konečným riešením pre všetky možnosti, ktoré by ste mohli chcieť s pomôckou Alexa. Je zámerne obmedzený, aby vám poskytol dve jednoduché funkcie na prenos údajov v každom smere medzi Alexou a miniaplikáciou. Ak máte záujem o vytváranie sofistikovanejších modelov interakcie, odporúčam vám prečítať si všetky súbory readme na https://github.com/alexa/Alexa-Gadgets-Raspberry-P… a vyskúšať všetky príklady, ktoré poskytujú.. Tiež by som vám odporučil, aby ste si prečítali dokumentáciu k Alexa Gadgets Toolkit a Alexa Skills Kit.
Odporúča:
Bzučiak na ovládanie projektu Arduino+Blynk: 8 krokov
Bzučiak na ovládanie projektu Arduino+Blynk: Blynk sa používa na to, aby bol internet vecí možný veľmi pohodlným spôsobom. V tomto projekte nepoužívam žiadny modul bluetooth alebo Wifi na bezdrôtovú komunikáciu. Je to možné pomocou aplikácie Blynk, ktorá vám môže pomôcť navrhnúť vlastnú aplikáciu v
Redbear BLE Nano V2 vlastné ovládanie s PfodApp - nevyžaduje sa žiadne kódovanie: 6 krokov
Redbear BLE Nano V2 vlastné ovládanie s PfodApp - nevyžaduje sa žiadne kódovanie: Aktualizácia: 15. septembra 2017 - Tento návod bol aktualizovaný tak, aby používal najnovšiu verziu RedBear BLE Nano, V2. Tu je k dispozícii predchádzajúca verzia tohto pokynu, ktorá bola zameraná na RedBear BLE Nano V1.5. Aktualizácia 15. novembra - 2017 Takže
ESP8266 RGB LED STRIP WIFI ovládanie - NODEMCU Ako IR diaľkové ovládanie pre LED pás ovládané cez Wifi - Ovládanie smartfónu RGB LED STRIP: 4 kroky
ESP8266 RGB LED STRIP WIFI ovládanie | NODEMCU Ako IR diaľkové ovládanie pre LED pás ovládané cez Wifi | Ovládanie smartfónu RGB LED STRIP: Ahoj, v tomto návode sa naučíme, ako používať nodemcu alebo esp8266 ako IR diaľkové ovládanie na ovládanie RGB LED pásu a Nodemcu budete ovládať smartfónom cez wifi. V zásade teda môžete RGB LED STRIP ovládať pomocou svojho smartfónu
Vlastné ovládanie Adafruit Feather NRF52, nevyžaduje sa žiadne kódovanie: 8 krokov (s obrázkami)
Adafruit Feather NRF52 Vlastné ovládacie prvky, nie je potrebné žiadne kódovanie: Aktualizácia 23. apríla 2019 - Grafy dátumu/času používajúce iba Arduino millis () nájdete v Arduino vykresľovaní dátumu/času/protokolovaní pomocou Millis () a PfodApp Najnovšie generované pfodDesigner V3.0.3610+ generované Kompletné skice Arduino na vykreslenie údajov podľa dátumu/času u
Pridajte do svojho projektu mikrokontroléra video a zvuk: 7 krokov
Pridajte do svojho mikrokontroléra projekt s videom a zvukom: 7 segmentové LED displeje sú užitočné pri zobrazovaní čísel a bitmapové LCD displeje umožňujú jednoduchú grafiku, ale niekedy je najľahším riešením skutočný, farebný video výstup: Kompozitné video (alias RCA konektor) je všadeprítomný a funguje s 3 " - 60 & q