Bläddra i källkod

Refactored API & Added examples

xnecas 1 dag sedan
förälder
incheckning
2dce2316e7

+ 2 - 0
.gitignore

@@ -0,0 +1,2 @@
+*.csv
+*.venv

+ 0 - 115
daata.csv

@@ -1,115 +0,0 @@
-TS,5.1,5.2,5.3,5.4,5.5,5.129,5.130,9.1,9.2,9.3,9.4,9.5,9.129,9.130
-363498,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-363551,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-363604,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-363657,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-363710,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-363763,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-363816,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-363869,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-363922,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-363975,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-364028,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-364081,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-364134,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-364187,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-364240,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-364293,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-364346,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-364399,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-364452,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-364505,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-364558,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-364611,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-364664,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-364717,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-364770,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-364823,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-364876,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-364929,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-364982,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-365035,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-365088,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-365141,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-365194,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-365247,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-365300,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-365353,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-365406,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-365459,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-365512,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-365565,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-365618,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-365671,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-365724,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-365777,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-365830,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-365883,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-365936,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-365989,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-366042,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-366095,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-366148,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-366201,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-366254,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-366307,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-366360,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-366413,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-366466,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-366519,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-366572,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-366625,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-366678,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-366731,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-366784,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-366837,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-366890,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-366943,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-366996,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-367049,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-367102,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-367155,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-367208,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-367261,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-367314,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-367367,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-367420,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-367473,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-367526,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-367579,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-367632,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-367685,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-367738,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-367791,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-367844,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-367897,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-367950,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-368003,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-368056,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-368109,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-368162,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-368215,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-368268,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-368321,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-368374,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-368427,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-368480,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-368533,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-368586,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-368639,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-368692,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-368745,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-368798,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-368851,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-368904,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-368957,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-369010,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-369063,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-369116,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-369169,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-369222,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-369275,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-369328,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-369381,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-369434,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"
-369487,"[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]","[1278900, -1312300, -2182900]","[3054417410, -190887440, -19852295490]","[17100, 1800]","[131186229045.10493, -606717310589.2699]",[32.683],[0],"[0.0, 0.0]"

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
daata.json


+ 0 - 189
data.csv

@@ -1,189 +0,0 @@
-TS,5.1.1,5.1.2,5.1.3,5.2.1,5.2.2,5.2.3,5.3.1,5.3.2,5.4.1,5.4.2,5.5.1,5.129.1,5.130.1,5.130.2
-210358,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-210411,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-210464,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-210517,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-210570,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-210623,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-210676,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-210729,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-210782,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-210835,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-210888,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-210941,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-210994,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-211047,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-211100,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-211153,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-211206,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-211259,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-211312,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-211365,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-211418,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-211471,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-211524,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-211577,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-211630,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-211683,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-211736,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-211789,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-211842,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-211895,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-211948,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-212001,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-212054,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-212107,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-212160,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-212213,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-212266,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-212319,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-212372,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-212425,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-212478,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-212531,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-212584,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-212637,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-212690,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-212743,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-212796,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-212849,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-212902,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-212955,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-213008,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-213061,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-213114,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-213167,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-213220,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-213273,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-213326,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-213379,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-213432,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-213485,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-213538,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-213591,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-213644,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-213697,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-213750,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-213803,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-213856,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-213909,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-213962,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-214015,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-214068,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-214121,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-214174,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-214227,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-214280,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-214333,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-214386,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-214439,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-214492,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-214545,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-214598,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-214651,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-214704,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-214757,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-214810,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-214863,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-214916,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-214969,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-215022,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-215075,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-215128,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-215181,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-215234,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-215287,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-215340,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-215393,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-215446,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-215499,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-215552,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-215605,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-215658,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-215711,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-215764,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-215817,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-215870,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-215923,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-215976,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-216029,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-216082,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-216135,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-216188,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-216241,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-216294,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-216347,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-216400,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-216453,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-216506,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-216559,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-216612,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-216665,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-216718,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-216771,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-216824,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-216877,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-216930,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-216983,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-217036,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-217089,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-217142,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-217195,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-217248,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-217301,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-217354,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-217407,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-217460,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-217513,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-217566,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-217619,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-217672,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-217725,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-217778,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-217831,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-217884,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-217937,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-217990,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-218043,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-218096,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-218149,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-218202,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-218255,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-218308,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-218361,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-218414,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-218467,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-218520,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-218573,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-218626,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-218679,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-218732,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-218785,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-218838,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-218891,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-218944,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-218997,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-219050,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-219103,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-219156,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-219209,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-219262,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-219315,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-219368,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-219421,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-219474,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-219527,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-219580,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-219633,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-219686,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-219739,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-219792,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-219845,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-219898,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-219951,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-220004,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-220057,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-220110,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-220163,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-220216,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0
-220269,1278900,-1312300,-2182900,3054417410,-190887440,-19852295490,17100,1800,131186229045.10493,-606717310589.2699,32.683,0,0.0,0.0

+ 0 - 79
debug.py

@@ -1,79 +0,0 @@
-import time
-import sys
-
-from nbus_hal.nbus_serial.serial_port import *
-from nbus_api.nbus_module_slave import NBusSlaveModule
-from nbus_api.nbus_bridge import NBusBridge
-from nbus_hal.nbus_serial.serial_config import *
-from nbus_api.nbus_sensor import NBusSensor
-from nbus_types.nbus_parameter_type import NBusParameterID
-import pandas as pd
-
-# example config
-config = {
-    "port_name": "COM4",
-    "baud": NBusBaudrate.SPEED_921600,
-    "parity": NBusParity.NONE,
-    "timeout": 1.0,
-    "request_attempts": 1,
-    "enable_log": True
-}
-
-if __name__ == "__main__":
-    sys.exit
-    port = NBusSerialPort(NBusSerialConfig(**config))
-    #module1 = NBusSlaveModule(port, 9)
-    #print(module1.cmd_get_sensor_type())
-    #sys.exit()
-    #sys.exit(0)
-    bridge = NBusBridge(port, 0.05, 0.05)
-    bridge.init_from_network()
-    print(bridge.cmd_get_data())
-
-    print(bridge.cmd_set_reset())
-    print(bridge.cmd_get_slaves())
-    print(bridge.cmd_get_format())
-
-    bridge.start_data_streaming()
-    time.sleep(5)
-    print(bridge.fetch_chunk_from_stream())
-    time.sleep(5)
-    bridge.stop_data_streaming()
-
-
-
-    print(bridge.fetch_chunk_from_stream())
-    print(bridge.fetch_chunk_from_stream())
-    df = bridge.fetch_all_from_stream()
-    df.to_csv("data.csv", index=False)
-    sys.exit()
-
-    module1.scan()
-    print(module1.cmd_get_echo(bytearray("ahoj", "ascii")))
-    print(module1.cmd_get_format())
-    print(module1.cmd_get_sensor_type())
-    print(module1.cmd_get_data())
-    #sys.exit(0)
-
-    t0 = time.time()
-    port.request_broadcast(NBusCommand.CMD_SET_START, bytearray([]))
-   # time.sleep(1.0)
-
-    for i in range(200):
-            print(hex(port.get_port().read()[0]))
-
-    port.request_broadcast(NBusCommand.CMD_SET_STOP, bytearray([]))
-
-
-
-
-    # algoritmus hazel zvon
-    while port.get_port().in_waiting:
-        time.sleep(0.05)
-        port.get_port().reset_input_buffer()
-        print("flushed baby")
-      #  break
-
-
-    print(module1.cmd_get_echo(bytearray("ahoj", "ascii")))
-

