「システム開発」カテゴリーアーカイブ

MyDns.jp更新装置

MyDnsでDDNSを登録して取得しているが、IPの更新が手間なので
M5StickCPlusを使った更新装置の記事を見た・・・どこだっけ?

今使っているソース(自前用に改修したやつ)
XXXXXXなどWifiやMyDns.jpの情報を変更して使用できます。

#include <M5StickCPlus.h>
#include <HTTPClient.h>
#include <NTPClient.h>
#include <Time.h>
#include <TimeLib.h>
#include <FS.h>
#include <WiFi.h>
#include <WiFiClient.h>

#define SERIAL_SPEED 115200

// wifiの設定(my)
const char* ssid     = "XXXXXXXXXXX"; // WiFiのSSID
const char* password = "XXXXXXXXXXX"; // WiFiのパスワード

// mydns info.(xxxxx.mydns.jp)
const char* id="mydnsXXXXXX"; //マスターID
const char* pw="XXXXXXXXXXX"; //パスワード

//  NTP用
WiFiUDP ntpUDP;
const char *NTP_SERVER = "ntp.nict.jp";
const int TIME_OFFSET = 32400;  // UTC+9h (JST)
NTPClient timeClient(ntpUDP, NTP_SERVER, TIME_OFFSET);
const unsigned long NTP_INTERVAL_TIME = 86000000;  // 24h毎に更新1000 24h=86400000
unsigned long ntp_interval = 0;
unsigned long pasttime = 0;

String getmsg = "";

void setup() {
  pinMode(M5_BUTTON_HOME, INPUT);
  Serial.begin(SERIAL_SPEED);
  Serial.println("");
  M5.begin();
  M5.Lcd.setRotation(3);
  M5.Axp.ScreenBreath(100);
  M5.Lcd.fillScreen(BLACK);

  // connect to WiFi
  M5.Lcd.setCursor(0, 0, 1);
  M5.Lcd.setTextColor(WHITE);
  M5.Lcd.setTextSize(2);
  M5.Lcd.print("WiFi connecting");

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) { // 1秒おきに接続状態を確認
    delay(1000);
    M5.Lcd.print(".");
  }
  M5.Lcd.println("\nconnected");

  M5.Lcd.print("");
  //M5.Lcd.print("WiFi Connected.");
  M5.Lcd.print("SSID:");
  M5.Lcd.print(WiFi.SSID());
  M5.Lcd.print("\n");
  M5.Lcd.print("IP:");
  M5.Lcd.print(WiFi.localIP());
  M5.Lcd.print("\n");

  // NTP
  timeClient.begin();
  timeClient.update();
  setTime(timeClient.getEpochTime());
  M5.Lcd.print("NTP st.");
  ntp_interval = millis();
  M5.Lcd.print(timeClient.getFormattedTime());
  M5.Lcd.print("\n");


  delay(3000);
  M5.Lcd.print("First Req");
  M5.Lcd.print("\n");
  notice();
}

void loop() {
  //M5ボタンでモード切替
  if(digitalRead(M5_BUTTON_HOME) == LOW){
    M5.Lcd.fillScreen(BLACK);
    M5.Lcd.setCursor(0, 0, 1);
    M5.Lcd.setTextFont(4);
    M5.Lcd.setTextSize(1);
    M5.Lcd.print("\n");
    M5.Lcd.print(" Update Now!\n");
    M5.Lcd.print("\n");
    M5.Lcd.print("\n");
    notice(); 
    delay(5000);
  }

  // MDNS.update();
  // 定期的に時刻を合わせて、IPを通知。
  pasttime = millis() - ntp_interval;
  if (pasttime > NTP_INTERVAL_TIME) {
    //M5.Lcd.fillScreen(BLACK);
    M5.Lcd.fillRect(0,0,300,70,BLACK); // 塗りつぶし left, top, witdh, height
    M5.Lcd.setCursor(0, 0, 1);
    M5.Lcd.setTextFont(4);
    M5.Lcd.setTextSize(1);
    M5.Lcd.print("\n");
    M5.Lcd.print(" Update Now!\n");
    M5.Lcd.print("\n");
    M5.Lcd.print("\n");
    delay(5000);
    timeClient.update();
    M5.Lcd.fillScreen(BLACK);
    M5.Lcd.setCursor(0, 0, 1);
    M5.Lcd.setTextColor(GREEN);
    M5.Lcd.setTextFont(7);
    M5.Lcd.setTextSize(1);
    M5.Lcd.print(timeClient.getFormattedTime());
    M5.Lcd.print("\n");
    M5.Lcd.print("\n");
    notice();
    ntp_interval = millis();
  }else{
    if(getmsg="200"){
      M5.Lcd.fillRect(0,0,300,70,BLACK); // 塗りつぶし left, top, witdh, height
    }else{
      M5.Lcd.fillScreen(RED);
    }
    M5.Lcd.setCursor(0, 0, 1);
    M5.Lcd.setTextColor(GREEN);
    M5.Lcd.setTextFont(7);
    M5.Lcd.setTextSize(1);
    M5.Lcd.print(timeClient.getFormattedTime());
    M5.Lcd.print("\n");
    M5.Lcd.setTextFont(4);
    M5.Lcd.setTextSize(1);
    M5.Lcd.print(NTP_INTERVAL_TIME / 1000);
    M5.Lcd.print(" > ");
    M5.Lcd.print(pasttime / 1000);
    M5.Lcd.print("\n");
    M5.Lcd.print("http GET= ");
    M5.Lcd.print(getmsg);
    M5.Lcd.print("\n");
    M5.Lcd.print("Push M5:update");
    M5.Lcd.print("\n");
    delay(1000);    
  }
}

