模索する俺たち

好きなことを何でも書くブログです。

「模索する俺たち」のURLが変わりました。
3秒後に自動的にリダイレクトします。

Amazonのアレクサで自分用の「ゴミの日」スキルを作ってみた件

できました!

というわけで、前回、ゴミの日を教えてくれるAmazonのAlexa(アレクサ)のスキルを作ってみようと思い立ったのです。

www.mo3ore.com

 

 

慣れないJavaScriptにいろいろ悩むところはありましたけど、どうにか完成しました。

問い合わせすると、音声と画面で教えてくれる感じです。

f:id:prinkuma:20190728235701j:plain

 

詳しい様子は撮影して動画にしてみました。

しかも勢い余りまして、夏ということでホラー仕立てにしてしまいました。

よろしければご覧ください。


ゴミの収集日を教えてくれる(ドキッとする)Alexaのスキルを作ってみました

 

なんだこれは

勢い余って作ったホラー部分(BGMも後付けです)はどうでもいいんですけど、とにかく自分が望むゴミの日を教えてくれるスキルができました。

なお、動画内のゴミの収集日は架空のものですし、このスキルは一般公開していなくてあくまでも自分用のものです。

 

とにかく、こんな感じで自分だけが使うスキルであれば割とお手軽に作れるので遊ぶと面白いですよ。 

ソースコード

せっかくなので、自分用のバックアップもかねて、できあがったソースコードをここに載せておきたいと思います。(ブログに書くには長すぎるような気はしますが)

チュートリアルをベースにして改造しているので無駄な部分も多く、JavaScriptの書き方もまだよくわかっていないので決してエレガンスなプログラムではないと思いますけど動いたには動いたので……。

 

なお、チュートリアルの状態から変更が入っているソースコードはたぶん2つなので、スキル開発の画面までいったら以下の2つのコードの部分をそっくり置き換えれば、さっきの動画と同じ動作をするスキルができあがるのではないかと思います。

ビルド画面の「JSONエディター」のコード

このコードは、開発画面(ブラウザ上)で、どういう言葉を受け付けるかを入力していくと勝手にできあがるコードです。

自分で作る必要はないのです。 

{
    "interactionModel": {
        "languageModel": {
            "invocationName": "ゴミの日",
            "intents": [
                {
                    "name": "AMAZON.CancelIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.HelpIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.StopIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.NavigateHomeIntent",
                    "samples": []
                },
                {
                    "name": "RuleIntent",
                    "slots": [
                        {
                            "name": "gomi",
                            "type": "GOMI"
                        }
                    ],
                    "samples": [
                        "ゴミの曜日は",
                        "ゴミの曜日を教えて",
                        "{gomi} は何曜日",
                        "{gomi} の曜日を教えて",
                        "ルールを教えて",
                        "{gomi} の曜日は",
                        "ルールは"
                    ]
                },
                {
                    "name": "DayIntent",
                    "slots": [
                        {
                            "name": "date",
                            "type": "AMAZON.DATE"
                        }
                    ],
                    "samples": [
                        "{date} を教えて",
                        "{date} のゴミは",
                        "{date} のゴミ",
                        "{date} は何の日か教えて",
                        "{date} は何の日",
                        "{date} は何",
                        "{date} は",
                        "{date} のゴミを教えて"
                    ]
                },
                {
                    "name": "NextIntent",
                    "slots": [
                        {
                            "name": "gomi",
                            "type": "GOMI"
                        }
                    ],
                    "samples": [
                        "今度の {gomi} の日を教えて",
                        "今度の {gomi} の日は",
                        "今度の {gomi} はいつ",
                        "今度の {gomi} は",
                        "{gomi} はいつ",
                        "{gomi} は",
                        "{gomi} の日を教えて",
                        "{gomi} の日は",
                        "次の {gomi} の日は",
                        "次の {gomi} は"
                    ]
                },
                {
                    "name": "AllNextIntent",
                    "slots": [],
                    "samples": [
                        "今度の収集はいつ",
                        "次の収集はいつ",
                        "次の一覧を教えて",
                        "今度の一覧を教えて",
                        "次の一覧は",
                        "今度の一覧は",
                        "全ての次の日を教えて",
                        "今度は",
                        "今度の収集日を教えて",
                        "今度の日を教えて",
                        "次の収集日を教えて",
                        "次の日を教えて",
                        "今度の日は",
                        "今度のゴミの日は",
                        "次の日は",
                        "全ての次の日は",
                        "次のゴミの日は",
                        "次の収集日は",
                        "次は",
                        "収集日は",
                        "収集日一覧は"
                    ]
                },
                {
                    "name": "AMAZON.MoreIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.NavigateSettingsIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.NextIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.PageUpIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.PageDownIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.PreviousIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.ScrollRightIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.ScrollDownIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.ScrollLeftIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.ScrollUpIntent",
                    "samples": []
                }
            ],
            "types": [
                {
                    "name": "GOMI",
                    "values": [
                        {
                            "id": "3",
                            "name": {
                                "value": "プラスチック"
                            }
                        },
                        {
                            "id": "2",
                            "name": {
                                "value": "空き缶"
                            }
                        },
                        {
                            "id": "1",
                            "name": {
                                "value": "不燃ごみ",
                                "synonyms": [
                                    "不燃"
                                ]
                            }
                        },
                        {
                            "id": "0",
                            "name": {
                                "value": "可燃ごみ",
                                "synonyms": [
                                    "可燃"
                                ]
                            }
                        }
                    ]
                }
            ]
        }
    }
}

 

コードエディタ画面のindex.js

こちらは作りたいスキルを実現するために自分で書いたほうです。(半分くらいはチュートリアルで出来上がっていたものがそのまま残っていると思います。)

今回は「次にやってくる第2金曜日は何日か」といった日付の計算をするようにしたので、そこがちょっと長くなったと思います。 

// This sample demonstrates handling intents from an Alexa skill using the Alexa Skills Kit SDK (v2).
// Please visit https://alexa.design/cookbook for additional examples on implementing slots, dialog management,
// session persistence, api calls, and more.
const Alexa = require('ask-sdk-core');

// 曜日コード
var youbiCD = ['日','月','火','水','木','金','土'];

// ゴミ種類コード
// ゴミ種類名はスロットと一致させること。
var gomiCD = {0:'可燃ごみ', 1:'不燃ごみ', 2:'空き缶', 3:'プラスチック'};

