Skip to content

Commit

Permalink
workaround for raspberrypi/linux#2406
Browse files Browse the repository at this point in the history
  • Loading branch information
walkure committed Dec 21, 2021
1 parent 5d8f61c commit 916a0ce
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 32 deletions.
23 changes: 3 additions & 20 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,6 @@ import (
"periph.io/x/devices/v3/bmxx80"
"periph.io/x/devices/v3/ccs811"

z19 "github.com/eternal-flame-AD/mh-z19"
"github.com/tarm/serial"

"net/http"

"github.com/prometheus/client_golang/prometheus"
Expand Down Expand Up @@ -204,31 +201,17 @@ func main() {
logPrintf("SHT3x activated\n")
}

// Open MH-Z19
log.Printf("MH-Z19 bmxice:[%s]\n", *co2Addr)
connConfig := z19.CreateSerialConfig()
connConfig.Name = *co2Addr
connConfig.ReadTimeout = time.Second * 5
var mhz *serial.Port
mhz, err = serial.OpenPort(connConfig)
if err != nil {
log.Printf("MH-Z19 open error: ", err)
mhz = nil
} else {
defer mhz.Close()
logPrintf("MH-Z19 activated\n")
}

if bmx == nil && ccs == nil && mhz == nil && sht == nil {
if bmx == nil && ccs == nil && sht == nil {
log.Fatal("no sensor detected.")
}
log.Printf("MH-Z19 device:[%s]\n", *co2Addr)

go func() {
start := time.Now().Add(warming_seconds * time.Second)
logPrintf("start measuring\n")
for {
logPrintf("begin measuring\n")
if err := measureMetrics(bmx, ccs, sht, mhz, start); err != nil {
if err := measureMetrics(bmx, ccs, sht, start); err != nil {
log.Printf("Error:%+v", err)
}
logPrintf("end measuing\n")
Expand Down
36 changes: 24 additions & 12 deletions measure.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"github.com/tarm/serial"
"math"
"time"
"log"

"periph.io/x/conn/v3/physic"

Expand All @@ -17,22 +18,20 @@ import (
"go.uber.org/multierr"
)

func measureMetrics(bme *bmxx80.Dev, ccs *ccs811.Dev, sht *SHT3x, z19dev *serial.Port, start time.Time) error {
func measureMetrics(bme *bmxx80.Dev, ccs *ccs811.Dev, sht *SHT3x, start time.Time) error {

warmingUp := time.Now().Before(start)

if warmingUp {
logPrintf("Warming Up until:%v\n", start)
}
fmt.Printf("BME %p,CCS %p,SHT %p,Z19 %p\n",bme,ccs,sht,z19dev)
fmt.Printf("BME %p,CCS %p,SHT %p\n",bme,ccs,sht)

var errors error

if z19dev != nil {
logPrintf("Begin MHZ19\n")
multierr.AppendInto(&errors, measureMHZ19(z19dev, warmingUp))
logPrintf("End MHZ19\n")
}
logPrintf("Begin MHZ19\n")
multierr.AppendInto(&errors, measureMHZ19(warmingUp))
logPrintf("End MHZ19\n")

var inTemp, inHumid float64
var err error
Expand Down Expand Up @@ -143,19 +142,32 @@ func measureCCS811(ccs *ccs811.Dev, inTemp float64, inHumid float64, warmingUp b
return nil
}

func measureMHZ19(z19dev *serial.Port, warmingUp bool) error {
logPrintf("BeginMHZ19Read\n")
concentration, err := z19.TakeReading(z19dev)
func measureMHZ19(warmingUp bool) error {
connConfig := z19.CreateSerialConfig()
connConfig.Name = *co2Addr
connConfig.ReadTimeout = time.Second * 5

mhz, err := serial.OpenPort(connConfig)
if err != nil {
log.Printf("MH-Z19 open error: ", err)
return fmt.Errorf("MH-Z19 open error:%w",err)
}
defer mhz.Close()
logPrintf("MH-Z19 activated\n")

concentration, err := z19.TakeReading(mhz)
logPrintf("EndMHZ19Read\n")
if err != nil {
fmt.Print("Z19Err:",err)
return fmt.Errorf("Z19: %w", err)
log.Printf("MH-Z19 read error: ", err)
return fmt.Errorf("MH-Z19 read error: %w", err)
}

logPrintf("co2=%dppm\n", concentration)

if !warmingUp {
homeCO2.WithLabelValues("inside").Set(float64(concentration))
}

return nil
}

Expand Down

0 comments on commit 916a0ce

Please sign in to comment.