delphi99 Posted March 7, 2019 at 04:53 PM Posted March 7, 2019 at 04:53 PM Hallo, folgendes Szenario (jeweils mit WiFi Brick alt): - 1x Master Brick mit Temperatur-, Luftfeuchte- und Luftdruck-Bricklet - 1x dasselbe ohne Luftdruck Bislang rufe ich die Werte mittels python2 via Callback-Funktion ab. Funktioniert auch wunderbar. Da ich für die Auswertung/Darstellung auf influxdb und grafana umsteigen möchte, habe ich ein neues Abfragescript in python3 geschrieben. Zuerst quasi 1:1 aus der vorherigen Version übernommen, mit den entsprechenden Anpassungen für python3 und influxdb. Da habe ich schon via Callback vom Brick1 keine Temperatur- und Luftfeuchtewerte mehr bekommen. Also mal umgestellt auf direkte Abfrage beider Bricks alle 90s. Wenn ich Glück habe bekomme ich für Brick1 beim ersten Aufruf auch Werte aller 3 Bricklets, danach nur noch vom Luftdruck-Bricklet. Brick2 funktioniert problemlos auch in dieser Konstellation. Am WLAN kann es eigentlich nicht liegen, da ja die Luftdruckwerte vom Brick1 kommen (außerdem ist er näher am AP) *grübel* Hat jemand eine Idee warum sich die beiden Bricks so unterschiedlich verhalten? Den Brick1 habe ich noch firmwaremäßig aktualisiert, aber keine Änderung. Bei Bedarf lade ich auch das script hoch, aber da es ja teilweise funktioniert habe ich vorerst drauf verzichtet. Vielen Dank für Eure Ideen Frank Quote
borg Posted March 7, 2019 at 05:41 PM Posted March 7, 2019 at 05:41 PM Wenn du sagst du bekommst keine Rückgabewerte, was bekommst du denn dann? Eine Exception oder falsche Werte? Welche Exception bzw welche falschen Werte bekommst du? Und zu Python 2 vs 3: Mit Python 2 funktioniert es mit allen Bricklets aber mit Python 3 funktioniert es nicht mit allen Bricklets? Hab ich das richtig verstanden? Quote
delphi99 Posted March 8, 2019 at 06:38 PM Author Posted March 8, 2019 at 06:38 PM Hallo Borg, zur 2. Frage: ja so ist es. zu 1: Es kam eine Fehlermeldung zurück, auf die mein Code nicht vorbereitet war. In der Variablen (temperature1) stand also vmtl. der Fehlertext, leider habe ich das Log nicht mehr :-( Auszugsweise der aktuelle Code für das Temperatur-Bricklet mit Fehlerbehandlung. Der Fehler tritt wohl schon in der print-Zeile bei Division/100 auf, da das mit Text logischerweise nicht geht. ... ipconb1 = IPConnection() # Create IP connection ipconb2 = IPConnection() # Create IP connection # Create device object m1 = Master(tfbrick01_opts['uid_master'],ipconb1) t1 = tinkerforge.bricklet_temperature.Temperature(tfbrick01_opts['uid_tempbricklet'], ipconb1) h1 = tinkerforge.bricklet_humidity.Humidity(tfbrick01_opts['uid_humbricklet'], ipconb1) p1 = tinkerforge.bricklet_barometer.Barometer(tfbrick01_opts['uid_pressbricklet'], ipconb1) ... def cbt1(): try: temperature1 = t1.get_temperature() print('temp1: ' + str(temperature1/100.0) + ' °C.') vt1 = temperature1/100.0 json_body = [ { "measurement": "Temperatur", "tags": { "location": "innen", "room": "Wohnstube" }, "fields": { "value": vt1 } } ] dbclient.write_points(json_body) except: print('error get_temp1') Die Funktionsdefinitionen sind alle 5 quasi identisch, lediglich die lokalen Variablen sind je nach Anwendungsfall unterschiedlich. Und das Log dazu: 2019-03-07 15:52:32,665 INFO Start-Time: 1551970352.6657937 2019-03-07 15:52:34,705 INFO temp1: 24.56 °C. 2019-03-07 15:52:34,775 INFO hum1: 28.7 %. 2019-03-07 15:52:34,814 INFO temp2: 21.93 °C. 2019-03-07 15:52:34,836 INFO hum2: 33.6 %. 2019-03-07 15:54:04,949 INFO error get_temp1 2019-03-07 15:54:04,950 INFO error get_hum1 2019-03-07 15:54:04,955 INFO temp2: 22.0 °C. 2019-03-07 15:54:04,971 INFO hum2: 33.7 %. 2019-03-07 15:54:04,986 INFO press1: 984.677 mbar (raw). 2019-03-07 15:55:37,115 INFO error get_temp1 2019-03-07 15:55:37,116 INFO error get_hum1 2019-03-07 15:55:37,124 INFO temp2: 22.06 °C. 2019-03-07 15:55:37,148 INFO hum2: 33.4 %. 2019-03-07 15:55:37,162 INFO press1: 984.604 mbar (raw). 2019-03-07 15:55:37,162 INFO localtemp: 14.7 2019-03-07 15:57:07,290 INFO error get_temp1 2019-03-07 15:57:07,291 INFO error get_hum1 2019-03-07 15:57:07,296 INFO temp2: 22.12 °C. 2019-03-07 15:57:07,310 INFO hum2: 33.6 %. 2019-03-07 15:57:07,326 INFO press1: 984.684 mbar (raw). Die 1er Werte sind vom problematischen Brick, die 2er vom funktionierenden. Wie zu sehen kommen beim ersten Aufruf dieses Mal alle Werte, danach nicht mehr. Ich bin mir auch nicht sicher ob es an der python-Version liegt. Der 2. Brick funktioniert ja tadellos. Kann es evtl. Probleme mit der Stromversorgung im Brick geben? Der besteht ja neben dem Master aus einem alten WiFi Brick und den 3 Brickletts. Macht aber auch keinen Sinn, da es ja mit python2 und Callback funktioniert. VG und vielen Dank Frank Quote
delphi99 Posted March 8, 2019 at 07:50 PM Author Posted March 8, 2019 at 07:50 PM Ergänzung zum Fehler (diesmal nach 2 erfolgreichen Messungen): temperature1 = t1.get_temperature() AttributeError : 'float' object has no attribute 'get_temperature' Quote
borg Posted March 8, 2019 at 09:13 PM Posted March 8, 2019 at 09:13 PM Meine Vermutung dazu: Du hast irgendwo im Code sowas stehen wie t1 = float_value und überschreibst damit ausversehen das "t1" Temperature Bricklet-Objekt. Vielleicht ist in Python2 der Scope von der Variable irgendwo leicht anders als in Python3 und dadurch tritt das jetzt erst auf? Quote
delphi99 Posted March 10, 2019 at 06:08 PM Author Posted March 10, 2019 at 06:08 PM Hallo Borg, sowas in der Art hatte ich auch schon vermutet und deshalb auch schon Variablen umbenannt. Wenn man dann aber nicht die richtigen Variablen umbenennt und dann auch noch zu blöd ist zum Suchen... Ich stell mich dann mal in die Ecke zum Schämen. Vielen Dank fürs Mitdenken und noch schönen Sonntag-Abend. Frank. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.