IoTAMAK-core
- IoTAMAK-core
- Reseau
- Random note
- Agent Cycle
- Shared work
- Wait function
- Experience format
- Topics
- Mosquitto (Windows)
- Mosquitto (Linux) Didn't work
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
First procedure :
- etre sur que le ssh est trust (faire un premier ssh hors du programe)
Start procédure :
- start broker
- start scheduler
- 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
- Python multiprocessing
- Envoie du fichier par ssh
- 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