2026年9月1日火曜日

raspi3にさらにUSBカメラと人感センサーつないでみる

 raspi3のUSBカメラの準備としては
sudo apt-get install fswebcam
sudo modprobe uvcvideo
ls /dev/video* で0番のカメラが認識できていればOk
一回でうまくいかないときは、
sudo modprobe -r uvcvideo 
sudo modprobe uvcvideoでリセットしてUSBカメラつなぎなおし、
再度ls /dev/video* で /dev/video0が出ればOk

前回のCdsセンサー、赤外線学習機能に加え、raspi2のボトルからraspi3のカメラ、人感センサも使えるようにコードを追加した。現在のカメラの静止画像と人感センサが反応したときの静止画像を遠隔で確認できるようにしてみた。raspiとセンサやカメラ組み合わせるだけでいろいろなことができて便利。


2026年8月28日金曜日

明るさをCdsで検知(raspi3)

 Cds(1MΩ)が安価だったので、1uFのコンデンサへの充電時間で、明るさをraspi3でチェックする機能を追加してみた。写真の上部のケース外が赤外線送信モジュール、電源接続付近のモジュールが受信モジュール、GPIOピンに直接基板をさしているのがCds+コンデンサの回路。



2026年8月24日月曜日

rasp2経由でraspi3へssh

 raspi2経由でraspi3へsshするには、
ssh-keygen -t rsa -b 4096 として、3回リターン
ssh-copy-id pi@raspi3のIPアドレス  ここでyesのあと、ログインのためのパスワード
ssh pi@raspi3のIPアドレス パスワードなしでSSH使えるようになります。

これを使って、raspi2からraspi3の操作(赤外線等)をすることに。

import subprocess
from bottle import route, run, template
@route('/***/***')
def index():
    return '''
        <h1>照明リモコン</h1>
        <form action="/press_button" method="post">
            <button type="submit" style="font-size:2em; padding:20px 40px;">
                ON / OFF ボタンを押す
            </button>
        </form>
    '''

@route('/press_button', method='POST')
def press_button():
    cmd = ["ssh", "pi@アドレス", "python3 /home/pi/shomei.py"]    
    result = subprocess.run(cmd, capture_output=True, text=True)    
    raspi3_reply = result.stdout    
    raspi3_error = result.stderr    
    
    if result.returncode == 0:
        return f"<h1>送信成功!</h1><p>Raspi3からの返事: {raspi3_reply}</p>"
    else:
        return f"<h1>エラー発生</h1><p>理由: {raspi3_error}</p>"

# Raspi 3側の /home/pi/shomei.py の中身
import subprocess
try:
    cmd = ["sudo", "ir-ctl", "-s", "/home/pi/shomei.txt", "-d", "/dev/lirc0"]
    subprocess.run(cmd, check=True)    
    print("赤外線信号を送信しました。")
except subprocess.CalledProcessError as e:
    print(f"ir-ctlの実行に失敗しました。エラーコード: {e.returncode}")

2026年8月23日日曜日

raspi3で赤外線の実験

 赤外線モジュールをつないで、受信
 受信モジュールのピン  Raspi3の接続先  ピン番号(物理)
 VCC (または + )       3.3V Power 1番ピン
 GND (または -)        GND     6番ピン
 OUT (または S / Data)    GPIO 17  11番ピン
送信は図のような回路をつないでみた

以下のコードで受信可能
ir-ctl -r -d /dev/lirc1 > single.txt 
送信は
ir-ctl -s single.txt -d /dev/lirc0  

2026年8月2日日曜日

FX-502Pでライプニッツ級数で円周率ためす

 Σn=0~100  4*(-1)^n/(2n+1)  をFX502Pのプログラム機能で試してみた。

分子がM2 分母がM3  カウンタがM0 総和をM1とすると

MODE 2> P2 >Min 0 >  0 Min 1 > 4 Min 2 >1 Min 3 > LBL 0 >MR 2 ÷ MR 3 =  M+ 1 >2 M+ 3> MR 2 +/- Min 2 > INV DSZ >GOTO 0 > MR 1

MODE 1>1000 > P2で実行すると 3.140592187

