6.3 KiB
Ustawianie timera - Wirtualny sprzęt IoT i Raspberry Pi
W tej części lekcji wywołasz swój kod serverless, aby zrozumieć mowę i ustawić timer na swoim wirtualnym urządzeniu IoT lub Raspberry Pi na podstawie wyników.
Ustawianie timera
Tekst zwrócony z wywołania funkcji rozpoznawania mowy musi zostać przesłany do twojego kodu serverless, aby został przetworzony przez LUIS, który zwróci liczbę sekund dla timera. Ta liczba sekund może być użyta do ustawienia timera.
Timery można ustawiać za pomocą klasy threading.Timer
w Pythonie. Klasa ta przyjmuje czas opóźnienia i funkcję, która zostanie wykonana po upływie tego czasu.
Zadanie - wyślij tekst do funkcji serverless
-
Otwórz projekt
smart-timer
w VS Code i upewnij się, że środowisko wirtualne jest załadowane w terminalu, jeśli korzystasz z wirtualnego urządzenia IoT. -
Nad funkcją
process_text
zadeklaruj funkcję o nazwieget_timer_time
, aby wywołać REST endpoint, który utworzyłeś:def get_timer_time(text):
-
Dodaj poniższy kod do tej funkcji, aby zdefiniować URL do wywołania:
url = '<URL>'
Zamień
<URL>
na URL swojego REST endpointu, który utworzyłeś w poprzedniej lekcji, czy to na swoim komputerze, czy w chmurze. -
Dodaj poniższy kod, aby ustawić tekst jako właściwość przekazywaną w formacie JSON do wywołania:
body = { 'text': text } response = requests.post(url, json=body)
-
Poniżej tego kodu pobierz
seconds
z odpowiedzi, zwracając 0, jeśli wywołanie się nie powiodło:if response.status_code != 200: return 0 payload = response.json() return payload['seconds']
Udane wywołania HTTP zwracają kod statusu w zakresie 200, a twój kod serverless zwraca 200, jeśli tekst został przetworzony i rozpoznany jako intencja ustawienia timera.
Zadanie - ustaw timer w wątku w tle
-
Dodaj poniższe polecenie importu na początku pliku, aby zaimportować bibliotekę threading w Pythonie:
import threading
-
Nad funkcją
process_text
dodaj funkcję, która będzie odpowiadać za wypowiadanie odpowiedzi. Na razie będzie ona tylko wypisywać tekst na konsolę, ale później w tej lekcji będzie odtwarzać mowę.def say(text): print(text)
-
Poniżej dodaj funkcję, która zostanie wywołana przez timer, aby ogłosić, że timer się zakończył:
def announce_timer(minutes, seconds): announcement = 'Times up on your ' if minutes > 0: announcement += f'{minutes} minute ' if seconds > 0: announcement += f'{seconds} second ' announcement += 'timer.' say(announcement)
Funkcja ta przyjmuje liczbę minut i sekund dla timera i tworzy zdanie informujące, że timer się zakończył. Sprawdza liczbę minut i sekund, uwzględniając tylko te jednostki czasu, które mają wartość. Na przykład, jeśli liczba minut wynosi 0, w komunikacie uwzględniane są tylko sekundy. To zdanie jest następnie przesyłane do funkcji
say
. -
Poniżej dodaj funkcję
create_timer
, która utworzy timer:def create_timer(total_seconds): minutes, seconds = divmod(total_seconds, 60) threading.Timer(total_seconds, announce_timer, args=[minutes, seconds]).start()
Funkcja ta przyjmuje całkowitą liczbę sekund dla timera, która zostanie przesłana w poleceniu, i konwertuje ją na minuty i sekundy. Następnie tworzy i uruchamia obiekt timera, używając całkowitej liczby sekund, przekazując funkcję
announce_timer
oraz listę zawierającą minuty i sekundy. Gdy timer się zakończy, wywoła funkcjęannounce_timer
i przekaże zawartość tej listy jako parametry - pierwszy element listy zostanie przekazany jako parametrminutes
, a drugi jakoseconds
. -
Na końcu funkcji
create_timer
dodaj kod, który utworzy komunikat dla użytkownika, informujący o rozpoczęciu timera:announcement = '' if minutes > 0: announcement += f'{minutes} minute ' if seconds > 0: announcement += f'{seconds} second ' announcement += 'timer started.' say(announcement)
Ponownie, uwzględniane są tylko te jednostki czasu, które mają wartość. To zdanie jest następnie przesyłane do funkcji
say
. -
Dodaj poniższy kod na końcu funkcji
process_text
, aby pobrać czas dla timera z tekstu, a następnie utworzyć timer:seconds = get_timer_time(text) if seconds > 0: create_timer(seconds)
Timer jest tworzony tylko wtedy, gdy liczba sekund jest większa niż 0.
-
Uruchom aplikację i upewnij się, że aplikacja funkcji również działa. Ustaw kilka timerów, a w wynikach zobaczysz, jak timer jest ustawiany, a następnie informację, gdy się zakończy:
pi@raspberrypi:~/smart-timer $ python3 app.py Set a two minute 27 second timer. 2 minute 27 second timer started. Times up on your 2 minute 27 second timer.
💁 Kod ten znajdziesz w folderze code-timer/pi lub code-timer/virtual-iot-device.
😀 Twój program do ustawiania timera zakończył się sukcesem!
Zastrzeżenie:
Ten dokument został przetłumaczony za pomocą usługi tłumaczenia AI Co-op Translator. Chociaż dokładamy wszelkich starań, aby tłumaczenie było precyzyjne, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub nieścisłości. Oryginalny dokument w jego rodzimym języku powinien być uznawany za autorytatywne źródło. W przypadku informacji o kluczowym znaczeniu zaleca się skorzystanie z profesjonalnego tłumaczenia przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.