Mercurial > code > home > repos > homeauto
view service/mqtt_to_rdf/mqtt_message.py @ 1706:2085ed9cfcc4
reworking UI to reflect the new inferencing code
author | drewp@bigasterisk.com |
---|---|
date | Sat, 23 Oct 2021 13:22:40 -0700 |
parents | b3132cd02686 |
children |
line wrap: on
line source
import json import uuid from rdflib import RDF, URIRef, BNode, Graph, Literal, Namespace from rdflib.collection import Collection ROOM = Namespace('http://projects.bigasterisk.com/room/') JSON = Namespace('http://bigasterisk.com/anyJson/') def graphFromMessage(topicUri: URIRef, topic: bytes, body: bytes): graph = Graph() message = URIRef(f'{uuid.uuid1().urn}') graph.add((topicUri, ROOM['message'], message)) graph.add((message, RDF.type, ROOM['MqttMessage'])) topicSegments = BNode() graph.add((message, ROOM['topic'], topicSegments)) Collection(graph, topicSegments, map(Literal, topic.decode('ascii').split('/'))) bodyStr = body.decode('utf8') graph.add((message, ROOM['body'], Literal(bodyStr))) try: graph.add((message, ROOM['bodyFloat'], Literal(float(bodyStr)))) except ValueError: pass _maybeAddJson(graph, message, bodyStr) return graph def _maybeAddJson(graph, message, bodyStr): if not bodyStr.startswith('{'): return try: doc = json.loads(bodyStr) except ValueError: return print(f'got {doc=}') jsonRoot = BNode() graph.add((message, ROOM['bodyJson'], jsonRoot)) for k, v in doc.items(): graph.add((jsonRoot, JSON[k], Literal(v)))