FX-502Pが発売当時、大型計算機のFORTRANだと、自分の知識では倍精度とかもできなかったので、ディフォルトでは桁数が小さく、すぐ精度がおちてしまって、級数計算(ミー理論と実測値の比較で使いました)は無理だった。級数計算は、大型計算機より、むしろ、プログラム電卓が重宝しました。

2026年7月27日月曜日

FX-502P 簡単なコーディング 、メモリについて

 ・(A+B)×C なら

MODE 2 >P0 >  (  >HLT> + >HLT> ) >× > HLT > =  と数式通り入力、ちょうどHLTがinput()やscanf()にあたる働き

MODE 1  >P0>1>EXE> 2 >EXE >3 >EXE  これで(1+2)×3=9と計算

・メモリの使い方

 20 > Min > . >1 でM1に保存   MR>.>1 で20がM1から読み出される。 MinやMRの後に.と数字指定   M-  M+ x⇔M などのボタンも同様の使い方   MFメモリはEXPボタンで指定

M+は 表示中の数を指定メモリにプラス

FX-502P

 学生の頃、実験レポートでよく使ったのがプログラム電卓FX-502P。棚の整理していたら、たまたま出てきた。久しぶりにいろいろ使ってみたが、完全に使い方は忘れている。英語版の説明書はかろうじてネット上で入手できたのでそれを見ながら少し使ってみた。念のため、分解してキーの接触部分に接点復活剤をかけてみた。ただ、基板の接点は金色だったので、ひょっとしたら金メッキ?。だとすると、接点復活剤は意味なかったかもしれませんが。念のため、LR44ボタン電池を交換しておいたほうがいいかもしれません。

 https://sourceforge.net/projects/uiq3/files/Documents/

最近は、関数電卓は需要があるようですが、プログラムは慣れた言語のほうがいいでしょうから、さすがにプログラム電卓はマイナーな存在のようです。

・プログラムのALL クリアは、MODE 3>INV MAC

・POプログラムのクリアは MODE 3>P0>AC

・P0への書き込み(2倍する計算なら)は MODE 2>P0>×>2>=

・P0の実行は MODE 1>3>P0で3×2=6という計算

今でも、電卓で三角関数や対数計算ぐらいは使うこともたまにあるので、ヤフオクで処分しようか?かどうかで、迷っています。当時、2万円以上はしましたし、今でも十分動作はしているようなので。さらに持っていれば、骨とう品としての価値があがる?

・赤、緑のLEDの抵抗計算をP0にいれてみた
MODE 2>P3>-2.1>=>÷>0.02>=    電圧を入力しP3で直列に入れる抵抗値がでる。実際は数十倍にして、少し消費電流をおさえたほうがいいようです。
・容量とインダクタンスから共振周波数を求めるものをP1にいれてみた
MODE 2>P1>HLT>Min 1>HLT>Min 2>MR 1>×>MR 2>=>√>×>2>×>π>=>1/x>
    10uF、100pFを入力すると  P0>  10 EXP +/- 6 >EXE > 100 EXP +/- 12> EXE
・2sc1815をスイッチングでつかうときの抵抗計算
MODE 2>P4>HLT>Min 1>HLT>Min 2>HLT>Min 3>MR 1 - 0.7 = >÷> ( > MR 3 > ÷ > 50 > ) > = > HLT > MR 1 > - > MR 2 > - 0.1 = > ÷ > MR 3 > = > HLT
  12V電源、3VのLED、流したい電流0.02Aの場合  MODE 1>P4> 12 >EXE> 3> EXE > 0.02 >EXE で28250Ω (ベース抵抗)>EXE で445Ω(コレクタ抵抗)
  

2026年5月17日日曜日

欧州の経済

  Youtubeで国際経済に詳しい藤井氏によると、このところ、英・仏・独あたりの経済があまりよくないということらしいです。
