Guten Morgen,
ich möchte die Werte von einem Wasseruhr digitalisieren und zwar mittels
einen Sensor, der die Impulse misst und wenn sie gleich 200ms dann
schickt er mir über einen esp8266 einen Impuls, der esp6288 schickt mir
dann die abgelesene Impulse über mqtt Broker.
vorgestern hat es noch gut funktioniert aber heute bekomme ich leider
keine Werte.. meine erste Frage wäre, wie kann ich einen MicroPython
Programm automatisch neu starten? also falls der esp8266 nicht direkt
mit Wlan oder mqtt server connected, dass das Programm nochmal
ausgeführt wird?
eine Status-Led hilft ja auch in diesem Fall, habt ihr eine Idee, wie
ich eine einsetze bzw programmiere, dass wenn der esp8266 mit Wlan und
umqtt verbunden ist, die Led leuchtet?
viele Grüsse.
1
frommachineimportPin,ADC
2
importnetwork
3
fromtimeimportsleep
4
fromumqttsimpleimportMQTTClient
5
importsys
6
importuasyncio
7
frommachineimporttime_pulse_us
8
9
trigger_pin=Pin(12,Pin.IN,Pin.PULL_UP)
10
dataQueue=[]
11
last=0
12
count=0
13
countall=0
14
15
WIFI_SSID='xxxxx'
16
WIFI_PASSWORD='xxxxxxx'
17
mqtt_client_id='testclient'#JustarandomclientID
18
ADAFRUIT_IO_URL='xxxxxx'
19
ADAFRUIT_USERNAME=''
20
ADAFRUIT_IO_KEY=''
21
TOGGLE_FEED_ID='TOPIC'
22
23
defpulse2liter(pin):
24
# Time a pulse on the given pin, and return the duration of the pulse in microseconds.
25
# The pulse_level argument should be 0 to time a low pulse or 1 to time a high pulse.
Lothar M. schrieb:> Und formatiere den Code halbwegs leserlich...
Gerade bei Python code. So kann man ja nicht mehr sehen, was wo in
welchem while/if/else/... Block steht.
Interessant, ich wusste gar nicht, dass man den Startbeitrag nach einem
Folgepost noch bearbeiten kann. Aber dank der Tags ist jetzt wenigstens
der eingefügte Code leserlich.
Neuling A. schrieb:> meine erste Frage wäre, wie kann ich einen MicroPython Programm> automatisch neu starten?
Warum mit dem Dapfhammer draufhauen? Gibt es nicht eine weniger
"brutale" Mehtode, um gegen den Verbindungsabbruch vorzugehen?
> vorgestern hat es noch gut funktioniert aber heute bekomme ich leider> keine Werte..
Ich würde vorneweg versuchen, diese einfache Frage zu beantworten:
Warum?
Neuling A. schrieb:> Leider ist es hier eine weitverbreitete Unart, neunmalkluge Fragen zu> stellen, statt zu sagen, was man zu sagen hat...
Leider ist es hier eine weitverbreitete Unart, dass TO nicht die nötigen
Informationen zur Problemlösung liefern. Ich wünsche dir viel Glück beim
Finden des Workarounds.
Du hast kein Fehlerhandling drinnen. Wenn die Verbindung zum MQTT-Server
abbricht (DSL-Reconnect o.Ä.), dann fliegt beim client.publish eine
Exception, entweder direkt aus dem umqttsimple, oder aus der socket-Lib,
die es verwendet, oder aus einem assert im code ...
also:
try ... except
außenherum, bei Fehler entweder reset oder mqtt-reconnect oder
Alarmsirene an oder, oder, oder...
Εrnst B. schrieb:> Du hast kein Fehlerhandling drinnen. Wenn die Verbindung zum> MQTT-Server> abbricht (DSL-Reconnect o.Ä.), dann fliegt beim client.publish eine> Exception, entweder direkt aus dem umqttsimple, oder aus der socket-Lib,> die es verwendet, oder aus einem assert im code ...
beim letzen Versuch kam diese Meldung an,:
Traceback (most recent call last):
File "<stdin>", line 67, in <module>
File "umqttsimple.py", line 144, in publish
File "umqttsimple.py", line 184, in wait_msg
OSError: -1
umqttsimple:
if qos == 1:
while 1:
144 op = self.wait_msg()
if op == 0x40:
sz = self.sock.read(1)
assert sz == b"\x02"
rcv_pid = self.sock.read(2)
rcv_pid = rcv_pid[0] << 8 | rcv_pid[1]
if pid == rcv_pid:
return
...
def wait_msg(self):
res = self.sock.read(1)
self.sock.setblocking(True)
if res is None:
return None
if res == b"":
184 raise OSError(-1)
if res == b"\xd0": # PINGRESP
Neuling A. schrieb:> beim letzen Versuch kam diese Meldung an,:
jep. sag ich doch.
per try...except kannst du die abfangen, und dich einfach neu mit dem
MQTT verbinden. Dann geht dir auch kein Tropfen Wasser durch die Lappen.
du meinst, try.. except in der while true?
while True:
count = pulse2liter(trigger_pin)
countall = count + countall
if count > 0:
print('Literverbrauch:',countall)
try:
client.publish('testclient', str(count), qos=1)
except:
print('cound not publish')
sleep(0.1)
bin nicht so profi beim pragrammieren..
Wilhelm M. schrieb:> Meinst Du die?:> https://de.wikipedia.org/wiki/Aachener_Printen
Erinnere mich nicht dran. Wir hatten mal (zu viert) bei einem Ausflug
nach Aachen frische Printen für 40 Euro gekauft und die allesamt auf dem
Rückweg nach hause verschlungen. So war das eigentlich nicht geplant.
Aber die Dinger machen süchtig. Da ist irgendwas drin, was verboten
gehört.
Wilhelm M. schrieb:> Aachener_Printen
Und die haben (bei mir) eindeutig einen Elektronik-Bezug, denn die
quadratischen Blechdosen, in denen wir viele Jahre Lambertz-Printen aus
Aachen geschickt bekamen, kann man stapeln und ich bewahre darin
Komponenten und fertige Baugruppen auf - robust und antistatisch. :)
Ok - back on topic