habe hier schon viel gelesen und einige Tips "mitgenommen". Jetzt hab ich mich registriert, um auch eine Frage zu einem kniffligen Problem zu stellen...
Habe einen Raspi Zero mit Kameramodul auf meine Wasseruhr gehängt und möchte den Verbrauch auf meinen Server im LAN in einer MySQL speichern.
Die MySQL besteht schon seit der Nextcloud Installation. PHPmyAdmin habe ich auch zum Laufen bekommen und eine neue Datenbank angelegt.
Das Programm auf dem Pi ist fast fertig, die Bildauswertung funktioniert und ich habe einen Zähler für die Liter. Das Schreiben auf den Server funktioniert im Test,
Das Programm hatte ich zum Test abgeändert, sodass ein Zählerwert immer gesendet wird. Klappt auch.
Allerdings muß ich den SSH Tunnel vorher von einem Notebook im Terminal starten:
Code: Alles auswählen
ssh -N -L 3308:127.0.0.1:3306 192.168.1.100
Und als bash auf dem Pi und mit cron gestartet, kommt der Tunnel auch nicht zustande.
Habe einige Beiträge hier im Forum verfolgt, die meist übers Internet gehen. Das ist nicht meine Konstellation. Dann habe ich die Themen zu Paramiko durchgelesen,
da fehlt mir der Hintergrund, wie das funktionieren soll und was man vorher einstellen muss.
Könnte ich bitte einen kurzen zielführenden Tipp bekommen, wie ich einen stabilen Tunnel hinbekomme? Danke für jeden Tipp.
Hier zur Info mein Programm:
Code: Alles auswählen
import cv2
import numpy as np
import datetime
import os
from picamera.array import PiRGBArray
from picamera import PiCamera
import time
import pymysql
indicator = False
liter = "Liter.txt"
# init mySQL
mydb = pymysql.connect(
host="127.0.0.1",
port=3308,
user="messi",
password="mess",
database="smarthome"
)
mycursor = mydb.cursor()
mycursor.execute("SELECT counter_w FROM messwerte_wasser ORDER BY Datum DESC LIMIT 1")
last = mycursor.fetchone()
counter = last[0]
# initialize the camera and grab a reference to the raw camera capture
camera = PiCamera()
camera.resolution = (864, 656)
while True:
# grab an image from the camera
rawCapture = PiRGBArray(camera, size=(864, 656))
camera.capture(rawCapture, format="bgr")
image = rawCapture.array
# turn picture (180grad)
img = image
dimensions = img.shape
rows = dimensions[0]
cols = dimensions[1]
# cols-1 and rows-1 are the coordinate limits.
M = cv2.getRotationMatrix2D(((cols - 1) / 2.0, (rows - 1) / 2.0), 180, 1)
dst = cv2.warpAffine(img, M, (cols, rows))
image = dst
# save pictures for testing
# cv2.imwrite(datetime.datetime.now().strftime("%Y, %m, %d, %H, %M, %S").replace(", ", "-") + ".jpg", image)
# ROI colour detection
y = 531
x = 428
region_of_interest = image[y:y + 6, x:x + 6]
mean_blue = np.mean(region_of_interest[:, :, 0])
mean_green = np.mean(region_of_interest[:, :, 1])
mean_red = np.mean(region_of_interest[:, :, 2])
# action if red arrow
# if mean_red >= 25 and mean_green <= 50:
if mean_red > mean_green:
if not indicator:
# increase counter liter
counter += 10
# send to mySQL
mycursor.execute("INSERT INTO messwerte_wasser (counter_w) VALUE ( %s);" % (counter))
mydb.commit()
mycursor.close()
mydb.close()
else:
pass
# set indicator red
indicator = True
# reset action no red arrow
# if mean_red <= 25 and mean_green >= 50:
if mean_red < mean_green:
# unset indicator red
indicator = False
# only testing
print(f" {indicator:2}, Counter: {counter:3d}, R:{mean_red:5.0f}, G:{mean_green:5.0f}, B:{mean_blue:5.0f}")
image = []
time.sleep(1)
# Break --- comming soon
camera.close()
exit(0)