1移民問題:文化的摩擦(宗教)、教育レベル(ネイティブ言語未習得で初等教育成立しない)>労働者の質が下がる>経済の悪化  最初は低賃金労働でいいと思っていたが。。。
2CO2規制のやりすぎ:電力が高くなる>AI革命につながらない
3ロシアからの天然ガスが買えなくなる
4中国へ売ろうとしたが、買ってくれる国がなくなった。中国に依存しすぎた。その国のいうことを聞かざるをえなくなる。
  1,2の割合大きい。

 イギリスは、国内で高炉がなくなり、鉄を作れない。唯一の産業、金融が落ち込んでいる。年金基金も、自国内の株の比率も下がっている。医療の崩壊(かつては、揺りかごから墓場までだったが)。犯罪多発で、街のビジネスも衰退。
 ドイツは、社会インフラが遅れている。光ファイバーの普及(10~15%普及率)が遅れている。ドイツの官僚主義>書類、FAX中心。鉄道の定時運航率低い。原因は、財政規律を徹底しすぎたため。「貯金はあるけど、ぼろ屋に住む」みたいな感じ。イスラム移民多く、ドイツに同化してない。中国に逆に技術的に依存するようになってしまった。ドイツの技術を中国に売ってしまった。
 フランスはラグジュアリー産業を中国に依存していたが、それがだめになった。フランスは製造業がなくなってしまった。

 日本も他山の石としないといけないかと。
 

2026年5月13日水曜日

畑管理GASについて

 畑資材の支出入をGASで管理していたものに、機能を少し追加した。これまで畑管理は、ノートに書き込んでいたが、さすがに中身が増えてくると、整理がつきにくくなったので、これもGASで管理してみることにした。

  オープンデータのAPIから天気、気温、降水量、風力など、自動で入力されるようにしました。畑日記のようなものです。

※textareaのみ全角を半角にする必要あります。
※検索機能追加しました。


2026年5月12日火曜日

5月の苗床管理

 そろそろ、ヒータを使う必要性もすくなくなってきた。

残り、サツマイモと豆類の苗準備だが、保温の必要性もへってきたかも。

BMP1,2が室温、D1やD3がヒーター温度 両者の差がなくなってきている。


ボイラー室のドアノブ固着

 ボイラー室のドアノブが固着し、業者に頼んで、手間賃かなりかかったことありましたが、放置したら再び固着。どうしたものかと、大型プライヤー使いましたが、だめ。ホームセンターでパイプレンチ探してみたら8000円近くして、あきらめましたが。ふと、モノタロウで値段を見たら2000円台で入手可能なことを見つける。早速、購入し試してみたら、大正解。ノブに瑕はついたものの、回すことができた。今後は年1回ぐらいは動かしたほうがいいようだ。

2026年4月5日日曜日

マウスのクリックボタン修理

 マウスの左クリックが急に反応が悪くなる。買い替えようとも思ったけれど、だめもとで、修理してみた。最初は、スイッチボックスのカバーをはずして、接点復活剤をかけてみたが、変わらず。よくみると、スイッチを押すプラスチックの部分がへこんでいて、うまく押せてないことに気づく。長年、押し続けてプラスチックが変形しへこんだと思われます。へこんだ部分にセロテープを何枚か重ねて貼ったら、うまく反応するようになった。

2026年3月31日火曜日

捨てようか迷っていたタイマーを改造してみた

 キー入力は待ち受け電力が多いためか、 電池があまり持たないタイマーだったので、しょっちゅう電池交換も面倒で、いつのまにか使わなくなったタイマーでしたが、そのまま捨てるのももったいない気がして、試しにTTP223と2sc1815で使うときだけOnにするようにしてみた。  

 TTP223も3uA程度は消費するようので、はたして長持ちするかどうか試してみないとわからないけれど。

 赤色LEDが見えないとOnOffがわかりにくかったので、写真のように、上部からタッチセンサーが見えるように加工した。(タッチセンサの端にハンダが見えますが。これは、センサ本体を中におさめて、延長した導線で、外にタッチ部をだすことを試みたときのもの。あまりうまくいかなかったので、あきらめました。)
 オンのたびモード切替など操作が必要なったり、Offしてから数分置いて完全に電荷が抜けないと再度Onにはできなかったりということはありますが、それでも、少し省エネにはなったのでないかと思います。
※その後、1週間くらいしたら、OFFが完全にならなくなりました。どうも、タッチセンサも若干不安定なようです。原因はよくわかりませんが。
※結局、タッチセンサでなく、単純にスライドスイッチを使うことにしました。そのほうが使いやすいようです。(下の写真)



2026年3月27日金曜日

苗床管理Esp32c3による温度調整

 しばらく利用してみたが、手元から温度を細かく調整できるのは便利。外気温によって、リレーonの比率が変わるのもグラフから一目瞭然で、異様に比率が高いときは、熱が逃げている可能性もあったりするので、それをみて再度苗床をセットしなおしたりしている。