// 収集日判定関数
// 日付とゴミ種類コードより、収集日かどうかをBooleanで返す。
function syusyubiHantei(date, gomiCDkey){
    switch(Number(gomiCDkey)){
        case 0:
            // 可燃ごみ 月曜か木曜
            if(date.getDay() === 1 || date.getDay() === 4){
                return true;
            }
            return false;
        case 1:
            // 不燃ごみ 火曜か木曜
            if(date.getDay() === 2 || date.getDay() === 4){
                return true;
            }
            return false;
        case 2:
            // 空き缶 第2第4金曜
            var c2a = daiYoubi(date.getFullYear(), date.getMonth(), 2, 5); // 第2金曜
            var c2b = daiYoubi(date.getFullYear(), date.getMonth(), 4, 5); // 第4金曜
            if((date.getFullYear() === c2a.getFullYear() && date.getMonth() === c2a.getMonth() && date.getDate() === c2a.getDate()) ||
               (date.getFullYear() === c2b.getFullYear() && date.getMonth() === c2b.getMonth() && date.getDate() === c2b.getDate())){
                return true;
            }
            return false;
        case 3:
            // プラスチック 第1第3火曜
            var c3a = daiYoubi(date.getFullYear(), date.getMonth(), 1, 2); // 第1火曜
            var c3b = daiYoubi(date.getFullYear(), date.getMonth(), 3, 2); // 第3火曜
            if((date.getFullYear() === c3a.getFullYear() && date.getMonth() === c3a.getMonth() && date.getDate() === c3a.getDate()) ||
               (date.getFullYear() === c3b.getFullYear() && date.getMonth() === c3b.getMonth() && date.getDate() === c3b.getDate())){
                return true;
            }
            return false;
    }
    // Error
    console.log('syusyubiHantei()でエラー')
    return false; 
}

// 第x曜日返却関数
// 年月から第i j曜日(第2土曜日など)の日付(Date型)を返す。
function daiYoubi(ay, am, ai, aj){
    var y = Number(ay);
    var m = Number(am);
    var i = Number(ai);
    var j = Number(aj);
    
    var date;
    var w = 0;
    for(var d = 1; d <= 31; d++){
        date = new Date(y, m, d);
        if(date.getDay() === j){
            w++;
            if(i === w){
                return date;
            }
        }
    }
    // Error
    console.log('daiYoubi()でエラー');
    return;
}

// 次のゴミの日のテキスト返却関数(spc:スピーチ用、dsp:表示用)
function getNextGomiText(gomiCDkey){
    // 今日の日付を取得する。UTC+9の調整をする。また、日付変数にコピーする。
    var today = new Date(); 
    today.setHours(today.getHours() + 9);
    var hiduke = new Date(today.getTime());

    // 1日ずつチェックする(日付が決まったらループ終了)
    do{
        hiduke.setDate(hiduke.getDate() + 1); //1日進める
    }while (! syusyubiHantei(hiduke, gomiCDkey));
    
    // 残り日数を算出
    var nokoriDate = (hiduke.getTime() - today.getTime())/(1000*60*60*24)

    // 応答文の頭作成
    var speechText = `次の${gomiCD[gomiCDkey]}の日は、${hiduke.getDate()}日 ${youbiCD[hiduke.getDay()]}曜日です。`;
    var displayText = `<font size="2">・${gomiCD[gomiCDkey]}<br/>&#160;&#160;&#160;&#160;${hiduke.getDate()}日 ${youbiCD[hiduke.getDay()]}曜日</font>`;

    // 応答文残り日数作成
    displayText += '<font size="2">';
    switch (nokoriDate) {
        case 1:
            speechText += 'あしたです。';
            displayText += '(あした)';
            break;
        case 2:
            speechText += 'あさってです。';
            displayText += '(あさって)';
            break;
        default:
            speechText += `あと${nokoriDate}日です。`;
            displayText += `(${nokoriDate}日後)`;
    }    
    displayText += '</font>';
    
    return {'spc': speechText, 'dsp': displayText};
}

const LaunchRequestHandler = {
    canHandle(handlerInput) {
        return handlerInput.requestEnvelope.request.type === 'LaunchRequest';
    },
    handle(handlerInput) {
        const speechText = '「ゴミの日」へようこそ';
        return handlerInput.responseBuilder
            .speak(speechText)
            .reprompt(speechText)
            .getResponse();
    }
};

// 指定した日付に該当するゴミ種類を応答する
const DayIntentHandler = {
    canHandle(handlerInput) {
        return handlerInput.requestEnvelope.request.type === 'IntentRequest'
            && handlerInput.requestEnvelope.request.intent.name === 'DayIntent';
    },
    handle(handlerInput) {
        // slotからdateを取得
        var dateValue = handlerInput.requestEnvelope.request.intent.slots.date.value;
        
        // dateValueを分解、Date型へ
        var year = Number(dateValue.substr(0,4));
        var month = Number(dateValue.substr(5,2))-1;
        var day = Number(dateValue.substr(8,2));
        var date = new Date(year, month, day);
        
        // dateは日付かチェックして分岐(週とかが指定されている場合があるので)
        //var tMonth = targetDate.getMonth();
        if(month === date.getMonth()){
            // 日付が入ってきている
            //const speechText = `${day}`;
            // 収集日チェックしながら応答文作成
            var speechText = '';
            var displayText1 = '';
            var displayText2 = '';
            for (var g in gomiCD){
                if(syusyubiHantei(date, g)){
                    if(speechText.length > 0){
                        speechText += 'と、';
                        displayText2 += '<br/>';
                    }
                    speechText += gomiCD[g];
                    displayText2 += '・' + gomiCD[g];
                }
            }
            
            // 応答文作成
            if(speechText.length === 0){
                // 収集日なし
                speechText = '収集日ではありません。'
                displayText2 = '収集日では<br/>ありません'
            }else{
                // 収集日あり
                speechText += 'の日です。'
            }
            
            // 応答文の完成
            speechText = `${day}日 ${youbiCD[date.getDay()]}曜日は` + speechText;
            displayText1 = `${day}日 ${youbiCD[date.getDay()]}曜日`;
            
            //var speechText = syusyubiHantei(date,1);
            return handlerInput.responseBuilder
                .speak(speechText)
                .addRenderTemplateDirective({
                    type: 'BodyTemplate1',
                    title: displayText1,
                    textContent: {
                        primaryText: {
                            type: 'RichText',
                            text: displayText2
                        }
                    }
                })
                //.reprompt('add a reprompt if you want to keep the session open for the user to respond')
                .getResponse();
        }else{
            // 日付でないものが入ってきている
            const speechText = '日付を指定してください';
            return handlerInput.responseBuilder
                .speak(speechText)
                .reprompt(speechText)
                .getResponse();
        }
    }
};

// 指定されたゴミ種類の次の収集日を応答する
const NextIntentHandler = {
    canHandle(handlerInput) {
        return handlerInput.requestEnvelope.request.type === 'IntentRequest'
            && handlerInput.requestEnvelope.request.intent.name === 'NextIntent';
    },
    handle(handlerInput) {
        // slotからgomiのidを取得
        var gomiID = handlerInput.requestEnvelope.request.intent.slots.gomi.resolutions["resolutionsPerAuthority"][0]["values"][0]["value"]["id"];
        
        // 次のゴミの日の応答文を取得
        var retText = getNextGomiText(gomiID);
        
        return handlerInput.responseBuilder
            .speak(retText.spc)
            .addRenderTemplateDirective({
                type: 'BodyTemplate1',
                title: '次の収集日',
                textContent: {
                    primaryText: {
                        type: 'RichText',
                        text: retText.dsp
                    }
                }
            })
            //.reprompt('add a reprompt if you want to keep the session open for the user to respond')
            .getResponse();
    }
};

