gpt4 book ai didi

Python:使用树莓派将传感器数据推送到 xively TypeError 时出错:__init__()

转载 作者:太空宇宙 更新时间:2023-11-04 01:14:05 30 4
gpt4 key购买 nike

我尝试用树莓派从我的 ds18b20 温度传感器读取数据并将它们推送到 xively。

在控制台中执行一些先决条件和 python 文件:

sudo modprobe w1-gpio && sudo modprobe w1_therm
source .envs/venv/bin/activate
FEED_ID=244127069 API_KEY=Nqeje SENSOR_ID=28-00000539324e python xively_ds18b20.py

在此之后,出现以下错误:

Traceback (most recent call last):
File "xively_ds18b20.py", line 59, in <module>
run()
File "xively_ds18b20.py", line 42, in run
feed = api.feeds.get(FEED_ID)
File "/home/pi/xively_tutorial/.envs/venv/local/lib/python2.7/site-packages/xively/managers.py", line 266, in get
feed = self._coerce_feed(data)
File "/home/pi/xively_tutorial/.envs/venv/local/lib/python2.7/site-packages/xively/managers.py", line 289, in _coerce_feed
feed = Feed(**feed_data)
TypeError: __init__() got an unexpected keyword argument 'email'

我该如何解决这个错误?这很有趣,但在另一个 Raspberry Pi 上它正在工作......

这是我的代码 (xively_ds18b20.py):

#!/usr/bin/env python

import os
import xively
import subprocess
import time
import datetime
import requests


FEED_ID = os.environ["FEED_ID"]
API_KEY = os.environ["API_KEY"]
SENSOR_ID_PRE = os.environ["SENSOR_ID"]
SENSOR_ID = SENSOR_ID_PRE[-7:]

# initialize api client
api = xively.XivelyAPIClient(API_KEY)

# function to read the temperature from ds18b20 temperature sensor on i2c
def read_temperature():
tempfile = open("/sys/bus/w1/devices/"+SENSOR_ID_PRE+"/w1_slave")
thetext = tempfile.read()
tempfile.close()
tempdata = thetext.split("\n")[1].split(" ")[9]
temperature = float(tempdata[2:])
temperature = temperature / 1000
return temperature

# function to return a datastream object. This either creates a new datastream,
# or returns an existing one
def get_datastream(feed):
try:
datastream = feed.datastreams.get("PiTemperature"+SENSOR_ID)
return datastream
except:
datastream = feed.datastreams.create("PiTemperature"+SENSOR_ID, tags="temperature")
return datastream

# main program entry point - runs continuously updating our datastream with the
# latest temperature reading
def run():
feed = api.feeds.get(FEED_ID)

datastream = get_datastream(feed)
datastream.max_value = None
datastream.min_value = None

while True:
degreesCelcius = read_temperature()
datastream.current_value = degreesCelcius
datastream.at = datetime.datetime.utcnow()
try:
datastream.update()
except requests.HTTPError as e:
print "HTTPError({0}): {1}".format(e.errno, e.strerror)

time.sleep(10)

run()

最佳答案

根据 this bug report ,您可以通过从 Feed 元数据中删除您的电子邮件地址来解决此问题:

When I removed my e-mail address from the Feed Metadata (through the workbench) and re-ran api.feeds.get(FEED_ID) it worked just fine.

但是,当我查看 latest source code on github ,我可以看到 email 受支持:

class Feed(Base):
"""Xively Feed, which can contain a number of Datastreams.
:param title: A descriptive name for the feed
:param description: A longer text description of the feed
:param website: The URL of a website which is relevant to this feed e.g.
home page
:param email: A public contact email address for the provider of this feed
:param tags: Tagged metadata about the environment (characters ' " and
commas will be stripped out)
:param location: :class:`.Location` object for this feed
:param private: Whether the environment is private or not.
:type private: bool
Usage::
>>> import xively
>>> xively.Feed(title="Xively Office environment")
<xively.Feed(None)>
"""
VERSION = "1.0.0"
# Set id and feed directly as they aren't part of state. By setting them on
# the class they won't get entered into _data and will be set on the
# instance itself.
id = None
feed = None
_datastreams_manager = None
def __init__(self, title, description=None, website=None, email=None,
tags=None, location=None, private=None, datastreams=None):

It seems this bug was only fixed recently (June 27th) .您能否尝试从 github 上下载最新版本的 xively-python,并使用它来代替您拥有的当前版本?

关于Python:使用树莓派将传感器数据推送到 xively TypeError 时出错:__init__(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25760035/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com