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

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

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

  [复制链接]

2

主题

171

帖子

1169

积分

金牌会员

Rank: 6Rank: 6

积分
1169
金钱
998
HASS币
10
 楼主| 发表于 2019-1-24 09:10:04 | 显示全部楼层
gkq1877 发表于 2019-1-23 23:28
HA和NODE已经连接了  小爱和NODE没有反应


如下圖,  這是原始的流程, 自動查詢現有設備以及實現預設控制命令(例如  "打開", "關閉" ....) 的部份

兩個藍色區塊, 必須修改正確的HA服務器地址,  你的流程圖已經有看到 "Success" 文字,  

說明定時輪詢設備的設置已經正確.   再檢查另一個藍色區塊的HA服務器設置. (這是批配命令正確後, 發送給HA)

如果整個動作都正確完成了,  可以看到下面藍字區塊, 出現綠點點除錯文字 "xxxxxxxx called at: xxxxxxxxxxx"

就代表整個動作都完成了.    否則就還有其它問題.     你只說 "沒反應" ,   完全猜不到你是什麼問題的...



2019-01-24_09-00-09.gif
回复

使用道具 举报

9

主题

334

帖子

1285

积分

金牌会员

Rank: 6Rank: 6

积分
1285
金钱
951
HASS币
0
发表于 2019-1-25 20:20:01 | 显示全部楼层
liuje 发表于 2019-1-24 09:10
如下圖,  這是原始的流程, 自動查詢現有設備以及實現預設控制命令(例如  "打開", "關閉" ....) 的部份

...

QQ多少 能加你QQ吗?我的QQ78255583
回复

使用道具 举报

1

主题

167

帖子

608

积分

高级会员

Rank: 4

积分
608
金钱
441
HASS币
0
发表于 2019-2-2 21:03:09 | 显示全部楼层
ruianyu 发表于 2018-12-16 11:50
下面那个操作已成功是等他几秒延时过来了。

我和你的问题一样,黑色小爱,也是提示“bad number”
已经在github提issue了,不知道你解决了没有
回复

使用道具 举报

11

主题

359

帖子

2408

积分

金牌会员

Rank: 6Rank: 6

积分
2408
金钱
2049
HASS币
0
发表于 2019-2-3 18:03:02 | 显示全部楼层
suwill 发表于 2019-2-2 21:03
我和你的问题一样,黑色小爱,也是提示“bad number”
已经在github提issue了,不知道你解决了没有 ...

我是mico.sh不完整,替换一个完整的完美解决。
回复

使用道具 举报

0

主题

240

帖子

3940

积分

论坛元老

Rank: 8Rank: 8

积分
3940
金钱
3700
HASS币
0
发表于 2019-2-3 22:31:54 | 显示全部楼层

谢谢分享
回复

使用道具 举报

9

主题

235

帖子

1736

积分

金牌会员

Rank: 6Rank: 6

积分
1736
金钱
1501
HASS币
0
发表于 2019-2-4 20:44:24 | 显示全部楼层
照教程破解!!!未成功。。。。。每次要安Arduino板上的按钮才能破!!!哪出了问题不能自动每10S检测一次呢?
回复

使用道具 举报

1

主题

167

帖子

608

积分

高级会员

Rank: 4

积分
608
金钱
441
HASS币
0
发表于 2019-2-5 21:44:10 | 显示全部楼层
ruianyu 发表于 2019-2-3 18:03
我是mico.sh不完整,替换一个完整的完美解决。

请问哪里有完整的mico.sh?可以分享下么?
回复

使用道具 举报

11

主题

359

帖子

2408

积分

金牌会员

Rank: 6Rank: 6

积分
2408
金钱
2049
HASS币
0
发表于 2019-2-6 09:25:28 | 显示全部楼层
suwill 发表于 2019-2-5 21:44
请问哪里有完整的mico.sh?可以分享下么?

下面是我绿版用的


# @author FlashSoft
# == 自定义配置 ==============================================

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