// すべてのゴミ種類の次の収集日を応答する
const AllNextIntentHandler = {
    canHandle(handlerInput) {
        return handlerInput.requestEnvelope.request.type === 'IntentRequest'
            && handlerInput.requestEnvelope.request.intent.name === 'AllNextIntent';
    },
    handle(handlerInput) {
        var funcRet;
        var speechText = '次の収集日をお知らせします。';
        var displayText = '';
        
        // すべてのゴミの次回の日の応答文を連結
        for (var g in gomiCD){
            funcRet = getNextGomiText(g);
            // スピーチテキスト結合
            speechText += funcRet.spc;
            // 表示テキスト結合
            if(displayText.length > 0){
                displayText += '<br/>';
            }
            displayText += funcRet.dsp;
        }
        
        //debug
        speechText += '。。あなたは、、3日後です。';
        displayText += '<br/><br/><font size="2">・あなた<br/>&#160;&#160;&#160;&#160;V虞ヌ日 テU駆曜日(3日後)</font>'

        return handlerInput.responseBuilder
            .speak(speechText)
            .addRenderTemplateDirective({
                type: 'BodyTemplate1',
                title: '次の収集日 一覧',
                textContent: {
                    primaryText: {
                        type: 'RichText',
                        text: displayText
                    }
                }
            })
            //.reprompt('add a reprompt if you want to keep the session open for the user to respond')
            .getResponse();
    }
};

// ゴミ収集ルール(曜日)を読み上げる
const RuleIntentHandler = {
    canHandle(handlerInput) {
        return handlerInput.requestEnvelope.request.type === 'IntentRequest'
            && handlerInput.requestEnvelope.request.intent.name === 'RuleIntent';
    },
    handle(handlerInput) {
        const speechText = '収集日をお知らせします。可燃ごみは月曜と木曜、不燃ごみは火曜と木曜、空き缶は第二第四金曜、プラスチックは第一第三火曜です。';
        return handlerInput.responseBuilder
            .speak(speechText)
            /* リスト形式で表示しようとしたがはみ出るのでボツ
            .addRenderTemplateDirective({
                type: 'ListTemplate1',
                backButton: 'HIDDEN',
                listItems:  [
                    {
                        token: '0',
                        textContent: {
                            primaryText: {
                                type: 'RichText',
                                text: '可燃ごみ:月曜と木曜'
                            }
                        }
                    },
                    {
                        token: '1',
                        textContent: {
                            secondaryText: {
                                type: 'RichText',
                                text: '不燃ごみ:火曜と木曜'
                            }
                        }
                    }
                ],
                title: '収集日'
            })
            */
            .addRenderTemplateDirective({
                type: 'BodyTemplate1',
                title: '収集日一覧',
                textContent: {
                    secondaryText: {
                        type: 'RichText',
                        text: '<font size="2">・可燃ごみ:月,木<br/>・不燃ごみ:火,木<br/>・空き缶:第2/第4金<br/>・プラスチック:第1/第3火</font>'
                    }
                }
            })
            //.reprompt('add a reprompt if you want to keep the session open for the user to respond')
            .getResponse();
    }
};
const HelpIntentHandler = {
    canHandle(handlerInput) {
        return handlerInput.requestEnvelope.request.type === 'IntentRequest'
            && handlerInput.requestEnvelope.request.intent.name === 'AMAZON.HelpIntent';
    },
    handle(handlerInput) {
        const speechText = '「明日は何の日?」などと聞いてください。';

        return handlerInput.responseBuilder
            .speak(speechText)
            .reprompt(speechText)
            .getResponse();
    }
};
const CancelAndStopIntentHandler = {
    canHandle(handlerInput) {
        return handlerInput.requestEnvelope.request.type === 'IntentRequest'
            && (handlerInput.requestEnvelope.request.intent.name === 'AMAZON.CancelIntent'
                || handlerInput.requestEnvelope.request.intent.name === 'AMAZON.StopIntent');
    },
    handle(handlerInput) {
        const speechText = 'またね';
        return handlerInput.responseBuilder
            .speak(speechText)
            .getResponse();
    }
};
const SessionEndedRequestHandler = {
    canHandle(handlerInput) {
        return handlerInput.requestEnvelope.request.type === 'SessionEndedRequest';
    },
    handle(handlerInput) {
        // Any cleanup logic goes here.
        return handlerInput.responseBuilder.getResponse();
    }
};

// The intent reflector is used for interaction model testing and debugging.
// It will simply repeat the intent the user said. You can create custom handlers
// for your intents by defining them above, then also adding them to the request
// handler chain below.
const IntentReflectorHandler = {
    canHandle(handlerInput) {
        return handlerInput.requestEnvelope.request.type === 'IntentRequest';
    },
    handle(handlerInput) {
        const intentName = handlerInput.requestEnvelope.request.intent.name;
        const speechText = `You just triggered ${intentName}`;

        return handlerInput.responseBuilder
            .speak(speechText)
            //.reprompt('add a reprompt if you want to keep the session open for the user to respond')
            .getResponse();
    }
};

// Generic error handling to capture any syntax or routing errors. If you receive an error
// stating the request handler chain is not found, you have not implemented a handler for
// the intent being invoked or included it in the skill builder below.
const ErrorHandler = {
    canHandle() {
        return true;
    },
    handle(handlerInput, error) {
        console.log(`~~~~ Error handled: ${error.message}`);
        const speechText = `ちょっと何言っているかわからない。もう一度話してください。`;

        return handlerInput.responseBuilder
            .speak(speechText)
            .reprompt(speechText)
            .getResponse();
    }
};

// This handler acts as the entry point for your skill, routing all request and response
// payloads to the handlers above. Make sure any new handlers or interceptors you've
// defined are included below. The order matters - they're processed top to bottom.
exports.handler = Alexa.SkillBuilders.custom()
    .addRequestHandlers(
        LaunchRequestHandler,
        DayIntentHandler,
        NextIntentHandler,
        AllNextIntentHandler,
        RuleIntentHandler,
        HelpIntentHandler,
        CancelAndStopIntentHandler,
        SessionEndedRequestHandler,
        IntentReflectorHandler) // make sure IntentReflectorHandler is last so it doesn't override your custom intent handlers
    .addErrorHandlers(
        ErrorHandler)
    .lambda();

 

いろいろやろうとしたので長くなりましたけど、欲を出さなければもっと簡単に作れるはずです。

とにかく前回書いた記事にある、チュートリアルのページを見ると簡単さがわかると思います。

 

あと、関係ないですけどブログにプログラムのソースコードを書くとプログラマーみたいですね。