D2,D3はそれぞれヒーターに密着したセンサーのためかなり高めの温度になっている。D1,D3が制御用のセンサー。発芽までは温度高くてもいいけれど、発芽後はあまり温度が高くても徒長しやすいらしいので、途中から少しさげるようにしている。


2026年3月23日月曜日

追加でEsp32C3を苗床管理用に利用することに

 Esp32C3へのマイク、アンプ追加の実験はうまくいかなかったので、マイクは取り除き、センサとSSRをつなげて、苗床管理用に使うことに。ヒーターと白色LED(徒長防止)どちらにも使えるように考えてみた。管理用のアプリは、すでにあるものを若干拡張して使用予定。


bottleの一部  
esp32c3
 
※esp32c3のAPモードで苦労する。SSIDやパスワードはAPモードで設定したかったのですが、いろいろ注意が必要なようで、うまく切り替えがいかないときは、以下の点の確認が必要なようです。
IDEの設定:
 Board:ESP32C3 Dev Module   CPU:160MHz   Flash Mode :DIO  Flash Freq :80MHz   Upload Speed :460800   USB CDC On Boot :Enabled  Partition :Default   Erase Flash :Only Sketch 変な時 :All Flash
 モードの確認: WiFi.mode(WIFI_AP);
出力は適切か:  WiFi.setTxPower(WIFI_POWER_19_5dBm); 8_5dBmで安定する場合も
チャンネル6でSSID非表示をfalseなら:  WiFi.softAP("ESP32_AP", "12345678", 6, false);
※調整器はケースをアクリル板にしているので、風除室だと紫外線で脆くなりやすいかと思い、車用の塗装スプレーをかけている。
※4月になると、日差しが強いと30度ごえになることもあるので、苗の近くが30度超えたらアラーム再生するように機能追加した。(これまではヒーター故障想定して、ヒータ近くのセンサが45℃超えたらアラームとしていたが、それだけではだめだと気付きました。)

2026年3月22日日曜日

トルバムビガーは成長がゆっくり

せっかく、ESP32の温度調整で芽が出たトルバムビガーですが、光が不足すると徒長しやすいので、LEDテープ(昼光色)の利用も検討中。それまでの間、窓際で少しでも光をあてています。(すでに徒長してしまったので、土を追加していますが、今後どうなるか?)
※その後、なかなか大きくならず、逆に穂木のほうが大きくなりつつあるので、どうしたものかと思っていましたが、台木と穂木はそれぞれ温度を調整して、成長度合いを合わせることが必要なようです。

 

2026年3月17日火曜日

ESP32にマイクとアンプは、負荷が高く断念

 esp32C3のハードの能力ではデジタルで音声処理は難しそうで、せっかくの部品購入ではありましたが、諦めて、別の方法に切り替えました。esp32はテキスト処理にとどめておいたほうがい無難なようです。目的は音声認識英英辞典だったので、GithubPagesに、Javascriptでこちらにサイトをつくってみました。スマホなどからアクセスすると便利に使えそうです。

最初からこの方法を思いついていれば、わざわざesp32で難しいことしなくても、実現できたのですが、、、。

2026年3月15日日曜日

ESP32にスピーカとマイクをつけて実験

 短い音の録音再生(エコー)が可能か実験してみた。今後、raspi経由でいろいろ処理を予定していますが。

 配線の数が多いときは、意外とエナメル線が使いやすい。裏表に通したりしてなるべく干渉しないようにした。PCB等の発注も考えたけれど、配線の変更の可能性もあるし、それなりの料金はかかるので、最小限のユニバーサル基板にしてみた。モジュールが基板からはみ出しているところは、あとでサイズがあいそうな百均のケースに固定できないか、考えたい。

raspiで音声アラームをスケジュールに従い起動

