feat: Add windspeed and wind-direction
Signed-off-by: Tim Hårek Andreassen <tim@harek.no>
This commit is contained in:
parent
36309212a7
commit
ff9f40e2f8
4 changed files with 91 additions and 1 deletions
|
@ -58,9 +58,12 @@ func now(cmd *cobra.Command, args []string) {
|
||||||
fmt.Printf(
|
fmt.Printf(
|
||||||
`Current forecast for %s
|
`Current forecast for %s
|
||||||
Temperature: %.1f
|
Temperature: %.1f
|
||||||
Rain: %.1f`,
|
Rain: %.1f
|
||||||
|
Wind: %.1f from %s`,
|
||||||
n.Location,
|
n.Location,
|
||||||
n.Temperature,
|
n.Temperature,
|
||||||
n.Percipitation,
|
n.Percipitation,
|
||||||
|
n.Wind.Speed,
|
||||||
|
n.Wind.DirectionToString(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
12
yr/direction/direction.go
Normal file
12
yr/direction/direction.go
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
package direction
|
||||||
|
|
||||||
|
const (
|
||||||
|
NORTH = "↑"
|
||||||
|
SOUTH = "↓"
|
||||||
|
WEST = "←"
|
||||||
|
EAST = "→"
|
||||||
|
NORTH_WEST = "↖"
|
||||||
|
NORTH_EAST = "↗"
|
||||||
|
SOUTH_WEST = "↙"
|
||||||
|
SOUTH_EAST = "↘"
|
||||||
|
)
|
39
yr/yr.go
39
yr/yr.go
|
@ -7,6 +7,7 @@ import (
|
||||||
|
|
||||||
"git.sr.ht/~timharek/yr-go/internal/met"
|
"git.sr.ht/~timharek/yr-go/internal/met"
|
||||||
"git.sr.ht/~timharek/yr-go/internal/nominatim"
|
"git.sr.ht/~timharek/yr-go/internal/nominatim"
|
||||||
|
"git.sr.ht/~timharek/yr-go/yr/direction"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Client struct {
|
type Client struct {
|
||||||
|
@ -28,10 +29,44 @@ func New() (*Client, error) {
|
||||||
return &Client{met: *met, nom: *nom}, nil
|
return &Client{met: *met, nom: *nom}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type wind struct {
|
||||||
|
Speed float64 `json:"speed"`
|
||||||
|
Direction float64 `json:"direction"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *wind) DirectionToString() string {
|
||||||
|
return windDirection(w.Direction)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Retruns unicode block arrow based on wind-direction
|
||||||
|
func windDirection(d float64) string {
|
||||||
|
switch {
|
||||||
|
case d == 0 || d == 360:
|
||||||
|
return direction.SOUTH
|
||||||
|
case d <= 45 && d < 90:
|
||||||
|
return direction.SOUTH_WEST
|
||||||
|
case d <= 90 && d < 135:
|
||||||
|
return direction.WEST
|
||||||
|
case d <= 135 && d < 180:
|
||||||
|
return direction.NORTH_WEST
|
||||||
|
case d <= 180 && d < 225:
|
||||||
|
return direction.NORTH
|
||||||
|
case d <= 225 && d < 270:
|
||||||
|
return direction.NORTH_EAST
|
||||||
|
case d <= 270 && d < 315:
|
||||||
|
return direction.EAST
|
||||||
|
case d <= 315 && d < 360:
|
||||||
|
return direction.SOUTH_EAST
|
||||||
|
default:
|
||||||
|
return "↔"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type NowForecast struct {
|
type NowForecast struct {
|
||||||
nominatim.LookupResult
|
nominatim.LookupResult
|
||||||
Temperature float64 `json:"temperature"`
|
Temperature float64 `json:"temperature"`
|
||||||
Percipitation float64 `json:"percipitation"`
|
Percipitation float64 `json:"percipitation"`
|
||||||
|
Wind wind `json:"wind"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) Now(q string) (*NowForecast, error) {
|
func (c *Client) Now(q string) (*NowForecast, error) {
|
||||||
|
@ -84,6 +119,10 @@ func (c *Client) NowCoords(coords *nominatim.Coordinates, location *string) (*No
|
||||||
},
|
},
|
||||||
Temperature: latest.Instant.Details.AirTemperature,
|
Temperature: latest.Instant.Details.AirTemperature,
|
||||||
Percipitation: latest.Next1_Hours.Details.PrecipitationAmount,
|
Percipitation: latest.Next1_Hours.Details.PrecipitationAmount,
|
||||||
|
Wind: wind{
|
||||||
|
Speed: latest.Instant.Details.WindSpeed,
|
||||||
|
Direction: latest.Instant.Details.WindFromDirection,
|
||||||
|
},
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
36
yr/yr_test.go
Normal file
36
yr/yr_test.go
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
package yr
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"git.sr.ht/~timharek/yr-go/yr/direction"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestWindDirection(t *testing.T) {
|
||||||
|
assert := assert.New(t)
|
||||||
|
|
||||||
|
south := windDirection(0)
|
||||||
|
assert.Equal(direction.SOUTH, south, "south")
|
||||||
|
|
||||||
|
southwest := windDirection(45)
|
||||||
|
assert.Equal(direction.SOUTH_WEST, southwest, "southwest")
|
||||||
|
|
||||||
|
west := windDirection(90)
|
||||||
|
assert.Equal(direction.WEST, west, "west")
|
||||||
|
|
||||||
|
northwest := windDirection(135)
|
||||||
|
assert.Equal(direction.NORTH_WEST, northwest, "northwest")
|
||||||
|
|
||||||
|
north := windDirection(180)
|
||||||
|
assert.Equal(direction.NORTH, north, "north")
|
||||||
|
|
||||||
|
northeast := windDirection(225)
|
||||||
|
assert.Equal(direction.NORTH_EAST, northeast, "northeast")
|
||||||
|
|
||||||
|
east := windDirection(270)
|
||||||
|
assert.Equal(direction.EAST, east, "east")
|
||||||
|
|
||||||
|
southeast := windDirection(315)
|
||||||
|
assert.Equal(direction.SOUTH_EAST, southeast, "southeast")
|
||||||
|
}
|
Loading…
Reference in a new issue