Skip to content

Gestion Services du Nabaztag #5

@Hector47

Description

@Hector47

Petite esquisse des modifications à faire pour ajouter la gestion des services (Météo, Trafic, Notification email, Qualité de l'air, Taïchi...)

  1. Ajouter au model Nabaztag un champ par service ou une liste des services activé (Oreil Gauche et Droite étant au moins toujours activés) (je pense que le système de liste des services activé est plus simple a mettre en place, après je ne sais pas en ce qui concerne l'optimisation des requêtes vers la BD quand on veux ajouter ou supprimer un service...)

  2. Reecrire l'envoi des services lors de la connexion

Pour le service awake/sleep on se base sur les horaire de levée et couchee du lapin donc
soit on l'implemente dans la liste des service obligatoires (avec les oreilles)
et on le reset (selon si il doit dormir ou pas à cette heure) à la connexion du lapin
soit on l'oublie completemment et on check juste a la connextion si il doit etre endormi ou reveiller

(la premiere solution permetrer d'avoir accès rapide a l'etat du lapin depuis l'api)

(la deuxiemme solution est plus simple a faire mais ce serrai cool de savoir si le lapin dort depuis api (via le statut jabber))
(la deuxiemme solution est pour moi la meilleure car on evite de ce retouver avec l'info sur l'etat du nabaztag à deux endroits dans le serveur)

//On rajoute le DAO pour recuper le Lapin (si lapin inconnu on revoi le packet par default ou packet defini (en fonction ))
try{
    nabaztag = checkNotNull(nabaztagDAO.findOne("macAddress", mac));
}catch(NullPointerException e){
    String reply = "<iq from='net.violet.platform@xmpp.nabaztag.com/sources'" +
                    "to='" + from + "' id='" + id + "' type='result'>" +
                    "<query xmlns='violet:iq:sources'>" +
                    "<packet xmlns='violet:packet' format='1.0' ttl='604800'>fwQAAAx////+BAAFAA7/CAALAAABAP8=</packet>" +
                    "</query>" +
                    "</iq>";

    write(e.getChannel(), reply);
}
//on recuper les services du lapin

Iterator<ServiceConfig> iterator = nabaztag.getServicesConfigList().iterator();
AmbientPacket packet = new AmbientPacket();
//je ne sais pas si il faut passe a zero les service non utilisee ou on peux juste les sauter
while (iterator.hasNext()) {
    ServiceConfig next = iterator.next();
    packet.add(next.name,next.value);        
}
//on ajoute le packet sur l'etat dodo/awaike
packet.add(AmbientPacket.SleepStatus,Nabaztag.MAGIE.GetSleepStatus()); //GetSleepStatus revois 00 

//on envoi le packet
String reply = "<iq from='net.violet.platform@xmpp.nabaztag.com/sources'" +
    "to='" + from + "' id='" + id + "' type='result'>" +
    "<query xmlns='violet:iq:sources'>" +
        "<packet xmlns='violet:packet' format='1.0' ttl='604800'>" + packet.getBase64() + "</packet>" +
        "</query>" +
        "</iq>";

write(e.getChannel(), reply);
  1. on ajout l'api de gestion des services (pour que les app externe puissent les configuer)

il est plus simple de garder cette api en get pour simplifier le travail des apps externe.

//Je ne sais pas comment passer pluieurs couples en parametres ici max un parametreage de service
.get(new Route("/nabaztags/:apikey/configservices") {
    @Override
    public void handle(Request request, Response response, Map<String, String> map) throws Exception {
        String apikey = checkNotNull(map.get("apikey"));
        Nabaztag nabaztag = checkNotNull(nabaztagDAO.findOne("apikey", apikey));

        String serviceID= checkNotNull(request.getParam("serviceID"));
        String ServiceValue = checkNotNull(request.getParam("ServiceValue"));
        nabaztag.MAGIE.UpdateServiceList(serviceID,ServiceValue);
        AmbientPacket packet = new AmbientPacket();
        packet.add(Integer.parseInt(serviceID), Integer.parseInt(ServiceValue));

        response.writeJSON("ok");
    }
})

OU

//ici on passe tout ceux que l'on veut metre a jour (à -1 pour desactiver le service) //plus simple a utiliser 
.get(new Route("/nabaztags/:apikey/configservices") {
@Override
    public void handle(Request request, Response response, Map<String, String> map) throws Exception {
        String apikey = checkNotNull(map.get("apikey"));
        Nabaztag nabaztag = checkNotNull(nabaztagDAO.findOne("apikey", apikey));

        String Service_Weather = request.getParam("1");
        String Service_StockMarket = request.getParam("2");
        String Service_Periph = request.getParam("3");
        String MoveLeftEar = request.getParam("4");
        String MoveRightEar = request.getParam("5");
        String Service_EMail = request.getParam("6");
        String Service_AirQuality = request.getParam("7");
        String Service_Nose = request.getParam("8");
        String Service_BottomLed = request.getParam("9");
        //String Service_Asleep = request.getParam("10"); //on ne peux pas l'utiliser comme ca ?
        String Service_TaiChi = request.getParam("14");

        AmbientPacket packet = new AmbientPacket();
        if (Service_Weather != null) {
            nabaztag.MAGIE.UpdateServiceList(AmbientPacket.Service_Weather,Service_Weather);
            if(Integer.parseInt(Service_Weather) == -1){
                packet.add(AmbientPacket.Disable_Service, AmbientPacket.Service_Weather);
            }else{
                packet.add(AmbientPacket.Service_Weather, Integer.parseInt(Service_Weather));
            }
        }
        //... on repete ca pour tous les service

        //on envoi le packet final 
        messageService.sendMessage(nabaztag.getMacAddress(), packet);
        response.writeJSON("ok");
    }
})
  1. on ajoute dans l'api une facon de recuperer les valeurs des services (recuperer les positions des oreilles, dernier etat (endormi, reveiller) )
    avec seulement l'apikey du lapin
//il faudrai ajouter ici l'état du lapin depuis jabber) si non dispo dans la liste des services
get(new Route("/nabaztags/:apikey/services") {
    @Override
    public void handle(Request request, Response response, Map<String, String> map) throws Exception {
        ...

    }
})

3 Bis) Ajouter les valeurs des services dans les api existantes comme /nabaztags et /nabaztags/:mac (je ne sais pas si le DAO les recupere automatiquement)

  1. mettre à jour les api pour updater les services ()
nabaztag.MAGIE.UpdateServiceList(AmbientPacket.MoveLeftEar ,Integer.parseInt(posleft));
  1. Fin :)

Bon je pense que le plus dur à faire et optimiser sont les fonction MAGIE GetSleepStatus et UpdateServiceList
Bien sur ce n'est que mon idée de comment faire et il doit y avoir d'autres beaucoup plus optimisée.

Julien, merci pour tout ton travail pour nos lapins :)

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions