package onewire import ( "errors" "io/ioutil" "strconv" "strings" ) var ( ErrReadSensor = errors.New("Failed to read sensor temperature") ) // Sensors returns an array of connected sensor IDs. func Sensors() ([]string, error) { data, err := ioutil.ReadFile("/sys/bus/w1/devices/w1_bus_master1/w1_master_slaves") if err != nil { return nil, err } sensors := strings.Split(string(data), "\n") if len(sensors) > 0 { sensors = sensors[:len(sensors)-1] } return sensors, nil } // Temperature returns the temperature of the specified sensor. func Temperature(sensor string) (float64, error) { sensorPath := "/sys/bus/w1/devices/" + sensor + "/w1_slave" data, err := ioutil.ReadFile(sensorPath) if err != nil { return 0.0, err } raw := string(data) if !strings.Contains(raw, " YES") { return 0.0, ErrReadSensor } i := strings.LastIndex(raw, "t=") if i == -1 { return 0.0, ErrReadSensor } c, err := strconv.ParseFloat(raw[i+2:len(raw)-1], 64) if err != nil { return 0.0, err } return c / 1000.0, nil }