+ 68 - 0
examples/example_bridge.py

@@ -0,0 +1,68 @@
+import sys
+from nbus_hal.nbus_serial.serial_port import *
+from nbus_api.nbus_bridge import NBusBridge
+from nbus_hal.nbus_serial.serial_config import *
+
+# example config
+config = {
+    "port_name": "COM4",
+    "baud": NBusBaudrate.SPEED_921600,
+    "parity": NBusParity.NONE,
+    "timeout": 1.0,
+    "flush_delay": 0.05,
+    "request_attempts": 1,
+    "enable_log": False
+}
+
+BRIDGE_ACQUIRE_WAIT = 0.5
+BRIDGE_STREAM_INTERVAL = 5.0
+
+if __name__ == "__main__":
+    # create port
+    port = NBusSerialPort(NBusSerialConfig(**config))
+
+    # create module
+    bridge = NBusBridge(port, BRIDGE_ACQUIRE_WAIT)
+
+    # run commands
+    try:
+        # initialize bridge
+        bridge.init()
+
+        # test bridge get
+        print("<<TEST BRIDGE GET>>")
+        print("CMD GET INFO: ", bridge.cmd_get_info())
+        print("CMD GET SLAVES: ", bridge.cmd_get_slaves())
+        print("CMD GET FORMAT: ", bridge.cmd_get_format())
+        print("CMD GET DATA: ",bridge.cmd_get_data())
+
+        # test bridge set
+        print("<<TEST BRIDGE SET>>")
+        print("CMD SET RESET: ",bridge.cmd_set_reset())
+
+        print("<<TEST BRIDGE STREAMING>>")
+
+        print(f"START STREAM FOR {BRIDGE_STREAM_INTERVAL} SECONDS")
+        bridge.start_streaming()
+        time.sleep(BRIDGE_STREAM_INTERVAL)
+
+
+        print("FETCH STREAM CHUNK:", bridge.fetch_stream_chunk())
+        print(f"WAIT FOR {BRIDGE_STREAM_INTERVAL} SECONDS")
+        time.sleep(BRIDGE_STREAM_INTERVAL)
+
+        print(f"STOP STREAM AFTER {2*BRIDGE_STREAM_INTERVAL} SECONDS")
+        bridge.stop_streaming()
+
+        print("FETCH STREAM CHUNK:", bridge.fetch_stream_chunk())
+
+        print("SAVE FULL STREAM:")
+        df = bridge.fetch_full_stream()
+        df.to_csv("data.csv", index=False)
+
+    except Exception as e:
+        print(e)
+
+    finally:
+        port.flush()
+        port.close()

+ 93 - 0
examples/example_slave_module.py

@@ -0,0 +1,93 @@
+import sys
+
+from nbus_hal.nbus_serial.serial_port import *
+from nbus_api.nbus_module_slave import NBusSlaveModule
+from nbus_hal.nbus_serial.serial_config import *
+from nbus_types.nbus_parameter_type import NBusParameterID
+
+# example config
+config = {
+    "port_name": "COM4",
+    "baud": NBusBaudrate.SPEED_921600,
+    "parity": NBusParity.NONE,
+    "timeout": 99.0,
+    "flush_delay": 0.05,
+    "request_attempts": 1,
+    "enable_log": False
+}
+
+if __name__ == "__main__":
+
+    # create port
+    port = NBusSerialPort(NBusSerialConfig(**config))
+    # create module
+    module = NBusSlaveModule(port, 5)
+
+    # run commands
+    try:
+        # initialize module from hardware
+        module.init(False)   # initialize and load format
+
+        # get devices
+        devices = module.get_devices()
+        accelerometer = devices[1]
+        led = devices[129]
+
+        # test module get
+        print("<<TEST MODULE GET>>")
+        print("CMD GET ECHO: ", module.cmd_get_echo(bytearray("Hello world!", "ascii")))
+        print("CMD GET PARAM SAMPLERATE: ", module.cmd_get_param(NBusParameterID.PARAM_SAMPLERATE))
+        print("CMD GET ALL PARAMS: ", module.cmd_get_all_params())
+        print("CMD GET SENSOR COUNT: ", module.cmd_get_sensor_cnt())
+        print("CMD GET SENSOR TYPE: ", module.cmd_get_sensor_type())
+        print("CMD GET INFO: ", module.cmd_get_info())
+        print("CMD GET SENSOR FORMAT: ", module.cmd_get_format())
+        print("CMD GET SENSOR DATA: ", module.cmd_get_data())
+
+        # test module set
+        print("\n<<TEST MODULE SET>>")
+        print("CMD SET STOP: ", module.cmd_set_module_stop())
+        print("CMD SET START: ", module.cmd_set_module_start())
+
+        print("CMD SET PARAM SAMPLERATE: ", module.cmd_set_param(NBusParameterID.PARAM_SAMPLERATE, 12345))
+        print("CMD GET PARAM SAMPLERATE: ", module.cmd_get_param(NBusParameterID.PARAM_SAMPLERATE))
+
+        params = {NBusParameterID.PARAM_RANGE: 12, NBusParameterID.PARAM_RANGE0: 4234}
+        print("CMD SET MULTI PARAMS: ", module.cmd_set_multi_params(params))
+        print("CMD GET ALL PARAMS: ", module.cmd_get_all_params())
+
+        print("CMD SET CALIBRATE: ", module.cmd_set_calibrate())
+
+        data = {129: [1], 130: [10, -32]}
+        print("CMD SET DATA: ", module.cmd_set_data(data))
+        print("CMD GET SENSOR DATA: ", module.cmd_get_data())
+
+        # test sensor get
+        print("\n<<TEST SENSOR GET>>")
+        print("CMD GET PARAM SAMPLERATE: ", accelerometer.cmd_get_param(NBusParameterID.PARAM_SAMPLERATE))
+        print("CMD GET ALL PARAMS: ", accelerometer.cmd_get_all_params())
+        print("CMD GET SENSOR TYPE: ", accelerometer.cmd_get_sensor_type())
+        print("CMD GET SENSOR FORMAT: ", accelerometer.cmd_get_format())
+        print("CMD GET SENSOR DATA: ", accelerometer.cmd_get_data())
+
+        # test sensor set
+        print("\n<<TEST SENSOR SET>>")
+        print("CMD SET FIND: ", led.cmd_set_find(True))
+        print("CMD SET PARAM SAMPLERATE: ", led.cmd_set_param(NBusParameterID.PARAM_SAMPLERATE, 23456))
+        print("CMD GET PARAM SAMPLERATE: ", led.cmd_get_param(NBusParameterID.PARAM_SAMPLERATE))
+
+        params = {NBusParameterID.PARAM_RANGE: 12, NBusParameterID.PARAM_RANGE0: 4234}
+        print("CMD SET MULTI PARAMS: ", led.cmd_set_multi_params(params))
+        print("CMD GET ALL PARAMS: ", led.cmd_get_all_params())
+
+        print("CMD SET CALIBRATE: ", led.cmd_set_calibrate())
+
+        print("CMD SET DATA: ", led.cmd_set_data([1]))
+        print("CMD GET SENSOR DATA: ", led.cmd_get_data())
+
+    except Exception as e:
+        print(e)
+
+    finally:
+        port.flush()
+        port.close()

