panorama.yaml 33 KB

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