void notice() {
  timeClient.update();
  // 通知
  WiFiClient client;
  HTTPClient http;
  http.begin(client, "http://ipv4.mydns.jp/login.html");
  http.setAuthorization(id, pw);
  M5.Lcd.setTextFont(4);
  M5.Lcd.setTextSize(1);
  M5.Lcd.print("http GET= ");
  getmsg = http.GET();
  M5.Lcd.print(getmsg);
  M5.Lcd.print("\n");
  timeClient.update();
  M5.Lcd.fillScreen(BLACK);
  M5.Lcd.setCursor(0, 0, 1);
  M5.Lcd.setTextColor(GREEN);
  M5.Lcd.setTextFont(7);
  M5.Lcd.setTextSize(1);
  M5.Lcd.print(timeClient.getFormattedTime());
  M5.Lcd.print("\n");
  M5.Lcd.print("\n");
  ntp_interval = millis();
}

Arduino IDE 2.3.6

ASP.NET Core WEB・APP

ASP.NETでWEBアプリを作成

サンプルとして、ネットで紹介されている手順で作成してみた
サンプルはVS2019でしたが、2022で同じように作成してみた

・・・途中で、データベースファーストのEFでのウィザードが正しく動かない

しかたないので、VS2019で作成したら、一応できた。

なにか足りない?

SDK?

BLAZORへ移行しろということか?

・・・

追記:202050522

分かったこと

VS2022でASP.NET WEBアプリ(.NetFramework)を選択したら
バージョンは4.7.2~4.8.1が選択できる(4.7.2)

まず、デフォルトのサンプルプロジェクトができたら
NuGet管理を起動して、インストール済みの一覧にある
EntityFramework.ja を消す (jaのやつのみ)

EntityFramework(jaなし)のバージョンを上げておく(6.5.1)

これで、VS2022で問題なくいろんなウィザードが動作する。

結局、このASP.NET Webアプリは4.8.2止まり・・・

Port=80

Apacheが起動できない。

ログを見るとPort=80が・・・と出てます

ん?

なんか使っていたっけ?

Copilotに聞いて調べても、WindowsがSystemで使用していますね・・・と

え?

で、やっと判明したのが・・・IIS

ああ~

削除して

netstat -aon | findstr :80

なにも出ません

動いた・・・すごい時間かけて・・・

つかれた

MySQL・・・その2

LinuxMintにMySQL8を入れたが、他のPCから接続できるようにする。

Linux側の設定

・MySQLにユーザーを追加(TESTAdmin)

CREATE USER '[user]'@'%' IDENTIFIED BY '[password]'
GRANT SELECT, INSERT, DELETE, UPDATE ON [databese].* TO '[user]'@'%';

・mysqld.cnfの設定変更(bind-address = 0.0.0.0 mysqlx-bind-address=0.0.0.0)

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

・FWにMySQLのポートを設定(3306)

WIndows側の設定

・Dbeaverのインストール
・接続情報の登録(TESTAdmin・test)
・接続のパラメータを追加する(allowPublicKeyRetrieval=true,useSSL=false)

ユーザー認証の設定が平文パスワードなので、セキュリティ上は低い
MySQL8では、高度な認証を設定できるので、次回、試してみる。

ポートの変更もしたいね。

LinuxMintでMySQL

何回かインストールに失敗したのでメモする

インストールは・・・

sudo apt update
sudo apt install mysql-server
sudo mysql_secure_installation

ここで最初にrootのパスワードを入力する。
後はひたすら「Y」でエンター
★これを理解できず何度も繰り返した(削除とインストール)

動作確認

sudo systemctl status mysql

ログインする

sudo mysql -u root -p

 でエンター

<password> さっきのrootパスワード

$ sudo mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 8.0.40-0ubuntu0.24.04.1 (Ubuntu)

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql>

ログインできた〜

ログアウトは
exit

自動起動設定

sudo systemctl start mysql
sudo systemctl enable mysql

さて、MySQLを全削除するには・・・

sudo systemctl stop mysql
sudo systemctl disable mysql
sudo apt-get remove --purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-*
sudo apt-get autoremove
sudo apt-get autoclean
sudo rm -rf /etc/mysql /var/lib/mysql /var/log/mysql
sudo rm -rf /var/cache/mysql