# 设定asr拦截词,以竖线分割每个拦截词
asr_keywords=""

# 设定res拦截词,以竖线分割每个拦截词
res_keywords=""

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

# NodeRed账号密码
nodered_auth="homeassistant:12345678"
# 小爱asr日志地址
asr_file="/tmp/mipns/mibrain/mibrain_asr.log"
# 小爱res日志地址
res_file="/tmp/mipns/mibrain/mibrain_response.log"
# == /自定义配置 ==============================================

# 解决可能存在第一次文件不存在问题
touch ${asr_file}
touch ${res_file}
res_md5=""
last_time="0"

echo "==============================================================="
echo ""
echo "      NodeRed服务地址: ${nodered_url}"
echo "      NodeRed账号密码: `[ "${nodered_auth}" == ":" ] && echo "无密码" || echo "有密码"`     "
echo "            asr拦截词: `[ "${asr_keywords}" == "" ] && echo "无拦截词" || echo ${asr_keywords}`    "
echo "            res拦截词: `[ "${res_keywords}" == "" ] && echo "无拦截词" || echo ${res_keywords}`    "
echo "       拦截词更新频率: `[ "${keywords_update_timeout}" == "0" ] && echo "不更新" || echo ${keywords_update_timeout}`    "
echo ""
echo "==============================================================="


echo "开始验证NodeRed访问是否通畅"
echo ""
header=`curl --insecure –connect-timeout 2 -m 2 -sI -u "${nodered_auth}" ${nodered_url}`
if [ -z "`echo ${header}`" ];then
  echo "验证不通过: NodeRed网址不通"
  exit
else
  if [ -z "`echo "${header}" |grep 'HTTP/'|awk '($2==200){print 1}'`" ];then
    echo "验证不通过: NodeRed接口状态值非200 [可能密码不正确]"
    exit
  else
    echo "验证通过"
  fi
