+func RunXMPPBot(ps *pubsub.PubSub, zmqctx *zmq.Context) {
+ var xmpperr error
+ var bot *r3xmppbot.XmppBot
+ var xmpp_presence_events_chan chan interface{}
+ psevents := ps.Sub("presence","door","buttons","updateinterval")
+ for {
+ bot, xmpp_presence_events_chan, xmpperr = r3xmppbot.NewStartedBot(xmpp_login_.jid, xmpp_login_.pass, xmpp_bot_authstring_, xmpp_state_save_dir_, true)
+ if xmpperr == nil {
+ QueryLatestEventsAndInjectThem(ps, zmqctx)
+ EventToXMPP(psevents, xmpp_presence_events_chan)
+ bot.StopBot()
+ } else {
+ Syslog_.Printf("Error starting XMPP Bot: %s", xmpperr.Error())
+ }
+ time.Sleep(5 * time.Second)
+ }
+}
+
+func ParseZMQr3Event(lines [][]byte, ps *pubsub.PubSub) {
+ evnt, pubsubcat, err := r3events.UnmarshalByteByte2Event(lines)
+ Debug_.Printf("ParseZMQr3Event: %s %s %s", evnt, pubsubcat, err)
+ if err != nil { return }
+ ps.Pub(evnt, pubsubcat)
+}
+
+func QueryLatestEventsAndInjectThem(ps *pubsub.PubSub, zmqctx *zmq.Context) {
+ answ := ZmqsAskQuestionsAndClose(zmqctx, brain_connect_addr_, [][][]byte{
+ [][]byte{[]byte("BackdoorAjarUpdate")},
+ [][]byte{[]byte("DoorCommandEvent")},
+ [][]byte{[]byte("DoorLockUpdate")},
+ [][]byte{[]byte("DoorAjarUpdate")},
+ [][]byte{[]byte("PresenceUpdate")},
+ [][]byte{[]byte("IlluminationSensorUpdate")},
+ [][]byte{[]byte("TempSensorUpdate")}})
+ for _, a := range(answ) {
+ ParseZMQr3Event(a, ps)
+ }
+}
+