BIN
nbus_api/__pycache__/nbus_bridge.cpython-313.pyc


BIN
nbus_api/__pycache__/nbus_common_parser.cpython-313.pyc


BIN
nbus_api/__pycache__/nbus_module_slave.cpython-313.pyc


BIN
nbus_api/__pycache__/nbus_sensor.cpython-313.pyc


+ 210 - 89
nbus_api/nbus_bridge.py

@@ -1,43 +1,29 @@
 import struct
-from collections import deque
-from dataclasses import dataclass
+import time
+from typing import Optional
+from threading import Thread, Lock
+from beartype import beartype
+import pandas as pd
 
 from nbus_api.nbus_common_parser import NbusCommonParser
 from nbus_api.nbus_module_slave import NBusSlaveModule
 from nbus_api.nbus_sensor import NBusSensor
-from nbus_hal.nbus_serial.serial_port import *
+from nbus_hal.crc8 import crc8
+from nbus_hal.nbus_generic_port import NBusPort
+from nbus_types.nbus_address_type import NBusModuleAddress, NBusSensorAddress
+from nbus_types.nbus_command_type import NBusCommand
+from nbus_types.nbus_data_fomat import NBusDataFormat, NBusDataValue
+from nbus_types.nbus_defines import *
 from nbus_types.nbus_exceptions.nbus_api_exception import NBusErrorAPI, NBusErrorAPIType
+from nbus_types.nbus_info_type import NBusBridgeInfo
 from nbus_types.nbus_sensor_count_type import NBusSensorCount
-
-import time
-from threading import Thread, Lock
-from collections import namedtuple
-
-import pandas as pd
-
+from nbus_types.nbus_slave_meta_type import NBusSlaveMeta
 from nbus_types.nbus_status_type import NBusStatusType
 
-NBUS_RX_META  =  4
-NBUS_FMT_SIZE =  4
-NBUS_TS_SIZE  =  4
-NBUS_CRC_SIZE =  1
-NBUS_MA_SIZE  =  1
-NBUS_SA_SIZE  =  1
-NBUS_CRC_ADDR = -1
-
-NBUS_BRIDGE_DATA_HDR = bytearray([0x00] + [0xFF] * 8 + [0x00])
-NBUS_BRIDGE_DATA_HDR_SIZE = len(NBUS_BRIDGE_DATA_HDR)
-
-@dataclass
-class NBusSlaveMeta:
-    obj: NBusSlaveModule
-    cnt: NBusSensorCount
-    packet_size: int
-
 @beartype
 class NBusBridge:
 
-    def __init__(self, serial_port: NBusSerialPort, acquire_delay: float, flush_delay: float):
+    def __init__(self, serial_port: NBusPort, acquire_delay: float):
         """
         Constructor.
 
@@ -52,35 +38,68 @@ class NBusBridge:
         self._lock = Lock()                     # thread lock
         self.__in_acquisition = False           # flag when in acquisition
         self.__acquire_delay = acquire_delay    # intermediate delay between data fetching when data not ready
-        self.__flush_delay = flush_delay        # delay between stream flush
         self.__df = pd.DataFrame()              # internal data frame
 
-    def init_from_network(self):
+    """
+    ================================================================================================================
+                                              Module General Methods
+    ================================================================================================================
+    """
+    def init(self) -> None:
+        """
+        Initialize the bridge module from network.
+        """
         try:
             self.cmd_get_slaves()
             self.cmd_get_format()
         except Exception:
             self.panic()
 
-    def panic(self):
-        self.stop_data_streaming()
+    def panic(self) -> None:
+        """
+        Reset communication when fatal error occurs.
+        """
+        self.stop_streaming()
         self.cmd_set_reset()
+
+        self.__data_raw = bytearray()
+        self.__df = pd.DataFrame()
+        self.__slaves_meta = {}
+
         self.cmd_get_slaves()
         self.cmd_get_format()
 
-    def start_data_streaming(self):
-        self.__port.send_bridge(NBusCommand.CMD_SET_START, bytearray())
+    def get_slaves(self) -> dict[NBusModuleAddress, NBusSlaveModule]:
+        """
+        Get connected slave modules.
 
+        :return: dictionary of connected slaves
+        """
+        slaves = {}
+
+        for key, value in self.__slaves_meta.items():
+            slaves[key] = value.module_obj
+
+        return slaves
+
+    def start_streaming(self) -> None:
+        """
+        Start data streaming (e.g. bridge-cast).
+        """
+        self.__port.send_bridge(NBusCommand.CMD_SET_START, bytearray())
         self.__acquire_thread = Thread(target=self.__acquire_callback)
         self.__in_acquisition = True
 
         # end thread if running
-        if self.__acquire_thread.is_alive():
+        if self.__acquire_thread is not None and self.__acquire_thread.is_alive():
             self.__acquire_thread.join()
 
         self.__acquire_thread.start()
 
-    def stop_data_streaming(self):
+    def stop_streaming(self):
+        """
+        Stop data streaming (e.g. bridge-cast).
+        """
         self.__port.send_bridge(NBusCommand.CMD_SET_STOP, bytearray())
 
         self.__in_acquisition = False
@@ -88,9 +107,16 @@ class NBusBridge:
         if self.__acquire_thread is not None and self.__acquire_thread.is_alive():
             self.__acquire_thread.join()
 
-        self.__port.flush(self.__flush_delay)
+        self.__port.flush()
+
+    def fetch_stream_chunk(self) -> pd.DataFrame:
+        """
+        Fetch data from stream (e.g. bridge-cast).
+        Can be called anytime.
+        It not erase internal dataframe.
 
-    def fetch_chunk_from_stream(self):
+        :return: stream data frame
+        """
         with self._lock:
             packets = self.__data_raw.split(NBUS_BRIDGE_DATA_HDR)
             packet_cnt = len(packets) - self.__in_acquisition
@@ -98,7 +124,7 @@ class NBusBridge:
 
             # parse packets
             for i in range(packet_cnt):
-                data = self._parse_bridge_data(packets[i], True)
+                data = self._parse_bridge_data_from_packet(packets[i], True)
                 if data is not None:
                     parsed_packets.append(data)
 
@@ -118,35 +144,57 @@ class NBusBridge:
 
         return data_frame
 
-    def fetch_all_from_stream(self):
+    def fetch_full_stream(self) -> pd.DataFrame:
+        """
+        Fetch all data from stream (e.g. bridge-cast).
+        Must be called after stop_streaming() method.
+        It will erase internal dataframe.
+
+        :return: stream dataframe
+        """
+        if self.__in_acquisition:
+            return pd.DataFrame()
+
         df = self.__df
         self.__df = pd.DataFrame()
         return df
 
-    def cmd_get_slaves(self):
-        resp_length, *response = self.__port.request_bridge(NBusCommand.CMD_GET_SLAVES, bytearray([]))
-        slaves = {}
-        data_offset = 0
+    """
+    ================================================================================================================
+                                                    Bridge Get Commands
+    ================================================================================================================
+    """
+    def cmd_get_data(self) -> pd.DataFrame:
+        """
+        Get data from all slave devices.
 
