You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
140 lines
6.0 KiB
140 lines
6.0 KiB
<!--
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
{
|
|
"original_hash": "64ad4ddb4de81a18b7252e968f10b404",
|
|
"translation_date": "2025-08-27T21:14:57+00:00",
|
|
"source_file": "6-consumer/lessons/3-spoken-feedback/single-board-computer-set-timer.md",
|
|
"language_code": "sw"
|
|
}
|
|
-->
|
|
# Weka Kipima Muda - Vifaa vya IoT vya Kijumla na Raspberry Pi
|
|
|
|
Katika sehemu hii ya somo, utaita msimbo wako usio na seva ili kuelewa hotuba, na kuweka kipima muda kwenye kifaa chako cha IoT cha kijumla au Raspberry Pi kulingana na matokeo.
|
|
|
|
## Weka Kipima Muda
|
|
|
|
Maandishi yanayorudi kutoka kwa mwito wa hotuba hadi maandishi yanahitaji kutumwa kwa msimbo wako usio na seva ili kuchakatwa na LUIS, na kurudisha idadi ya sekunde za kipima muda. Idadi hii ya sekunde inaweza kutumika kuweka kipima muda.
|
|
|
|
Vipima muda vinaweza kuwekwa kwa kutumia darasa la Python `threading.Timer`. Darasa hili linachukua muda wa kuchelewa na kazi, na baada ya muda wa kuchelewa, kazi hiyo inatekelezwa.
|
|
|
|
### Kazi - tuma maandishi kwa kazi ya seva isiyo na seva
|
|
|
|
1. Fungua mradi wa `smart-timer` katika VS Code, na hakikisha mazingira ya kijumla yamewashwa kwenye terminal ikiwa unatumia kifaa cha IoT cha kijumla.
|
|
|
|
1. Juu ya kazi ya `process_text`, tangaza kazi inayoitwa `get_timer_time` ili kuita mwisho wa REST uliounda:
|
|
|
|
```python
|
|
def get_timer_time(text):
|
|
```
|
|
|
|
1. Ongeza msimbo ufuatao kwenye kazi hii ili kufafanua URL ya kuita:
|
|
|
|
```python
|
|
url = '<URL>'
|
|
```
|
|
|
|
Badilisha `<URL>` na URL ya mwisho wa REST uliyojenga katika somo la mwisho, iwe kwenye kompyuta yako au kwenye wingu.
|
|
|
|
1. Ongeza msimbo ufuatao ili kuweka maandishi kama mali inayopitishwa kama JSON kwa mwito:
|
|
|
|
```python
|
|
body = {
|
|
'text': text
|
|
}
|
|
|
|
response = requests.post(url, json=body)
|
|
```
|
|
|
|
1. Chini ya hii, pata `seconds` kutoka kwa mzigo wa majibu, ukirudisha 0 ikiwa mwito ulishindwa:
|
|
|
|
```python
|
|
if response.status_code != 200:
|
|
return 0
|
|
|
|
payload = response.json()
|
|
return payload['seconds']
|
|
```
|
|
|
|
Mwito wa HTTP uliofanikiwa unarudisha msimbo wa hali katika safu ya 200, na msimbo wako usio na seva unarudisha 200 ikiwa maandishi yalichakatwa na kutambuliwa kama nia ya kuweka kipima muda.
|
|
|
|
### Kazi - weka kipima muda kwenye thread ya usuli
|
|
|
|
1. Ongeza tamko la kuingiza ifuatayo juu ya faili ili kuingiza maktaba ya threading ya Python:
|
|
|
|
```python
|
|
import threading
|
|
```
|
|
|
|
1. Juu ya kazi ya `process_text`, ongeza kazi ya kusema jibu. Kwa sasa hii itaandika tu kwenye console, lakini baadaye katika somo hili itasema maandishi.
|
|
|
|
```python
|
|
def say(text):
|
|
print(text)
|
|
```
|
|
|
|
1. Chini ya hii ongeza kazi ambayo itaitwa na kipima muda kutangaza kwamba kipima muda kimekamilika:
|
|
|
|
```python
|
|
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)
|
|
```
|
|
|
|
Kazi hii inachukua idadi ya dakika na sekunde za kipima muda, na kujenga sentensi ya kusema kwamba kipima muda kimekamilika. Itakagua idadi ya dakika na sekunde, na kujumuisha tu kila kipimo cha muda ikiwa kina namba. Kwa mfano, ikiwa idadi ya dakika ni 0 basi sekunde pekee zinajumuishwa katika ujumbe. Sentensi hii kisha inatumwa kwa kazi ya `say`.
|
|
|
|
1. Chini ya hii, ongeza kazi ya `create_timer` ifuatayo ili kuunda kipima muda:
|
|
|
|
```python
|
|
def create_timer(total_seconds):
|
|
minutes, seconds = divmod(total_seconds, 60)
|
|
threading.Timer(total_seconds, announce_timer, args=[minutes, seconds]).start()
|
|
```
|
|
|
|
Kazi hii inachukua idadi ya jumla ya sekunde za kipima muda ambazo zitatumwa kwenye amri, na kuzibadilisha kuwa dakika na sekunde. Kisha inaunda na kuanza kipima muda kwa kutumia idadi ya jumla ya sekunde, ikipitisha kazi ya `announce_timer` na orodha inayojumuisha dakika na sekunde. Wakati kipima muda kinapomalizika, kitaita kazi ya `announce_timer`, na kupitisha yaliyomo kwenye orodha hii kama vigezo - kwa hivyo kipengee cha kwanza kwenye orodha kinapita kama kigezo cha `minutes`, na cha pili kama kigezo cha `seconds`.
|
|
|
|
1. Mwisho wa kazi ya `create_timer`, ongeza msimbo wa kujenga ujumbe wa kuzungumza na mtumiaji kutangaza kwamba kipima muda kinaanza:
|
|
|
|
```python
|
|
announcement = ''
|
|
if minutes > 0:
|
|
announcement += f'{minutes} minute '
|
|
if seconds > 0:
|
|
announcement += f'{seconds} second '
|
|
announcement += 'timer started.'
|
|
say(announcement)
|
|
```
|
|
|
|
Tena, hii inajumuisha tu kipimo cha muda ambacho kina thamani. Sentensi hii kisha inatumwa kwa kazi ya `say`.
|
|
|
|
1. Ongeza yafuatayo mwishoni mwa kazi ya `process_text` ili kupata muda wa kipima muda kutoka kwa maandishi, kisha unda kipima muda:
|
|
|
|
```python
|
|
seconds = get_timer_time(text)
|
|
if seconds > 0:
|
|
create_timer(seconds)
|
|
```
|
|
|
|
Kipima muda kinaundwa tu ikiwa idadi ya sekunde ni zaidi ya 0.
|
|
|
|
1. Endesha programu, na hakikisha programu ya kazi pia inaendesha. Weka vipima muda kadhaa, na matokeo yataonyesha kipima muda kikianzishwa, na kisha yataonyesha wakati kinapomalizika:
|
|
|
|
```output
|
|
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.
|
|
```
|
|
|
|
> 💁 Unaweza kupata msimbo huu katika folda ya [code-timer/pi](../../../../../6-consumer/lessons/3-spoken-feedback/code-timer/pi) au [code-timer/virtual-iot-device](../../../../../6-consumer/lessons/3-spoken-feedback/code-timer/virtual-iot-device).
|
|
|
|
😀 Programu yako ya kipima muda imefanikiwa!
|
|
|
|
---
|
|
|
|
**Kanusho**:
|
|
Hati hii imetafsiriwa kwa kutumia huduma ya tafsiri ya AI [Co-op Translator](https://github.com/Azure/co-op-translator). Ingawa tunajitahidi kuhakikisha usahihi, tafsiri za kiotomatiki zinaweza kuwa na makosa au kutokuwa sahihi. Hati asilia katika lugha yake ya awali inapaswa kuchukuliwa kama chanzo cha mamlaka. Kwa taarifa muhimu, tafsiri ya kitaalamu ya binadamu inapendekezwa. Hatutawajibika kwa kutoelewana au tafsiri zisizo sahihi zinazotokana na matumizi ya tafsiri hii. |