Falconの思うままに

PASCAL好きが、気ままにマニアックなネタを

Python for DelphiからのPython呼出しではまり

さて、Python for Delphiではまっていました。

GUIDelphiで処理はPythonでかつオフライン起動

を実現する最高のソリューションですが、

Pythonを呼び出すと音もなく(表現上の妄想)

アプリが落ちる現象で悩まされていました。

 

何が悪いのかわからず、同じ処理が落ちたり落ちなかったりするのです。

最初はPython内のエラー発生からなのかとも

思いましたが、そうでもないとわかってきて

ほとほと困ったのですが、Pythonの呼出しは

PythonEngine.ExecStrings(StringList)

のように呼んでいたのですが、

これを試しに

PythonEngine.ExecString(StringList.strings.text)

と呼び出したら、あら不思議落ちなくなりました。

TStringsってTStringListの上位クラスですよね

どちらでも問題なさそうなんですが、文字コードがらみなのか?

 

ということで、無事落ちないようになりまして

めでたいということで、

気を取り直して前に進みます!

 

同じことが起こった人はお試しあれと

ここに記します。

 

ではでは。

 

 

 

Domainの更新

さて、年に1度のドメインの更新がきました。

うちはFreeNomです。

お金さえ払っておけば、裏方で動いてくれています。

最近DNSがらみのトラブルはないですね。

 

忘れてはいけないですが、去年は忘れました。(汗)

ドメインが解除されてDNSがエラーがでて焦りました。

 

新規登録して事なきを得ましたが、今年は

1週間前程度から更新手続きができるので、

更新ボタンを押すだけです。

 

自分のクラウドサービスはSSHVPN網からのログインしか

できないので、VPN網がDNSが落ちるとログインできなくなる

という落とし穴があります。なのでこれだけは忘れてはいけません。

 

海外企業ですので、支払いはPayPalがお勧めです。

PayPalにすると相手と私の関係はなく、PayPal

仲介するので安心ですね。

 

PayPalも普段使わないですが、この時だけは利用します。

 

たまに使うと操作を忘れます。

 

ではでは。

SwitchbotからNoderedへ通知したい

さて、スマートホームが大好きなみなさんSwitchBot使ってますよね?

(オイ)

 

うちは玄関のロックをパッド付きで使っていますが、この度、

HUB2を買って連携しました!!!!

何がうれしいかというと、スマホからロックの施錠、解錠が

できるのですが、外にいてもできるようになるんですよね。

HUB2の温度が取れるので室温も取れます。

 

それでシーンという自動化する為の機構がついているのですが、

これの通知先がIFTTなんです。

う~んですよね。昔はこれでもよかったのですが、私は

撤退したので(笑)、これは使えない。

Alexa連携もできそうなんですが、どこまでいけるのかSkillを

作らないといけないのかなあ。

 

それでやりたいことはリモートボタンを押したら、通知が

もらいたいのですが、プッシュ通知できるしくみは

あるのですが、スマホ側がアプリを開いておかないと

通知が忘れた頃に来ます。

 

これだとちょっと使えないので、なにか代替えがないかと

思案中です。

調べましたが、やってる人いないみたい。

(誰か教えて....)

APIをたたいても通知をポーリングなんて現実的でないし。

(できないと思う)

 

ということでまさにSwitchBotでスイッチを動かすことは

できるので、M5StackのボタンをSwitchbotで動かそうかなと

思いました。

ここだけアナログというか、メカ的に伝達します。

ダサイ、泥臭いですがいい方法が浮かばない(汗)

 

でもできそうですよね。 その後はNodeRedなり

なんなりいつものパターンに落とし込めそうですな。

 

作るのが楽しみですが、時間がとれないなあ

 

ではでは。

 

Delphiのジェネリクスをやっと理解した

さて、久々にDelphiの文法を学びました。

 

正確にいうとジェネリクスを勉強したということなのですが、

TListって昔からありますよね。

 

これ、ポインタを格納するリストなのでTStringList

使うのと違って気軽さがなくて使うのがおっくうでした。

なのでほとんど使った記憶がない。

 