-        while data_offset < resp_length - 2:
-            slave_addr = response[data_offset]
-            slave_sensor_cnt = NBusSensorCount(response[data_offset + 1] , response[data_offset + 2])
+        :return: dataframe of the network data
+        """
+        resp_length, *response = self.__port.request_bridge(NBusCommand.CMD_GET_DATA, bytearray())
+        return pd.DataFrame([self._parse_bridge_data_from_packet(bytearray(response), False)])
 
-            slaves[slave_addr] = slave_sensor_cnt
+    def cmd_get_info(self) -> NBusBridgeInfo:
+        """
+        Get data from all slave devices.
 
-            self.__slaves_meta[slave_addr] = NBusSlaveMeta(
-                NBusSlaveModule(self.__port, slave_addr), slave_sensor_cnt, 0
-            )
+        :return: bridge info structure
+        """
+        response = self.__port.request_bridge(NBusCommand.CMD_GET_INFO, bytearray())
+        fw = str(response[1:4], "ascii")
+        hw_family = str(response[4:7], "ascii")
+        hw = str(response[7:10], "ascii")
 
-            data_offset += 3
+        return NBusBridgeInfo(fw=fw, hw_family=hw_family, hw=hw)
 
-        return slaves
+    def cmd_get_format(self) -> dict[tuple[NBusModuleAddress, NBusSensorAddress], NBusDataFormat]:
+        """
+         Get format of all connected devices.
 
-    def cmd_set_reset(self):
-        resp_length, *response = self.__port.request_bridge(NBusCommand.CMD_SET_RESET, bytearray())
-        return NBusStatusType(response[0])
+         :return: dict of all device formats
+         """
+        if not self.__slaves_meta:
+            raise NBusErrorAPI(NBusErrorAPIType.SLAVES_NOT_LOADED)
 
-    def cmd_get_format(self):
         resp_length, *response = self.__port.request_bridge(NBusCommand.CMD_GET_FORMAT, bytearray())
         data_offset = 0
         fmt = {}
@@ -155,7 +203,7 @@ class NBusBridge:
             slave_addr = response[data_offset]
             data_offset += NBUS_MA_SIZE
 
-            slave_sensor_cnt = self.__slaves_meta[slave_addr].cnt
+            slave_sensor_cnt = self.__slaves_meta[slave_addr].device_count
             format_len = NBUS_FMT_SIZE * (slave_sensor_cnt.read_only_count + slave_sensor_cnt.read_write_count)
 
             fmt |= self._set_slave_format_from_response(slave_addr, format_len,
@@ -163,19 +211,84 @@ class NBusBridge:
 
             data_offset += format_len
 
-        self._set_data_packet_size()
+        self._update_slaves_packet_size()
         return fmt
 
-    def cmd_get_data(self):
-        resp_length, *response = self.__port.request_bridge(NBusCommand.CMD_GET_DATA, bytearray())
-        return self._parse_bridge_data(bytearray(response), False)
+    def cmd_get_slaves(self) -> dict[NBusModuleAddress, NBusSensorCount]:
+        """
+        Get base information about all connected slaves and update internal fields.
 
-    def _parse_bridge_data(self, data_packet, check_packet):
+        :return: dict of device count of every connected module
+        """
+        resp_length, *response = self.__port.request_bridge(NBusCommand.CMD_GET_SLAVES, bytearray())
+        slaves = {}
+        data_offset = 0
+
+        while data_offset < resp_length - 2:
+            slave_addr = response[data_offset]
+            slave_sensor_cnt = NBusSensorCount(response[data_offset + 1] , response[data_offset + 2])
+
+            slaves[slave_addr] = slave_sensor_cnt
+
+            # update internal memory
+            if slave_addr not in self.__slaves_meta:
+                self.__slaves_meta[slave_addr] = NBusSlaveMeta(
+                    NBusSlaveModule(self.__port, slave_addr), slave_sensor_cnt, 0)
+
+            data_offset += 3
+
+        return slaves
+
+    """
+    ================================================================================================================
+                                                  Bridge Get Commands
+    ================================================================================================================
+    """
+    def cmd_set_reset(self) -> NBusStatusType:
+        """
+        Send reset command to bridge module.
+
+        :return: status of success
+        """
+        resp_length, *response = self.__port.request_bridge(NBusCommand.CMD_SET_RESET, bytearray())
+        return NBusStatusType(response[0])
+
+    """
+    ================================================================================================================
+                                                  Internal Methods
+    ================================================================================================================
+    """
+    def __acquire_callback(self) -> None:
+        """
+        Thread worker for data acquisition.
+        """
+        while self.__in_acquisition:
+            data = self.__port.try_read()
+
+            if not data:
+                time.sleep(self.__acquire_delay)
+                continue
+
+            with self._lock:
+                self.__data_raw.extend(data)
+
+    def _parse_bridge_data_from_packet(self, data_packet: bytearray, check_packet: bool) \
+            -> Optional[dict[str, NBusDataValue]]:
+        """
+        Parse the bridge data packet.
+
+        :param data_packet: packet to parse
+        :param check_packet: if crc check is required (only in bridge-cast)
+
+        :return: dictionary of data values or None
+        """
         packet_size = len(data_packet)
         packet_crc = crc8(data_packet[:NBUS_CRC_ADDR])
-
+        # check validity
         if check_packet and (packet_size < NBUS_TS_SIZE + NBUS_CRC_SIZE or data_packet[NBUS_CRC_ADDR] != packet_crc):
             return None
+
+        # parse data
         try:
             data_offset = 0
             ts = struct.unpack("<I", data_packet[data_offset : data_offset + NBUS_TS_SIZE])[0]
@@ -188,31 +301,42 @@ class NBusBridge:
                 packet_size = self.__slaves_meta[module_addr].packet_size
                 packet = data_packet[data_offset : data_offset + packet_size]
 
-                data |= self._get_data_from_response(module_addr, packet_size, packet)
+                data |= self._parse_slave_data_from_response(module_addr, packet_size, packet)
                 data_offset += packet_size
+
             return data
 
-        except Exception as ex:
+        except Exception:
             return None
 
-    def _set_data_packet_size(self):
-        self.__packet_size = NBUS_TS_SIZE + NBUS_CRC_SIZE
-
+    def _update_slaves_packet_size(self) -> None:
+        """
+        Update slaves packet size from loaded format.
+        """
         for slave_meta in self.__slaves_meta.values():
             packet_size = 0
 
-            for device in slave_meta.obj.get_devices().values():
+            for device in slave_meta.module_obj.get_devices().values():
                 fmt = device.data_format
                 packet_size += fmt.byte_length * fmt.samples + NBUS_SA_SIZE
 
             slave_meta.packet_size = packet_size
-            self.__packet_size += packet_size + NBUS_MA_SIZE
 
-    def _set_slave_format_from_response(self, slave_addr, resp_length, response):
+    def _set_slave_format_from_response(self, slave_addr: NBusModuleAddress, resp_length: int, response: list[int]) \
+            -> dict[tuple[NBusModuleAddress, NBusSensorAddress], NBusDataFormat]:
+        """
+        Parse and set format for all slaves from response.
+
+        :param slave_addr: address of slave module
+        :param resp_length: length of response
+        :param response: raw data
+
+        :return: parsed formats
+        """
         data_offset = 0
         formats = {}
 
-        devices  = self.__slaves_meta[slave_addr].obj.get_devices()
+        devices  = self.__slaves_meta[slave_addr].module_obj.get_devices()
 
         # parse format
         while data_offset < resp_length:
@@ -220,19 +344,27 @@ class NBusBridge:
             device_format = NbusCommonParser.format_from_response(response[data_offset : data_offset + NBUS_FMT_SIZE])
 
             if device_id not in devices:
-                devices[device_id] = NBusSensor(device_id)
+                devices[device_id] = NBusSensor(self.__port, slave_addr, device_id)
 
             devices[device_id].data_format = device_format
-            tag = str(slave_addr) + "." + str(device_id)
-            formats[tag] = device_format
+            formats[(NBusModuleAddress(slave_addr), NBusSensorAddress(device_id))] = device_format
             data_offset += NBUS_FMT_SIZE
 
         return formats
 
-    def _get_data_from_response(self, slave_addr, resp_length, response):
+    def _parse_slave_data_from_response(self, slave_addr: NBusModuleAddress, resp_length: int, response: bytearray) \
+            -> dict[str, NBusDataValue]:
+        """
+        Parse data of single slave from response.
+        :param slave_addr: address of selected slave
+        :param resp_length: length of response
+        :param response: raw data
+
+        :return: dict of data values
+        """
         data_offset = 0
         data = {}
-        devices = self.__slaves_meta[slave_addr].obj.get_devices()
+        devices = self.__slaves_meta[slave_addr].module_obj.get_devices()
 
         while data_offset < resp_length:
             device_id = response[data_offset]
@@ -249,14 +381,3 @@ class NBusBridge:
             data_offset += offset + NBUS_SA_SIZE
 
         return data
-
-    def __acquire_callback(self):
-        while self.__in_acquisition:
-            data = self.__port.try_read()
-
-            if not data:
-                time.sleep(self.__acquire_delay)
-                continue
-
-            with self._lock:
-                self.__data_raw.extend(data)

+ 1 - 1
nbus_api/nbus_common_parser.py

@@ -62,7 +62,7 @@ class NbusCommonParser:
         return params
 
     @staticmethod
-    def data_from_response(data_format: NBusDataFormat, response: list[int]) -> Tuple[list[NBusDataValue], int]:
+    def data_from_response(data_format: NBusDataFormat, response: bytearray) -> Tuple[list[NBusDataValue], int]:
         """
         Parse data from response.
         :param data_format: format of data

