panorama.yaml 32 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078
  1. # yaml-language-server: $schema=https://schemas.sourcemeta.com/openapi/v3.1/schema/2025-09-15.json
  2. openapi: 3.1.0
  3. info:
  4. title: Edison Next Panorama - Integration API
  5. description: |-
  6. API standard di integrazione di *Edison Next Panorama* con sistemi esterni
  7. contact:
  8. name: API Support
  9. email: support@panorama.edisonnext.it
  10. version: 0.9.8
  11. license:
  12. name: © 2025 - 2030 Copyright Edison Next Spa. All rights reserved
  13. url: https://edisonnext.it
  14. externalDocs:
  15. description: Edison Next Panorama - Specifiche di Integrazione v.1.0
  16. url: https://panorama.edisonnext.it/
  17. # security di default (richiesta anche per accedere ai dati in lettura)
  18. security:
  19. - panorama_consumer_api_key: []
  20. #servers:
  21. # - url: https://panorama.edisonnext.it/api/v1
  22. # description: Main (production) API server
  23. # - url: <Here staging API server>
  24. # description: Staging API server
  25. # - url: <Here development API server>
  26. # description: Development API server
  27. tags:
  28. - name: Data Source
  29. description: operations for data sources
  30. - name: Type
  31. description: operations for data types
  32. - name: Entity
  33. description: operations to browse and manage entities
  34. - name: Device
  35. description: Operations about Devices
  36. paths:
  37. /type:
  38. get:
  39. summary: Restituisce i Tipi di Entità definiti
  40. tags: [Type]
  41. operationId: getTypes
  42. responses:
  43. '200':
  44. description: successful operation
  45. content:
  46. application/json:
  47. schema:
  48. type: array
  49. items:
  50. $ref: '#/components/schemas/Type'
  51. post:
  52. summary: Crea un nuovo Tipo di Entità (admin only)
  53. tags: [Type]
  54. security:
  55. - panorama_administrator_api_key: []
  56. requestBody:
  57. required: true
  58. content:
  59. application/json:
  60. schema:
  61. $ref: '#/components/schemas/Type'
  62. responses:
  63. '201':
  64. description: Tipo creato
  65. '422':
  66. description: Tipo non valido
  67. /type/{id}:
  68. get:
  69. summary: Restituisce un singolo Tipo di Entità
  70. operationId: getType
  71. tags: [Type]
  72. parameters:
  73. - in: path
  74. name: id
  75. required: true
  76. schema:
  77. type: string
  78. responses:
  79. '200':
  80. description: Tipo trovato
  81. content:
  82. application/json:
  83. schema:
  84. $ref: '#/components/schemas/Type'
  85. '404':
  86. description: Tipo non trovato
  87. put:
  88. summary: Modifica un Tipo esistente (admin only)
  89. tags: [Type]
  90. security:
  91. - panorama_administrator_api_key: []
  92. parameters:
  93. - in: path
  94. name: id
  95. required: true
  96. schema:
  97. type: string
  98. requestBody:
  99. required: true
  100. content:
  101. application/json:
  102. schema:
  103. $ref: '#/components/schemas/Type'
  104. responses:
  105. '200':
  106. description: Tipo aggiornato
  107. '404':
  108. description: Tipo non trovato
  109. '422':
  110. description: Tipo non valido
  111. delete:
  112. summary: Elimina un Tipo (senza istanze di elementi) esistente (admin only)
  113. tags: [Type]
  114. security:
  115. - panorama_administrator_api_key: []
  116. parameters:
  117. - in: path
  118. name: id
  119. required: true
  120. schema:
  121. type: string
  122. responses:
  123. '204':
  124. description: Tipo eliminato
  125. '404':
  126. description: Tipo non trovato
  127. /source:
  128. get:
  129. summary: Restituisce le fonti dati disponibili
  130. tags: [Data Source]
  131. responses:
  132. '200':
  133. description: successful operation
  134. content:
  135. application/json:
  136. schema:
  137. type: array
  138. items:
  139. $ref: '#/components/schemas/Source'
  140. post:
  141. summary: Aggiunge una Fonte Dati (admin only)
  142. tags: [Data Source]
  143. security:
  144. - panorama_administrator_api_key: []
  145. requestBody:
  146. required: true
  147. content:
  148. application/json:
  149. schema:
  150. $ref: '#/components/schemas/Source'
  151. responses:
  152. '201':
  153. description: Fonte Dati creata
  154. '422':
  155. description: Fonte Dati non valida
  156. /source/{id}:
  157. put:
  158. summary: Modifica una sorgente dati esistente (admin only)
  159. tags: [Data Source]
  160. security:
  161. - panorama_administrator_api_key: []
  162. parameters:
  163. - in: path
  164. name: id
  165. required: true
  166. schema:
  167. type: string
  168. requestBody:
  169. required: true
  170. content:
  171. application/json:
  172. schema:
  173. $ref: '#/components/schemas/Source'
  174. responses:
  175. '200':
  176. description: Data Source aggiornata
  177. '404':
  178. description: Data Source non trovata
  179. '422':
  180. description: Data Source non valida
  181. delete:
  182. summary: Elimina una sorgente dati (vuota) esistente (admin only)
  183. tags: [Data Source]
  184. security:
  185. - panorama_administrator_api_key: []
  186. parameters:
  187. - in: path
  188. name: id
  189. required: true
  190. schema:
  191. type: string
  192. responses:
  193. '204':
  194. description: Sorgente Dati eliminata
  195. /terminology:
  196. get:
  197. summary: Restituisce le Nomenclature definite
  198. tags: [Type]
  199. operationId: getTerminologies
  200. responses:
  201. '200':
  202. description: successful operation
  203. content:
  204. application/json:
  205. schema:
  206. type: array
  207. items:
  208. $ref: '#/components/schemas/Terminology'
  209. post:
  210. summary: Crea una nuova Nomenclatura (admin only)
  211. tags: [Type]
  212. security:
  213. - panorama_administrator_api_key: []
  214. requestBody:
  215. required: true
  216. content:
  217. application/json:
  218. schema:
  219. $ref: '#/components/schemas/Terminology'
  220. responses:
  221. '201':
  222. description: Nomenclatura creata
  223. '422':
  224. description: Nomenclatura non valida
  225. /terminology/{id}:
  226. get:
  227. summary: Restituisce una singola Nomenclatura
  228. tags: [Type]
  229. parameters:
  230. - in: path
  231. name: id
  232. required: true
  233. schema:
  234. type: string
  235. responses:
  236. '200':
  237. description: Tipo trovato
  238. content:
  239. application/json:
  240. schema:
  241. $ref: '#/components/schemas/Type'
  242. '404':
  243. description: Nomenclatura non trovata
  244. put:
  245. summary: Modifica una Nomenclatura esistente (admin only)
  246. tags: [Type]
  247. security:
  248. - panorama_administrator_api_key: []
  249. parameters:
  250. - in: path
  251. name: id
  252. required: true
  253. schema:
  254. type: string
  255. requestBody:
  256. required: true
  257. content:
  258. application/json:
  259. schema:
  260. $ref: '#/components/schemas/Terminology'
  261. responses:
  262. '200':
  263. description: Nomenclatura aggiornata
  264. '404':
  265. description: Nomenclatura non trovata
  266. '422':
  267. description: Nomenclatura non valida
  268. delete:
  269. summary: Elimina una Nomenclatura (senza riferimenti in qualche tipo) esistente (admin only)
  270. tags: [Type]
  271. security:
  272. - panorama_administrator_api_key: []
  273. parameters:
  274. - in: path
  275. name: id
  276. required: true
  277. schema:
  278. type: string
  279. responses:
  280. '204':
  281. description: Nomenclatura eliminata
  282. '404':
  283. description: Nomenclatura non trovata
  284. /entity:
  285. get:
  286. summary: Ricerca di entità
  287. tags: [Entity]
  288. parameters:
  289. - name: type
  290. in: query
  291. description: Filter by entity type
  292. required: false
  293. explode: true
  294. schema:
  295. type: string
  296. - name: source
  297. in: query
  298. description: Filter by data source
  299. required: false
  300. explode: true
  301. schema:
  302. type: string
  303. - name: state
  304. in: query
  305. description: Filter by entity state
  306. required: false
  307. explode: true
  308. schema:
  309. type: string
  310. responses:
  311. '200':
  312. description: Lista di entità
  313. content:
  314. application/json:
  315. schema:
  316. type: array
  317. items:
  318. $ref: '#/components/schemas/Entity'
  319. post:
  320. summary: Crea una nuova entità
  321. tags: [Entity]
  322. security:
  323. - panorama_provider_api_key: []
  324. requestBody:
  325. required: true
  326. content:
  327. application/json:
  328. schema:
  329. $ref: '#/components/schemas/Entity'
  330. responses:
  331. '422':
  332. description: Entità non valida
  333. '201':
  334. description: Entità creata
  335. /entity/{id}:
  336. get:
  337. summary: Ottiene una singola entità
  338. operationId: getEntity
  339. tags: [Entity]
  340. parameters:
  341. - in: path
  342. name: id
  343. required: true
  344. schema:
  345. type: string
  346. responses:
  347. '200':
  348. description: Entità trovata
  349. content:
  350. application/json:
  351. schema:
  352. $ref: '#/components/schemas/Entity'
  353. '404':
  354. description: Entità non trovata
  355. put:
  356. summary: Modifica un'entità esistente (escluso lo stato)
  357. tags: [Entity]
  358. security:
  359. - panorama_provider_api_key: []
  360. parameters:
  361. - in: path
  362. name: id
  363. required: true
  364. schema:
  365. type: string
  366. requestBody:
  367. required: true
  368. content:
  369. application/json:
  370. schema:
  371. $ref: '#/components/schemas/Entity'
  372. responses:
  373. '200':
  374. description: Entità aggiornata
  375. '404':
  376. description: Entità non trovata
  377. '422':
  378. description: Entità non valida
  379. delete:
  380. summary: Elimina un'entità
  381. tags: [Entity]
  382. security:
  383. - panorama_provider_api_key: []
  384. parameters:
  385. - in: path
  386. name: id
  387. required: true
  388. schema:
  389. type: string
  390. responses:
  391. '204':
  392. description: Entità eliminata
  393. '404':
  394. description: Entità non trovata
  395. /entity/{id}/device:
  396. get:
  397. summary: Ottiene il device associato a un'entità
  398. operationId: getEntityDevice
  399. tags: [Entity]
  400. parameters:
  401. - in: path
  402. name: id
  403. required: true
  404. schema:
  405. type: string
  406. responses:
  407. '200':
  408. description: Device trovato
  409. content:
  410. application/json:
  411. schema:
  412. $ref: '#/components/schemas/Device'
  413. '404':
  414. description: Device associato a Entità non trovato
  415. /state/{id}:
  416. put:
  417. summary: Modifica lo stato di un'Entità
  418. tags: [Entity]
  419. security:
  420. - panorama_provider_api_key: []
  421. parameters:
  422. - in: path
  423. name: id
  424. required: true
  425. schema:
  426. type: string
  427. requestBody:
  428. required: true
  429. content:
  430. application/json:
  431. schema:
  432. type: string
  433. responses:
  434. '200':
  435. description: Stato Entità aggiornato
  436. '422':
  437. description: Stato Entità non valido
  438. '404':
  439. description: Entità non trovata
  440. /history/{id}:
  441. get:
  442. summary: Ottiene la storia delle variazioni di stato di un'Entità
  443. tags: [Entity]
  444. parameters:
  445. - in: path
  446. name: id
  447. description: l'ID dell'entità di cui ottenere la storia
  448. required: true
  449. schema:
  450. type: string
  451. responses:
  452. '200':
  453. description: Entità trovata
  454. content:
  455. application/json:
  456. schema:
  457. type: array
  458. items:
  459. type: object
  460. properties:
  461. timestamp:
  462. type: string
  463. format: date-time
  464. state:
  465. type: string
  466. examples: ['off', '22°C']
  467. '404':
  468. description: Entità non trovata
  469. /device:
  470. get:
  471. summary: Elenco di tutti i dispositivi
  472. tags: [Device]
  473. responses:
  474. '200':
  475. description: Lista di dispositivi
  476. content:
  477. application/json:
  478. schema:
  479. type: array
  480. items:
  481. $ref: '#/components/schemas/Device'
  482. /device/{id}:
  483. get:
  484. summary: Ottiene informazioni su un singolo dispositivo
  485. tags: [Device]
  486. parameters:
  487. - in: path
  488. name: id
  489. required: true
  490. schema:
  491. type: string
  492. responses:
  493. '200':
  494. description: Dispositivo trovato
  495. content:
  496. application/json:
  497. schema:
  498. $ref: '#/components/schemas/Device'
  499. '404':
  500. description: Dispositivo non trovato
  501. /device/{id}/measures:
  502. get:
  503. summary: Ottiene tutte le misure di un device
  504. tags: [Device]
  505. operationId: getMeasures
  506. parameters:
  507. - in: path
  508. name: id
  509. required: true
  510. schema:
  511. type: string
  512. - name: measurement_date_from
  513. in: query
  514. description: Filter by measurement date (from)
  515. required: false
  516. explode: true
  517. schema:
  518. type: string
  519. format: date-time
  520. - name: measurement_date_to
  521. in: query
  522. description: Filter by measurement date (to)
  523. required: false
  524. explode: true
  525. schema:
  526. type: string
  527. format: date-time
  528. responses:
  529. '200':
  530. description: Lista delle misure
  531. content:
  532. application/json:
  533. schema:
  534. type: array
  535. items:
  536. $ref: '#/components/schemas/Measure'
  537. /device/{id}/last:
  538. get:
  539. summary: Ottieni ultima misura da un POD
  540. tags: [Device]
  541. operationId: getMeasureByPod
  542. parameters:
  543. - name: id
  544. in: path
  545. required: true
  546. schema:
  547. type: string
  548. responses:
  549. '200':
  550. description: Misura trovata
  551. content:
  552. application/json:
  553. schema:
  554. $ref: '#/components/schemas/Measure'
  555. '404':
  556. description: Nessuna Misura trovata
  557. /measurementType/{id}:
  558. get:
  559. summary: Restituisce un singolo tipo di misura
  560. operationId: getMeasurementTypeById
  561. tags: [Device]
  562. parameters:
  563. - in: path
  564. name: id
  565. required: true
  566. schema:
  567. type: string
  568. responses:
  569. '200':
  570. description: Tipo di misura trovato
  571. content:
  572. application/json:
  573. schema:
  574. $ref: '#/components/schemas/MeasurementType'
  575. '404':
  576. description: Tipo di misura non trovato
  577. put:
  578. summary: Modifica un tipo di misura esistente (admin only)
  579. tags: [Device]
  580. security:
  581. - panorama_administrator_api_key: []
  582. parameters:
  583. - in: path
  584. name: id
  585. required: true
  586. schema:
  587. type: string
  588. requestBody:
  589. required: true
  590. content:
  591. application/json:
  592. schema:
  593. $ref: '#/components/schemas/MeasurementType'
  594. responses:
  595. '200':
  596. description: Tipo di misura aggiornato con successo
  597. '404':
  598. description: Tipo di misura non trovato
  599. '422':
  600. description: Tipo di misura non valido
  601. delete:
  602. summary: Elimina un tipo di misura esistente (admin only)
  603. tags: [Device]
  604. security:
  605. - panorama_administrator_api_key: []
  606. parameters:
  607. - in: path
  608. name: id
  609. required: true
  610. schema:
  611. type: string
  612. responses:
  613. '204':
  614. description: Tipo di misura eliminato con successo
  615. '404':
  616. description: Tipo di misura non trovato
  617. /measurementType:
  618. get:
  619. summary: Restituisce tutti i tipi di misura definiti
  620. tags: [Device]
  621. operationId: getMeasurementTypes
  622. responses:
  623. '200':
  624. description: Operazione completata con successo
  625. content:
  626. application/json:
  627. schema:
  628. type: array
  629. items:
  630. $ref: '#/components/schemas/MeasurementType'
  631. post:
  632. summary: Crea un nuovo tipo di misura (admin only)
  633. tags: [Device]
  634. security:
  635. - panorama_administrator_api_key: []
  636. requestBody:
  637. required: true
  638. content:
  639. application/json:
  640. schema:
  641. $ref: '#/components/schemas/MeasurementType'
  642. responses:
  643. '201':
  644. description: Tipo di misura creato con successo
  645. '422':
  646. description: Tipo di misura non valido
  647. components:
  648. schemas:
  649. Terminology:
  650. type: object
  651. description: Nomenclatura di riferimento per i Tipi di Entità. Può essere interna o esterna (schema.gov.it, UCUM, Google Knowledge Graph)
  652. required: [id, name, syntax]
  653. properties:
  654. id:
  655. type: string
  656. format: uri
  657. description: Identificativo univoco della Nomenclatura (terminology)
  658. examples:
  659. - http://dati.beniculturali.it/cis
  660. name:
  661. type: string
  662. description: Nome canonico della Nomenclatura
  663. description:
  664. type: string
  665. description: Descrizione della Nomenclatura
  666. documentation:
  667. type: string
  668. format: uri
  669. description: Link alla documentazione della Nomenclatura
  670. examples:
  671. - 'https://schema.gov.it/'
  672. subject:
  673. type: string
  674. description: Soggetto titolare del Tipo
  675. examples:
  676. - 'Ministero per i Beni e le Attività Culturali'
  677. uri:
  678. type: string
  679. format: uri
  680. description: URI autoritativa della Nomenclatura
  681. examples:
  682. - http://dati.beniculturali.it/cis
  683. Type:
  684. type: object
  685. description: Tipi di entità, comprensivi di riferimento al nomenclatore e definizione della struttura del payload specifico
  686. required: [id, name, syntax]
  687. properties:
  688. id:
  689. type: string
  690. format: uri
  691. description: Identificativo univoco del Tipo di Entità
  692. examples:
  693. - http://dati.beniculturali.it/cis/CulturalInstituteOrSite
  694. name:
  695. type: string
  696. description: Nome canonico del Tipo di Entità
  697. examples:
  698. - Istituti e Luoghi Della Cultura Italiani (musei, biblioteche, cinema, ecc)
  699. native:
  700. type: boolean
  701. description: Se il Tipo è nativo di piattaforma o importato
  702. readOnly: true
  703. default: false
  704. # stateType:
  705. # $ref: '#/components/schemas/State'
  706. syntax:
  707. type: string
  708. format: json
  709. description: Definizione (JSON-LD) della sintassi del Tipo di Entità
  710. examples:
  711. - {
  712. "@context": "https://json-ld.org/contexts/person.jsonld",
  713. "@id": "http://dbpedia.org/resource/John_Lennon",
  714. "name": "John Lennon",
  715. "born": "1940-10-09",
  716. "spouse": "http://dbpedia.org/resource/Cynthia_Lennon"
  717. }
  718. terminology:
  719. $ref: '#/components/schemas/Terminology'
  720. examples:
  721. - http://dati.beniculturali.it/cis
  722. uri:
  723. type: string
  724. format: uri
  725. description: URI autoritativo del Tipo (se non nativo)
  726. examples:
  727. - http://dati.beniculturali.it/cis/CulturalInstituteOrSite
  728. # State:
  729. # type: object
  730. # description: Definisce una possibile rappresentazione della situazione attuale nel «divenire» delle Entità di un certo Tipo
  731. # examples:
  732. # - Aperto o Chiuso
  733. # - Acceso o Spento
  734. # - (StatoSemaforo) Rosso, Giallo, Verde, Lampeggiante, Spento
  735. # - TemperaturaAmbiente - la temperatura attuale di un ambiente in gradi centigradi
  736. # properties:
  737. # id:
  738. # type: string
  739. # format: uri
  740. # description: ID univoco del Tipo di Stato
  741. # name:
  742. # type: string
  743. # description: Nome canonico del Tipo di Stato
  744. # uom:
  745. # type: string
  746. # description: Unità di misura (per grandezze scalari)
  747. # kind:
  748. # type: string
  749. # description: La tipologia elementare del Tipo di Stato (grandezza con unità di misura, stringa, eccetera)
  750. # examples:
  751. # - Enumeration
  752. # - Number
  753. # - String
  754. Entity:
  755. type: object
  756. description: rappresenta un generico oggetto urbano, è di uno specifico Tipo, afferisce a una Sorgente Dati, ha uno Stato dinamico, è dotato di proprietà type-specific, può avere un Device associato, è tipicamente geo-localizzabile
  757. required: [id, type, source, createdDate, updatedDate]
  758. properties:
  759. id:
  760. type: string
  761. format: uri
  762. description: ID univoco dell'Entità sulla piattaforma
  763. examples: [20738]
  764. name:
  765. type: string
  766. description: Nome canonico dell'Entità sulla piattaforma
  767. examples:
  768. - Antiquarium e Acquedotto romano di Trieste
  769. geometry:
  770. type: object
  771. description: Coordinate geografiche dell'Entità
  772. properties:
  773. lat:
  774. type: number
  775. description: Latitudine dell'Entità
  776. examples: [45.61809]
  777. long:
  778. type: number
  779. description: Longitudine dell'Entità
  780. examples: [13.827805]
  781. type:
  782. $ref: '#/components/schemas/Type'
  783. parent:
  784. $ref: '#/components/schemas/Entity'
  785. source:
  786. $ref: '#/components/schemas/Source'
  787. externalId:
  788. type: string
  789. description: Identificativo dell'Entità nel sistema sorgente
  790. examples:
  791. - http://dati.beniculturali.it/mibact/luoghi/resource/CISNameInTime/20738
  792. state:
  793. type: object
  794. description: Stato dell'entità
  795. properties:
  796. value:
  797. type: string
  798. # description: Valore dello stato (determinato da Type.stateType)
  799. description: Valore dello stato
  800. timestamp:
  801. type: string
  802. format: date-time
  803. description: Data/ora dello stato
  804. # validity:
  805. # type: object
  806. # properties:
  807. # from:
  808. # type: string
  809. # format: date-time
  810. # description: Inizio validità
  811. # to:
  812. # type: string
  813. # format: date-time
  814. # description: Fine validità
  815. payload:
  816. type: object
  817. description: Attributi personalizzati in base al tipo di entità
  818. additionalProperties: true
  819. examples:
  820. - { chiusura: 'Lunedì|Giovedì|Domenica' }
  821. device:
  822. description: Device associato all'entità
  823. $ref: '#/components/schemas/Device'
  824. createdDate:
  825. type: string
  826. format: date-time
  827. readOnly: true
  828. description: Data e ora di creazione dell'entità (timestamp ISO 8601)
  829. updatedDate:
  830. type: string
  831. format: date-time
  832. readOnly: true
  833. description: Data e ora dell'ultima modifica all'entità, escluse le modifiche di stato (timestamp ISO 8601)
  834. Source:
  835. type: object
  836. description: Fonte dati, interna o esterna, relativa a un soggetto alimentante
  837. properties:
  838. id:
  839. type: string
  840. format: uri
  841. description: ID univoco della Fonte Dati
  842. examples:
  843. - 'fvg_ispfor_tsgo'
  844. - 'fvg_ispfor'
  845. name:
  846. type: string
  847. description: Nome canonico della Fonte Dati
  848. examples:
  849. - 'Ministero per i Beni e le Attività Culturali'
  850. - 'Vincolo idrogeologico. L. 3267/1923 Comune di Trieste'
  851. - 'Ispettorati forestali'
  852. - 'Recupero energetico di biogas da digestione anaerobica o da discarica R1 (BDAD)'
  853. - 'Area golenale'
  854. - 'Copertura 2019 della banda larga in Italia secondo i criteri di rilevazione DESI 2020'
  855. internal:
  856. type: boolean
  857. description: Indica se la fonte dati è nativa della piattaforma o meno
  858. readOnly: true
  859. default: false
  860. organization:
  861. type: string
  862. description: Organizzazione di riferimento (ovvero soggetto alimentante) per la Fonte Dati
  863. examples:
  864. - 'Ministero per i Beni e le Attività Culturali'
  865. - 'Regione Autonoma Friuli Venezia Giulia - ISPETTORATO FORESTALE DI TRIESTE E GORIZIA'
  866. - 'RAFVG - DC Risorse agroalimentari, forestali e ittiche - Area foreste e territorio'
  867. - 'Regione Autonoma Friuli Venezia Giulia - SERVIZIO DISCIPLINA GESTIONE RIFIUTI E SITI INQUINATI'
  868. - 'Regione Autonoma Friuli Venezia Giulia - SERVIZIO GEOLOGICO'
  869. - 'Autorità per le Garanzie nelle Comunicazioni - AGCOM'
  870. processor:
  871. type: string
  872. description: Organizzazione che gestisce tecnicamente la Fonte Dati
  873. examples:
  874. - 'Insiel S.p.A.'
  875. - 'Regione autonoma Friuli Venezia Giulia'
  876. required: [id, name, organization, internal]
  877. Device:
  878. type: object
  879. description: Dispositivo IoT gestito nativamente in piattaforma
  880. required: [id, fk_firmware_id, fk_tenant_code, fk_device_service_id, created_date, updated_date]
  881. properties:
  882. id:
  883. type: string
  884. format: uri
  885. description: Identificativo univoco del dispositivo
  886. serial:
  887. type: string
  888. description: Seriale del dispositivo
  889. fk_firmware_id:
  890. type: string
  891. format: uri
  892. description: Identificativo univoco del firmware del dispositivo
  893. fk_tenant_code:
  894. type: string
  895. format: uri
  896. description: Identificativo univoco del tenant appartenente il dispositivo
  897. fk_device_service_id:
  898. type: string
  899. format: uri
  900. description: Identificativo univoco del servizio
  901. decrypt_key:
  902. type: string
  903. description: Chiave di decrypting del dispositivo
  904. auth_key:
  905. type: string
  906. description: Chiave di authentication del dispositivo
  907. logical_device_name:
  908. type: string
  909. description: Logical device name del dispositivo
  910. mac_address:
  911. type: string
  912. description: Mac address del dispositivo
  913. createdDate:
  914. type: string
  915. format: date-time
  916. description: Data di creazione
  917. updatedDate:
  918. type: string
  919. format: date-time
  920. description: Ultimo aggiornamento
  921. Measure:
  922. type: object
  923. properties:
  924. id:
  925. type: integer
  926. format: int64
  927. description: Identificazione univoca della misura
  928. serial:
  929. type: string
  930. description: Seriale del dispositivo
  931. #deviceId:
  932. # type: integer
  933. # format: int64
  934. # description: Foreign key to the related device
  935. # description: Device associato all'entità
  936. # $ref: '#/components/schemas/Device'
  937. measure_date:
  938. type: string
  939. format: date-time
  940. description: Data della misura
  941. measure_name:
  942. type: string
  943. description: Nome della misura
  944. unit_of_measurement:
  945. type: string
  946. description: Unità di misura della misura (e.g., °C, %, V)
  947. diagnostic:
  948. type: string
  949. description: Bitmask di diagnostica se disponibile
  950. type:
  951. type: string
  952. description: Tipo di misura
  953. status:
  954. type: string
  955. description: Stato corrente della misura
  956. battery_percentage:
  957. type: integer
  958. minimum: 0
  959. maximum: 100
  960. description: Livello batteria in percentuale
  961. receipt_date:
  962. type: string
  963. format: date-time
  964. description: Data ricezione della misura
  965. created_date:
  966. type: string
  967. format: date-time
  968. description: Timestamp di creazione del record
  969. updated_date:
  970. type: string
  971. format: date-time
  972. description: Timestamp di ultimo aggiornamento del record
  973. payload:
  974. description: Payload della misura
  975. $ref: '#/components/schemas/Payload'
  976. required:
  977. - id
  978. - deviceId
  979. - measure_date
  980. - measure_name
  981. - measure_value
  982. - unit_of_measurement
  983. MeasurementType:
  984. type: object
  985. description: Tipi di misure, comprensivi di riferimento al nomenclatore e definizione della struttura del payload specifico
  986. required: [id, name, syntax]
  987. properties:
  988. id:
  989. type: string
  990. format: uri
  991. description: Identificativo univoco del Tipo di Misura
  992. name:
  993. type: string
  994. description: Nome canonico del Tipo di Misura
  995. syntax:
  996. type: string
  997. format: json
  998. description: Definizione (JSON-LD) della sintassi del Tipo di Misura
  999. examples:
  1000. - https://github.com/FIWARE/data-models/tree/master/specs/PointOfInterest
  1001. Payload:
  1002. type: object
  1003. description: Payload della misura
  1004. properties:
  1005. type:
  1006. $ref: '#/components/schemas/MeasurementType'
  1007. value:
  1008. type: object
  1009. additionalProperties: true
  1010. securitySchemes:
  1011. panorama_auth:
  1012. type: oauth2
  1013. flows:
  1014. implicit:
  1015. authorizationUrl: https://panorama.edisonnext.it/oauth/authorize
  1016. scopes:
  1017. "write:entities": Panorama data provider
  1018. "read:entities": Panorama data consumer
  1019. "write:types": Panorama tenant administrator
  1020. panorama_consumer_api_key:
  1021. type: apiKey
  1022. name: consumerApiKey
  1023. in: header
  1024. panorama_provider_api_key:
  1025. type: apiKey
  1026. name: providerApiKey
  1027. in: header
  1028. panorama_administrator_api_key:
  1029. type: apiKey
  1030. name: administratorApiKey
  1031. in: header