アラームをスケジュールで起動する仕組みを考えてみた。
wavplay.py**********************
import os
import sys
import time
import subprocess
import RPi.GPIO as GPIO 
RELAY_PIN = 27
MAX_LINES = 200
def play_wav(wav_file):
    file_path = os.path.join("/home/pi", wav_file)
    if not os.path.isfile(file_path):
        return f"File not found: {file_path}"
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(RELAY_PIN, GPIO.OUT)
    try:
        GPIO.output(RELAY_PIN, GPIO.HIGH)
        time.sleep(0.2)
        proc = subprocess.Popen(["aplay", file_path])
        proc.wait()

        with open("wavlog.txt", "a", newline="") as f:
         writer = csv.writer(f)
         now_str = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
         writer.writerow([now_str, wav_file])
        with open("wavlog.txt", "r") as f:
         lines = f.readlines()
        if len(lines) > MAX_LINES:
          lines = lines[-MAX_LINES:]   # ← 最新2maxlines行だけ残す
          with open("wavlog.txt", "w", newline="") as f:
           f.writelines(lines)

        return f"Played {wav_file}"
    except Exception as e:
        return f"Error: {e}"
    finally:
        GPIO.output(RELAY_PIN, GPIO.LOW)
        GPIO.cleanup(RELAY_PIN)
if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("Usage: python script.py <waveFilename>")
        sys.exit(1)
    filename = sys.argv[1]
    result = play_wav(filename)
    print(result)

crontab -e******************
0 17-19 10 11-12 * /usr/bin/python3 /home/pi/wavplay.py PurchaseKerosene.wav

ちなみに、現在のcrontabの一部
5 6 * * * /home/pi/update-cloudflare-ufw.sh >> /home/pi/tmp/ufw-cron.log 2>&1
*/10  * 13-29 2 * curl -s http://localhost:8080/py/collect >/dev/null
0     8 13-29 2 * curl "http://*.*.*.*/setConfig?setA1=21.5&setA2=21.4&setA3=21.5"
1行目cloudflare関連、2,3行目が苗床ヒーター管理

2026年3月4日水曜日

IPoE接続に変えてみた

  PPPoE接続をしばらく使ってきたが、最近土日や夜間がネット途切れるぐらい混雑してきたので、思い切ってIPoEに変えてみたら夜間でもダウンロード220Mbpsアップロード150Mbpsとだいぶ快適になった。

 ルータをどうするかで迷ったが、最近WIFI-Apを交換したばかりだし、WIFI付きの家庭用ルータはどうしても熱のためか、寿命が短いように思われたので、頑丈な有線ルータということで中古のIX2106をヤフオクで入手。希望小売価格が89000円ということなので、6000円ちょっとで購入でき、コスパはいいのでないかと思う。

 ただ、設定は情報集めがなかなか大変だった。ネットのNECの設定例も、ONU接続用の設定?のような感じだったので、PR400NEの内臓ONUを使うには不安があった。(電話はPR400NEから接続しているので、これを使わざるを得ない) ChatGPTとGoogleAIの助けを借りてなんとか、解決。

注意点としては

・PR400NEの接続1を停止 sshで設定するために、念のためUSBシリアルコンソール(1500円ほど)用意

・NECのサンプルの変更したところ

 ip-ad subscriber Giga~は削除 ※
interface GigaEthernet0.0

  no ip addressip address 192.168.2.2/24
  ipv6 enable
  ipv6 address autoconfig ※のかわり追加
  ipv6 dhcp client dhcpv6-cl 
  no shutdown

ip dhcp profile dhcpv4-sv
  assignable-range 192.168.1.50 192.168.1.70  ::dhcpの範囲を指定できる
  dns-server 192.168.1.1

interface Tunnel0.0
  tunnel mode 4-over-6
  tunnel destination fqdn gw.transix.jp
  tunnel source GigaEthernet1.0 → tunnel source GigaEthernet0.0 に変更
  ip unnumbered GigaEthernet1.0 これはなしで→  ip address 192.0.0.2/29 に変更
  ip tcp adjust-mss auto 
  no shutdown


※内部DNSサーバをうまく扱うことができなかったが、その後、「proxy-dns server ipアドレス priority 優先度」を設定することで、使えるようになった。
 また、bottleサーバでは、cloudflareからの外部アクセス制限をipアドレスで行う方法が使えず、別の方法に変更した。どうしても複雑化しているので細かいところに影響はでてしまうようだ。
