package main import ( "fmt" "log" "time" ) func updateKeepOpenDoor(newKeepOpenTime time.Time) { // is there one active? if keepDoorOpen.timer != nil { keepDoorOpen.timer.Stop() keepDoorOpen = KeepDoorOpen{} } if newKeepOpenTime.After(time.Now()) { log.Printf("Keeping door open until %v", newKeepOpenTime) OpenDoor(wiegand) timer := time.AfterFunc(time.Until(newKeepOpenTime), handleKeepDoorOpenCloseCleanup) keepDoorOpen = KeepDoorOpen{ timer: timer, until: newKeepOpenTime, } } else { CloseDoor(wiegand) } } func handleKeepDoorOpenCloseCleanup() { fmt.Println("Keep door open time is reached!") CloseDoor(wiegand) keepDoorOpen = KeepDoorOpen{} }