distribute DoorProblemEvent
[svn42.git] / go / r3-eventbroker_zmq / sockettoevent.go
index a7a21bf..9e4907e 100644 (file)
@@ -4,8 +4,9 @@ package main
 
 import (
     "regexp"
-    //~ "strconv"
+    "strconv"
     "time"
+    "bytes"
     //~ "./brain"
     pubsub "github.com/tuxychandru/pubsub"
     zmq "github.com/vaughan0/go-zmq"
@@ -33,12 +34,18 @@ func parseSocketInputLine_State(lines [][]byte, ps *pubsub.PubSub, ts int64) {
         case "opened":
             ps.Pub(r3events.DoorLockUpdate{false, ts}, "door")
         case "manual", "manual_movement":   //movement
+            ps.Pub(r3events.DoorManualMovementEvent{ts}, "door")
         case "error":
-            ps.Pub(r3events.DoorProblemEvent{100, ts}, "door")
+            ps.Pub(r3events.DoorProblemEvent{100, string(bytes.Join(lines,[]byte(" "))),  ts}, "door")
         case "reset":
             ps.Pub(r3events.DoorLockUpdate{true, ts}, "door")
-        case "timeout", "timeout_after_open", "timeout_after_close":
-            ps.Pub(r3events.DoorProblemEvent{10, ts}, "door")
+        case "timeout_after_open":
+            ps.Pub(r3events.DoorProblemEvent{10, string(lines[0]), ts}, "door")
+            ps.Pub(r3events.DoorLockUpdate{false, ts}, "door")
+        case "timeout_after_close":
+            ps.Pub(r3events.DoorProblemEvent{20, string(lines[0]), ts}, "door")
+            // can't say for sure that door is locked if we ran into timeout while closing
+            //~ ps.Pub(r3events.DoorLockUpdate{true, ts}, "door")
         case "opening":
         case "closing":
         default:
@@ -79,11 +86,32 @@ func ParseSocketInputLine(lines [][]byte, ps *pubsub.PubSub, keylookup_socket *z
             ps.Pub(r3events.DoorAjarUpdate{string(lines[4]) == "shut", ts}, "door")
         case "open", "close", "toggle", "reset":
             ps.Pub(r3events.DoorCommandEvent{string(lines[0]), string(lines[1]), string(lines[2]), ts},"doorcmd")
-        //~ case "photo0:":
-            //~ newphoto, err := strconv.ParseInt(string(lines[1]), 10, 32)
-            //~ if err == nil {
-                //~ ps.Pub(r3events.IlluminationSensorUpdate{0, newphoto, ts}, "sensors")
-            //~ }
+        case "BackdoorInfo(ajar):":
+            ps.Pub(r3events.BackdoorAjarUpdate{string(lines[len(lines)-1]) == "shut", ts},"door")
+        case "temp0:","temp1:", "temp2:", "temp3:":
+            sensorid, err := strconv.ParseInt(string(lines[0][4]), 10, 32)
+            if err != nil {return }
+            newtemp, err := strconv.ParseFloat(string(lines[1]), 10)
+            if err != nil {return }
+            ps.Pub(r3events.TempSensorUpdate{int(sensorid), newtemp, ts}, "sensors")
+        case "photo0:","photo1:", "photo2:", "photo3:":
+            sensorid, err := strconv.ParseInt(string(lines[0][5]), 10, 32)
+            if err != nil {return }
+            newphoto, err := strconv.ParseInt(string(lines[1]), 10, 32)
+            if err != nil {return }
+            ps.Pub(r3events.IlluminationSensorUpdate{int(sensorid), newphoto, ts}, "sensors")
+        case "rh0:":
+            //~ sensorid, err := strconv.ParseInt(string(lines[0][4]), 10, 32)
+            //~ if err != nil {return }
+            relhumid, err := strconv.ParseInt(string(lines[1]), 10, 32)
+            if err != nil {return }
+            ps.Pub(r3events.RelativeHumiditySensorUpdate{0, int(relhumid), ts}, "sensors")
+        case "dust0:","dust1:","dust2:":
+            sensorid, err := strconv.ParseInt(string(lines[0][4]), 10, 32)
+            if err != nil {return }
+            dustlvl, err := strconv.ParseInt(string(lines[1]), 10, 32)
+            if err != nil {return }
+            ps.Pub(r3events.DustSensorUpdate{int(sensorid), dustlvl, ts}, "sensors")
         default:
             evnt, pubsubcat, err := r3events.UnmarshalByteByte2Event(lines)
             if err == nil {