Ankündigung

Einklappen
Keine Ankündigung bisher.

Simple Anwesenheitssimulation, Frage zu randint

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Simple Anwesenheitssimulation, Frage zu randint

    Hallo zusammen,

    ich spiele mich im Moment ein wenig mit der Realisierung einer Anwesenheitssimulation.
    Es soll nichts kompliziertes sein.
    Rumprobiert hab ich schon mit time.sleep, das ist aber böse, wie ich gelesen hab.
    Jetzt probier ich das Ganze über die .timer Funktion, komm aber nicht wirklich weiter.
    Für den Anfang sollen eigentlich nur nacheinander, nach einer Zufallszeit ein paar Lampen angehen,
    und die sollen dann auch nach einer Zufallszeit ausgehen.

    Code:
    from random import randint
    import time
    from time import sleep
    
    if sh.first.Wohnzimmer.Fernsehlicht.AN() == 1 and sh.first.Wohnzimmer.Fernsehlicht.Arduino() == 1:
    		sh.first.Wohnzimmer.Fernsehlicht.Regal.timer(randint(10,15),1)
    		sh.first.Wohnzimmer.Fernsehlicht.Steckdose1.timer(randint(17,30),1)
    		sh.first.Wohnzimmer.Fernsehlicht.Steckdose2.timer(randint(32,35),1)
    		sh.first.Wohnzimmer.Fernsehlicht.Regal.timer(randint(36,45),0)
    		sh.first.Wohnzimmer.Fernsehlicht.Steckdose1.timer(randint(47,55),0)
    		sh.first.Wohnzimmer.Fernsehlicht.Steckdose2.timer(randint(56,66),0)
    		sh.first.Wohnzimmer.Fernsehlicht.AN.timer(randint(66,76),0)

    Bei der Logik wird komischerweise immer der erste Teil,
    wo alle auf 1 gestellt wird übersprungen, und alles wird nach Ablauf der Zeiten auf 0 gestellt.
    Warum das so ist versteh ich aber nicht.

    Vielleicht kann mir da jemand auf die Sprünge helfen.

    Vielen Dank

    Gruß Wolfi

    #2
    Hallo Wolfi,

    kann es sein, dass der erste timer durch den zweiten überschrieben/ersetzt wird? Vermutlich gibt es pro item nur einen timer!? (nur Vermutung, kein Wissen.)

    Gruß
    Markus

    Kommentar


      #3
      Hallo,

      der letzte Timer gewinnt immer. Das geht so nicht.

      Hast Du schon mal danach gesucht? Ich glaube es gibt schone eine fertige Logik dafür.

      Bis bald

      Marcus

      Kommentar


        #4
        Vielen Dank für die Hinweise!

        Also eine fertige Logik hab ich nicht gefunden, oder ich hab nach dem Falschen gesucht.

        Ich habs jetzt mal so gelöst.
        Für die, die es richtig können siehts bestimmt nicht schön aus, aber ich kanns leider nicht besser ;-)

        Code:
        if sh.first.Wohnzimmer.Fernsehlicht.AN() == 1 and sh.first.Wohnzimmer.Fernsehlicht.Arduino() == 1:
        		sh.first.Wohnzimmer.Fernsehlicht.Regal(1)
        		sh.first.Wohnzimmer.Fernsehlicht.Regal.timer(randint(20,40),0)
        		sh.first.Wohnzimmer.Fernsehlicht.AN.timer(randint(40,45),0)
        		sh.Abwesend1.timer(45,1)
        		
        if sh.Abwesend1() == 1:	
        		sh.first.Wohnzimmer.Fernsehlicht.Steckdose1.timer(randint(10,15),1)
        		sh.first.Wohnzimmer.Fernsehlicht.Steckdose2.timer(randint(20,40),1)
        		sh.Abwesend1.timer(45,0)
        		sh.Abwesend2.timer(46,1)
        		
        if sh.Abwesend2() == 1:
        		sh.first.Wohnzimmer.Fernsehlicht.Steckdose1.timer(randint(0,5),0)
        		sh.first.Wohnzimmer.Fernsehlicht.Steckdose2.timer(randint(5,10),0)
        		sh.first.Wohnzimmer.Fernsehlicht.Regal(1)
        		sh.first.Wohnzimmer.Fernsehlicht.Regal.timer(randint(20,40),0)
        		sh.Abwesend2.timer(46,0)
        Ist wahrscheinlich viel zu kompliziert gedacht, aber besser krieg ichs heute nicht hin.

        Für Vereinfachungshinweise bin ich natürlich offen.

        Achja, da kommt noch eine Frage in mir auf:

        Kann ich denn so einen Timer irgendwie unterbrechen?

        In der Testlogik sinds ja nur Sekunden aber im RL wird da wohl mal ne halbe Stunde vergehen.
        Wenn man da dann mal nach Hause kommt, wärs natürlich toll wenn man den Vorgang aufhalten könnte.


        Gruß Wolfi

        Kommentar

        Lädt...
        X