※中古のため、縦置きスタンドがなかったため、不要になったアクリルボックスの破片からミニルータでL型に切り抜き、ねじ止めしたら安定するようになる。横置きより縦置きのほうが、熱は逃げやすいと思われるので、縦置きにした。
※念のため、使わずにいた廃品からはずした冷却ファンと使わずにいた温度センサーW1209、それにハードオフの330円の12Vアダプタで冷却もできるようにした。冷却ファンを最初はひもでしばっていたが、どうも不安定なので、あり合わせのアクリル破片をリベットでつないで、縦置き上部に載せられるように、フレームをつくってみた。
※PR400NE側の192.168.2.0/24側に192.168.1.0/24側からアクセスできず、HGWの管理画面が出せず不便だったが、以下の確認することで、なんとか解決できた。
1.PR-400NEの静的ルート: 192.168.1.0/24 宛を 192.168.2.2 へ
2.PR-400NEのipv4パケットフィルタ: 192.168.1.0/24 からの通信を許可
IX2106のマニュアルでは、2つのLANを接続するには、それぞれのインターフェースに ip address 192.168.1.254/24等を記述する例がでていたが、複数のルータが絡む場合はそれぞれきちんと確認が必要だということのようだ。
※結局、上記の設定では、ipv6がつながらないことが判明、再度、こちらの設定例1をもとに修正したらうまくいった。192.168.2.0/24というゾーンはつくらないほうがシンプルでいいようだ。ただ、HGWの管理画面を出すには、なぜかipv4ではだめで、ipv6のグローバルアドレス(たまに更新されるらしい)を指定必要だった。AIの意見も聞きながらも、そのままだとうまくいかないところもあったので、やはり、人間の判断も入れながら適宜修正は必要なようだ。
※そのご、冷却ファンの動作がいまいち不安定になってきて、取り外した。おそらくリレーセンサーの回路の信頼性がいまひとつなのが、原因?2026/7

2026年3月1日日曜日

久しぶりの移動運用

 外の気温は6度と、まだ風が冷たかったけれど、比較的電波状況もよく、それほど強い風でもなかったので、久しぶりの移動運用。前回、ダイポールアンテナの実験失敗していたので、再チャレンジ。今回は、NanoVNAで慎重に長さを調整してみたところ、なんとかアンテナチューナで整合できた。末端が地面に近いこともあってか、かなり短めにする必要があった。とりあえず、1エリアの移動局と59で交信することができた。

 


 (ヒートガンで柔らかくした)塩ビパイプで、不要になった物干しパイプ、壊れた雪はねの柄、つっぱり棒をつなげて作ったポールなので、かなりしなっていますがなんとか持ちこたえています。近くに1m程度の杭があったので、ひもを結ぶのに使わせてもらいました。
 たまたま、河川公園に来ていた方から、声をかけられ、アマチュア無線だという話をしたところ、以前免許を取ったけど今はやってない方のようでした。受信の様子など、見てもらいながら、少しの間、アイボール。

2026年2月27日金曜日

cloudflareのトンネル利用

 これまで、cloudflareのプロキシーは利用していたが、グローバルIpアドレスをルータのものをDNSに設定していたので、Ipアドレスが変更になった途端、外部からアクセスできなくなった。自分では、自動更新の設定なっていたつもりだったけど、よく調べたら、なってなかったようで、結局は、トンネルを作らないとだめだったよう。cloudflareとraspiの間で独自プロトコルでトンネルを作り、常時接続状態にする仕組みのよう。早速、AIに聞きながらraspiにツールをいれ、設定変更。これで、Ipアドレス変更を気にしなくてもよくなり、だいぶ管理は楽になる。

※この方式にしたところ、外部からのアクセスログが正しく記録されなくなってしまった。いろいろ、試行錯誤した結果わかったことは。ヘッダー名: Cloudflareの仕様により、元のIPは CF-Connecting-IP という名前で送られてくるので、それを使うようにする設定が必要らしい。

sudo a2enmod remoteip

・トンネルでlocalhost:8080でbottleを指定したのがよくなかった。apacheのログを取りたい場合はapache経由のためlocalhost:80にする必要あった。

・ログ形式(apache2.conf)で

LogFormat "%v:%p %a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%a %l %u %t \"%r\" %>s %O" common

内部設定(000-default.conf)で

RemoteIPHeader CF-Connecting-IP
RemoteIPInternalProxy 127.0.0.1

変更が必要。

sudo systemctl restart apache2 で再起動。