<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>php &#8211; Tomas hjemmeside</title>
	<atom:link href="https://tomas.dk/ps/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>https://tomas.dk/ps</link>
	<description>Min foto/vejr/3D print blog</description>
	<lastBuildDate>Sun, 12 Jan 2025 17:24:40 +0000</lastBuildDate>
	<language>da-DK</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>
	<item>
		<title>Vejrstation del 4</title>
		<link>https://tomas.dk/ps/vejrstation-del-4/</link>
		
		<dc:creator><![CDATA[Tomas Jensen]]></dc:creator>
		<pubDate>Sun, 12 Jan 2025 17:16:32 +0000</pubDate>
				<category><![CDATA[3D]]></category>
		<category><![CDATA[Gør det selv]]></category>
		<category><![CDATA[Hobby]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Teknik]]></category>
		<category><![CDATA[Vejr]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mariadb]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[python3]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[webserver]]></category>
		<guid isPermaLink="false">https://tomas.dk/ps/?p=2710</guid>

					<description><![CDATA[Det hele samles i en web-server med en mariadb database.Først oprettes en database med: Databasen burde nu være klar til brug. For at hente data til databasen har jeg lavet et lille python script. Python skal være version 3.11 eller derover. Husk DTR skal være klippet i FTDI kablet, da arduinoen ellers resetter hver gang&#8230; <a class="more-link" href="https://tomas.dk/ps/vejrstation-del-4/">Læs mere <span class="screen-reader-text">Vejrstation del 4</span></a>]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1004" height="1024" data-attachment-id="2713" data-permalink="https://tomas.dk/ps/vejrstation-del-4/vippervipperbund/" data-orig-file="https://tomas.dk/ps/wp-content/uploads/2025/01/VipperVipperBund.jpg" data-orig-size="2459,2508" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;1.7&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;XQ-BQ52&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1734605440&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;5.11&quot;,&quot;iso&quot;:&quot;200&quot;,&quot;shutter_speed&quot;:&quot;0.00625&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="VipperVipperBund" data-image-description="" data-image-caption="" data-medium-file="https://tomas.dk/ps/wp-content/uploads/2025/01/VipperVipperBund-294x300.jpg" data-large-file="https://tomas.dk/ps/wp-content/uploads/2025/01/VipperVipperBund-1004x1024.jpg" src="https://tomas.dk/ps/wp-content/uploads/2025/01/VipperVipperBund-1004x1024.jpg" alt="Gammel vipperbund med vipper og proximitysensor." class="wp-image-2713" srcset="https://tomas.dk/ps/wp-content/uploads/2025/01/VipperVipperBund-1004x1024.jpg 1004w, https://tomas.dk/ps/wp-content/uploads/2025/01/VipperVipperBund-294x300.jpg 294w, https://tomas.dk/ps/wp-content/uploads/2025/01/VipperVipperBund-147x150.jpg 147w, https://tomas.dk/ps/wp-content/uploads/2025/01/VipperVipperBund-768x783.jpg 768w, https://tomas.dk/ps/wp-content/uploads/2025/01/VipperVipperBund-1506x1536.jpg 1506w, https://tomas.dk/ps/wp-content/uploads/2025/01/VipperVipperBund-2008x2048.jpg 2008w, https://tomas.dk/ps/wp-content/uploads/2025/01/VipperVipperBund-1568x1599.jpg 1568w" sizes="(max-width: 1004px) 100vw, 1004px" /></figure>



<p>Det hele samles i en web-server med en mariadb database.<br />Først oprettes en database med:</p>



<pre class="wp-block-code" style="font-size:10px"><code>CREATE DATABASE arduinovejr;
CREATE USER 'vejr'@'localhost' IDENTIFIED BY '_DITPASSWORD_';
GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT ON arduinovejr.* TO 'vejr'@'localhost';
FLUSH PRIVILEGES;

USE arduinovejr;
CREATE TABLE vejrdata ( tid DATETIME, temp_inde FLOAT(6,2), temp_ud FLOAT(6,2), tryk FLOAT(6,2), temp_cpu FLOAT(6,2), humid FLOAT(6,2), regn1min FLOAT(6,2), regn5min FLOAT(6,2), temp_1 FLOAT(6,2), temp2 FLOAT(6,2), temp3 FLOAT(6,2) );</code></pre>



<p>Databasen burde nu være klar til brug.</p>



<p>For at hente data til databasen har jeg lavet et lille python script. Python skal være version 3.11 eller derover.</p>



<pre class="wp-block-code" style="font-size:10px"><code>#!/usr/bin/python3.11

import serial
import time
from datetime import datetime
import re
import mysql.connector as mysql

# Setup serial

tty = serial.Serial(port='/dev/ttyUSB0', baudrate=9600, timeout=1)

# Setup mysql connection
vejrDB = mysql.connect(
        host = "localhost",
        user = "vejr",
        password = "DITPASSWORD",
        database = "arduinovejr")

def speakToArduino(txt):
    tty.write(bytes(txt, 'utf-8'))
    time.sleep(0.05)
    data = tty.readline().decode('utf-8').rstrip()
    return data

time.sleep(2)

svar = "na"

while not (re.search(r'&#91;0-9\.:\?]+', svar)):
    svar = speakToArduino('\n')
    time.sleep(0.1)

svar = speakToArduino('getPress')
#print("Lufttryk         : %8s"%svar)
tryk = svar

svar = speakToArduino('getTempIn')
#print("Temperatur cpu   : %8s"%svar)
tempCpu = svar

svar = speakToArduino('getTempOut')
#print("Temperatur ude   : %8s"%svar)
tempUd = svar

svar = speakToArduino('getOutHumidity')
#print("Luftfugtighed ude: %8s"%svar)
humid = svar

svar = speakToArduino('getrain5')
#print("5 minuters regn  : %8s"%svar)
rain5 = svar

svar = speakToArduino('getrain1')
#print("1 minuters regn  : %8s"%svar)
rain1 = svar


vejrCursor = vejrDB.cursor()
now = datetime.now()
tid = now.strftime('%Y-%m-%d %H:%M:%S')

sql = "INSERT INTO vejrdata (tid, temp_cpu, tryk, temp_ud, humid, regn5min, regn1min ) VALUES (%s, %s, %s, %s, %s, %s, %s)"
val = (str(tid), str(tempCpu), str(tryk), str(tempUd), str(humid), str(rain5), str(rain1))

vejrCursor.execute(sql, val)
vejrDB.commit()
</code></pre>



<p>Husk DTR skal være klippet i FTDI kablet, da arduinoen ellers resetter hver gang programmet køres. Brugeren der kører scriptet, skal også være i dialout gruppen. Gøres med: &#8216;sudo usermod -a -G dialout exampleusername&#8217;.</p>



<p>Jeg kører scriptet i crontab:</p>



<pre class="wp-block-code" style="font-size:10px"><code>* * * * * /home/BRUGER/arduinoVejr/getWeather</code></pre>



<p>Dernæst skal der laves et lille php script for at displayenheden kan hente data:</p>



<pre class="wp-block-code" style="font-size:10px"><code>&lt;?php
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");

error_reporting(0);

# Hent logindata til databasen.
# Disse ligger ikke i web-serverens datapath og kan derfor ikke hentes af andet
# skriptet.
include('/home/BRUGER/vejrgraf/dbinfo.php');

$conn = new mysqli("localhost", $dbuser, $dbpasswd, $dbname);

#$result = $conn-&gt;query("SELECT systtamp, t_out, rho, ws, dir0, wc, r1h, r24h FROM vejrlog ORDER BY systtamp DESC LIMIT 1");

$result = $conn-&gt;query("SELECT tid, temp_ud, tryk, humid FROM vejrdata ORDER BY tid DESC LIMIT 1");
while ( $rs = $result-&gt;fetch_array(MYSQLI_ASSOC) ) {
        $tid     = $rs&#91;"tid"];
        $temp_ud = $rs&#91;"temp_ud"];
        $humid   = $rs&#91;"humid"];
        $tryk    = $rs&#91;"tryk"];
}
# Hent summerede data

# find 24 timer regn
#
$result   = $conn-&gt;query("SELECT SUM(regn1min) AS r24timer FROM vejrdata WHERE tid &gt;= NOW() - INTERVAL 1 DAY;");
while ( $rs = $result-&gt;fetch_array(MYSQLI_ASSOC) ) {
        $r24timer = $rs&#91;"r24timer"];
}


# find 1 time regn
#
$result   = $conn-&gt;query("SELECT SUM(regn1min) AS r1timer FROM vejrdata WHERE tid &gt;= NOW() - INTERVAL 1 HOUR;");
while ( $rs = $result-&gt;fetch_array(MYSQLI_ASSOC) ) {
        $r1timer = $rs&#91;"r1timer"];
}

# find 15 min regn
#
$result   = $conn-&gt;query("SELECT SUM(regn1min) AS r15min from vejrdata where tid &gt;= NOW() - INTERVAL 15 MINUTE;");
while ( $rs = $result-&gt;fetch_array(MYSQLI_ASSOC) ) {
        $r15min = $rs&#91;"r15min"];
}


$outp = "";
#while ( $rs = $result-&gt;fetch_array(MYSQLI_ASSOC) ) {

        $outp .= '{"systid":"'  . $tid      . '",';
        $outp .= '"tempout":'   . $temp_ud  . ',';
        $outp .= '"rhout":'     . $humid    . ',';
        $outp .= '"tryk":'      . $tryk     . ',';
        $outp .= '"r1hour":'    . $r1timer  . ',';
        $outp .= '"r24hour":'   . $r24timer . ',';
        $outp .= '"r15min":'    . $r15min   . '}';
#}

$conn-&gt;close();

echo ($outp);
?&gt;
</code></pre>



<pre class="wp-block-code" style="font-size:10px"><code>Logindata filen:
&lt;?php
        $dbname = "arduinovejr";
        $dbuser = "vejr";
        $dbpasswd = "DITPASSWORD";
?&gt;
</code></pre>



<p>Min webserver er en apache i et temmelig standard setup.</p>



<p>Har du spørgsmål, så skriv endelig på tcj snabel_a tomas.dk</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2710</post-id>	</item>
	</channel>
</rss>
