panorama.yaml 31 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057
  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. /state/{id}:
  396. put:
  397. summary: Modifica lo stato di un'Entità
  398. tags: [Entity]
  399. security:
  400. - panorama_provider_api_key: []
  401. parameters:
  402. - in: path
  403. name: id
  404. required: true
  405. schema:
  406. type: string
  407. requestBody:
  408. required: true
  409. content:
  410. application/json:
  411. schema:
  412. type: string
  413. responses:
  414. '200':
  415. description: Stato Entità aggiornato
  416. '422':
  417. description: Stato Entità non valido
  418. '404':
  419. description: Entità non trovata
  420. /history/{id}:
  421. get:
  422. summary: Ottiene la storia delle variazioni di stato di un'Entità
  423. tags: [Entity]
  424. parameters:
  425. - in: path
  426. name: id
  427. description: l'ID dell'entità di cui ottenere la storia
  428. required: true
  429. schema:
  430. type: string
  431. responses:
  432. '200':
  433. description: Entità trovata
  434. content:
  435. application/json:
  436. schema:
  437. type: array
  438. items:
  439. type: object
  440. properties:
  441. timestamp:
  442. type: string
  443. format: date-time
  444. state:
  445. type: string
  446. examples: ['off', '22°C']
  447. '404':
  448. description: Entità non trovata
  449. /device:
  450. get:
  451. summary: Elenco di tutti i dispositivi
  452. tags: [Device]
  453. responses:
  454. '200':
  455. description: Lista di dispositivi
  456. content:
  457. application/json:
  458. schema:
  459. type: array
  460. items:
  461. $ref: '#/components/schemas/Device'
  462. /device/{id}:
  463. get:
  464. summary: Ottiene informazioni su un singolo dispositivo
  465. tags: [Device]
  466. parameters:
  467. - in: path
  468. name: id
  469. required: true
  470. schema:
  471. type: string
  472. responses:
  473. '200':
  474. description: Dispositivo trovato
  475. content:
  476. application/json:
  477. schema:
  478. $ref: '#/components/schemas/Device'
  479. '404':
  480. description: Dispositivo non trovato
  481. /device/{id}/measures:
  482. get:
  483. summary: Ottiene tutte le misure di un device
  484. tags: [Device]
  485. operationId: getMeasures
  486. parameters:
  487. - in: path
  488. name: id
  489. required: true
  490. schema:
  491. type: string
  492. - name: measurement_date_from
  493. in: query
  494. description: Filter by measurement date (from)
  495. required: false
  496. explode: true
  497. schema:
  498. type: string
  499. format: date-time
  500. - name: measurement_date_to
  501. in: query
  502. description: Filter by measurement date (to)
  503. required: false
  504. explode: true
  505. schema:
  506. type: string
  507. format: date-time
  508. responses:
  509. '200':
  510. description: Lista delle misure
  511. content:
  512. application/json:
  513. schema:
  514. type: array
  515. items:
  516. $ref: '#/components/schemas/Measure'
  517. /device/{id}/last:
  518. get:
  519. summary: Ottieni ultima misura da un POD
  520. tags: [Device]
  521. operationId: getMeasureByPod
  522. parameters:
  523. - name: id
  524. in: path
  525. required: true
  526. schema:
  527. type: string
  528. responses:
  529. '200':
  530. description: Misura trovata
  531. content:
  532. application/json:
  533. schema:
  534. $ref: '#/components/schemas/Measure'
  535. '404':
  536. description: Nessuna Misura trovata
  537. /measurementType/{id}:
  538. get:
  539. summary: Restituisce un singolo tipo di misura
  540. operationId: getMeasurementTypeById
  541. tags: [Device]
  542. parameters:
  543. - in: path
  544. name: id
  545. required: true
  546. schema:
  547. type: string
  548. responses:
  549. '200':
  550. description: Tipo di misura trovato
  551. content:
  552. application/json:
  553. schema:
  554. $ref: '#/components/schemas/MeasurementType'
  555. '404':
  556. description: Tipo di misura non trovato
  557. put:
  558. summary: Modifica un tipo di misura esistente (admin only)
  559. tags: [Device]
  560. security:
  561. - panorama_administrator_api_key: []
  562. parameters:
  563. - in: path
  564. name: id
  565. required: true
  566. schema:
  567. type: string
  568. requestBody:
  569. required: true
  570. content:
  571. application/json:
  572. schema:
  573. $ref: '#/components/schemas/MeasurementType'
  574. responses:
  575. '200':
  576. description: Tipo di misura aggiornato con successo
  577. '404':
  578. description: Tipo di misura non trovato
  579. '422':
  580. description: Tipo di misura non valido
  581. delete:
  582. summary: Elimina un tipo di misura esistente (admin only)
  583. tags: [Device]
  584. security:
  585. - panorama_administrator_api_key: []
  586. parameters:
  587. - in: path
  588. name: id
  589. required: true
  590. schema:
  591. type: string
  592. responses:
  593. '204':
  594. description: Tipo di misura eliminato con successo
  595. '404':
  596. description: Tipo di misura non trovato
  597. /measurementType:
  598. get:
  599. summary: Restituisce tutti i tipi di misura definiti
  600. tags: [Device]
  601. operationId: getMeasurementTypes
  602. responses:
  603. '200':
  604. description: Operazione completata con successo
  605. content:
  606. application/json:
  607. schema:
  608. type: array
  609. items:
  610. $ref: '#/components/schemas/MeasurementType'
  611. post:
  612. summary: Crea un nuovo tipo di misura (admin only)
  613. tags: [Device]
  614. security:
  615. - panorama_administrator_api_key: []
  616. requestBody:
  617. required: true
  618. content:
  619. application/json:
  620. schema:
  621. $ref: '#/components/schemas/MeasurementType'
  622. responses:
  623. '201':
  624. description: Tipo di misura creato con successo
  625. '422':
  626. description: Tipo di misura non valido
  627. components:
  628. schemas:
  629. Terminology:
  630. type: object
  631. description: Nomenclatura di riferimento per i Tipi di Entità. Può essere interna o esterna (schema.gov.it, UCUM, Google Knowledge Graph)
  632. required: [id, name, syntax]
  633. properties:
  634. id:
  635. type: string
  636. format: uri
  637. description: Identificativo univoco della Nomenclatura (terminology)
  638. examples:
  639. - http://dati.beniculturali.it/cis
  640. name:
  641. type: string
  642. description: Nome canonico della Nomenclatura
  643. description:
  644. type: string
  645. description: Descrizione della Nomenclatura
  646. documentation:
  647. type: string
  648. format: uri
  649. description: Link alla documentazione della Nomenclatura
  650. examples:
  651. - 'https://schema.gov.it/'
  652. subject:
  653. type: string
  654. description: Soggetto titolare del Tipo
  655. examples:
  656. - 'Ministero per i Beni e le Attività Culturali'
  657. uri:
  658. type: string
  659. format: uri
  660. description: URI autoritativa della Nomenclatura
  661. examples:
  662. - http://dati.beniculturali.it/cis
  663. Type:
  664. type: object
  665. description: Tipi di entità, comprensivi di riferimento al nomenclatore e definizione della struttura del payload specifico
  666. required: [id, name, syntax]
  667. properties:
  668. id:
  669. type: string
  670. format: uri
  671. description: Identificativo univoco del Tipo di Entità
  672. examples:
  673. - http://dati.beniculturali.it/cis/CulturalInstituteOrSite
  674. name:
  675. type: string
  676. description: Nome canonico del Tipo di Entità
  677. examples:
  678. - Istituti e Luoghi Della Cultura Italiani (musei, biblioteche, cinema, ecc)
  679. native:
  680. type: boolean
  681. description: Se il Tipo è nativo di piattaforma o importato
  682. readOnly: true
  683. default: false
  684. # stateType:
  685. # $ref: '#/components/schemas/State'
  686. syntax:
  687. type: string
  688. format: json
  689. description: Definizione (JSON-LD) della sintassi del Tipo di Entità
  690. examples:
  691. - {
  692. "@context": "https://json-ld.org/contexts/person.jsonld",
  693. "@id": "http://dbpedia.org/resource/John_Lennon",
  694. "name": "John Lennon",
  695. "born": "1940-10-09",
  696. "spouse": "http://dbpedia.org/resource/Cynthia_Lennon"
  697. }
  698. terminology:
  699. $ref: '#/components/schemas/Terminology'
  700. examples:
  701. - http://dati.beniculturali.it/cis
  702. uri:
  703. type: string
  704. format: uri
  705. description: URI autoritativo del Tipo (se non nativo)
  706. examples:
  707. - http://dati.beniculturali.it/cis/CulturalInstituteOrSite
  708. # State:
  709. # type: object
  710. # description: Definisce una possibile rappresentazione della situazione attuale nel «divenire» delle Entità di un certo Tipo
  711. # examples:
  712. # - Aperto o Chiuso
  713. # - Acceso o Spento
  714. # - (StatoSemaforo) Rosso, Giallo, Verde, Lampeggiante, Spento
  715. # - TemperaturaAmbiente - la temperatura attuale di un ambiente in gradi centigradi
  716. # properties:
  717. # id:
  718. # type: string
  719. # format: uri
  720. # description: ID univoco del Tipo di Stato
  721. # name:
  722. # type: string
  723. # description: Nome canonico del Tipo di Stato
  724. # uom:
  725. # type: string
  726. # description: Unità di misura (per grandezze scalari)
  727. # kind:
  728. # type: string
  729. # description: La tipologia elementare del Tipo di Stato (grandezza con unità di misura, stringa, eccetera)
  730. # examples:
  731. # - Enumeration
  732. # - Number
  733. # - String
  734. Entity:
  735. type: object
  736. 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
  737. required: [id, type, source, createdDate, updatedDate]
  738. properties:
  739. id:
  740. type: string
  741. format: uri
  742. description: ID univoco dell'Entità sulla piattaforma
  743. examples: [20738]
  744. name:
  745. type: string
  746. description: Nome canonico dell'Entità sulla piattaforma
  747. examples:
  748. - Antiquarium e Acquedotto romano di Trieste
  749. geometry:
  750. type: object
  751. description: Coordinate geografiche dell'Entità
  752. properties:
  753. lat:
  754. type: number
  755. description: Latitudine dell'Entità
  756. examples: [45.61809]
  757. long:
  758. type: number
  759. description: Longitudine dell'Entità
  760. examples: [13.827805]
  761. type:
  762. $ref: '#/components/schemas/Type'
  763. parent:
  764. $ref: '#/components/schemas/Entity'
  765. source:
  766. $ref: '#/components/schemas/Source'
  767. externalId:
  768. type: string
  769. description: Identificativo dell'Entità nel sistema sorgente
  770. examples:
  771. - http://dati.beniculturali.it/mibact/luoghi/resource/CISNameInTime/20738
  772. state:
  773. type: object
  774. description: Stato dell'entità
  775. properties:
  776. value:
  777. type: string
  778. # description: Valore dello stato (determinato da Type.stateType)
  779. description: Valore dello stato
  780. timestamp:
  781. type: string
  782. format: date-time
  783. description: Data/ora dello stato
  784. # validity:
  785. # type: object
  786. # properties:
  787. # from:
  788. # type: string
  789. # format: date-time
  790. # description: Inizio validità
  791. # to:
  792. # type: string
  793. # format: date-time
  794. # description: Fine validità
  795. payload:
  796. type: object
  797. description: Attributi personalizzati in base al tipo di entità
  798. additionalProperties: true
  799. examples:
  800. - { chiusura: 'Lunedì|Giovedì|Domenica' }
  801. deviceId:
  802. description: Device associato all'entità
  803. $ref: '#/components/schemas/Device'
  804. createdDate:
  805. type: string
  806. format: date-time
  807. readOnly: true
  808. description: Data e ora di creazione dell'entità (timestamp ISO 8601)
  809. updatedDate:
  810. type: string
  811. format: date-time
  812. readOnly: true
  813. description: Data e ora dell'ultima modifica all'entità, escluse le modifiche di stato (timestamp ISO 8601)
  814. Source:
  815. type: object
  816. description: Fonte dati, interna o esterna, relativa a un soggetto alimentante
  817. properties:
  818. id:
  819. type: string
  820. format: uri
  821. description: ID univoco della Fonte Dati
  822. examples:
  823. - 'fvg_ispfor_tsgo'
  824. - 'fvg_ispfor'
  825. name:
  826. type: string
  827. description: Nome canonico della Fonte Dati
  828. examples:
  829. - 'Ministero per i Beni e le Attività Culturali'
  830. - 'Vincolo idrogeologico. L. 3267/1923 Comune di Trieste'
  831. - 'Ispettorati forestali'
  832. - 'Recupero energetico di biogas da digestione anaerobica o da discarica R1 (BDAD)'
  833. - 'Area golenale'
  834. - 'Copertura 2019 della banda larga in Italia secondo i criteri di rilevazione DESI 2020'
  835. internal:
  836. type: boolean
  837. description: Indica se la fonte dati è nativa della piattaforma o meno
  838. readOnly: true
  839. default: false
  840. organization:
  841. type: string
  842. description: Organizzazione di riferimento (ovvero soggetto alimentante) per la Fonte Dati
  843. examples:
  844. - 'Ministero per i Beni e le Attività Culturali'
  845. - 'Regione Autonoma Friuli Venezia Giulia - ISPETTORATO FORESTALE DI TRIESTE E GORIZIA'
  846. - 'RAFVG - DC Risorse agroalimentari, forestali e ittiche - Area foreste e territorio'
  847. - 'Regione Autonoma Friuli Venezia Giulia - SERVIZIO DISCIPLINA GESTIONE RIFIUTI E SITI INQUINATI'
  848. - 'Regione Autonoma Friuli Venezia Giulia - SERVIZIO GEOLOGICO'
  849. - 'Autorità per le Garanzie nelle Comunicazioni - AGCOM'
  850. processor:
  851. type: string
  852. description: Organizzazione che gestisce tecnicamente la Fonte Dati
  853. examples:
  854. - 'Insiel S.p.A.'
  855. - 'Regione autonoma Friuli Venezia Giulia'
  856. required: [id, name, organization, internal]
  857. Device:
  858. type: object
  859. description: Dispositivo IoT gestito nativamente in piattaforma
  860. required: [id, fk_firmware_id, fk_tenant_code, fk_device_service_id, created_date, updated_date]
  861. properties:
  862. id:
  863. type: string
  864. format: uri
  865. description: Identificativo univoco del dispositivo
  866. serial:
  867. type: string
  868. description: Seriale del dispositivo
  869. fk_firmware_id:
  870. type: string
  871. format: uri
  872. description: Identificativo univoco del firmware del dispositivo
  873. fk_tenant_code:
  874. type: string
  875. format: uri
  876. description: Identificativo univoco del tenant appartenente il dispositivo
  877. fk_device_service_id:
  878. type: string
  879. format: uri
  880. description: Identificativo univoco del servizio
  881. decrypt_key:
  882. type: string
  883. description: Chiave di decrypting del dispositivo
  884. auth_key:
  885. type: string
  886. description: Chiave di authentication del dispositivo
  887. logical_device_name:
  888. type: string
  889. description: Logical device name del dispositivo
  890. mac_address:
  891. type: string
  892. description: Mac address del dispositivo
  893. createdDate:
  894. type: string
  895. format: date-time
  896. description: Data di creazione
  897. updatedDate:
  898. type: string
  899. format: date-time
  900. description: Ultimo aggiornamento
  901. Measure:
  902. type: object
  903. properties:
  904. id:
  905. type: integer
  906. format: int64
  907. description: Identificazione univoca della misura
  908. serial:
  909. type: string
  910. description: Seriale del dispositivo
  911. #deviceId:
  912. # type: integer
  913. # format: int64
  914. # description: Foreign key to the related device
  915. # description: Device associato all'entità
  916. # $ref: '#/components/schemas/Device'
  917. measure_date:
  918. type: string
  919. format: date-time
  920. description: Data della misura
  921. measure_name:
  922. type: string
  923. description: Nome della misura
  924. unit_of_measurement:
  925. type: string
  926. description: Unità di misura della misura (e.g., °C, %, V)
  927. diagnostic:
  928. type: string
  929. description: Bitmask di diagnostica se disponibile
  930. type:
  931. type: string
  932. description: Tipo di misura
  933. status:
  934. type: string
  935. description: Stato corrente della misura
  936. battery_percentage:
  937. type: integer
  938. minimum: 0
  939. maximum: 100
  940. description: Livello batteria in percentuale
  941. receipt_date:
  942. type: string
  943. format: date-time
  944. description: Data ricezione della misura
  945. created_date:
  946. type: string
  947. format: date-time
  948. description: Timestamp di creazione del record
  949. updated_date:
  950. type: string
  951. format: date-time
  952. description: Timestamp di ultimo aggiornamento del record
  953. payload:
  954. description: Payload della misura
  955. $ref: '#/components/schemas/Payload'
  956. required:
  957. - id
  958. - deviceId
  959. - measure_date
  960. - measure_name
  961. - measure_value
  962. - unit_of_measurement
  963. MeasurementType:
  964. type: object
  965. description: Tipi di misure, comprensivi di riferimento al nomenclatore e definizione della struttura del payload specifico
  966. required: [id, name, syntax]
  967. properties:
  968. id:
  969. type: string
  970. format: uri
  971. description: Identificativo univoco del Tipo di Misura
  972. name:
  973. type: string
  974. description: Nome canonico del Tipo di Misura
  975. syntax:
  976. type: string
  977. format: json
  978. description: Definizione (JSON-LD) della sintassi del Tipo di Misura
  979. examples:
  980. - https://github.com/FIWARE/data-models/tree/master/specs/PointOfInterest
  981. Payload:
  982. type: object
  983. description: Payload della misura
  984. properties:
  985. type:
  986. $ref: '#/components/schemas/MeasurementType'
  987. value:
  988. type: object
  989. additionalProperties: true
  990. securitySchemes:
  991. panorama_auth:
  992. type: oauth2
  993. flows:
  994. implicit:
  995. authorizationUrl: https://panorama.edisonnext.it/oauth/authorize
  996. scopes:
  997. "write:entities": Panorama data provider
  998. "read:entities": Panorama data consumer
  999. "write:types": Panorama tenant administrator
  1000. panorama_consumer_api_key:
  1001. type: apiKey
  1002. name: consumerApiKey
  1003. in: header
  1004. panorama_provider_api_key:
  1005. type: apiKey
  1006. name: providerApiKey
  1007. in: header
  1008. panorama_administrator_api_key:
  1009. type: apiKey
  1010. name: administratorApiKey
  1011. in: header