Internet of Things/Testprogramma MQTT: verschil tussen versies
Naar navigatie springen
Naar zoeken springen
(2 tussenliggende versies door dezelfde gebruiker niet weergegeven) | |||
Regel 156: | Regel 156: | ||
now = 0 | now = 0 | ||
infinity = 100 * 400 * 24 * 60 * 60 ## more than 100 years | |||
mqttClient = mqtt.Client("testDocenten123") # je eigen ID | |||
## MQTT Callbacks | ## MQTT Callbacks | ||
Regel 174: | Regel 176: | ||
def init_mqtt(): | def init_mqtt(): | ||
mqttClient.on_connect = on_connect | mqttClient.on_connect = on_connect | ||
mqttClient.on_publish = on_publish | mqttClient.on_publish = on_publish | ||
Regel 185: | Regel 186: | ||
sensorValues = dict() | sensorValues = dict() | ||
init_mqtt() | |||
# The main loop: | # The main loop: | ||
Regel 192: | Regel 194: | ||
print("hi at " + str(now)) | print("hi at " + str(now)) | ||
if (now % ( | if (now % (1*60) == 0): | ||
moisture = grovepi.analogRead(moisturePin) | moisture = grovepi.analogRead(moisturePin) | ||
b = grove_barometer_lib.barometer() | |||
sensorValues["Pressure"] = b.pressure | |||
sensorValues["Temperature"] =b.temperature | |||
sensorValues["Moisture"] = moisture | |||
send_sensordata(sensorValues) | |||
if now >= ledStart: | if now >= ledStart: | ||
Regel 207: | Regel 214: | ||
print("led OFF") | print("led OFF") | ||
grovepi.digitalWrite(ledPin, 0) | grovepi.digitalWrite(ledPin, 0) | ||
ledStop = | ledStop = infinity | ||
if now >= waterStart: | if now >= waterStart: | ||
Regel 222: | Regel 229: | ||
if now >= waterStop: | if now >= waterStop: | ||
grovepi.digitalWrite(waterPin, 0) | grovepi.digitalWrite(waterPin, 0) | ||
waterStop = | waterStop = infinity | ||
print("water OFF") | print("water OFF") | ||
time.sleep(10) | time.sleep(10) |
Huidige versie van 4 jun 2015 om 13:03
Versie met sensoren
import time
import grovepi
import grove_barometer_lib
import paho.mqtt.client as mqtt
led = 4 # led-relais op grovepi D4
valve = 3 # klep-relais op grovepi D3
valveOn = 1 # klep aan (initieel)
ledOn = 0 # lamp uit (initeel)
moisturePin = 0 # grovepi A0
# barometer op grovepi I2C-2
now = 0
grovepi.pinMode(led, "OUTPUT")
grovepi.pinMode(valve, "OUTPUT")
## MQTT Callbacks
def on_connect(client, userdata, flags, rc):
if rc != 0:
print "Connection failed. RC: {}".format(rc)
else:
print "Connected successfully"
def on_publish(client, userdata, mid):
print "Message {} published.".format(mid)
def on_disconnect(client, userdata, rc):
if rc != 0:
print "Client disconnected unexpectedly, trying to reconnect."
hasDisconnected = True
mqttClient.reconnect()
def init_mqtt():
mqttClient = mqtt.Client("testClient123") # je eigen ID
mqttClient.on_connect = on_connect
mqttClient.on_publish = on_publish
mqttClient.on_disconnect = on_disconnect
mqttClient.loop_start()
mqttClient.connect("192.168.178.130", 1883) # local: 192.168.178.130, global: 82.161.55.218
def send_sensordata(sensorValues):
mqttClient.publish("test/123", json.dumps(sensorValues))
sensorValues = dict()
# The main loop:
while True:
try:
print("hi")
b = grove_barometer_lib.barometer()
print("Pressure: " + str(b.pressure) + " temperature: " + str(b.temperature))
sensorValues["Pressure"] = b.pressure
sensorValues["Temperature"] = b.temperature
moisture = grovepi.analogRead(moisturePin)
print("Moisture: " + str(moisture))
sensorValues["Moisture"] = moisture
send_sensordata(sensorValues)
# grovepi.digitalWrite(led, ledOn)
# ledOn = 1 - ledOn
# grovepi.digitalWrite(valve, valveOn)
# valveOn = 1 - valveOn
time.sleep(10)
now += 10
except KeyboardInterrupt:
# reset outputs
grovepi.digitalWrite(led, 0)
grovepi.digitalWrite(valve, 0)
break
except IOError:
print("error")
Eenvoudige versie
Een eenvoudige versie zonder sensoren:
import time
import paho.mqtt.client as mqtt
now = 0
## MQTT Callbacks
def on_connect(client, userdata, flags, rc):
if rc != 0:
print "Connection failed. RC: {}".format(rc)
else:
print "Connected successfully"
def on_publish(client, userdata, mid):
print "Message {} published.".format(mid)
def on_disconnect(client, userdata, rc):
if rc != 0:
print "Client disconnected unexpectedly, trying to reconnect."
hasDisconnected = True
mqttClient.reconnect()
def init_mqtt():
mqttClient = mqtt.Client("testClient123") # je eigen ID
mqttClient.on_connect = on_connect
mqttClient.on_publish = on_publish
mqttClient.on_disconnect = on_disconnect
mqttClient.loop_start()
mqttClient.connect("192.168.178.130", 1883) # local: 192.168.178.130, global: 82.161.55.218
def send_sensordata(sensorValues):
mqttClient.publish("test/123", json.dumps(sensorValues))
sensorValues = dict()
# The main loop:
while True:
try:
print("hi at " + str(now))
sensorValues["Pressure"] = 200 + now
sensorValues["Temperature"] = 20 + now
sensorValues["Moisture"] = 300 + now
send_sensordata(sensorValues)
time.sleep(10)
now += 10
except KeyboardInterrupt:
# reset outputs
break
except IOError:
print("error")
Programma met aansturing en mqtt
import time
import paho.mqtt.client as mqtt
import grovepi
import grove_barometer_lib
now = 0
infinity = 100 * 400 * 24 * 60 * 60 ## more than 100 years
mqttClient = mqtt.Client("testDocenten123") # je eigen ID
## MQTT Callbacks
def on_connect(client, userdata, flags, rc):
if rc != 0:
print "Connection failed. RC: {}".format(rc)
else:
print "Connected successfully"
def on_publish(client, userdata, mid):
print "Message {} published.".format(mid)
def on_disconnect(client, userdata, rc):
if rc != 0:
print "Client disconnected unexpectedly, trying to reconnect."
hasDisconnected = True
mqttClient.reconnect()
def init_mqtt():
mqttClient.on_connect = on_connect
mqttClient.on_publish = on_publish
mqttClient.on_disconnect = on_disconnect
mqttClient.loop_start()
mqttClient.connect("192.168.178.130", 1883) # local: 192.168.178.130, global: 82.161.55.218
def send_sensordata(sensorValues):
mqttClient.publish("test/123", json.dumps(sensorValues))
sensorValues = dict()
init_mqtt()
# The main loop:
while True:
try:
print("hi at " + str(now))
if (now % (1*60) == 0):
moisture = grovepi.analogRead(moisturePin)
b = grove_barometer_lib.barometer()
sensorValues["Pressure"] = b.pressure
sensorValues["Temperature"] =b.temperature
sensorValues["Moisture"] = moisture
send_sensordata(sensorValues)
if now >= ledStart:
grovepi.digitalWrite(ledPin, 1)
print("led ON")
ledStop = now + ledDuration # end activity this period
ledStart = ledStart + ledPeriod # start next period
print("next Stop: " + str(ledStop))
print("next Start: " + str(ledStart))
if now >= ledStop:
print("led OFF")
grovepi.digitalWrite(ledPin, 0)
ledStop = infinity
if now >= waterStart:
moisture = grovepi.analogRead(moisturePin)
print("check moisture: " + str(moisture))
if moisture < 550:
grovepi.digitalWrite(waterPin, 1)
print("water ON")
waterStop = now + waterDuration # end activity this period
waterStart = waterStart + waterPeriod # start next period
print("next waterStop: " + str(waterStop))
print("next waterStart: " + str(waterStart))
if now >= waterStop:
grovepi.digitalWrite(waterPin, 0)
waterStop = infinity
print("water OFF")
time.sleep(10)
now += 10
except KeyboardInterrupt:
grovepi.digitalWrite(ledPin, 0) # reset LED
grovepi.digitalWrite(waterPin, 0) # reset water valve
break
except IOError:
print("Error")
import time import grovepi
waterPin = 3 ## Valve relay: digital port D3 ledPin = 4 ## LED relay: digital port D4 moisturePin = 0 ## analog port A0: moisture sensor
- barometer: connected to I2C, e.g. port I2C-1
grovepi.pinMode(waterPin, "OUTPUT") grovepi.pinMode(ledPin, "OUTPUT")
- pinMode for analog port not needed
- Timing
- Periodic events: every xxxPeriod seconds
- active for xxxDuration seconds (from xxxStart to xxxStop)
now = 0
waterPeriod = 15 * 60 # every 15 minutes waterDuration = 1 # active for 1 seconds (only if needed) waterStart = now + 1 * 60 waterStop = now
ledPeriod = 60 * 60 # every hour ledDuration = 45 * 60 # active for 45 minutes ledStart = now + 5 ledStop = now
while True:
try:
if (now % (5*60) == 0): moisture = grovepi.analogRead(moisturePin) print("moisture: " + str(moisture))
if now >= ledStart: grovepi.digitalWrite(ledPin, 1) print("led ON") ledStop = now + ledDuration # end activity this period ledStart = ledStart + ledPeriod # start next period print("next Stop: " + str(ledStop)) print("next Start: " + str(ledStart))
if now >= ledStop: print("led OFF") grovepi.digitalWrite(ledPin, 0) ledStop = ledStart - 1
if now >= waterStart: moisture = grovepi.analogRead(moisturePin) print("check moisture: " + str(moisture)) if moisture < 550: grovepi.digitalWrite(waterPin, 1) print("water ON") waterStop = now + waterDuration # end activity this period waterStart = waterStart + waterPeriod # start next period print("next waterStop: " + str(waterStop)) print("next waterStart: " + str(waterStart))
if now >= waterStop: grovepi.digitalWrite(waterPin, 0) waterStop = waterStart - 1 print("water OFF")
time.sleep(1) now += 1
except KeyboardInterrupt: grovepi.digitalWrite(ledPin, 0) # reset LED grovepi.digitalWrite(waterPin, 0) # reset water valve break except IOError: print("Error")