そういえば私、学生のころプログラマーになりたいと思ったこともあったのを思い出しました。

プログラマーの道に進んでいたとしたら今頃は何やっていたんだろうか。(アレクサとは全く関係ない感想)

まとめ

というわけで、無料で、そして比較的簡単に自分で使うAlexaスキルを作ることができました。

「こういうのあればいいな」と思った簡単なものがあればまた作ってみたいものです。

あと、Google(OK, Google)の方も簡単ならば作ってみたいなと思いました。

おわり。

 

 

Amazonのアレクサのスキルが結構簡単に作れるようなので遊んでみる件

スマートスピーカー使いまくり

というわけで、以前書きましたけど私はGoogle Home MiniとAmazon Echo Spotという2つのスマートスピーカーを持っています。 

www.mo3ore.com

www.mo3ore.com

 

今は、リビングにはAmazon Echo Spotを、寝室の方にはGoogle Home Miniを置いています。

 

スマートスピーカーって最初いらないかと思っていましたけど、あると結構使うのですよね。

一年間使ってみて

で、購入して約1年ということでこれまで使ってみた感想なのですけど、それぞれにもいくつかのモデル(画面あったりなかったり、音質良かったり音質普通だけどリーズナブルだったり)があって、それの違いによる特徴もありますが、「Google Home Mini」と「Amazon Echo Spot」で比較すると一長一短なところがあるのでどちらがいいのかというのはなかなか甲乙捨てがたしです。

各種のサービス(SpotifyとかAmazon Primeとか)に加入しているかどうかでもできることが変わるのでなんとも言いにくいところ。

 

ただ、私の場合、Amazon Echoの方に声をかけてもちゃんと認識されないことが多いのです。

Google Homeの方は、かなり認識の精度がいいような感じがしていて、寝起きでムニャムニャしながら呼び掛けてもほとんど認識してくれるので寝室に置くのは合っているかなと思っています。

 

夜中に眠りから目が覚めてしまった時とか、できれば覚醒しないでそのまま睡眠に戻りたい、だけど今何時なのかちょっと気になるなんてときに目を閉じたまま「OK,Google. 今何時?」って聞けるのが一番うれしいです。

そのほか、日中は出かける前に天気とか気温を聞いたり、音楽やラジオを聞いたりとかしています。

今回はAmazonのAlexaについて

で、前置きが長くなったんですけど、先日引っ越ししてきたところゴミの収集日に結構混乱しているのです。前の記憶が邪魔をするのです。

分け方も違うし、もちろん曜日も違う……。

とりあえず紙に大きく書いて見えるところに貼っているんですけど、それを見て、カレンダー見て……というのも面倒。

 

そこで、スマートスピーカーでそういうアプリみたいなのを作れないかなと思ったのです。

部屋に置いているAmazon Echo Spotでそれが簡単に確認できたらステキ。

Amazonで使えるのは「Alexa(アレクサ)」というアシスタントなんですけど、すでにどなたかが作成したスキル(=アプリ)としてそれっぽいものが存在しているようでした。

おお、これを入れてみようかな?

と思ったんですけど、調べているときにAlexaスキルの開発についてのページも見つけまして、面白そうなので自分で作ってみようかなと思いました。

ここを見ればとりあえず作れる

で、Amazonによるスキルの開発のページがこちらにありました。

developer.amazon.com

この中に「スキル開発 基礎トレーニングシリーズ」というのがあるんですけど、そこの記事が開発のチュートリアルになっていて、それを見て同じようにやったらとりあえず動くものが作れました。

思っていたよりかなり簡単でした。

 

ちなみに開発をするのに必要なのは、

  • Amazon.co.jpのアカウント
    →普段買い物に使っているものでOK
  • Alexaデバイス
    →Echo Spotとか持っていなくても、スマホにAlexaのアプリを入れればOK。また、開発画面で動かすだけであればスマホアプリすら不要。

という感じで、無料でできるのです。
(ただし、自分だけが使うスキルを作るのではなく、できたスキルを世界に公開して他の人にも使ってもらうとなるとお金が必要になる場合もあるかもしれません。)

しかもブラウザ上で開発できるので準備も不要。

 

で、私もやってみたところおもしろかったです。

スマホに入れたAlexaアプリからもチュートリアルで自分が作ったスキルが動いたことに大変興奮いたしました。

Alexaのアプリは今のところこういうアイコンですね。

f:id:prinkuma:20190728222714j:plain

 

ちなみに、チュートリアルにある作り方ではプログラムのコードを書くというのもほとんどいらないんですけど、コードをいじるようなものを作る場合は、「Node.js」というプログラミング言語を使うそうです。

私が思う、ごみの収集日を教えてくれるスキルを作るためには少しプログラムを書く必要がありそうでした。

それで、このNode.jsっていうものの書き方(文法)を調べなくてはならなかったのですけど、探しても書き方が出てこなくて途方にくれました。

が、もっと調べていたところどうやらNode.jsはJavaScriptの文法でいいらしい。

JavaScriptも書いたことはないけど、有名どころだし何とかいけるかもしれません。

 

というわけで、細かいところは置いといて、ネットで調べながらとりあえず答えを返してくれるようなのを作ってみたら当然のようにバグりました。

開発画面でテストするときはLINEの画面みたいな表示になるのですけど、不燃ごみの日を聞いてみたところ大変なことになりました。

f:id:prinkuma:20190728222717j:plain

……けど、方向性は間違っていないと思うので、引き続き作っていってみたのでありました。

ちなみに

私、チュートリアルで1か所かなりハマりました。

原因としては、Amazon.co.jpのアカウントと同じメールアドレスと同じパスワードでAmazon.comのアカウントも作っていたためでした。

すっかり忘れていたんですけど、ずーっと前にアメリカのAmazonからちょっと安いパソコンを買おうとしてアカウント作っていたのですよね。(結局買わなかった)

で、.co.jpのアカウントと.comのアカウントでメールアドレスとパスワードが同じだとうまくいかないというのがあって、.comの方のパスワードを別なものに変更することでうまくいくようになりました。(チュートリアル最初からやり直しになりましたけど)

 

このハマりについては、チュートリアルの説明の中で注意するように、と書かれていたんですけどまさか同じようなパターンでハマるとは……。

developer.amazon.com

まとめ

そんな感じで、無料で遊べますのでスキルづくりを夏休みの工作(?)にしてもいいかもしれませんね。

スマホアプリのAlexaや、Echo Spotから自分の作ったスキルが動かせてAlexaが反応してくれるってのは面白かったです。

というわけで、次回はゴミの日のスキルについての続きです。

おわり。

Echo Dot  第3世代 - スマートスピーカー with Alexa、チャコール

Echo Dot 第3世代 - スマートスピーカー with Alexa、チャコール

 

 

冷蔵庫を買い替えた件

苦楽を共にした仲間でしたが

