Internet of Things/Testprogramma MQTT: verschil tussen versies
Naar navigatie springen
Naar zoeken springen
(7 tussenliggende versies door dezelfde gebruiker niet weergegeven) | |||
Regel 43: | Regel 43: | ||
mqttClient.on_disconnect = on_disconnect | mqttClient.on_disconnect = on_disconnect | ||
mqttClient.loop_start() | mqttClient.loop_start() | ||
mqttClient.connect(" | mqttClient.connect("192.168.178.130", 1883) # local: 192.168.178.130, global: 82.161.55.218 | ||
def send_sensordata(sensorValues): | def send_sensordata(sensorValues): | ||
Regel 146: | Regel 146: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Programma met aansturing en mqtt === | |||
<syntaxhighlight lang="Python"> | |||
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") | |||
</syntaxhighlight> | |||
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") |
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")