From e5ec9e292d2dc0bdf98553a6c010fa82259238d3 Mon Sep 17 00:00:00 2001 From: viktec <48328088+viktec@users.noreply.github.com> Date: Thu, 4 Mar 2021 16:32:28 +0100 Subject: [PATCH 1/5] Update README.md --- README.md | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/README.md b/README.md index c7fd70a..ec9524d 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,49 @@ # deviceMap LibreNMS plugin to locate indoor devices + +# dataJson +The data.json file is an example of a structure for creating an indoor building. The data should be a collection of GeoJSON features (or an array of GeoJSON features). With the standard configuration, each feature must have a "level" property attribute, which can be an integer, a string, or an array of one (or both). + +To viemore levels, you will need to specify level 0, level 1, etc .. + +it is also possible to insert multiple data.json files and therefore multiple data structures in order to control multiple buildings. + +{ + "type": "FeatureCollection", + "features": [ + { + "properties": { + "tags": { + "buildingpart": "room", + ........ + }, + "relations": [ + { + "role": "buildingpart", + "rel": "....", + "reltags":{ + "height": "4", + "level": "0", + "type": "level" + } + } + ], + "meta": {} + }, + "geometry": { + "type": "Polygon", + "coordinates": ..... + } + }, + etc... + ] +} + + +## JOSM + +To create the map use an editor such as JOSM. This will be used to create a data.json file with the structure of a building. + +## Update + +New updates and new features soon.. 🚀 From c062f6b08a197cbaa35909b1555e7e5576b36bad Mon Sep 17 00:00:00 2001 From: viktec <48328088+viktec@users.noreply.github.com> Date: Thu, 4 Mar 2021 16:40:17 +0100 Subject: [PATCH 2/5] Update README.md update readme --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ec9524d..0f87b82 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,16 @@ # deviceMap LibreNMS plugin to locate indoor devices -# dataJson +## data.json The data.json file is an example of a structure for creating an indoor building. The data should be a collection of GeoJSON features (or an array of GeoJSON features). With the standard configuration, each feature must have a "level" property attribute, which can be an integer, a string, or an array of one (or both). To viemore levels, you will need to specify level 0, level 1, etc .. it is also possible to insert multiple data.json files and therefore multiple data structures in order to control multiple buildings. +``` { - "type": "FeatureCollection", +"type": "FeatureCollection", "features": [ { "properties": { @@ -38,8 +39,7 @@ it is also possible to insert multiple data.json files and therefore multiple da etc... ] } - - +``` ## JOSM To create the map use an editor such as JOSM. This will be used to create a data.json file with the structure of a building. From fca8db0aeec35c5ca5285c87e13ece83144f7e28 Mon Sep 17 00:00:00 2001 From: viktec <48328088+viktec@users.noreply.github.com> Date: Thu, 4 Mar 2021 16:44:51 +0100 Subject: [PATCH 3/5] Update README.md update readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 0f87b82..26af372 100644 --- a/README.md +++ b/README.md @@ -47,3 +47,5 @@ To create the map use an editor such as JOSM. This will be used to create a data ## Update New updates and new features soon.. 🚀 + +Create by Vittorio Russo and supervisor Antonio della Selva (Università degli studi di Urbino Carlo Bo) From 6908df9a0b0642db97bea405afdf34deaebf7f22 Mon Sep 17 00:00:00 2001 From: viktec Date: Thu, 8 May 2025 18:33:45 +0200 Subject: [PATCH 4/5] =?UTF-8?q?=F0=9F=9A=80=20Aggiorna=20plugin=20deviceMa?= =?UTF-8?q?p=20con=20Map=20e=20API=20token=20da=20config.php.example?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.php.example | 5 + deviceMap.inc.html | 327 ++++++++++++++++++++++++----------------- deviceMap.php | 17 ++- icone/port-down.ico | Bin 0 -> 27582 bytes icone/port-up.ico | Bin 0 -> 34291 bytes icone/router-green.ico | Bin 0 -> 397 bytes icone/router-red.ico | Bin 0 -> 404 bytes icone/switch-off.ico | Bin 0 -> 377 bytes icone/switch-on.ico | Bin 0 -> 411 bytes 9 files changed, 214 insertions(+), 135 deletions(-) create mode 100644 config.php.example create mode 100644 icone/port-down.ico create mode 100644 icone/port-up.ico create mode 100644 icone/router-green.ico create mode 100644 icone/router-red.ico create mode 100644 icone/switch-off.ico create mode 100644 icone/switch-on.ico diff --git a/config.php.example b/config.php.example new file mode 100644 index 0000000..bd86f14 --- /dev/null +++ b/config.php.example @@ -0,0 +1,5 @@ + 'YOUR_API_TOKEN_HERE' +]; + diff --git a/deviceMap.inc.html b/deviceMap.inc.html index 9ff6868..2140060 100644 --- a/deviceMap.inc.html +++ b/deviceMap.inc.html @@ -1,172 +1,233 @@ - - - - - - - - -
-
-
- + + + + -
-
-
- + \ No newline at end of file diff --git a/deviceMap.php b/deviceMap.php index ee81d15..ba8cef5 100644 --- a/deviceMap.php +++ b/deviceMap.php @@ -25,7 +25,7 @@ namespace LibreNMS\Plugins; -class deviceMap +class Map { public function menu() { @@ -39,7 +39,20 @@ public function device_overview_container($device) echo '
' . get_class() . ' Plugin
'; echo ' Plugin Mappatura
'; - include 'Map.inc.html'; + + $config = include __DIR__ . '/config.php'; + $token = $config['api_token']; + + echo ""; + + echo ""; + + include 'Map.inc.html'; + echo '
'; } diff --git a/icone/port-down.ico b/icone/port-down.ico new file mode 100644 index 0000000000000000000000000000000000000000..ae5b0ed97727c9ab3815faf110437f9fef894b48 GIT binary patch literal 27582 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 Kq^l)OzyA**g2iS4 literal 0 HcmV?d00001 diff --git a/icone/port-up.ico b/icone/port-up.ico new file mode 100644 index 0000000000000000000000000000000000000000..25d76305c53db26ac6cfa2a9c1bcfe16e4f5b3a4 GIT binary patch literal 34291 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 literal 0 HcmV?d00001 diff --git a/icone/router-green.ico b/icone/router-green.ico new file mode 100644 index 0000000000000000000000000000000000000000..0bf660218caf4e7334ca1013b4dd6ac4eec7f3ac GIT binary patch literal 397 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DinK$vl=HlH+5gOaCm zSVtUs-fHa}(Rk-~$DCI2|BQPNo+&Bgn>GJ^sv&dj8_uW=4VtD^J0c&Ncsj1L5xS;e ztf-fLy(He_x9OiYLH@i0%@(f>?_FKa7CQgY8770Cu(fAZ8gdISzWv9#&1x@e;jL+H zD^?#VW&fn7XLaq0tc6}&QP;<%^}iQ#Kb3U~+Q)q`=yaKW-@4KVrV2W@ZL>p-1ztMb o)ADEU3aQ-BT>0`Iv&A|2oUkZ^UB3T;!N$Pg>FVdQ&MBb@0JmPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf0VzpDK~z{r?Uuc2 z0znjocPu51V5#Zy5VmQ38{fdjG7n%Q#1}{kD~pu&0V~V33#8CssnZ397Jy88O5y2Dcw9>08qfg#U;(cu_6%VO+SiY*9S;5j>cXdM?HDvYo=c+#Ua)7V!xwxIql3G3 zn9a4IiH?LHP*2D;p1Aglq+i1^ym9aYH06xn@s?e6sQeVCmH^G@RoYY%@C`2A?iKiI z{}xe=}1*5ZWEGaPi%))zH^u8SWLWvm yofFSk=?cmoh*cnK6{iAus<_{QtaR@Q1i=Px;$Og-)`Kbl0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0S-w-K~z{r?UY>( zgCGpY!JB|S;5>?_@pXqCxA0MxvcmW%Y%!AUfnU;KQ*7(MjjYq@bUMF=ntl z%#)5_Rw{eX^QrSQ7Agk$l~S1kp73%@OB?WdlsW^+O3QOLM*fJ>**G7PTpjCl{s_jN XiIiT~pq5BJ00000NkvXXu0mjfR%xAm literal 0 HcmV?d00001 diff --git a/icone/switch-on.ico b/icone/switch-on.ico new file mode 100644 index 0000000000000000000000000000000000000000..a96ad96e745178be4449161de528cdacf461a60b GIT binary patch literal 411 zcmV;M0c8G(P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0We8KK~z{r?UX?d zf-n$83nb_@C>xQZa2mGmy$`q1M1fn7u#oD&6k0naMj*QA+f0Yi&S!oLb2uCh$FK1) z8l-6|nx?@_$MZZUguqOPs?~LE?c-zA$g+%V?)$^fspfMv&N;32g`q6Z^HWh2=O75! z{r148%ZT_8sYw_QqA2Rs)>WUbhE0T)Y}H&si5M5Mxn%C3f!|%%VW#s*O%-4q!cPtw z)nKj$F9VP@j4Y00QQm3gYXUZq6R?eK3DR=_*2!^?*@R)imXNk$9DM?$a$5v!H6Bm< zsJ98$*Gr4p#3+DLr-}m9+*VWfc^7<0cIN*u_MgkDq_5q#KvOvdm`oUktZiHR5Zdni z5>yM|2VUx9M4#ywC*b`K%lyLq#%6$L;002ovPDHLk FV1i)yuFU`d literal 0 HcmV?d00001 From 5b0e3ed1ac25517b363ff441ebcb4bc32914a132 Mon Sep 17 00:00:00 2001 From: viktec <48328088+viktec@users.noreply.github.com> Date: Thu, 8 May 2025 18:37:25 +0200 Subject: [PATCH 5/5] Update README.md update Readme --- README.md | 156 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 119 insertions(+), 37 deletions(-) diff --git a/README.md b/README.md index 26af372..ce4b436 100644 --- a/README.md +++ b/README.md @@ -1,51 +1,133 @@ # deviceMap -LibreNMS plugin to locate indoor devices -## data.json -The data.json file is an example of a structure for creating an indoor building. The data should be a collection of GeoJSON features (or an array of GeoJSON features). With the standard configuration, each feature must have a "level" property attribute, which can be an integer, a string, or an array of one (or both). +LibreNMS plugin to locate indoor devices using LeafletJS and multi-level floor mapping. -To viemore levels, you will need to specify level 0, level 1, etc .. +--- -it is also possible to insert multiple data.json files and therefore multiple data structures in order to control multiple buildings. +## 🇮🇹 Descrizione +**deviceMap** è un plugin per LibreNMS che consente di: + +- Visualizzare i dispositivi all'interno di edifici su una mappa indoor +- Supportare più piani (es. livello 0, 1, 2...) +- Mostrare lo stato dei dispositivi (es. Switch e Router ON/OFF) +- Mostrare lo stato delle **singole porte** (UP/DOWN) +- Gestire icone dinamiche in base allo zoom + +--- + +## 🇬🇧 Description + +**deviceMap** is a LibreNMS plugin to: + +- Display devices inside buildings on an indoor map +- Support multiple floors (e.g. level 0, 1, 2...) +- Show device status (Switch/Router ON/OFF) +- Show **individual port status** (UP/DOWN) +- Use dynamic icons depending on zoom level + +--- + +## 🛠️ Installazione / Installation + +1. Clona il repository: + +```bash +cd /opt/librenms/html/plugins/ +git clone https://github.com/viktec/deviceMap.git deviceMap ``` + +2. Rinomina il file `config.php.example` in `config.php`: + +```bash +cp deviceMap/config.php.example deviceMap/config.php +``` + +3. Inserisci il tuo API token di LibreNMS nel file `config.php`: + +```php + 'INSERISCI_IL_TUO_TOKEN' +]; +``` + +--- + +## 🗂️ File `data.json` + +### 🇮🇹 + +Il file `data.json` è un esempio di struttura GeoJSON per la planimetria di un edificio. +Ogni oggetto deve contenere una proprietà `level` all'interno di `reltags` per rappresentare il piano. + +Puoi usare più file `data.json` per gestire più edifici. + +### 🇬🇧 + +The `data.json` file is an example of a GeoJSON structure for a building floorplan. +Each object must contain a `level` property inside `reltags` to represent the floor. + +You can use multiple `data.json` files to represent multiple buildings. + +#### Esempio / Example: +```json { -"type": "FeatureCollection", - "features": [ - { - "properties": { - "tags": { - "buildingpart": "room", - ........ - }, - "relations": [ - { - "role": "buildingpart", - "rel": "....", - "reltags":{ - "height": "4", - "level": "0", - "type": "level" - } - } - ], - "meta": {} - }, - "geometry": { - "type": "Polygon", - "coordinates": ..... - } + "type": "FeatureCollection", + "features": [ + { + "properties": { + "tags": { + "buildingpart": "room" }, - etc... - ] + "relations": [ + { + "role": "buildingpart", + "rel": "....", + "reltags": { + "height": "4", + "level": "0", + "type": "level" + } + } + ], + "meta": {} + }, + "geometry": { + "type": "Polygon", + "coordinates": [...] + } + } + ] } ``` -## JOSM -To create the map use an editor such as JOSM. This will be used to create a data.json file with the structure of a building. +--- + +## 🧭 Creazione della mappa (JOSM) + +Puoi generare il file `data.json` usando l’editor [**JOSM**](https://josm.openstreetmap.de/), importando livelli e planimetrie da disegno o da OpenStreetMap. + +--- + +## 📦 Contenuto del plugin + +- `deviceMap.php` – codice principale PHP +- `deviceMap.inc.html` – rendering HTML e JavaScript con Leaflet +- `leaflet-indoor.js`, `leaflet-src.js` – librerie di mappatura +- `icone/` – icone personalizzate per dispositivi e porte +- `config.php.example` – configurazione API +- `data.json` – esempio planimetria + +--- + +## ✍️ Autori + +Creato da **Vittorio Russo** +Supervisione: **Antonio Della Selva** – Università degli Studi di Urbino “Carlo Bo” -## Update +--- -New updates and new features soon.. 🚀 +## 🚀 Aggiornamenti -Create by Vittorio Russo and supervisor Antonio della Selva (Università degli studi di Urbino Carlo Bo) +Nuove funzionalità in arrivo... Stay tuned! 😉