私が使っている冷蔵庫はかなーり長く使っているやつなのです。

あんなときやこんなときも一緒にやってきたのです。

まあ、具体的に何を一緒にやってきたのかと聞かれるとあまり思い出せませんけど、そんな私の大事な冷蔵庫も時々怪しい動きを見せることがありまして、例えばアイスを冷蔵庫に入れておいていざ食べようとすると、異常にやわらかくなっていたりするのです。

アイスの形はそのままなんですけど、もう生クリームみたいな硬さになっていて食べようとすると全く抵抗なくパクッと口に入ってくるので面食らうのです。

(※アイスを食らうのではなくて面食らうというのが面白いところです。)

 

これはもう寿命かな…と思ったりしていましたし、また、昔の冷蔵庫だから消費電力とかも多そうだなと思ったりもしていました。

それでもなお、なんとか今回も引っ越し先に持ってきましたけど、ここらで心機一転!ということでお別れすることにしました。

新しい冷蔵庫を探す

で、新しい冷蔵庫を探してみたんですけど、消費電力を見るとやはり最近の冷蔵庫はかなり省エネになっていますね。いいことです。

あと、自分で思っていたより冷蔵庫って高い!と感じたのですけど、まあ、また長く使うのかなと思ったらいいかなと自分を納得させたのでした。

そんな感じで電器屋さんなどを見ていたのですけど、チラシでかなり安いやつを見つけたので買うことにしました。

それは買い替えようと思って探していたサイズよりも大きいんですけど、ただ安いんです。

消費電力もそれまで使っていた冷蔵庫と比べたら省エネになるし、正直大きすぎるけどそれでいいかなと思って購入を決めました。

安い…とはいってもやはり大枚をはたくことには違いがないもんで大変ドキドキしました。

なんでしょうね。お金を一気に使うときって、せっかく貯めたものを放出してしまう罪悪感と自分の新しいものが手に入る高揚感とかで異常に興奮しますよね。

はじめての家電リサイクル券

というわけで、そのお店で新しい冷蔵庫を買うとともに、前の冷蔵庫の回収もお願いしました。

そこで受け取ったのがこちらの家電リサイクル券。

f:id:prinkuma:20190715000712j:plain

家電リサイクル券というのはよく耳にはしていましたものの、今まで見たことがなかったのですが、宅配便の伝票に似ていますね。

お店でこれをリサイクルの料金と引き替えに受け取りました。

あとは当日冷蔵庫を回収しに来る人に渡してくださいとのことでした。

なお、今回のリサイクル料金はもろもろで6,000円弱とのこと。(冷蔵庫のサイズが大きいと、もう少しかかる)

家が狭くて搬入がヤバい

で、回収と配達(設置)を同時にやることになりまして、まず回収に関しては先ほどの家電リサイクル券を渡して持って行ってもらいました。

特記すべき事項なし。

 

続いて設置ですが……、実は、最初に考えていたものよりも大きな冷蔵庫にしてしまった結果、家に搬入するときの横幅が2~3cmしか余裕のないギリギリな状況になってしまっていたのでした。

 

何度測ってもギリギリなもので、入らなかったらどうすればいいのかとヒヤヒヤして数日暮らしていました。

2~3cmは余裕がある、と言えるのか。それとも余裕がないのか。

 

さらに何が難しいのかというと、部屋が狭すぎて回転できない状態で一定のスペースにいれなければならないのです。

 

図解するとこうです。

f:id:prinkuma:20190715220844j:plain

2~3cmの余裕しかないところを通り抜けて、そこから冷蔵庫の向きを変えずに90度進行方向を変えて、また2~3cmしか余裕のないスペースにインしなければなりません。

いけるのか?

いけた

そんな心配をよそに、搬入の人はやはりプロという感じで難なくクリアしたのでした。

2人で来て、ルートを説明したところ毛布っぽいものの上に冷蔵庫を乗せて、フローリングの上を毛布っぽいのごと滑らせる形で移動して隙間をすり抜け、最後は冷蔵庫についている前後移動だけできるキャスターでスライドさせて完了です。

いやー……できるもんですねぇ。

途中「あ、これじゃ俺出られないや、バック!」みたいなこと聞こえましたけどお見事でした。

いいもの見れた。

ちなみに

冷蔵庫を家に置いてコンセントをつないだ後は、半日とまではいかないけど数時間放置して内部を冷やす必要があるということで、その間冷凍食品等を退避させておく必要がありました。

まあ、前日くらいから調整して食べきってしまえばそれでいいんですけど、ちょっと残っちゃったやつは100円ショップで買った発泡スチロールの箱みたいな保冷ボックスに保冷剤と一緒に入れておいたら大丈夫でした。

↓これっぽいやつです。 

キャプテンスタッグ(CAPTAIN STAG) クーラーボックス 発泡クーラーボックス8L M-8169 容量8L 発泡スチロール製

キャプテンスタッグ(CAPTAIN STAG) クーラーボックス 発泡クーラーボックス8L M-8169 容量8L 発泡スチロール製

  • 出版社/メーカー: キャプテンスタッグ(CAPTAIN STAG)
  • 発売日: 2012/03/09
  • メディア: スポーツ用品
  • 購入: 1人 クリック: 20回
  • この商品を含むブログを見る
 

 氷室みたいなもんですね。

まとめ

というわけで、冷蔵庫は家が狭くて割とギリギリでも入ることがわかりました。

ピカピカの冷蔵庫を使うとうれしいもんですが、それ以上に「お金を払うとき」と「狭いところに設置してもらうとき」は盛り上がりますので冷蔵庫を買うときは楽しんでいただければと思います。

おわり。

シャープ SHARP 冷蔵庫(幅48.0cm) 137L つけかえどっちもドア 2ドア ブロンズ系 SJ-D14E-N

シャープ SHARP 冷蔵庫(幅48.0cm) 137L つけかえどっちもドア 2ドア ブロンズ系 SJ-D14E-N

 

 

「レンジでできるふわたまオムレツ」がすごいふわふわな件

スーパーで出会いました

先日、スーパーで「レンジでできるふわたまオムレツ」というのを見かけました。

普段オムレツ食べたい!!とかあまり思ったことはないし、そもそもオムレツの定義としては卵焼きとは違うのかとかあまりオムレツ事情に詳しくない私ではありますが、ちょっとどんなもんか興味があったので買ってみたのです。

こういうやつです。

 チーズ味とベーコン味の2つがありまして、かなり迷ったのですけどとりあえずチーズにしました。

さっそく作る

で、こういう感じでかなり平べったい状態で売られていました。

f:id:prinkuma:20190715000851j:plain

作り方としては、Mサイズの卵2個を溶いたものをこの袋に入れて電子レンジで加熱するとオムレツができるというもの。

f:id:prinkuma:20190715000901j:plain

むぅ……、どういう感じで出来上がるのかとても興味深い。

 

というわけで、まずは中身をチェックしてみましたけど、なにやらまだまだ液状のあまりにも緩すぎるオムレツみたいなのが入っていました。

