, поэтому у меня возникли проблемы с частью моего кода, связанной с публикацией / подпиской. Совершенно новый, так что простите за незнание. :) Я использую Москитто.
ЭТА ЧАСТЬ ПРОСТО ГЕНЕРИРУЕТ НЕКОТОРЫЕ СЛУЧАЙНЫЕ ТЕМПЕРАТУРЫ:
from random import random
class TemperatureSensor:
sensor_type='temperature'
units='celcius'
instance_id='SN123'
def __init__(self, average_temperature, temperature_variation, min_temperature, max_temperature):
self.average_temperature=average_temperature
self.temperature_variation=temperature_variation
self.min_temperature=min_temperature
self.max_temperature=max_temperature
self.value=0.0
def sense(self):
self.value= self.simple_random()
return self.value
def simple_random(self):
value = self.min_temperature + (random() * (self.max_temperature - self.min_temperature))
return value
ts = TemperatureSensor(20,20, 16, 35)
ЭТО ИЗДАТЕЛЬ:
import paho.mqtt.client as mqtt
import datetime
from datetime import datetime
from Script1 import TemperatureSensor
import json
class Simulator:
def __init__(self, interval):
self.interval = interval
def start(self):
ts= TemperatureSensor(20,10,16,35)
mqtt_publisher = mqtt.Client('Temperature publisher')
mqtt_publisher.connect('127.0.0.1',1883,60)
mqtt_publisher.loop_start()
while True:
dt = datetime.now().strftime("%d-%m-%YT%H:%M:%S")
message = {
"type-id": "de.uni-stuttgart.iaas.sc." + ts.sensor_type,
"instance-id": ts.instance_id,
"timestamp": dt,
"value":{
ts.units: ts.sense()
}
}
jmsg = json.dumps(message, indent=4)
mqtt_publisher.publish('TopicID', ts.sensor_type + '/' + ts.instance_id, jmsg, 2)
print(ts.sensor_type , ts.sense())
time.sleep(self.interval)
s = Simulator(5)
s.start()
НАКОНЕЦ, ЗДЕСЬ ПОДПИСЧИК:
import paho.mqtt.client as mqtt
import json
def on_message(client, userdata, message):
print('Message topic{}'.format(message.topic))
print('Message payload:')
print(json.message.payload.decode())
mqtt_subscriber = mqtt.Client('Temperature subscriber')
mqtt_subscriber.on_message = on_message
mqtt_subscriber.connect('127.0.0.1',1883,60)
mqtt_subscriber.subscribe('TopicID', qos=2)
mqtt_subscriber.loop_forever()
При запуске издателя выдает следующую ошибку:
Traceback (most recent call last):
File "Script2.py", line 40, in <module>
s.start()
File "Script2.py", line 33, in start
mqtt_publisher.publish('TopicID', ts.sensor_type + '/' + ts.instance_id, 2, jmsg)
File "/Library/Python/2.7/site-packages/paho_mqtt-1.5.0.dev0-py2.7.egg/paho/mqtt/client.py", line 1300, in publish
message.dup, message.info, message.properties)
File "/Library/Python/2.7/site-packages/paho_mqtt-1.5.0.dev0-py2.7.egg/paho/mqtt/client.py", line 2523, in _send_publish
command = PUBLISH | ((dup & 0x1) << 3) | (qos << 1) | retain
TypeError: unsupported operand type(s) for |: 'int' and 'str'