2017-03-13 1 views
0

Ich bekomme Daten von einem Maschinensensor, was kw bekommt. Als Skript brauche ich nur verschiedene KW-Nummern, damit ich sie an die Datenbank senden kann. Ich möchte "Same number" drucken, wenn der neue Wert gleich dem letzten Wert ist (gleiche Zahl), ansonsten den Wert der Variable "print", wenn sie sich geändert hat. Wie kann ich das tun, wenn es für immer ist? Ich habe bereits nach dieser Frage gefragt, aber das war, als ich While-Schleife ohne mqtt forever_loop benutze, aber ich kann nicht in diesem Skript verwenden.Python, wie man überprüft, ob der Wert in mqtt geändert wurde

import paho.mqtt.client as mqtt 
import json 
import pymysql.cursors 

def on_connect(client, userdata, flags, rc): 
    print("Connected with result code "+str(rc)) 
    client.subscribe("QQ/QQ/QQQ/QQQ") #Just some random characters, I changed it 


def on_message(client, userdata, msg): 
    arv=int(float(msg.payload.split(' ')[0])) 
    print(msg.payload.split(' ')[0])  

    if (arv>arv+1 or arv>arv-1): 
     print("Same number {0}".format(arv)) 
    else: 
     print(" Number is {0} ".format(arv)) 


client = mqtt.Client() 
client.on_connect = on_connect 
client.on_message = on_message 
client.username_pw_set("blank", password="blank") 
client.connect("local", 0, 0) 
client.loop_forever() 



Output: 

6.12 
Same number 6 
6.91 
Same number 6 
6.38 
Same number 6 
5.44 
Same number 5 
6.75 
Same number 6 
6.50 
Same number 6 
6.15 
Same number 6 
5.67 
Same number 5 
5.80 
Same number 5 
6.21 
Same number 6 
5.21 
Same number 5 
6.25 
Same number 6 
6.66 
Same number 6 
5.14 
Same number 5 
+0

Der Code, den Sie geschrieben haben, ist die 'on_message' Funktionsdefinition fehlt – hardillb

+0

Typo, es behoben ! – Somepub

Antwort

1

speichern Sie einfach den letzten Wert in einer globalen Variablen, so dass Sie es auf jede neue Nachricht testen:

import paho.mqtt.client as mqtt 
import json 
import pymysql.cursors 

lastValue = 0 

def on_connect(client, userdata, flags, rc): 
    print("Connected with result code "+str(rc)) 
    client.subscribe("QQ/QQ/QQQ/QQQ") #Just some random characters, I changed it 


def on_message(client, userdata, msg): 
    global lastValue 
    arv=int(float(msg.payload.split(' ')[0])) 
    print(msg.payload.split(' ')[0])  

    if arv == lastValue: 
     print("Same number {0}".format(arv)) 
    else: 
     print(" Number is {0} ".format(arv)) 

    lastValue = arv 

client = mqtt.Client() 
client.on_connect = on_connect 
client.on_message = on_message 
client.username_pw_set("blank", password="blank") 
client.connect("local", 0, 0) 
client.loop_forever() 
+0

Ich erhalte eine Fehlermeldung "NameError: globaler Name 'lastValue' ist nicht definiert" – Somepub

+0

Haben Sie vergessen, die Zeile 'lastValue = 0' an der Spitze hinzuzufügen? – hardillb

+0

Ja, tat ich, ich bin manchmal so blind und dumm. Aber danke für deine Antwort, du hast mir viel geholfen :) – Somepub

Verwandte Themen