f:id:prinkuma:20190715000909j:plain

ここに卵2個を溶いたものを入れます。

f:id:prinkuma:20190715000918j:plain

なお、どうでもいいことなんですけど、私は溶き卵っていうのがいつまで溶いていれば溶き卵であると認めてもらえるのかがよくわからなくて、わりといつまでも溶いてしまう方です。

ホットクック先生のおかげでだいぶ料理知識が増えてきたとは思いますけど、それでもまだまだですね。

www.mo3ore.com

 

でも、今回のふわたまオムレツは簡単。

たぶん適当に溶いた卵でも大丈夫でしょう。

 

溶き卵を投入したら、袋のジッパーを閉めて、こぼれないようにジッパーのあたりを1回負った状態で袋を20回ほどシェイクしたら準備完了。

後は電子レンジで加熱するのみでした。

できた

で、既定の時間加熱したので取り出してみました。

まず袋を開けて上からのぞいてみると……、お、いい感じ……!

f:id:prinkuma:20190715000924j:plain

 

続いて、それをお皿に出してみると、つるん、という感じで出てきたそれはあきらかにオムレツです。

f:id:prinkuma:20190715000930j:plain

これは私でも卵焼きとは言わず、オムレツだと認識せざるを得ないほどまごうことなきオムレツだと思います。

真上から写真撮ってしまったのですけど、少し厚みもある感じ。

あと袋の形がまたちょうどオムレツらしい形だなと思いました。

実食

というわけで、食べましたけど、まず口に入れる前に箸で分けた時点から明らかにふわふわであることがわかります。

そしてもちろん食べるとフワフワですし、今回はチーズ味ということでこれまたおいしい感じになっていました。

こんなふわふわでほかほかなオムレツが簡単に作れちゃうというのがうれしいと思いました。

さすが商品名通り「レンジでできるふわたまオムレツ」ですね。

 

ん……「ふわたま」の「たま」って何だろう。卵だとしたら「オムレツ」と被っているような気がするし……?

 

ま、なんにせよ高級感あふれるオムレツが家でできるというのは幸せな感じです。

曲がりなりにも自分で作ったということになる(と思う)ので、なんかすごく料理が上手になった気がします。しかしそれは錯覚である。目を覚ませ。

まとめ

というわけで、スーパーのお惣菜コーナーではオムレツ売っているのあまり見たことがないような気がしますが、もし売っていたとしてもそれとはまた一味違ったオムレツを食べることができる一つの方法だと思います。

ベーコンの方も気になるので、また今度食べたいなと思いました。

おわり。

 

賃貸住宅の壁に穴をあけたりできないのでダンボールを立てかけてみた件

賃貸住宅をきれいに使いたい

賃貸に住むからには、退去時の原状回復費用を抑えるために部屋にはあまり手を入れず使いたいものです。

その一つとして、壁に何かを止めるときの対策をどうにかしたいということで悩みどころであります。

何やら画びょうレベルの少しの穴であればOKらしいとも聞きますが、その穴が広がったり差し直したりしていたら穴が目立ってきたりするんじゃないかと思ってなかなか差しづらいものです。

一応、跡をあまり残さないようにして壁にモノをくっつけるためのグッズもいろいろあるみたいです。

ホチキスで 簡単 固定!  跡が超小さい 壁掛け フック 6pセット ( 強力 耐荷重 5kg )

ホチキスで 簡単 固定! 跡が超小さい 壁掛け フック 6pセット ( 強力 耐荷重 5kg )

 
コクヨ ひっつき虫 はってはがせる 粘着剤 タ-380N

コクヨ ひっつき虫 はってはがせる 粘着剤 タ-380N

 

けど、とりあえず今すぐカレンダーを立てておきたいなと思ったので超適当にやることにしたのであります。

ちなみに今までカレンダーはどうしていたのかというと冷蔵庫に磁石で貼っていたのですけど、部屋の構造上それができなくなってしまったのでした。

もう適当でいい

で、引っ越しの真っただ中だということもあり、今回はもうオシャレとかなくていいのでとにかくわかりゃいいよ、という気持ちだったので適当に引っ越しで出たダンボールをビリーッとさいて壁に立てかけて、それにカレンダーをマスキングテープで貼り付けた次第です。

f:id:prinkuma:20190627230607j:plain

うん……、なんかちょっと私の美的センスが自分でもよくわからなくなってきたんですけど、割とワイルドでオシャレじゃないですか??

ダンボールってアースカラーだし落ち着いた感じでいい……と思うんですけどどうなんだろう。

ニンテンドーラボやりすぎてダンボールが好きになりすぎているかもしれない。

 

なお、この写真のカレンダーはミスド福袋のカレンダーです。

www.mo3ore.com

あと、カレンダーを貼りつけるのに使った「OPEN」っていうマスキングテープは、ニンテンドーラボVRキットのAmazon版についてきたやつです。

OPENって矢印がついていますけど、どうかはがさないでいただきたい。

応用しやすい

さて、今回のダンボールスタイルのいいところですけど、応用しやすいというところ。

例えばペンを適当にセットしておけるし、何かメモするものあれば直接マスキングテープとかでピッと貼り付けておくことができます。

f:id:prinkuma:20190627230612j:plain

……あ、なんか何度か写真みてたらもしかしたらあまりオシャレじゃない説もあるような気がしてきたので、もうちょっときれいに作って机の上に立てかけるとかできるようにしたいなと思いました。

まとめ

やっぱりダンボールを遊びに使おうというニンテンドーラボの発想は面白いと思いました。

おわり。

 

鏡餅とあずきバーを一緒に電子レンジに入れたら最高のお汁粉ができた件

引っ越しもまあまあ落ち着きました

というわけで、長々と引っ越しのことばかりブログに書いていましたけど、それもやっと落ち着いてきました……。

いや、正確にはまだダンボール箱山積みなんですけど、それでもとりあえずだいぶ生きやすくなりましたのでここで引っ越しの終息を宣言したいと思います。

モノを片付けているといろいろ出てきますよね

さて、引っ越しに限らず大掃除とかでもそうですけど忘れていたものがポロッと出てきて、「あっ、忘れてたな~、懐かしいなぁ~」みたいになることがありますよね。

 

今回、出てきたのはこちらです。

f:id:prinkuma:20190715000738j:plain

写真がピンボケしましたが、鏡餅でございます。

 

昨年末に、年明けたら正月の気分を出したいなと思って買ってからそのままでした……。

 

裏を見ると、賞味期限が2019/3/31とのこと。

f:id:prinkuma:20190715000743j:plain

今は、それから3か月ちょっと過ぎたくらいですね。

 

んー、密閉されているみたいだしいけるか。

 

さあ鏡開き(鏡割り)の始まりだ。

パックから取り出す

で、パックから持ちを取り出してみたら見事なツヤと形。

f:id:prinkuma:20190715000748j:plain