+ 22 - 34
nbus_api/nbus_module_slave.py

@@ -1,14 +1,14 @@
 import struct
 from nbus_api.nbus_sensor import NBusSensor
 from nbus_api.nbus_common_parser import NbusCommonParser
-from nbus_hal.nbus_serial.serial_port import *
+from nbus_hal.nbus_generic_port import *
 from nbus_types.nbus_address_type import NBusModuleAddress
 from nbus_types.nbus_data_fomat import NBusDataValue, NBusDataFormat
 from nbus_types.nbus_exceptions.nbus_api_exception import NBusErrorAPI, NBusErrorAPIType
 from nbus_types.nbus_parameter_type import NBusParameterID, NBusParameterValue
 from nbus_types.nbus_status_type import NBusStatusType
 from nbus_types.nbus_sensor_count_type import NBusSensorCount
-from nbus_types.nbus_info_type import NBusInfo
+from nbus_types.nbus_info_type import NBusModuleInfo
 from nbus_types.nbus_sensor_type import NBusSensorType
 
 
@@ -18,15 +18,15 @@ class NBusSlaveModule:
     Class representing nBus slave module.
     """
 
-    def __init__(self, serial_port: NBusSerialPort, module_address: NBusModuleAddress):
+    def __init__(self, port: NBusPort, module_address: NBusModuleAddress):
         """
         Constructor.
 
-        :param serial_port: serial port
+        :param port: serial port
         :param module_address: address of module
         :param device_cnt: number of devices
         """
-        self.__port = serial_port
+        self.__port = port
         self.__module_addr = module_address
         self.__params = {}
         self.__devices = {}
@@ -36,37 +36,28 @@ class NBusSlaveModule:
                                                 Module General Methods
     ================================================================================================================
     """
-    def scan(self):
+    def init(self, load_format: bool) -> None:
+        """
+        Initialize the module from hardware.
+
+        :param load_format: flag to fetch data format
+        """
         sensors = self.cmd_get_sensor_type()
 
         for sen_address, sen_type in sensors.items():
-            self.__devices[sen_address] = NBusSensor(sen_address)
+            self.__devices[sen_address] = NBusSensor(self.__port, self.__module_addr, sen_address)
             self.__devices[sen_address].type = sen_type
 
-        return sensors
-
-    def get_devices(self):
-        return self.__devices
-
-    def add_sensor(self, sensor: NBusSensor) -> None:
-        """
-        Add sensor to container.
-
-        :param sensor: nbus sensor
-        """
-        sensor.set_parent_module_address(self.__module_addr)
-        sensor.set_device_port(self.__port)
-        self.__devices[sensor.address] = sensor
+        if load_format:
+            self.cmd_get_format()
 
-    def get_sensor(self, sensor_address: NBusSensorAddress) -> NBusSensor:
+    def get_devices(self) -> dict[NBusSensorAddress, NBusSensor]:
         """
-        Get module sensor.
+        Get module devices.
 
-        :param sensor_address: address of sensor
-
-        :return: sensor
+        :return: dictionary of connected devices
         """
-        return self.__devices[sensor_address]
+        return self.__devices
 
     """
     ================================================================================================================
@@ -158,7 +149,7 @@ class NBusSlaveModule:
 
         return data
 
-    def cmd_get_info(self) -> NBusInfo:
+    def cmd_get_info(self) -> NBusModuleInfo:
         """
         Get module info.
 
@@ -176,8 +167,8 @@ class NBusSlaveModule:
         ro_count = int(response[30])
         rw_count = int(response[31])
 
