aee0f09db8
- Datafabrik: Dockerfile fix, agentorkestrering fungerar - Vision: Identify-modell, FAISS, OCR alla testade - API: Alla 7 integrationstester passerade - Upplösare: Entitetsupplösning verifierad
141 lines
4.0 KiB
Python
141 lines
4.0 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
API för Reality DNA
|
|
Exponerar vägar, observationer, events, missions
|
|
"""
|
|
import sys
|
|
import json
|
|
from datetime import datetime
|
|
|
|
sys.path.insert(0, '/home/bernt/.openclaw/workspace/life-weather')
|
|
|
|
from storage.observation_store import ObservationStore
|
|
|
|
class RoadAPI:
|
|
def __init__(self):
|
|
self.store = ObservationStore()
|
|
|
|
def get_roads(self):
|
|
"""Hämta alla vägar"""
|
|
import sqlite3
|
|
conn = sqlite3.connect('/home/bernt/.openclaw/workspace/rivp-pilot-1/rivp.db')
|
|
c = conn.cursor()
|
|
c.execute('SELECT id, road_number, name, county, type FROM roads')
|
|
roads = [
|
|
{
|
|
"id": row[0],
|
|
"road_number": row[1],
|
|
"name": row[2],
|
|
"county": row[3],
|
|
"type": row[4]
|
|
}
|
|
for row in c.fetchall()
|
|
]
|
|
conn.close()
|
|
return roads
|
|
|
|
def get_road(self, road_id):
|
|
"""Hämta specifik väg"""
|
|
import sqlite3
|
|
conn = sqlite3.connect('/home/bernt/.openclaw/workspace/rivp-pilot-1/rivp.db')
|
|
c = conn.cursor()
|
|
c.execute('SELECT id, road_number, name, county, type FROM roads WHERE id = ?', (road_id,))
|
|
row = c.fetchone()
|
|
conn.close()
|
|
|
|
if row:
|
|
return {
|
|
"id": row[0],
|
|
"road_number": row[1],
|
|
"name": row[2],
|
|
"county": row[3],
|
|
"type": row[4]
|
|
}
|
|
return None
|
|
|
|
def get_road_dna(self, road_id):
|
|
"""Hämta Reality DNA för väg"""
|
|
import sqlite3
|
|
conn = sqlite3.connect('/home/bernt/.openclaw/workspace/rivp-pilot-1/rivp.db')
|
|
c = conn.cursor()
|
|
|
|
# Hämta senaste observationer
|
|
c.execute('''
|
|
SELECT observation_type, value, unit, timestamp, source
|
|
FROM weather_observations
|
|
WHERE road_id = ?
|
|
ORDER BY timestamp DESC
|
|
LIMIT 5
|
|
''', (road_id,))
|
|
|
|
observations = [
|
|
{
|
|
"type": row[0],
|
|
"value": row[1],
|
|
"unit": row[2],
|
|
"timestamp": row[3],
|
|
"source": row[4]
|
|
}
|
|
for row in c.fetchall()
|
|
]
|
|
|
|
conn.close()
|
|
|
|
return {
|
|
"road_id": road_id,
|
|
"timestamp": datetime.now().isoformat(),
|
|
"observations": observations,
|
|
"observation_count": len(observations)
|
|
}
|
|
|
|
def get_road_observations(self, road_id):
|
|
"""Hämta alla observationer för väg"""
|
|
import sqlite3
|
|
conn = sqlite3.connect('/home/bernt/.openclaw/workspace/rivp-pilot-1/rivp.db')
|
|
c = conn.cursor()
|
|
|
|
c.execute('''
|
|
SELECT observation_type, value, unit, timestamp, source
|
|
FROM weather_observations
|
|
WHERE road_id = ?
|
|
ORDER BY timestamp DESC
|
|
''', (road_id,))
|
|
|
|
observations = [
|
|
{
|
|
"type": row[0],
|
|
"value": row[1],
|
|
"unit": row[2],
|
|
"timestamp": row[3],
|
|
"source": row[4]
|
|
}
|
|
for row in c.fetchall()
|
|
]
|
|
|
|
conn.close()
|
|
return observations
|
|
|
|
def get_road_events(self, road_id):
|
|
"""Hämta events för väg (placeholder)"""
|
|
return [] # Implementeras när events sparas i DB
|
|
|
|
def get_road_missions(self, road_id):
|
|
"""Hämta missions för väg (placeholder)"""
|
|
return [] # Implementeras när missions sparas i DB
|
|
|
|
if __name__ == "__main__":
|
|
api = RoadAPI()
|
|
|
|
# Testa
|
|
roads = api.get_roads()
|
|
print(f"Vägar: {len(roads)}")
|
|
|
|
if roads:
|
|
road = roads[0]
|
|
print(f"\nVäg {road['id']}:")
|
|
print(json.dumps(road, indent=2))
|
|
|
|
dna = api.get_road_dna(road['id'])
|
|
print(f"\nDNA:")
|
|
print(json.dumps(dna, indent=2))
|