さて、これをどうやって食べようかな……。

 

今年の正月は、缶入りのおしること一緒にレンジで温めて食べていますね。

www.mo3ore.com

あれは簡単で、それでいて本格的でよかったです。

ただ、缶のおしるこがマジでしっかりした製品でして、私にとってはかなり甘いので余してしまうというウイークポイントも。

あと、今、その缶がない。

 

他に何かないかな?

冷凍庫にあった

そこで思い出したんですけど、実は最近冷凍庫に箱で買っておいた「井村屋のあずきバー」。

これと一緒に食べたらいいんじゃないの?と思った次第です。

井村屋 井村屋 BOXあずきバー 65ml×6個×8箱

井村屋 井村屋 BOXあずきバー 65ml×6個×8箱

 

夏がやってきかけたのでとりあえず何かしらのアイスを冷凍庫に用意しておきたい!と思って購入していた次第です。

 

そこから1本取り出してみました。

f:id:prinkuma:20190715000755j:plain

 

……で、こう。

f:id:prinkuma:20190715000803j:plain

あずきバーってほとんどあんこみたいな感じですよね。

だから割と餅とあうんじゃいかなと思うんですけど……。

 

ただ、このままだと餅が硬いし、アイスも硬い(とくにあずきバーの硬さといったら)。 

レンジで温めてみよう

というわけで、電子レンジで加熱してみました。

600Wでとりあえず5分……でスタートしたんですけど、2分30秒くらいでレンジの中をふと見たら餅が容器から大きく膨らんでいるのが見えまして、ヤバい!ということで緊急停止しました。

 

慌ててレンジを止めて、開けた直後の画像がこちらです。

f:id:prinkuma:20190715000810j:plain

膨らんでいた餅は落ち着いたようですが、あずきが多少皿の外に場外した模様です。

ラップとかした方が良かったかな。

 

で、取り出すとこういう感じでした。

f:id:prinkuma:20190715000817j:plain

餅はもちろん柔らかくなったんですけど、あずきバーも見事に解凍されてホカホカになりました。

香り的にはいい感じですけど、果たして。

 

残っているあずきバーのバーで餅を持ち上げるといい感じに伸びました。

f:id:prinkuma:20190715000824j:plain

実食

で、実食してみると、もう一口目から幸せでして、うまい。

なんか普通のお汁粉になりました。

甘さ的には先日の缶のものより少し控えめでまさにちょうどいいといったところ。

あと、思ったよりしっかりあずきが入っていることがわかりました。

「あずきバー」という名前は伊達じゃないと思いました。

 

なお、あずきバーのバーだと食べにくいので普通にお箸を使った方がいいです。

※私は洗い物が増えるのを避けるためにバーで乗り切りました。

まとめ

というわけで、せっかくアイスになっているあずきバーを溶かしてしまうのはちょっともったいないというか、どこか罪悪感を感じるようなところがありましたけど、確実に言えるのはあずきバーそのままと同じくらいにおいしい餅入りのお汁粉を手軽に作ることができるということです。

これは普通の時期に鏡開きするときにもいいと思いました。

次の正月はきちんとしたタイミングで鏡開きしたいと思います。

おわり。

おかしなかき氷 井村屋 あずきバー

おかしなかき氷 井村屋 あずきバー

 

 

引っ越し3:引っ越し中から引っ越し後までのインターネット環境を整える件

ネットにつながらないと弱る

私はネット大好きですので、基本的にはいつもつながっていたいのです。

でも、引っ越しの時って引っ越し先ですぐにネットが使えるケースは少ないので何とかしなければなりません。

ADSLで生きていく

で、光の時代においてもまだADSLの私ですけど、引っ越し先でもADSLを使うことにしました。

何やら引っ越し先は光回線の入っている建物らしいのですけど、以下の理由からです。

  1. 以前、光回線を引いたのに1Mbps出ないということがありトラウマになっている
  2. 引っ越し先の光回線は1Gbpsでなく100Mbps
  3. 光回線でもADSLでも工事費含むトータルコストが同じくらい

というわけで、前の前に住んでいたところで自体は光だな!つって光にしたんですけど、なんかマジで遅くて愕然としたことがありまして、それ以来光が怖いんです。

さらに今回の建物は100Mbpsの回線とのこと。

ただでさえ100Mbps入るのかというとあくまでも「ベストエフォート」で100Mだというのに、それを建物のみんなで分け合うとどうなるのかと考えたらやはり速度面で不安。怖い。

で、費用がほぼ同じ。

むしろ光だと解約するときに解約金が発生したりする。

 

というわけで、ADSLをそのまま移転することにしました。

何やら数年後にはADSLがなくなるらしいし、新規申し込みも終了しているところが多いみたいですけどどうにかまだ移転できました。

 

ただ、回線移転のためNTTに電話したらものすごい勢いで光にしないのかと引き留められましたね……。

いや、みんな光にしちゃいたいのはわかるんですけど、私はあのトラウマから立ち直れていないんです。

ADSLが終了するときには光にするかと思いますけど、それまではADSLにさせていただきたい。

 

……そんなわけで、引っ越し前日までは前の家でADSL使える状態にして、切り替えの手続きをしたところちょうど引っ越し後10日目で開通に至りました。

なお、今回のADSLは3Mbpsほど。前の家は10Mbpsいっていたので快適だったんですけど10から3になるとさすがにちょっと遅いなという気がしてしまいますね。

んー、光にしたら3以上出るのだろうか。気軽に試せないのが悩ましいところですね。

とりあえず、前と比べたら遅いですけどそれでもなんとかなるかなと思います。

引っ越し中のネット環境

で、話は前後しますがADSL開通までのネットはどうしたのかというと、過去の引っ越しと同様にWi-Fiのレンタルをしました。

これがまたいろんな業者があるので、どこが安いのか探さなければなりません。

今回は価格.comで安くて、通信量制限が緩いWi-Fiを探しました。

決めたのは、月の通信量制限は無し、1日あたりは1GBから低速になる制限あり、これで30日借りて2,800円というのがあったのでこれで決定しました。

月の制限があるとレンタル後、最後まで低速になる可能性あるので制限なしに、1日あたりの制限については1GBあれば十分そうだし、超えたら反省して寝ればまた復活するのでOK。レンタル日数はADSL開通まで何日かかるかわからないのでとりあえず30日。(実際は15日あれば余裕だった。)

これでわずか2,800円ということでとても良かったです。

ちなみにこういう機械と、充電のアダプタとケーブルがセットです。

f:id:prinkuma:20190627230738j:plain

さらに送料無料(返却用のレターパック付き)ということでとても助かりました。

まとめ

そんなわけで、快適なインターネットライフを送りたいのですが、回線選びにはいつも悩みがつきものですね。

おわり。

ポケットモンスター ALL STAR COLLECTION デデンネ (S) ぬいぐるみ 高さ14cm