-        return NBusInfo(module_name=name, module_type=typ, uuid=uuid, hw=hw, fw=fw, memory_id=mem_id,
-                        read_only_sensors=ro_count, read_write_sensors=rw_count)
+        return NBusModuleInfo(module_name=name, module_type=typ, uuid=uuid, hw=hw, fw=fw, memory_id=mem_id,
+                              read_only_sensors=ro_count, read_write_sensors=rw_count)
 
     def cmd_get_format(self) -> dict[NBusSensorAddress, NBusDataFormat]:
         """
@@ -283,7 +274,7 @@ class NBusSlaveModule:
 
         # send request
         resp_length, *response = self.__port.request_module(self.__module_addr, NBusCommand.CMD_SET_PARAM,
-                                                            bytearray(param_bytes))
+                                                            bytearray(param_bytes), long_answer=1.0)
         # parse statuses
         statuses = {}
 
@@ -341,6 +332,3 @@ class NBusSlaveModule:
             statuses[NBusSensorAddress(response[i])] = NBusStatusType(response[i + 1])
 
         return statuses
-
-
-

+ 5 - 24
nbus_api/nbus_sensor.py

@@ -16,16 +16,18 @@ class NBusSensor:
     Class representing nBus sensor type.
     """
 
-    def __init__(self, address: NBusSensorAddress):
+    def __init__(self, port: NBusPort, module_address: NBusModuleAddress, address: NBusSensorAddress):
         """
         Constructor.
 
+        :param port: NBusPort object
+        :param module_address: address of NBusModule
         :param address: device address
         """
         self.__address = address
         self.__type = None
-        self.__module_address = None
-        self.__port = None
+        self.__module_address = module_address
+        self.__port = port
         self.__data_format = None
         self.__params = {}
 
@@ -80,27 +82,6 @@ class NBusSensor:
         """
         self.__params = values
 
-    """
-    ================================================================================================================
-                                                    Module-only Methods
-    ================================================================================================================
-    """
-
-    def set_parent_module_address(self, address: NBusModuleAddress) -> None:
-        """
-        Set address of parent module.
-
-        :param address: module address
-        """
-        self.__module_address = address
-
-    def set_device_port(self, port: NBusPort) -> None:
-        """
-        Set device communication port.
-        :param port: communicaiton port
-        """
-        self.__port = port
-
     """
     ================================================================================================================
                                                     Device Get Commands

BIN
nbus_hal/__pycache__/nbus_generic_port.cpython-313.pyc


+ 38 - 1
nbus_hal/nbus_generic_port.py

@@ -1,9 +1,10 @@
 from abc import ABCMeta, abstractmethod
 from typing import Annotated
+
 from beartype import beartype
 from beartype.vale import Is
+from nbus_types.nbus_command_type import *
 from nbus_types.nbus_address_type import NBusModuleAddress, NBusSensorAddress
-from nbus_types.nbus_command_type import NBusCommand
 
 
 """
@@ -32,6 +33,22 @@ class NBusPort(metaclass=ABCMeta):
         """
         pass
 
+    @abstractmethod
+    def flush(self) -> None:
+        """
+        Flush port with periodic check.
+        """
+        pass
+
+    @abstractmethod
+    def try_read(self) -> bytes:
+        """
+       Try reading from port.
+
+       :return: bytes
+       """
+        pass
+
     @abstractmethod
     def is_connected(self) -> bool:
         """
@@ -40,6 +57,26 @@ class NBusPort(metaclass=ABCMeta):
         """
         pass
 
+    @abstractmethod
+    def request_bridge(self, command: NBusCommand, data: bytearray, long_answer: NBusDelay = 0.0):
+        """
+        Make bridge request.
+        :param command: command id
+        :param data: command data to send
+             :param long_answer: delay in s for longer answer
+        """
+        pass
+
+    @abstractmethod
+    def send_bridge(self, command: NBusCommand, data: bytearray):
+        """
+        Make bridge request without waiting for response.
+        :param command: command id
+        :param data: command data to send
+             :param long_answer: delay in s for longer answer
+        """
+        pass
+
     @abstractmethod
     def request_broadcast(self, command: NBusCommand, data: bytearray) -> None:
         """

BIN
nbus_hal/nbus_serial/__pycache__/serial_config.cpython-313.pyc


BIN
nbus_hal/nbus_serial/__pycache__/serial_port.cpython-313.pyc


+ 2 - 0
nbus_hal/nbus_serial/serial_config.py

@@ -39,6 +39,7 @@ class NBusSerialConfig:
     :ivar baud: The baud rate for the serial communication.
     :ivar parity: The parity bit setting for the serial communication.
     :ivar timeout: The timeout value for the serial communication.
+    :ivar flush_delay: The delay for inter-flushing the serial communication.
     :ivar request_attempts: The number of attempts for a request.
     :ivar enable_log: Flag to enable or disable logging.
     """
@@ -46,5 +47,6 @@ class NBusSerialConfig:
     baud: NBusBaudrate
     parity: NBusParity
     timeout: Annotated[float, Is[lambda value: value > 0]]
+    flush_delay: Annotated[float, Is[lambda value: value > 0]]
     request_attempts: Annotated[int, Is[lambda value: value > 0]]
     enable_log: bool

+ 36 - 27
nbus_hal/nbus_serial/serial_port.py

@@ -1,8 +1,6 @@
 import time
 import serial
-from typing import Any, Callable
-from nbus_types.nbus_defines import *
-
+from typing import Any, Callable, Optional
 from beartype import beartype
 
 from nbus_types.nbus_command_type import *
@@ -12,6 +10,7 @@ from nbus_hal.nbus_serial.serial_config import NBusSerialConfig
 from nbus_hal.nbus_generic_port import NBusPort, NBusDelay
 from nbus_types.nbus_address_type import NBusModuleAddress, NBusSensorAddress
 from nbus_hal.crc8 import crc8
+from nbus_types.nbus_defines import *
 
 
 def default_logger(*message: Any) -> None:
@@ -39,6 +38,7 @@ class NBusSerialPort(NBusPort):
         Constructor.
         :param config: configuration
         """
+        self._flush_delay = config.flush_delay
         self._port = serial.Serial(timeout=config.timeout)
         self._port.port = config.port_name
         self._port.parity = config.parity.value
@@ -52,16 +52,13 @@ class NBusSerialPort(NBusPort):
                                                 API Methods
     ================================================================================================================
     """
-
-    def get_port(self):
-        return self._port
-
     def change_configuration(self, config: NBusSerialConfig):
         """
         Change port configuration.
         :param config: configuration
         """
         self._port.timeout = config.timeout
+        self._flush_delay = config.flush_delay
         self._port.port = config.port_name
         self._port.parity = config.parity.value
         self._port.baudrate = config.baud.value