これで完全に削除されるそうな・・・

SHOW DATABASES;


+——————–+
| Database |
+——————–+
| information_schema |
| mysql |
| performance_schema |
| sys |
+——————–+
4 rows in set (0.02 sec)

mysql>

DBを作成

CREATE DATABASE test;
SHOW DATABASES;


+——————–+
| Database |
+——————–+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+——————–+
5 rows in set (0.00 sec)

mysql>

test DBが作成できた

testtblを作成する

USE test;
CREATE TABLE testtbl (
id INT,
item VARCHAR(50),
comment VARCHAR(250)
);
SHOW TABLES;


+—————-+
| Tables_in_test |
+—————-+
| testtbl |
+—————-+
1 row in set (0.01 sec)

mysql>

DESCRIBE testtbl;


+———+————–+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+———+————–+——+—–+———+——-+
| id | int | YES | | NULL | |
| item | varchar(50) | YES | | NULL | |
| comment | varchar(250) | YES | | NULL | |
+———+————–+——+—–+———+——-+
3 rows in set (0.01 sec)

mysql>

ん〜できた

データを追加してみるか

INSERT INTO testtbl (id, item, comment) VALUES (1, 'Apple', 'This is a red apple');
INSERT INTO testtbl (id, item, comment)
VALUES
(2, 'Banana', 'This is a yellow banana'),
(3, 'Orange', 'This is an orange fruit');

SELECT * FROM testtbl;


+——+——–+————————-+
| id | item | comment |
+——+——–+————————-+
| 1 | Apple | This is a red apple |
| 2 | Banana | This is a yellow banana |
| 3 | Orange | This is an orange fruit |
+——+——–+————————-+
3 rows in set (0.00 sec)

mysql>

できた

修正(UPDATE)

 update testtbl set item='bunchan' where id=2;

Query OK, 1 row affected (0.03 sec)
Rows matched: 1 Changed: 1 Warnings: 0

SELECT * FROM testtbl;

+——+———+————————-+
| id | item | comment |
+——+———+————————-+
| 1 | Apple | This is a red apple |
| 2 | bunchan | This is a yellow banana |
| 3 | Orange | This is an orange fruit |
+——+———+————————-+
3 rows in set (0.00 sec)

mysql>

削除(DELETE)

delete from testtbl where id=2;

Query OK, 1 row affected (0.02 sec)

SELECT * FROM testtbl;

+——+——–+————————-+
| id | item | comment |
+——+——–+————————-+
| 1 | Apple | This is a red apple |
| 3 | Orange | This is an orange fruit |
+——+——–+————————-+
2 rows in set (0.01 sec)

mysql>

いいね〜

Arduino IDE 2.3.4

今まで使っていたArduino開発用PCが、もたつく・・・

漢字変換すら遅くなってしまい、息継ぎ状態・・・

Thinkpad X-280のi3モデルなので
メモリも4GBがそもそものボトルネックか・・・

Windows11にしてから、よけいに動きがにすい

そこで、別のPCに引っ越しすることにした。

Thinkpad X380 Yogaが空いていたので
そこに最新のArduino IDE2.3.4をインストール

今までのソースたちの移動も今後のことを考えて
Googleドライブで共有することにした。

GdrivePC版をインストールして、Gドライブが割り当てられるので
そこにArduinoフォルダーをおいて、そこに見に行くように設定を変える。

G:\マイドライブ\Arduino\arduino

しばらく、様子見てみる・・・

ASP.NET Core

去年は、BLAZOR SERVERでシステム構築をした。

そこまでではないけど、ASP.NETでWebアプリを作りたい・・・

数年前に、携わったPJでは、ASP.NET MVCで構築したWebアプリをメンテしてた。

自分が1から構築したものではないので、触りしか知らない。

今回は、1から、しっかり勉強してみる。

本当は、データベースファーストで行こうと思っていたが
いろいろと悩んだが、コードファーストで行こう!

触りは、.NET5.0でやってたが、もう、非推奨・・・

.NET8.0にしてやり直し

目標は見積書発行システム・・・
もちろん、注文書、納品書、請求書も発行していきたい。

用紙のテンプレートはExcelシートを使用して
作成、ダウンロードしてPDFか印刷できるようにしたい。

IISのログって9時間ずれる

IISを立ててます。

仕事でIISをつかったアプリを開発してるのですが
今まで、ログの日付時刻がJSTではないことに気が付きませんでした。

デフォルトのままだと

サイトのIISのログ記録の形式を「IIS」にすると
ログ内の時刻がJSTで出力された。

IIS 10.0 でログが9時間ずれているときの対応【Windows Server 2016】|No IT No Life – おすぎやん サーバの設計・構築 (server-network-info.blogspot.com)

そもそも、ログはNLogで自前でだしていたので、見てなかった・・・

BLAZOR SERVERで開発
.NET5.0なので、上げたいが、客先サーバーの要件で・・・

動作確認中
WindowsServer2012R2:IIS8.5
WindowsServer2019:IIS10.0