ポケットモンスター ALL STAR COLLECTION デデンネ (S) ぬいぐるみ 高さ14cm

 

 

引っ越し3:BSアンテナを自分で取り付けたらかなり安くなった件

BSがない

というわけで、徐々に徐々にではありますけど引っ越しも少しずつ片付きつつありまして、生きるのに必須となるところ(寝るスペース、照明、ガスコンロなど)はどうにかなったので娯楽的な部分もいろいろ整備していきたいのです。

楽しく生きたい。

 

で、となるとまず思いつくのはBSです。衛星放送です。

今回の部屋はBSがないのですけど、私はたまにBSが見たいこともあるのでぜひつけておきたいのです。

ちなみに前住んでいたところは部屋にBSの穴がありましたので差すだけでOKでした。

アンテナを付ければ見れる

というわけで、テレビもHDDレコーダーもBSチューナーが内蔵されているので、BSのアンテナをつなぎさえすればよいのです。

今回の部屋は南側にベランダ的なところがあるし、よく言われる「午後2時に日光が当たる」条件も満たしているのでアンテナあればいけるはず。

アンテナのつけ方は、前の前の前の部屋でも自分でつけたことあったので大丈夫だと思うんすけど、それはもう相当昔の話なのでいろいろ忘れました。

確かあの時ヤマダ電機でアンテナ買ったので、先日照明を買いに行ったヤマダ電機にまた行ってみよう。

www.mo3ore.com

そういう雰囲気ではなかった

で、ヤマダ電機行ってみたんですけど、BSアンテナ関係の商品が見つけられないんですねぇ……。売り場はどこだろう。

結局、一回りしてわからなかったので店員さんに聞いてみました。

 

私「BSのパラボラアンテナはどこですか?」

店「えっ?BSの取り付け工事はやっていますが…?」

私「えっ?」

 

……なにやら店側による工事が基本らしい。

そのお値段は状況にもよるが2~3万円。

一応単品でも売ってくれるらしいですけどアンテナで1万円前後らしいし、ベランダに固定するパーツとかも店頭に並んでいないので選んだりしにくそう。

店「一人でやるとうまくいかないことも多いので業者の設置をお勧めします」

とのことでしたけど、一軒家の屋根につけるならまだしも今回はベランダにチョイと付けるだけだし、こう見えて一人でつけたこともあるよと思いつつ、雰囲気がなんか違ったので今度はホームセンターに行ってみました。

ホームセンターには売っていたけど

というわけで、カーナビで見つけたホームセンターに突入した私は、アンテナや、それを取り付ける金具、そしてアンテナ線を窓の隙間から通すケーブルなどが並んでいるのを無事見つけたのですけど、なんか思っていたのより高い……!

アンテナが9,000円くらい、さらに金具やケーブルでプラス1万円くらい。

もっと安いのでいいんだけど、選択肢がそれぞれ1個しかなさそう。

むぅ、これは帰ってネット見てみよう。

ネットで安いやつを買う

というわけで、ネットで探したらアンテナ5,000円台だし、ほかの部品も安くてびっくりしました。

最終的に以下の3つを買いましたよ。

まずはアンテナ。

DXアンテナ BSアンテナ 45cm形 BS・110°CS アンテナセット (同軸ケーブル+取り付け金具) BC453K
 

このアンテナには鉄格子みたいになっているベランダに取り付けられる金具がついてきますが、私の部屋はそれがないのでベランダの壁を挟んで取り付けられる金具が必要。

DXアンテナ ベランダ取付金具 UHF平面 BS・CSアンテナ用 耐風速50m/s MV30ZC

DXアンテナ ベランダ取付金具 UHF平面 BS・CSアンテナ用 耐風速50m/s MV30ZC

 

そして、ケーブルを室内に引き込むときに壁に穴をあけるわけにいかないので、窓とサッシの隙間を通すためのすきまケーブルを1つ。

なお、すきまケーブルとHDDレコーダー間は以前使っていたケーブルを流用します。

 

結局全部で9,000円いかなかったですね。

設置する

というわけで、こちらが今回のアンテナでございます。(部屋が片付いていないため、段ボールやハテナブロックが写り込んでいますがご了承ください。)

f:id:prinkuma:20190627230451j:plain

「3ステップで簡単取り付け!」ってことですけど、マジでベランダにつけるくらいなら簡単なんですよね。

 

あ、あとは金具とすきまケーブルです。

f:id:prinkuma:20190627230456j:plain

 

ちなみにアンテナはこんな感じ。

近所の家を見てみたら割と同じアンテナの家ありましたね。

f:id:prinkuma:20190627230500j:plain

 

……というわけで、取り付けですけどやはり一人で問題ない感じでした。

なお、工具としては金具の固定のためにレンチが必要になりました。

以前買ったモンキーレンチが再び役にたったのであります。

www.mo3ore.com

 

今回の、取り付けで困ったポイントはひとつありまして、設置してみたもののどうも電波が拾えなくて泣きそうになったところです。

原因はアンテナを全然違う方向に向けていたというものでしたけど、Googleマップを開いて衛星のある南西の向きをしっかり確かめてからそちらに向けたら大丈夫でした。あせったなぁ。

なお、今回買ったアンテナには電波が拾えたかどうか教えてくれる「インジケーター付き」のものもあるので、心安らかにアンテナを設置したい場合はこちらがいいと思います。

何も映らないと、アンテナのどこが悪いのか、そしてもしかしたらケーブルが悪いのか、つないでいるHDDレコーダーなどが悪いのか、など原因究明に時間がかかります(かかった)けど、このインジケーター付きならもっと早く原因が特定できたと思います。

あとアンテナの向きの調整も楽になったことでしょう……。

 

あ、あと、すきまケーブルですけど、サッシの形に沿わせると思ったより距離が長くなるので長めのやつを買った方がいいと思いました。

それとすきまケーブルをAmazonで調べると安いのがたくさん出てきます。

思ったよりかなり安かったので、アンテナへの電力供給などもちゃんと行われるのかとか気になりましたけど、今回買ったやつは別に問題ありませんでした。

(アンテナに頑張ってもらうためには電気が必要なので、テレビHDDレコーダーからアンテナに向けて電気を送ってやる必要がありますが、以前はその電力供給に対応してないケーブルとかパーツがあったような気がするんですよね。)

まとめ

というわけで、無事BSが受信できるようになったのでした。

個人的には部屋探しの時にBSの有無が気になっていましたけど、同じ建物でBSのアンテナが立っている部屋があれば自分の部屋でも受信できる可能性が高いので、BS無しの部屋でも自分でアンテナを設置する前提で決めちゃうのもいいかもしれませんね。

 

それにしてもBSって宇宙を使う仕組み自体、わりとワクワクしませんか?

私は、はやぶさ、はやぶさ2、サテラビューなど未来を感じるものを多く連想するので好きです。

おわり。

 

模索する俺たち
プライバシーポリシー / Amazon.co.jpアソシエイト