Skip to content
Snippets Groups Projects

IoTAMAK-core

requirement :

  • paho-mqtt
  • pexpect

Reseau

Port :

  • Mqtt : 1883
  • SSH : 22

Mqtt:

  • Broker : Mosquitto (Windows)
  • Client : python paho-mqtt

Configuration raspberry :
SSH activé avec hostname et mdp

Configuration windows : WSL (pour pouvoir démarer l'amas)

Random note

Programme de la semaine :

  • Surcouche mqtt pour le framework
  • décision dela forme du framewor (module python ?)
  • Implementation d'un 2nd example

Start procédure :

  1. start broker
  2. start scheduler
  3. Start amas/env
flowchart TD

    subgraph server
        amas
        scheduler
    end

    client

    amas <-->|mqtt| client
    scheduler <-->|mqtt| client
flowchart TD

    server -->|create n agent| remote_servers

Agent neighboor:

add neighboor : -> subscribe to his metrics

remove neighboor : -> unsuscribe to his metrics

on_perceive -> update neighbors then wait then send metrics then phase 2

Agent Cycle

flowchart TD

    on_cycle_begin 

    subgraph on_perceive
        find_neighbor
        subscribe_neighbor_metric
        find_neighbor --> subscribe_neighbor_metric
    end

    on_cycle_begin --> on_perceive

    subgraph twophase
        wait
    end

    subgraph onephasee
        nothing
    end

    on_perceive -.-> twophase
    on_perceive -.-> onephasee

    twophase -.-> on_decide
    onephasee -.-> on_decide

    on_cycle_en[on_cycle_end]

    on_decide --> on_act
    on_act --> publish_metric
    publish_metric --> on_cycle_en

find_neighbor :

pas d'info de base ? Comment trouver les voisins

Solution :

  • Tout le monde accepte toute les metrics mais ne regarde que ces voisins
  • L'amas sait tout en distribue les données
  • ?

Amas sait tout, il s'abonne aux metrics, calcules les voisins, et les envois aux agents. Les agents stock les données et les lisent dans on_perceive

Shared work

  1. Python multiprocessing
  2. Envoie du fichier par ssh
  3. execution

Probleme :

  • 1 session ssh par agent
  • Souci de dépendance
  • Pas élégant

Utiliser fabrique pour partager les fichier

Communication : pexpect -> linux only (wsl work)

Wait function

while not condition:
    pass

15 agents -> 43 sec/cycle

while not condition:
    sleep(0.01)

15 agents -> 0.09 sec/cycle

Solution a trouvé !

Experience format

/experienceNameFolder/
    /agent.py
    /amas.py
    /env.py
    /...

Les noms amas, agent et env sont obligatoire et ne peuvent pas etre modifier

Ils doivent contenir un code de la sorte :

if __name__ == '__main__':
    a = MyAgent(int(sys.argv[1]), ...) #MyAmas() MyEnv()
    a.run()

Pour ajouter des attributs a l'initialisation aux agents il suffit de rajouter des type(sys.argv[x]).

Topics

Agent

Tout les topics des agents sont du format :

agent/agentid/topicname

Par exemple le topic log de l'agent 2 est :

agent/2/log

Les topics présent par défaut :
log :

envoie un message qui sera print par l'amas

cycle_done :

prévient le scheduler qu'une action c'est fini

metric :

a la fin de chaque cycle envoie un dico avec tout les info a potentielement partager

Scheduler

Les topics du scheduler sont dans le format :

scheduler/aQui/topic

Par exemple, pour débloquer les agents :

scheduler/agent/wakeup

Les topics présent par défaut :
agent/wakeup :

envoie a tout les agents un message pour les débloquer

schedulable/wakeup :

envoie a l'amas et l'environment un message pour les débloquer

Amas

Les topics présent par défaut :
amas/agent/new :

Envoie un message pour prévenir qu'un nouvel agent est crée avec son ID

amas/action_done :

Envoie un message pour prévenir le scheduleur de la fin d'une action

amas/agent/id/neighbor :

Topic to communicate to agent "id" his neighborhood

Env

Les topics présent par défaut : env/action_done :

Envoie un message pour prévenir le scheduleur de la fin d'une action

Mosquitto (Windows)

Stop mosquitto in service

Start mosquitto : mosquitto -v -c D:\data\mosquitto\mosquitto.conf

Config file :

allow_anonymous false

password_file D:\data\mosquitto\pwfile

listener 1883

Check port 1883 : netstat -a

Mosquitto (Linux) Didn't work

Config file :

allow_anonymous false
password_file /etc/mosquitto/pwfile
listener 1883

Restart moquitto :

sudo service mosquitto stop
// check if a pid is still running
sudo lsof -i:1883
// or
pgrep mosquitto
// and kill it
sudo kill pid

sudo start mosquitto -v

firewall (didn't work):

sudo apt update
sudo apt full-upgrade
sudo apt install ufw
sudo ufw status verbose

allow :

sudo ufw allow port
sudo ufw enable
sudo ufw disable
sudo apt remove ufw