panorama.yaml 31 KB

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