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

 找回密码
 立即注册
楼主: liuje

[新奇玩法] 解決新版 [綠色PCB小愛同學] 無法寫入檔案+開機ssh+mico(3P排....

  [复制链接]

3

主题

160

帖子

1747

积分

金牌会员

Rank: 6Rank: 6

积分
1747
金钱
1587
HASS币
0
发表于 2019-4-10 02:55:20 | 显示全部楼层
谢谢楼主分享。
回复

使用道具 举报

0

主题

28

帖子

105

积分

注册会员

Rank: 2

积分
105
金钱
77
HASS币
0
发表于 2019-4-14 22:49:52 | 显示全部楼层

厉害了,大佬们给力
回复

使用道具 举报

0

主题

150

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
金钱
1113
HASS币
0
发表于 2019-4-20 08:01:46 | 显示全部楼层
谢谢分享。
回复

使用道具 举报

3

主题

217

帖子

1443

积分

金牌会员

Rank: 6Rank: 6

积分
1443
金钱
1226
HASS币
10
发表于 2019-5-7 13:59:16 | 显示全部楼层
谢谢大神分享,收下学习
回复

使用道具 举报

69

主题

691

帖子

4242

积分

论坛元老

Rank: 8Rank: 8

积分
4242
金钱
3546
HASS币
80
发表于 2019-5-28 23:02:09 | 显示全部楼层
按照你上述方法破解,也全部使用你修改的mico.sh(复制全部内容覆盖F大一键安装的mico.sh,并修改了我的node-red地址和密码),好像破解成功,可是node-red中怎么设置都无法成功控制设置。不知何故,请指导,非常感谢。

绿板小爱重新破解的问题
https://bbs.hassbian.com/thread-7324-1-1.html
(出处: 『瀚思彼岸』» 智能家居第一站)
回复

使用道具 举报

0

主题

9

帖子

55

积分

注册会员

Rank: 2

积分
55
金钱
46
HASS币
0
发表于 2019-6-9 19:09:58 | 显示全部楼层
本帖最后由 小猪麦兜2 于 2019-6-10 13:41 编辑

我这外挂了单片机,本来已经可以使用单片机开启ssh和拦截了,大概过了一周,今天重启小爱后发现不好使了。我用TTL连接电脑并尝试敲了这俩行命令都可以正常执行。
test `ps|grep 'dropbear -r /data/dropbear_rsa_host_key'|grep -v grep|wc -l` -eq 0 && dropbear -r /data/dropbear_rsa_host_key
test `ps|grep 'sh /data/mico.sh'|grep -v grep|wc -l` -eq 0 && sh /data/mico.sh > /tmp/mico.log 2>&1 &


所以因该是单片机的串口出了问题,请问我如何能调试呢?难道单片机坏了?


回复

使用道具 举报

3

主题

160

帖子

1747

积分

金牌会员

Rank: 6Rank: 6

积分
1747
金钱
1587
HASS币
0
发表于 2019-6-13 21:41:05 | 显示全部楼层
是不是在单片机里面的程序加个判断,检查没有密匙的话,则生成密匙,如果升级或重置后,都不用拆机了。
回复

使用道具 举报

3

主题

160

帖子

1747

积分

金牌会员

Rank: 6Rank: 6

积分
1747
金钱
1587
HASS币
0
发表于 2019-6-14 23:25:09 | 显示全部楼层
这个代码修复了TTS那4秒钟的问题,我发现最新代码TTS部分使用"media_type"字段做为判断会出错,会造成判断TTS结束一直退不出来,要走完20秒才行,所以唤醒太快的话出现一些奇怪的问题。
# @author FlashSoft
# == 自定义配置========================================
# 设定拦截词,以竖线分割每个拦截词,被拦截的内容会转发给nodered服务器进行处理
keywords="打开|关闭"

# 配置nodered的接收地址
nodered_url="http://192.168.10.2:1880/miai"

# 配置从nodered更新拦截词的间隔,单位秒
# 0代表不更新,一直使用本地拦截词
# 大于0则更新,会从上面设定的nodered_url去获取拦截词,并覆盖本地的拦截词
keywords_update_timeout=30

# == /自定义配置========================================
  
asr_file="/tmp/mipns/mibrain/mibrain_asr.log"
res_file="/tmp/mipns/mibrain/mibrain_response.log"
nodered_auth=":"
  
# 解决可能存在第一次文件不存在问题
touch $res_file && touch $asr_file
res_md5=""
last_time=`date +%s`
  
echo "== 拦截词: $keywords"
echo "== NodeRed地址:$nodered_url"
echo "== 更新拦截词时间间隔 $keywords_update_timeout 秒"
  
while true;do
  # 计算md5值 
  new_md5=`md5sum $res_file | awk '{print $1}'`
  # 如果是第一次,就赋值比较用的md5
  [ -z $res_md5 ] && res_md5=$new_md5
  # 如果md5不等则文件变化
  if [[ $new_md5 != $res_md5 ]];then
    # 记录md5变化后结果
    res_md5=$new_md5
  
     
    # 获取asr内容
    asr_content=`cat $asr_file`
    # 获取res内容
    res_content=`cat $res_file`
  
    # echo $asr_content
    # echo ""
    # echo $res_content
 
    # 如果拦截词不为空,且匹配到了拦截词则试图拦截
 
    # if [ "`echo "$res_content"|grep '"domain": "smartMiot"'`" ];then
    miai_domain=`echo "$res_content"|awk -F '"domain": ' '{print $2}'|awk -F '"' '{print $2}'`
 
    echo "== 有内容更新 | type: $miai_domain"
 
    if ([[ ! -z $keywords ]] && [[  ! -z `echo $res_content|awk 'match($0,/'$keywords'/){print 1}'` ]]) || [ "`echo "$res_content"|grep SM_NO_DEVICE_TO_OPERATE_DEVICE_LIST_NOT_EMPTY`" ];then
      echo "== 试图停止"
      # 若干循环,直到resume成功一次直接跳出
      seq 1 200 | while read line;do
        code=`ubus call mediaplayer player_play_operation {"action":"resume"}|awk -F 'code":' '{print $2}'`
        if [[ "$code" -eq "0" ]];then
          echo "== 停止成功"
          break
        fi
        sleep 0
      done
  
      # 记录播放状态并暂停,方便在HA服务器处理逻辑的时候不会插播音乐,0为未播放,1为播放中,2为暂停
      play_status=`ubus -t 1 call mediaplayer player_get_play_status | awk -F 'status' '{print $2}' | cut -c 5`
      # echo $play_status
      ubus call mediaplayer player_play_operation {"action":"pause"} > /dev/null 2>&1
  
      # @todo:
      # 转发asr和res给服务端接口,远端可以处理控制逻辑完成后返回需要播报的TTS文本
      # 2秒连接超时,4秒传输超时
      tts=`curl -u "$nodered_auth" –connect-timeout 2 -m 4 -s --data-urlencode "asr=$asr_content" --data-urlencode "res=$res_content" $nodered_url`
      echo "== 请求完成"
 
      # 如果远端返回内容不为空则用TTS播报之
      if [[ -n "$tts" ]];then
        echo "== 播报TTS | TTS内容: $tts"
        ubus call mibrain text_to_speech "{"text":"$tts","save":0}" > /dev/null 2>&1
        # 最长20秒TTS播报时间,20秒内如果播报完成跳出
        seq 1 20 | while read line;do
          status=`ubus -t 1 call mediaplayer player_get_play_status|awk -F 'status' '{print $2}'|cut -c 5`
          if [ "$status" -ne "1" ];then
            echo "== 播报TTS结束"
            break
          fi
          sleep 1
        done
      fi
  
      # 如果之前音乐是播放的则接着播放
      if [[ "$play_status" -eq "1" ]];then
        echo "== 继续播放音乐"
        # 这里延迟一秒是因为前面处理如果太快,可能引起恢复播放不成功
        sleep 1
        ubus call mediaplayer player_play_operation {"action":"play"} > /dev/null 2>&1
      fi
    fi
  fi
  
  # 以某频度去更新拦截词
  if [[ "$keywords_update_timeout" -gt "0" ]];then
    now=`date +%s`
    step=`expr $now - $last_time`
    # 根据设定时间间隔获取更新词
    if [[ "$step" -gt "$keywords_update_timeout" ]];then
        keywords=`curl -u "$nodered_auth" –connect-timeout 2 -m 4 -s "${nodered_url}/get/asr"`
        echo "== 更新关键词 | 关键词内容: $keywords"
        last_time=`date +%s`
    fi
  fi
  sleep 0
done



回复

使用道具 举报

22

主题

176

帖子

875

积分

高级会员

Rank: 4

积分
875
金钱
699
HASS币
0
发表于 2019-6-29 17:26:43 | 显示全部楼层
大家有没遇到这个问题:加了pro mini后,拔掉小爱的电源,再插上小爱没亮灯,再拔,等上10来秒,再插上,小爱的灯才亮;我试过,不接入pro mini(不通电),就没上面的问题。
回复

使用道具 举报

17

主题

357

帖子

2084

积分

论坛DIY达人

积分
2084
金钱
1717
HASS币
40
发表于 2019-9-24 10:02:13 | 显示全部楼层
买了个二手小爱,,就等快递到了开干啦
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-24 20:51 , Processed in 0.245557 second(s), 30 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表