それで今はGenericsがある!!!

というのを今更勉強しまして、使ってみました。

存在は知っていましたが、近づかないようにしていました(笑)

あら便利!!! 

ポインタ操作から解放されますな。

TIntegerListなどを作っていたのが過去になりました。

 

今更ですが、TDictionaryも便利です。

連想配列というやつの実装ですね。

これは昔awk言語で実装されたのが、出会ったのが初です。

awkですか~~という人もいるかと思いますが、ちょっと

覚えてみてくださいな。

 

もう新規文法を覚える必要もないかと思っていましたが、

便利なものは採用しないとなと思いました。

 

 

ではでは。

 

 

 

 

P4Dのスレッド化

さて、P4Dを昔取り上げたかと思います。

Python for Delphi ですね。

DelphiからPythonをコールできて戻り値も取れます。

 

これ大変便利なものですね。

PythonGUIを作るのは骨が折れますが、Delphiで作ると

あっという間です。

 

なのでボタンを置いてPythonをCallするという使い方は

非常に有望です。

 

ですが、メインスレッドで動くみたいで、重い処理でブロックしてしまいます。

 

なので、TPythonEngineコンポをThreadで動かさないといけないことに

なります。メインスレッドがブロックしてもいいならそのまま使いますが

時計表示がとまったりタイマーが動かないなど弊害のほうが大きいかな。

 

 

単純にこのコンポをメインスレッドで生成してスレッド内で参照で

動かそうとしたら、うまく動かないです。

困ったのですが、結果はスレッド内でTPythonEngineを動的に

生成して、DLLのロード、アンロードをコードでやってあげたら

動くようになりました。

お困りの人は参考にしてください。

 

うまくやるとDelphiアプリを動かしたままで、

スクリプトの動的ローディングにしてやると

ホットリロードみたいに使えそうです。

便利ですねえ。

 

ではでは。

 

Twiliteの電池が1年で切れた

さて、身近なIoTとして、洗濯機の完了検知を行っていて、はや1年。

最近通知がこないなあと思っていたら、電池が切れていました。(笑)

 

というのもTwiliteで屋外で30秒間隔の送信で、どこまでいけるかを

実証していたのですが、ほぼ1年でした。

やってみないとわからないということで貴重なデータです。

たしかメーカーの予測は半年だったはずです。

 

これを1年間、NodeRedでInfluxDBにてデータをロギングしていました。

 

電池が切れて送信しなくなった瞬間まで記録できていますので、

すごくありがたいです。

 

洗濯機が屋外にあるので、過酷な条件だったと思いますが、1年休まず

送り続けてくれました。電池を替えてあげましょう(笑)

 

INFLUXDBは時系列データの格納には最適ですね。

Grafanaで表示していますが、十分実用的です。

 

他に部屋の室温をずっとロギングしていますが、長期収集していると

みえてくるものがありますね。

 

ラズパイ4ですが、もくもくと動いてくれています。

寡黙すぎてたまに触るとログインの仕方を忘れているというのが困ります(笑)

 

Twiliteも面白いので、今度は本当に屋外で100mくらい離れたところから

送信させる実験をしようかなと思っています。

 

 

ではでは。

 

C62は49号機まで

さて、何の価値もない情報です。(笑)

昔、銀河鉄道999というアニメがありました。

蒸気機関車が出てきますね。

これは国鉄C62型の機関車なのですが、型式のプレートに

C62 2とか製造番号が追番で入ります。この場合2号機ですね。

 

それでC62 50 となっています。実際は49号機までしか製造されて

いないのですが、999が50番目の製造になっていてちょっと、

ニヤリとしていました。 Wikiペディア見たら書いてあったのですが(笑)

 

私自身で気づいてしまったという、くだらない話でした。

TV版は48号機だそうで、作者がプレート持っていたからで、

映画が50号機なんですね。

 

といっても私は鉄オタではないですが、鉄道は好きです。

梅小路の博物館へいった時にC62撮ったよなあと思って

みたら1号機でした。今更感動しています。(オイ)

 

C622は燕マークが入っていて、特急つばめを引いていたとか。

 

ではでは。