『瀚思彼岸』» 智能家居技术论坛

标题: 请求 Python 大佬帮帮忙!!! [打印本页]

作者: 17620402030    时间: 2024-7-3 10:12
标题: 请求 Python 大佬帮帮忙!!!
本帖最后由 17620402030 于 2024-7-3 10:26 编辑

请求 Python 大佬帮帮忙!!!

配置情况:在阿里云 Docker 中安装了 Home Assistant(Core 2024.6.4),且已安装并启用 PythonScriptsPro - 1.0.2 集成。

在 Home Assistant 中,新建 Python 文件,旨在将经纬度通过百度转换成中文地址,然后通过 states.set 新建名为“百度地址”的实体并进行赋值。

然而,在进行 http get 操作时总是出错,不清楚究竟是环境问题还是代码问题,诚求大佬帮忙分析。



import requests
import json
import hass.states  
# 假设已经正确导入了 Home Assistant 的 states 模块

# 替换为你在百度地图开放平台申请的 ak,为字符串添加引号
ak = "TwvTSt10wfCiVK5mTQFxb6sX"

def get_chinese_address(latitude, longitude):
    url = f'http://api.map.baidu.com/reverse_geocoding/v3/?ak={ak}&output=json&coordtype=wgs84ll&location={latitude},{longitude}'
    response = requests.get(url)
    if response.status_code == 200:
        data = json.loads(response.text)
        if data['status'] == 0:
            return data['result']['formatted_address']
    return '获取地址失败'

latitude = 39.9042
longitude = 116.4074

# 获取中文地址
chinese_address = get_chinese_address(latitude, longitude)

# 使用 hass.states.set 进行赋值
hass.states.set('sensor.baidudizhi', chinese_address, {'friendly_name': '百度地址'})
作者: flamestsui    时间: 2024-7-3 11:23
本帖最后由 flamestsui 于 2024-7-3 11:28 编辑

代码没问题,Ak有问题我还没安装“Python Scripts Pro”
我安装试试
[attach]61139[/attach]


作者: 花开堪折枝    时间: 2024-7-3 11:39
高德地图的 nodered节点支持相关功能
作者: windowsgood    时间: 2024-7-3 13:08
如在使用V3.0 时“鉴权失败“ 可在”控制台“->"查看应用"->“设置” 确认是否已获得“全球逆地理编码服务”权限。我看文档是这样说的
你开通了权限吗
作者: yjl    时间: 2024-7-3 13:28
本帖最后由 yjl 于 2024-7-3 14:43 编辑

1、你没有提供具体的报错信息,我手头也没有python环境,但是将你的Url用浏览器访问了一下,返回值的状态是200,但是提示AK有误,如图。
2、代码本身逻辑也有点问题,return前面没有else,而是直接return '获取地址失败',所以你这个函数就只会返回字符串 '获取地址失败'。你可以将最后这个retrun和内层的if对齐,或者放在前面加个else和外层if对齐,具体看response返回内容。
以上两点请参考。
作者: 17620402030    时间: 2024-7-3 19:10
flamestsui 发表于 2024-7-3 11:23
代码没问题,Ak有问题我还没安装“Python Scripts Pro”
我安装试试

感谢大佬关注帮助

有效正确ak = "TwvTSt10wfCiU8G8BFMZVK5mTQFxb6sX"

https://api.map.baidu.com/revers ... mp;location=39.9042,116.4074
浏览器能获取有效反馈

以下最简单py文件,亦错误。
import requests
import hass.states


url = "https://api.map.baidu.com/reverse_geocoding/v3/?ak=TwvTSt10wfCiU8G8BFMZVK5mTQFxb6sX&output=json&coordtype=wgs84ll&location=39.9042,116.4074"
response = requests.get(url)
hass.states.set('sensor.baidudizhi', response, {'friendly_name': '百度地址'})



错误码
日志记录器: homeassistant.components.python_script.ll123.py
来源: components/python_script/__init__.py:270
集成: Python Scripts (文档, 问题)
首次出现: 18:25:58 (1 次总计出现)
上次记录: 18:25:58

Error executing script
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/python_script/__init__.py", line 270, in execute
    exec(compiled.code, restricted_globals)  # noqa: S102
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "ll123.py", line 1, in <module>
ImportError: __import__ not found



作者: 17620402030    时间: 2024-7-3 19:14
花开堪折枝 发表于 2024-7-3 11:39
高德地图的 nodered节点支持相关功能

主要是后续还有增加其它功能
作者: 17620402030    时间: 2024-7-3 19:15
windowsgood 发表于 2024-7-3 13:08
如在使用V3.0 时“鉴权失败“ 可在”控制台“->"查看应用"->“设置” 确认是否已获得“全球逆地理编码服务 ...

百度那边没有问题
感谢大佬关注帮助

有效正确ak = "TwvTSt10wfCiU8G8BFMZVK5mTQFxb6sX"

https://api.map.baidu.com/revers ... mp;location=39.9042,116.4074
浏览器能获取有效反馈

以下最简单py文件,亦错误。
import requests
import hass.states


url = "https://api.map.baidu.com/reverse_geocoding/v3/?ak=TwvTSt10wfCiU8G8BFMZVK5mTQFxb6sX&output=json&coordtype=wgs84ll&location=39.9042,116.4074"
response = requests.get(url)
hass.states.set('sensor.baidudizhi', response, {'friendly_name': '百度地址'})



错误码
日志记录器: homeassistant.components.python_script.ll123.py
来源: components/python_script/__init__.py:270
集成: Python Scripts (文档, 问题)
首次出现: 18:25:58 (1 次总计出现)
上次记录: 18:25:58

Error executing script
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/python_script/__init__.py", line 270, in execute
    exec(compiled.code, restricted_globals)  # noqa: S102
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "ll123.py", line 1, in <module>
ImportError: __import__ not found



作者: 17620402030    时间: 2024-7-3 19:18
yjl 发表于 2024-7-3 13:28
1、你没有提供具体的报错信息,我手头也没有python环境,但是将你的Url用浏览器访问了一下,返回值的状态是 ...

感谢大佬关注帮助

有效正确ak = "TwvTSt10wfCiU8G8BFMZVK5mTQFxb6sX"

https://api.map.baidu.com/revers ... mp;location=39.9042,116.4074
浏览器能获取有效反馈

以下最简单py文件,亦错误。
import requests
import hass.states


url = "https://api.map.baidu.com/reverse_geocoding/v3/?ak=TwvTSt10wfCiU8G8BFMZVK5mTQFxb6sX&output=json&coordtype=wgs84ll&location=39.9042,116.4074"
response = requests.get(url)
hass.states.set('sensor.baidudizhi', response, {'friendly_name': '百度地址'})



错误码
日志记录器: homeassistant.components.python_script.ll123.py
来源: components/python_script/__init__.py:270
集成: Python Scripts (文档, 问题)
首次出现: 18:25:58 (1 次总计出现)
上次记录: 18:25:58

Error executing script
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/python_script/__init__.py", line 270, in execute
    exec(compiled.code, restricted_globals)  # noqa: S102
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "ll123.py", line 1, in <module>
ImportError: __import__ not found



作者: yjl    时间: 2024-7-3 19:51
17620402030 发表于 2024-7-3 19:18
感谢大佬关注帮助

有效正确ak = "TwvTSt10wfCiU8G8BFMZVK5mTQFxb6sX"

应该是环境问题了,python中要import外部模块(库)时需要先在环境中安装pip install该模块,从报错信息看,应该是缺少外部模块,先安装一下要使用的模块,在逐步排查
作者: imwyh    时间: 2024-7-3 21:20
你这段代码不会是GPT写的吧?
作者: 没有创意    时间: 2024-7-3 22:48
用nodered简单点,一个函数,一个请求
作者: windowsgood    时间: 2024-7-4 14:06
17620402030 发表于 2024-7-3 19:18
感谢大佬关注帮助

有效正确ak = "TwvTSt10wfCiU8G8BFMZVK5mTQFxb6sX"

这个请求是正确的,能获取到地址
作者: windowsgood    时间: 2024-7-4 14:16
gpt大法就好了,代码如下

import requests

def get_formatted_address(ak, latitude, longitude):
    url = "http://api.map.baidu.com/reverse_geocoding/v3/"
    params = {
        'ak': ak,
        'output': 'json',
        'coordtype': 'wgs84ll',
        'location': f'{latitude},{longitude}'
    }
   
    response = requests.get(url, params=params)
   
    if response.status_code == 200:
        data = response.json()
        if data.get('status') == 0:
            return data['result']['formatted_address']
    return None

ak = 'TwvTSt10wfCiU8G8BFMZVK5mTQFxb6sX'  
latitude = 39.9118
longitude = 116.4200

address = get_formatted_address(ak, latitude, longitude)
print(address)
作者: 17620402030    时间: 2024-7-4 14:30
windowsgood 发表于 2024-7-4 14:16
gpt大法就好了,代码如下

import requests

日志记录器: homeassistant.components.python_script.my_baidu.py
来源: components/python_script/__init__.py:270
集成: Python Scripts (文档, 问题)
首次出现: 14:29:40 (1 次总计出现)
上次记录: 14:29:40

Error executing script
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/python_script/__init__.py", line 270, in execute
    exec(compiled.code, restricted_globals)  # noqa: S102
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "my_baidu.py", line 5, in <module>
ImportError: __import__ not found

作者: windowsgood    时间: 2024-7-4 15:02
你这是增加了代码吧,我这执行正常的
作者: 17620402030    时间: 2024-7-4 15:23
windowsgood 发表于 2024-7-4 15:02
你这是增加了代码吧,我这执行正常的

没有修改代码,看来是我的环境有问题了




欢迎光临 『瀚思彼岸』» 智能家居技术论坛 (https://bbs.hassbian.com/) Powered by Discuz! X3.5