mirror of https://bitbucket.org/ausocean/av.git
Implement netsender functionality
This commit is contained in:
parent
6f82735ab2
commit
bebe53b5fa
|
@ -2,6 +2,8 @@ package main
|
|||
|
||||
import (
|
||||
"flag"
|
||||
|
||||
"bitbucket.org/ausocean/IoT/pi/netsender"
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -27,6 +29,14 @@ const (
|
|||
sleepTime = 2 * 43200
|
||||
)
|
||||
|
||||
var(
|
||||
configReceived bool = true
|
||||
varSum int = 0
|
||||
vars = make(map[string]string)
|
||||
revidInst *revidInst
|
||||
config = Config{}
|
||||
)
|
||||
|
||||
func main() {
|
||||
flagNames := [19][2]string{
|
||||
{"Input", "The input type"},
|
||||
|
@ -56,7 +66,6 @@ func main() {
|
|||
}
|
||||
|
||||
flag.Parse()
|
||||
config := Config{}
|
||||
|
||||
switch flags[inputPtr] {
|
||||
case "Raspivid":
|
||||
|
@ -128,7 +137,178 @@ func main() {
|
|||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
revidInst.Start()
|
||||
time.Sleep(sleepTime * time.Second)
|
||||
revidInst.Stop()
|
||||
|
||||
for {
|
||||
periodicNetsenderReport()
|
||||
sleepTime, err := strconv.Atoi(netsender.GetConfigParam("monPeriod"))
|
||||
time.Sleep(time.Duration(sleepTime) * time.Second)
|
||||
}
|
||||
}
|
||||
|
||||
func netsenderInit() {
|
||||
netsender.InitRevidNetsender()
|
||||
netsender.ExternalReader = revidReportActions
|
||||
|
||||
if err := netsender.GetConfig(); err != nil {
|
||||
//default to a config?????
|
||||
processManager.Logger.Log("Error", err.Error())
|
||||
} else {
|
||||
configReceived = true;
|
||||
}
|
||||
}
|
||||
|
||||
func periodicNetsenderReport(){
|
||||
if !configReceived {
|
||||
if err := netsender.GetConfig(); err != nil {
|
||||
processManager.Logger.Log("Error", err.Error())
|
||||
} else {
|
||||
configReceived = true;
|
||||
}
|
||||
}
|
||||
|
||||
var reply string
|
||||
if reply, reconfig, err = netsender.Send(netsender.RequestPoll, criticalInputs); err != nil {
|
||||
processManager.Logger.Log("Error", err.Error())
|
||||
}
|
||||
|
||||
if cloudVarSum := netsender.GetVarSum(); cloudVarSum != varSum {
|
||||
if newVars, err := netsender.GetVars(); err != nil {
|
||||
processManager.Logger.Log("Error", err.Error())
|
||||
} else {
|
||||
varSum = cloudVarSum
|
||||
for newVar, value := range newVars {
|
||||
if currentValue, varExists := vars[newVar]; !varExists || currentValue != value {
|
||||
vars[newVar] = value
|
||||
}
|
||||
}
|
||||
}
|
||||
updateRevid()
|
||||
}
|
||||
}
|
||||
|
||||
func updateRevid() {
|
||||
|
||||
revidInst.Stop()
|
||||
|
||||
for key, value := range vars {
|
||||
switch key {
|
||||
case "FramesPerClip":
|
||||
config.FramesPerClip = value
|
||||
case "RtmpUrl":
|
||||
config.RtmpUrl = value
|
||||
case "Bitrate":
|
||||
config.Bitrate = value
|
||||
case "OutputFileName":
|
||||
config.OutputFileName = value
|
||||
case "InputFileName":
|
||||
config.InputFileName = value
|
||||
case "Height":
|
||||
config.Height = value
|
||||
case "Width":
|
||||
config.Width = value
|
||||
case "FrameRate":
|
||||
config.FrameRate = value
|
||||
case "HttpAddress":
|
||||
config.HttpAddress = value
|
||||
case "Quantization":
|
||||
config.Quantization = value
|
||||
case "Timeout":
|
||||
config.Timeout = value
|
||||
case "IntraRefreshPeriod":
|
||||
confog.IntraRefreshPeriod = value
|
||||
}
|
||||
}
|
||||
|
||||
revidInst, err := NewRevidInstance(config)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
revidInst.Start()
|
||||
}
|
||||
|
||||
func revidReportActions(pin int) (int, error) {
|
||||
switch {
|
||||
// case pin == ds18b20Temp:
|
||||
// sensors, err := ds18b20.Sensors()
|
||||
// if err != nil {
|
||||
// processManager.Logger.Log("Error", "Error retrieving connected sensors: "+err.Error())
|
||||
// return -1, errors.New("No sensors connected")
|
||||
// }
|
||||
|
||||
// t, err := ds18b20.Temperature(sensors[0])
|
||||
// if err == nil {
|
||||
// return int(t), nil
|
||||
// }
|
||||
|
||||
// return -1, errors.New("Unable to read temperature")
|
||||
|
||||
// case pin == dht11Temp:
|
||||
// if val, _, _, err := dht.ReadDHTxxWithRetry(dht.DHT11, dhtPin, false, 5); err != nil {
|
||||
// return -1, errors.New("DHT Read Err: " + err.Error())
|
||||
// } else {
|
||||
// return int(val), nil
|
||||
// }
|
||||
|
||||
// case pin == dht11Hum:
|
||||
// if _, val, _, err := dht.ReadDHTxxWithRetry(dht.DHT11, dhtPin, false, 5); err != nil {
|
||||
// return -1, errors.New("DHT Read Err: " + err.Error())
|
||||
// } else {
|
||||
// return int(val), nil
|
||||
// }
|
||||
|
||||
// case pin == dht22Temp:
|
||||
// if val, _, _, err := dht.ReadDHTxxWithRetry(dht.DHT22, dhtPin, false, 5); err != nil {
|
||||
// return -1, errors.New("DHT Read Err: " + err.Error())
|
||||
// } else {
|
||||
// return int(val), nil
|
||||
// }
|
||||
|
||||
// case pin == dht22Hum:
|
||||
// if _, val, _, err := dht.ReadDHTxxWithRetry(dht.DHT22, dhtPin, false, 5); err != nil {
|
||||
// return -1, errors.New("DHT Read Err: " + err.Error())
|
||||
// } else {
|
||||
// return int(val), nil
|
||||
// }
|
||||
|
||||
case pin == cpuTemp:
|
||||
var out []byte
|
||||
var err error
|
||||
var val float64
|
||||
if out, err = exec.Command("/opt/vc/bin/vcgencmd", "measure_temp").Output(); err != nil {
|
||||
return -1, errors.New("CPU Temp Read Err: " + err.Error())
|
||||
}
|
||||
if val, err = strconv.ParseFloat(string(out[5:len(out)-3]), 32); err != nil {
|
||||
return -1, errors.New("CPU Temp Read Err: " + err.Error())
|
||||
}
|
||||
return int(val), nil
|
||||
|
||||
case pin == cpuUsage:
|
||||
stat, err := linuxproc.ReadStat("/proc/stat")
|
||||
if err != nil {
|
||||
return -1, errors.New("CPU Uage Read Err: " + err.Error())
|
||||
}
|
||||
total1 := stat.CPUStatAll.User + stat.CPUStatAll.Nice + stat.CPUStatAll.System + stat.CPUStatAll.Idle + stat.CPUStatAll.IOWait + stat.CPUStatAll.IRQ + stat.CPUStatAll.SoftIRQ + stat.CPUStatAll.Steal + stat.CPUStatAll.Guest + stat.CPUStatAll.GuestNice
|
||||
idle1 := stat.CPUStatAll.Idle
|
||||
|
||||
time.Sleep(time.Millisecond * 100)
|
||||
|
||||
stat, err = linuxproc.ReadStat("/proc/stat")
|
||||
if err != nil {
|
||||
return -1, errors.New("CPU Uage Read Err: " + err.Error())
|
||||
}
|
||||
total2 := stat.CPUStatAll.User + stat.CPUStatAll.Nice + stat.CPUStatAll.System + stat.CPUStatAll.Idle + stat.CPUStatAll.IOWait + stat.CPUStatAll.IRQ + stat.CPUStatAll.SoftIRQ + stat.CPUStatAll.Steal + stat.CPUStatAll.Guest + stat.CPUStatAll.GuestNice
|
||||
idle2 := stat.CPUStatAll.Idle
|
||||
|
||||
return int((1.0 - (float64(idle2-idle1) / float64(total2-total1))) * 100), nil
|
||||
|
||||
// case pin == priority:
|
||||
// return int(processManager.PriorityLevel), nil
|
||||
|
||||
default:
|
||||
return -1, errors.New("External pin not defined")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue