Python scriptje waar ik niet helemaal uit kom

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Torac
  • Registratie: Maart 2017
  • Laatst online: 12:46
Ik heb een raspberry pi en ben bezig met home automation maar nu loop ik even vast.
Ik heb een luxeflex met een motortje eraan waardoor de plaatjes open en dicht draaien.

Ik wil dat ik met 1 trigger dat kan een command line zijn maar dat kan ook een python script zijn (moet wel een van die 2)

De luxeflex schakelt tussen een van de 3 standen. Dus van 3 -> 2 en van 2 -> 1, 1 -> 2 en 2 -> 3.
Nu had ik het idee om files te gebruiken en daar waardes in op te slaan:
Dus op het moment dat de trigger overgaat gaat hij bijvoorbeeld van 2 naar 3 en dan schrijft hij in een bestand waar de luxeflex nu op staat dus open omhoog of omlaag. Dan de volgende keer dat ik hem de volgende trigger hij dus van 3 -> 2. Ik zoek dus iets dat hij kijkt wat de laatste zet was en hierop een nieuwe zet baseerd.4 Hoe kan ik dit in een scriptje maken?

Ik heb nu zoiets maar ik heb echt geen idee of dit goed is:

Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import time
import os

while True:
    with open("/home/pi/Desktop/laatstgeeindigt") as bestand:
     var = bestand.read(1)
     time.sleep(1)
     if var == "0":
      os.remove("/home/pi/Desktop/variable.txt")
      print("open")
      f=open("/home/pi/Desktop/variable.txt", "a+")
      f.write("4")
      if var == "1":
      os.remove("/home/pi/Desktop/variable.txt")
      print("omhoog")
      f=open("/home/pi/Desktop/variable.txt", "a+")
      f.write("5")
      if var == "2":
      os.remove("/home/pi/Desktop/variable.txt")   
      print("omlaag")
      f=open("/home/pi/Desktop/variable.txt", "a+")
      f.write("6")


Kan iemand mij hierbij helpen?

Alle reacties


Acties:
  • 0 Henk 'm!

  • sypie
  • Registratie: Oktober 2000
  • Niet online
Heeft deze:
code:
1
("/home/pi/Desktop/laatstgeeindigt") as bestand:

niet een extensie nodig?

(ow, geëindigd is met een d aan het einde)

Acties:
  • 0 Henk 'm!

  • Torac
  • Registratie: Maart 2017
  • Laatst online: 12:46
sypie schreef op zaterdag 18 augustus 2018 @ 18:02:
Heeft deze:
code:
1
("/home/pi/Desktop/laatstgeeindigt") as bestand:

niet een extensie nodig?

(ow, geëindigd is met een d aan het einde)
Nee, hij gebruikt het os dus: import os.

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Kijk eens naar het niveau van inspringen, en de betekenis van a+.

[ Voor 20% gewijzigd door GlowMouse op 18-08-2018 18:20 ]


Acties:
  • 0 Henk 'm!

  • Nilltris
  • Registratie: Mei 2011
  • Laatst online: 14-06-2023
Moet je niet met 'open' de modus read meegeven?
Bijvoorbeeld
currentvalue = open('padnaarbestand' , 'r').read()

Vervolgend heeft 'currentvalue' de huidige waarde. Daar kun je vervolgens je checks op doen.

Want als jij nu je var print (sowieso slechte naam voor een variabele) wat zie je dan?

[ Voor 0% gewijzigd door Nilltris op 18-08-2018 18:24 . Reden: Autocorrect ]


Acties:
  • 0 Henk 'm!

  • Torac
  • Registratie: Maart 2017
  • Laatst online: 12:46
Misschien had ik iets duidelijker moeten zijn. :o

Ik zoek dus een python file die een keuze maakt uit 1, 2 of 3 op basis van 1 2 of 3. Weet iemand hoe ik dit het beste kan doen? De 1, 2 of 3 staat in een file opgeslagen dus moet gelezen worden.

[ Voor 12% gewijzigd door Torac op 18-08-2018 19:09 ]


Acties:
  • 0 Henk 'm!

  • SA007
  • Registratie: Oktober 2002
  • Laatst online: 06-10 16:32

SA007

Moderator Tweaking
Dit is wat meer generiek python, niet echt relevant op welk systeem het draait.

Move naar PRG :).

Acties:
  • 0 Henk 'm!

  • Torac
  • Registratie: Maart 2017
  • Laatst online: 12:46
Ik heb nu dit:

os.remove("/home/pi/Desktop/laatstgeeindigt")
f=open("/home/pi/Desktop/laatstgeeindigt", "w")
f.write("2")

Maar als ik dan in dat test.txt bestand kijk staat daar niks in behalve leegte?
Ik snap niet precies waarom de file staat op read and write; anyone.

Acties:
  • 0 Henk 'm!

Palthe

Ik ken python niet Maar ik vermoed dat je hem wellicht eerst nog moet closen met f.close()

Acties:
  • +1 Henk 'm!

  • Torac
  • Registratie: Maart 2017
  • Laatst online: 12:46
palthe schreef op zaterdag 18 augustus 2018 @ 19:59:
Ik ken python niet Maar ik vermoed dat je hem wellicht eerst nog moet closen met f.close()
Perfect gelijk getest en werkt. Enorm bedankt!

Acties:
  • 0 Henk 'm!

  • kluyze
  • Registratie: Augustus 2004
  • Niet online
Als welke gebruiker run je het python script, en welke gebruiker heeft read en/of write rechten op het bestand.

Wat handig is, is om te kijken naar exception handling, zet er eens een try except rond (even op zoeken hoe dat exact werkt) en kijk eens of er een foutmelding naar voor komt.

Acties:
  • 0 Henk 'm!

  • Torac
  • Registratie: Maart 2017
  • Laatst online: 12:46
Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/usr/bin/env python3
import time
import os
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(40, GPIO.OUT)
GPIO.setup(38, GPIO.OUT)
GPIO.setwarnings(False)
with open("/home/pi/Desktop/laatstgeeindigt") as bestand:
  var = bestand.read(1)
  if var == "0":
   print("Van open naar omhoog")
   f=open("/home/pi/Desktop/laatstgeeindigt", "w")
   f.write("1")
   f.close()
   GPIO.output(40, True)
   time.sleep(1.8)
   GPIO.output(40, False)
   GPIO.cleanup()
  if var == "1":
   print("Van omhoog naar open")
   f=open("/home/pi/Desktop/laatstgeeindigt", "w")
   f.write("2")
   f.close()
   GPIO.output(38, True)
   time.sleep(2.8)
   GPIO.output(38, False)
   GPIO.cleanup()
  if var == "2":
   print("Van open naar omlaag")
   f=open("/home/pi/Desktop/laatstgeeindigt", "w")
   f.write("3")
   f.close()
   GPIO.output(38, True)
   time.sleep(1.8)
   GPIO.output(38, False)
   GPIO.cleanup()
  if var == "3":
   print("Van omlaag naar open")
   f=open("/home/pi/Desktop/laatstgeeindigt", "w")
   f.write("0")
   f.close()
   GPIO.output(40, True)
   time.sleep(2.8)
   GPIO.output(40, False)
   GPIO.cleanup()


Dit is het uiteindelijk geworden. :)
Hij onthoud dus de stand van de luxeflex en slaat hem op in een bestand.
Aan de hand daarvan gaat hij of omhoog of omlaag. :P

[ Voor 6% gewijzigd door Torac op 18-08-2018 22:11 ]

Pagina: 1