@@ -74,26 +71,38 @@ class NBusSerialPort(NBusPort):
         """
         self._port.open()
         self._port.flush()
-        self._log('i', 0, 'Open communication port')
-
-    def flush(self, inter_delay) -> None:
-        while self._port.in_waiting:
-            self._port.reset_input_buffer()
-            time.sleep(inter_delay)
-
-    def try_read(self):
-        if self._port.in_waiting > 0:
-            return self._port.read()
-        else:
-            return bytearray()
+        self._log("INFO", "  0", "\tOpen communication port")
 
     def close(self) -> None:
         """
         Close port.
         """
-        self._log('i', 0, 'Close communication port')
+        self._log("INFO", "  0", "\tClose communication port")
         self._port.close()
 
+    def flush(self) -> None:
+        """
+        Flush port with periodic check.
+        """
+        while self._port.in_waiting:
+            self._log("INFO", "  0", "\tFlush communication port")
+            self._port.reset_input_buffer()
+            self._port.reset_output_buffer()
+            time.sleep(self._flush_delay)
+
+    def try_read(self) -> bytes:
+        """
+        Try reading from port.
+
+        :return: bytes
+        """
+        if self._port.in_waiting > 0:
+            data = self._port.read()
+            self._log("DATA", f"{len(data):3}", "\tARS>", list(data))
+            return data
+        else:
+            return bytes()
+
     def is_connected(self) -> bool:
         """
         Return connection status.
@@ -110,7 +119,7 @@ class NBusSerialPort(NBusPort):
 
     def request_bridge(self, command: NBusCommand, data: bytearray, long_answer: NBusDelay = 0.0):
         """
-        Make broadcast request to the nbus bridge module.
+        Make bridge request.
         :param command: command id
         :param data: command data to send
              :param long_answer: delay in s for longer answer
@@ -119,13 +128,13 @@ class NBusSerialPort(NBusPort):
 
     def send_bridge(self, command: NBusCommand, data: bytearray):
         """
-        Make broadcast request to the nbus bridge module.
+        Make bridge request without waiting for response.
         :param command: command id
         :param data: command data to send
              :param long_answer: delay in s for longer answer
         """
         request = self._create_packet(bytearray([0, NBUS_BROADCAST_ADDR, NBUS_BRIDGE_ADDR, command.value]), data)
-        self._log("\tBRQ>", list(request))
+        self._log("DATA", f"{request[0]:3}", "\tARQ>", list(request[1:]))
         self._port.write(request)  # send message
 
     def request_broadcast(self, command: NBusCommand, data: bytearray) -> None:
@@ -135,7 +144,7 @@ class NBusSerialPort(NBusPort):
         :param data: command data to send
         """
         request = self._create_packet(bytearray([0, NBUS_BROADCAST_ADDR, NBUS_BRIDGE_ADDR, command.value]), data)
