Voor een installatie die ik aan het bouwen ben moet ik een relais laten schakelen op een aantal exacte momenten in een video die afgespeeld wordt.
Gebruik hiervoor een RPi in combinatie met een 5V relais. De code om de relais te laten schakelen heb ik al werkend. De code om de video af te spelen ook, gebruik makend van python-omxplayer-wrapper.
Nu alleen nog die 2 combineren. Heb een stukje voorbeeld code gevonden waarmee het werkend te krijgen zou moeten zijn, maar loop vast op 'events'. Met feitelijk 0 Python ervaring is het lastig debuggen...
Dit is de betreffende code:
Bij het uitvoeren van deze code begint de video prima te spelen, maar krijg ik als foutmelding terug:
De vraag is nu, hoe/waar definiëer ik deze 'events'?
Heb ik hier extra software voor nodig, zoals https://pypi.org/project/Events/ en misschien https://pypi.org/project/timecode/ of is het een kwestie van wat extra code kloppen?
Relevante software en hardware die ik gebruik:
Hardware: Raspberry Pi 2b
Software: Raspbian, Python 3, python-omxplayer-wrapper (https://python-omxplayer-wrapper.readthedocs.io/en/latest/)
Uiteraard heb ik al de foutmelding gegoogle'd, maar werd daar niet veel wijzer uit.
Wel heb ik om te testen even
toegevoegd om te kijken wat er zou gebeuren. De foutmelding verandert dan naar deze:
Ook daar op googlen levert me geen antwoord op waar ik echt iets mee kan. Van wat ik begrijp / denk te begrijpen is dat ik niet simpelweg
EDIT: heb nog een paar variaties geprobeerd, met wisselende uitkomsten.
Poging 1:
Resultaat 1:
Poging 2:
Resultaat 2:
Zit ik in de goede richting of sla ik de plank helemaal mis?
Gebruik hiervoor een RPi in combinatie met een 5V relais. De code om de relais te laten schakelen heb ik al werkend. De code om de video af te spelen ook, gebruik makend van python-omxplayer-wrapper.
Nu alleen nog die 2 combineren. Heb een stukje voorbeeld code gevonden waarmee het werkend te krijgen zou moeten zijn, maar loop vast op 'events'. Met feitelijk 0 Python ervaring is het lastig debuggen...
Dit is de betreffende code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| from omxplayer import OMXPlayer from time import sleep from pathlib import Path #/* Setup the player as shown in omxplayer-wrapper examples : */ path = Path('Videos/myvideo.m4v') player = OMXPlayer(path, args=['--no-osd', '--blank']) player.pause() sleep(5) player.play() #/* Make a query to position() inside infinite loop : */ while (1): position = player.position() * 1000 # /* Event timecodes values are stored in "events" */ for event in events.values(): if position - 20 <= event['tc'] and position + 20 >= event['tc']: # /* Put your code here */ print("This is where the first GPIO should be triggered") player.quit() |
Bij het uitvoeren van deze code begint de video prima te spelen, maar krijg ik als foutmelding terug:
code:
1
2
3
4
| Traceback (most recent call last): File "./bm_test.py", line 21, in <module> for event in events.values(): NameError: name 'events' is not defined |
De vraag is nu, hoe/waar definiëer ik deze 'events'?
Heb ik hier extra software voor nodig, zoals https://pypi.org/project/Events/ en misschien https://pypi.org/project/timecode/ of is het een kwestie van wat extra code kloppen?
Relevante software en hardware die ik gebruik:
Hardware: Raspberry Pi 2b
Software: Raspbian, Python 3, python-omxplayer-wrapper (https://python-omxplayer-wrapper.readthedocs.io/en/latest/)
Uiteraard heb ik al de foutmelding gegoogle'd, maar werd daar niet veel wijzer uit.
Wel heb ik om te testen even
code:
1
| event = "30" |
toegevoegd om te kijken wat er zou gebeuren. De foutmelding verandert dan naar deze:
code:
1
2
3
4
| Traceback (most recent call last): File "./bm_test.py", line 22, in <module> for event in event.values(): AttributeError: 'str' object has no attribute 'values' |
Ook daar op googlen levert me geen antwoord op waar ik echt iets mee kan. Van wat ik begrijp / denk te begrijpen is dat ik niet simpelweg
code:
kan gebruiken maar dat ik een lijst met 'values' moet gaan definiëren. Maar hoe moeten die er dan uitzien?1
| event = "30" |
EDIT: heb nog een paar variaties geprobeerd, met wisselende uitkomsten.
Poging 1:
code:
1
2
3
| event = { 'tc': 30 } |
Resultaat 1:
code:
1
2
3
4
| Traceback (most recent call last): File "./bm_test.py", line 27, in <module> if position - 20 <= event['tc'] and position + 20 >= event['tc']: TypeError: 'int' object has no attribute '__getitem__' |
Poging 2:
code:
1
| event = [30, 60] |
Resultaat 2:
code:
1
2
3
4
| Traceback (most recent call last): File "./bm_test.py", line 26, in <module> for event in event.values(): AttributeError: 'list' object has no attribute 'values' |
Zit ik in de goede richting of sla ik de plank helemaal mis?
[ Voor 11% gewijzigd door iGadget op 15-10-2020 15:24 . Reden: nog een aantal pogingen gedaan, resultaat toegevoegd ]
"I'll just use my Go-Go-Gadget handbook!"