fi

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}`

   
    miai_domain=`echo "${res_content}"|awk -F '"domain": ' '{print $2}'|awk -F '"' '{print $2}'`
    miai_errcode=`echo "${res_content}"|awk -F '\"extend\":' '{print $2}'|awk -F '\"code\": ' '{print $2}'|awk -F ',' '($1>200){print $1}'`

    echo "== 有内容更新 | domain: ${miai_domain} errcode: ${miai_errcode}"
   
    if ([[ ! -z ${asr_keywords} ]] && [[  ! -z `echo "${asr_content}"|awk 'match($0,/'${asr_keywords}'/){print 1}'` ]]) || ([[ ! -z ${res_keywords} ]] && [[  ! -z `echo "${res_content}"|awk 'match($0,/'${res_keywords}'/){print 1}'` ]]) || [ ${miai_errcode} ];then
      echo "== 试图停止"

      # @TODO: doamin是scenes的情况下,暂停播放,记录播放状态并暂停以及继续播放时有问题的
      # 为了保证不影响暂停效果,所以调整不同的停止播放方式
      if [ "${miai_domain}" != "scenes" ];then
        echo "== 其他模式 | ${miai_domain}"
        # 若干循环,直到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
      else
        echo "== 场景模式 | ${miai_domain}"
        seq 1 10 | while read line;do
          ubus call mediaplayer player_play_operation {\"action\":\"stop\"} > /dev/null 2>&1
          sleep 0
        done
      fi

      # 记录播放状态并暂停,方便在HA服务器处理逻辑的时候不会插播音乐,0为未播放,1为播放中,2为暂停
      play_status=`ubus -t 1 call mediaplayer player_get_play_status | awk -F 'status' '{print $2}' | cut -c 5`
      if [ "${miai_domain}" != "scenes" ];then
        ubus call mediaplayer player_play_operation {\"action\":\"pause\"} > /dev/null 2>&1
      fi

      # @todo:
      # 转发asr和res给服务端接口,远端可以处理控制逻辑完成后返回需要播报的TTS文本
      # 2秒连接超时,4秒传输超时
      tts=`curl --insecure –connect-timeout 2 -m 2 -s -u "${nodered_auth}" --data-urlencode "asr=${asr_content}" --data-urlencode "res=${res_content}" "${nodered_url}/miai"`
      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
          media_type=`ubus -t 1 call mediaplayer player_get_play_status|awk -F 'media_type' '{print $2}'|cut -c 5`
          if [ "${media_type}" == "" ] || [ "${media_type}" -ne "1" ];then
            echo "== 播报TTS结束"
            break
          fi
          sleep 1
        done
      fi

      # 如果之前音乐是播放的则接着播放
      if [[ "${play_status}" -eq "1" ]];then
        echo "== 继续播放音乐"
        # 这里延迟一秒是因为前面处理如果太快,可能引起恢复播放不成功
        sleep 1
        if [ "${miai_domain}" != "scenes" ];then
          ubus call mediaplayer player_play_operation {\"action\":\"play\"} > /dev/null 2>&1
        fi
      fi
    fi

    log_res=`curl --insecure –connect-timeout 2 -m 2 -s -u "${nodered_auth}" --data-urlencode "asr=${asr_content}" --data-urlencode "res=${res_content}" "${nodered_url}/miai/set/log"`
    echo "== 投日志 | ${log_res}"
  fi

  # 以某频度去更新拦截词
  if [[ "${keywords_update_timeout}" -gt "0" ]];then
    now=`date +%s`
    step=`expr ${now} - ${last_time}`
    # 根据设定时间间隔获取更新词
    if [[ "$step" -gt "${keywords_update_timeout}" ]];then
        asr_keywords=`curl --insecure –connect-timeout 2 -m 2 -s -u "${nodered_auth}" "${nodered_url}/miai/get/asr"`
        res_keywords=`curl --insecure –connect-timeout 2 -m 2 -s -u "${nodered_auth}" "${nodered_url}/miai/get/res"`
        echo "== 更新关键词 | asr关键词内容: ${asr_keywords} | res关键词内容: ${res_keywords}"
        last_time=`date +%s`
    fi
  fi
  sleep 0
done

评分

参与人数 1金钱 +1 收起 理由
suwill + 1 感谢回复,有时间我试试

查看全部评分

回复

使用道具 举报

2

主题

171

帖子

1169

积分

金牌会员

Rank: 6Rank: 6

积分
1169
金钱
998
HASS币
10
 楼主| 发表于 2019-2-6 13:39:41 | 显示全部楼层
oemsys 发表于 2019-2-4 20:44
照教程破解!!!未成功。。。。。每次要安Arduino板上的按钮才能破!!!哪出了问题不能自动每10S检测一次 ...

你是不是燒錄的arduino代碼是原始的 ?    我後來已經更新成每10秒會自動運行的版本,  如下,  check看看..
#include <Arduino.h>
 
void setup()
{
  Serial.begin(115200); 
  pinMode(LED_BUILTIN, OUTPUT);  
  for (int i=0; i<30; i++) {
    digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
    delay(50);
  }
  digitalWrite(LED_BUILTIN, LOW);   
}
 
 
void loop()
{
  // 每10秒檢查 dropbear 以及 mico.sh 是否運行? 如果沒有,則打開ssh以及運行mico.sh
  Serial.println();
  Serial.println("test `ps|grep 'dropbear -r /data/dropbear_rsa_host_key'|grep -v grep|wc -l` -eq 0 && dropbear -r /data/dropbear_rsa_host_key");
  Serial.println();
  Serial.println("test `ps|grep 'sh /data/mico.sh'|grep -v grep|wc -l` -eq 0 && sh /data/mico.sh > /tmp/mico.log 2>&1 &");
  delay(10000); 
}




回复

使用道具 举报

6

主题

180

帖子

893

积分

论坛积极会员

积分
893
金钱
713
HASS币
0
发表于 2019-2-16 10:50:04 | 显示全部楼层
命令窗口打开就闪退,三台电脑都是酱紫,无助,楼主有解决方案吗
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-29 20:52 , Processed in 0.059156 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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