-        self._log("\tBRQ>", list(request))
+        self._log("DATA", f"{request[0]:3}", "\tARQ>", list(request[1:]))
         self._port.write(request)  # send message
 
     def request_module(self, module_addr: NBusModuleAddress, command: NBusCommand, data: bytearray,
@@ -181,7 +190,7 @@ class NBusSerialPort(NBusPort):
         :return: response length | response
         """
         request = self._create_packet(bytearray([0, module, sensor, command]), data)  # create request
-        self._log('d', sensor, "\tRQ>", list(request))  # log request
+        self._log("DATA", f"{request[0]:3}", "\tRQ>", list(request[1:]))  # log request
 
         counter = 0  # err. trials
 
@@ -242,14 +251,14 @@ class NBusSerialPort(NBusPort):
         if response[NBUS_CRC_ADDR] != crc8(response[:NBUS_CRC_ADDR]):
             raise NBusErrorNetwork(NBusErrorNetworkType.DAMAGED_MESSAGE)
 
-        self._log('d', 0, "\tRS>", [response_l] + list(response))   # log response
+        self._log("DATA", f"{response_l:3}", "\tRS>", list(response))   # log response
 
         # check for node error
         if response[NBUS_FC_ADDR] & NBUS_ERR_BIT:
             raise NBusErrorNode(NBusErrorNodeType(response[NBUS_DATA0_ADDR]))
 
         # return payload length + payload
-        return bytearray([response_l - NBUS_RX_META]) + bytearray(response[NBUS_DATA0_ADDR:NBUS_CRC_ADDR])
+        return bytearray([response_l - NBUS_RX_META_SIZE]) + bytearray(response[NBUS_DATA0_ADDR:NBUS_CRC_ADDR])
 
     def _log(self, *message: Any) -> None:
         """

BIN
nbus_types/__pycache__/nbus_defines.cpython-313.pyc


BIN
nbus_types/__pycache__/nbus_info_type.cpython-313.pyc


BIN
nbus_types/__pycache__/nbus_slave_meta_type.cpython-313.pyc


+ 24 - 16
nbus_types/nbus_defines.py

@@ -1,21 +1,29 @@
-from typing import Final
-
-NBUS_RX_META: Final    =  4
-
-NBUS_BROADCAST_ADDR: Final =  0x00
-NBUS_BRIDGE_ADDR: Final    =  0xFF
+"""
+Constants defining the NBUS protocol layout and addressing rules.
+These values are treated as immutable configuration parameters.
+"""
 
+from typing import Final
 
+# --- General sizes ---
+NBUS_RX_META_SIZE: Final = 4
+NBUS_FMT_SIZE: Final = 4
+NBUS_TS_SIZE: Final = 4
+NBUS_CRC_SIZE: Final = 1
+NBUS_MA_SIZE: Final = 1
+NBUS_SA_SIZE: Final = 1
 
-NBUS_FMT_SIZE: Final   =  4
-NBUS_TS_SIZE: Final    =  4
-NBUS_CRC_SIZE: Final   =  1
-NBUS_MA_SIZE: Final    =  1
-NBUS_SA_SIZE: Final    =  1
+# --- Special addresses ---
+NBUS_BROADCAST_ADDR: Final = 0x00
+NBUS_BRIDGE_ADDR: Final = 0xFF
 
-NBUS_MA_ADDR: Final    =  0
-NBUS_SA_ADDR: Final    =  1
-NBUS_FC_ADDR: Final    =  2
-NBUS_DATA0_ADDR: Final =  3
-NBUS_CRC_ADDR: Final   = -1
+# --- Packet Index Positions ---
+NBUS_MA_ADDR: Final = 0
+NBUS_SA_ADDR: Final = 1
+NBUS_FC_ADDR: Final = 2
+NBUS_DATA0_ADDR: Final = 3
+NBUS_CRC_ADDR: Final = -1
 
+# --- Bridge header ---
+NBUS_BRIDGE_DATA_HDR: Final = bytearray([0x00] + [0xFF] * 8 + [0x00])
+NBUS_BRIDGE_DATA_HDR_SIZE: Final = len(NBUS_BRIDGE_DATA_HDR)

BIN
nbus_types/nbus_exceptions/__pycache__/nbus_api_exception.cpython-313.pyc


+ 1 - 0
nbus_types/nbus_exceptions/nbus_api_exception.py

@@ -13,3 +13,4 @@ class NBusErrorAPIType(Enum):
     Enum class for NBusErrorAPI identification.
     """
     FORMAT_NOT_LOADED = 0x201
+    SLAVES_NOT_LOADED = 0x202

+ 18 - 5
nbus_types/nbus_info_type.py

@@ -7,16 +7,16 @@ import numpy as np
 
 @beartype
 @dataclass(frozen=True)
-class NBusInfo:
+class NBusModuleInfo:
     """
-    Class for data format.
+    Class for module info.
 
     :ivar module_name: name of module
     :ivar module_type: type of module
     :ivar uuid: unique ID, generated by STM
-    :ivar hw: firmware version. MAJOR.MINOR
-    :ivar fw: memory ID number
-    :ivar memory_id: sensor count
+    :ivar hw: hardware version. MAJOR.MINOR
+    :ivar fw: firmware version. MAJOR.MINOR
+    :ivar memory_id: memory ID number
     :ivar read_only_sensors: count of read-only sensors
     :ivar read_write_sensors: count of read-write sensors
     """
@@ -28,3 +28,16 @@ class NBusInfo:
     memory_id: Annotated[int, Is[lambda value: 0 <= value <= np.iinfo(np.uint64).max]]
     read_only_sensors: Annotated[int, Is[lambda value: 0 <= value <= 31]]
     read_write_sensors: Annotated[int, Is[lambda value: 0 <= value <= 31]]
+
+@beartype
+@dataclass(frozen=True)
+class NBusBridgeInfo:
+    """
+    Class for bridge info.
+    :ivar fw: firmware version. MAJOR.MINOR
+    :ivar hw: hardware version. MAJOR.MINOR
+    :ivar hw_family: hardware family (ESP, STM, ...)
+    """
+    fw: Annotated[str, Is[lambda value: len(value) == 3]]
+    hw_family: Annotated[str, Is[lambda value: len(value) == 3]]
+    hw: Annotated[str, Is[lambda value: len(value) == 3]]

+ 21 - 0
nbus_types/nbus_slave_meta_type.py

@@ -0,0 +1,21 @@
+from typing import Annotated
+from beartype import beartype
+from beartype.vale import Is
+from dataclasses import dataclass
+from nbus_api.nbus_module_slave import NBusSlaveModule
+from nbus_types.nbus_sensor_count_type import NBusSensorCount
+
+
+@beartype
+@dataclass
+class NBusSlaveMeta:
+    """
+    Helper Class for slave module meta information used in bridge.
+
+    :ivar module_obj: module object
+    :ivar device_count: number of module devices
+    :ivar packet_size: size of default data packet
+    """
+    module_obj: NBusSlaveModule
+    device_count: NBusSensorCount
+    packet_size: Annotated[int, Is[lambda value: value >= 0]]

+ 0 - 89
test.py

@@ -1,89 +0,0 @@
-from nbus_hal.nbus_serial.serial_port import *
-from nbus_api.nbus_module_slave import NBusSlaveModule
-from nbus_hal.nbus_serial.serial_config import *
-from nbus_api.nbus_sensor import NBusSensor
-from nbus_types.nbus_parameter_type import NBusParameterID
-
-# example config
-config = {
-    "port_name": "COM4",
-    "baud": NBusBaudrate.SPEED_921600,
-    "parity": NBusParity.NONE,
-    "timeout": 0.4,
-    "request_attempts": 1,
-    "enable_log": False
-}
-
-if __name__ == "__main__":
-    # create port
-    port = NBusSerialPort(NBusSerialConfig(**config))
-
-    # create module
-    module = NBusSlaveModule(port, 5)
-
-    # assemble module
-    module.add_sensor(NBusSensor(1))
-    module.add_sensor(NBusSensor(2))
-    module.add_sensor(NBusSensor(3))
-    module.add_sensor(NBusSensor(4))
-    module.add_sensor(NBusSensor(5))
-    module.add_sensor(NBusSensor(129))
-    module.add_sensor(NBusSensor(130))
-
-    # get sensors
-    accelerometer = module.get_sensor(1)
-    led = module.get_sensor(129)
-
-    # test module get
-    print("<<TEST MODULE GET>>")
-    print("CMD GET ECHO: ", module.cmd_get_echo(bytearray("Hello world!", "ascii")))
-    print("CMD GET PARAM SAMPLERATE: ", module.cmd_get_param(NBusParameterID.PARAM_SAMPLERATE))
-    print("CMD GET ALL PARAMS: ", module.cmd_get_all_params())
-    print("CMD GET SENSOR COUNT: ", module.cmd_get_sensor_cnt())
-    print("CMD GET SENSOR TYPE: ", module.cmd_get_sensor_type())
-    print("CMD GET INFO: ", module.cmd_get_info())
-    print("CMD GET SENSOR FORMAT: ", module.cmd_get_format())
-    print("CMD GET SENSOR DATA: ", module.cmd_get_data())
-
-    # test module set
-    print("\n<<TEST MODULE SET>>")
-   # print("CMD SET STOP: ", module.cmd_set_module_stop())
-   # print("CMD SET START: ", module.cmd_set_module_start())
-
-    print("CMD SET PARAM SAMPLERATE: ", module.cmd_set_param(NBusParameterID.PARAM_SAMPLERATE, 12345))
-    print("CMD GET PARAM SAMPLERATE: ", module.cmd_get_param(NBusParameterID.PARAM_SAMPLERATE))
-
-    params = {NBusParameterID.PARAM_RANGE: 12, NBusParameterID.PARAM_RANGE0: 4234}
-    print("CMD SET MULTI PARAMS: ", module.cmd_set_multi_params(params))
-    print("CMD GET ALL PARAMS: ", module.cmd_get_all_params())
-
-    print("CMD SET CALIBRATE: ", module.cmd_set_calibrate())
-
-    data = {129: [1], 130: [10, -32]}
-    print("CMD SET DATA: ", module.cmd_set_data(data))
-    print("CMD GET SENSOR DATA: ", module.cmd_get_data())
-
-    # test sensor get
-    print("\n<<TEST SENSOR GET>>")
-    print("CMD GET PARAM SAMPLERATE: ", accelerometer.cmd_get_param(NBusParameterID.PARAM_SAMPLERATE))
-    print("CMD GET ALL PARAMS: ", accelerometer.cmd_get_all_params())
-    print("CMD GET SENSOR TYPE: ", accelerometer.cmd_get_sensor_type())
-    print("CMD GET SENSOR FORMAT: ", accelerometer.cmd_get_format())
-    print("CMD GET SENSOR DATA: ", accelerometer.cmd_get_data())
-
-    # test sensor set
-    print("\n<<TEST SENSOR SET>>")
-    print("CMD SET FIND: ", led.cmd_set_find(True))
-    print("CMD SET PARAM SAMPLERATE: ", led.cmd_set_param(NBusParameterID.PARAM_SAMPLERATE, 23456))
-    print("CMD GET PARAM SAMPLERATE: ", led.cmd_get_param(NBusParameterID.PARAM_SAMPLERATE))
-
-    params = {NBusParameterID.PARAM_RANGE: 12, NBusParameterID.PARAM_RANGE0: 4234}
-    print("CMD SET MULTI PARAMS: ", led.cmd_set_multi_params(params))
-    print("CMD GET ALL PARAMS: ", led.cmd_get_all_params())
-
-    print("CMD SET CALIBRATE: ", led.cmd_set_calibrate())
-
-    print("CMD SET DATA: ", led.cmd_set_data([1]))
-    print("CMD GET SENSOR DATA: ", led.cmd_get_data())
-
-

Vissa filer visades inte eftersom för många filer har ändrats