[Frage] Datenbankanbindung an MySQL (Synology's MariaDB) - Refresh

Cyanoazimin

Neuer User
Mitglied seit
1 Mrz 2015
Beiträge
2
Punkte für Reaktionen
0
Punkte
0
SensorAndSwitch habe ich bei mir ohne großen Aufwand auf meinem NAS Synology DS110J zum Laufen gebracht (auch ohne nennenswerte PHP oder Datenbankerfahrung). Mit Hilfe der Pakete MariaDB und phpMyAdmin kann ich die Sensordaten in eine Datenbank auf dem NAS schreiben. Den "INSERT INTO"-Befehl habe ich in der Schleife ca. bei Zeile 925 in sensorandswitch.php untergebracht. Die Zeit [$ZeitF=date("Y-m-d H:i:s")] wird nach dem Einstieg in die "function UI" erfasst. Funktioniert, und läßt sich auch über Pivot nach Excel importieren. :p

Code:
$ZeitF=date("Y-m-d H:i:s");

$AktivF=$GerInfo["Aktiv"];
$NameF=$GerInfo["Name"];
$IDF=$GerInfo["ID"];
$AINF=$GerInfo["AIN"];
$TempF=$GerInfo["Temp"];
$WattF=$GerInfo["Watt"];
$SchalterF=$GerInfo["Schalter"];
$ModeF=$GerInfo["Mode"];
$LockfritzF=$GerInfo["Lockfritz"];

    $eintrag = "INSERT INTO `sensoren`.`fritz` (`Aktiv`, `Name`, `ID`, `AIN`, `Temp`, `Watt`, `Schalter`, `Mode`, `Lockfritz`, `Zeit`) VALUES ('$AktivF', '$NameF', '$IDF', '$AINF', '$TempF', '$WattF', '$SchalterF', '$ModeF', '$LockfritzF', '$ZeitF')";

    mysql_query($eintrag);

Wenn ich allerdings den Browser schließe, wird auch die Datenbank nicht mehr gefüttert. Das ist natürlich für den ursprünglich vorgesehenen Zweck sinnvoll - nicht aber, wenn meine Datenbank 24/7/365 weiter erfassen soll (solange das NAS läuft). Kann ich irgendetwas deaktivieren, so dass das Script auch läuft, wenn kein Browser darauf zugreift?
 
sensorandswitchautopro.php läuft ununterbrochen, da es jede Minute von cron gestartet wird. Baue es dort ein.
 
Prima. Danke für die promte Antwort!

ABER:
1. sensorandswitchautopro.php läuft bei mir nicht ununterbrochen, d.h. wird nicht jede Minute von cron gestartet, da ich sensorandswitch.php über sensorandswitchupdate.php „installiert“ habe und nicht in crontab eingetragen.
2. wenn ich sensorandswitch.php auf z.B. 3 Rechnern/Browsern starte, werden alle Datensätze 3 mal pro Minute in die Datenbank geschrieben. Das wäre unschön.

Lösung durch Eintrag an 3 Stellen in sensorandswitch.php in Version V 3.00.2458

Code:
function UI($Info,$Schalter,$GerListARR,$Sort) {
/********************************************/
	global $Update,$Conf,$SAIN,$Name;
	global $DisplayConfig;
	global $Display;
	global $GerARRDat;
				
//1von3 In Datenbank eintragen #######################################################################
    $server = "localhost";
    $datenbank = "sensoren";
    $username = "root";
    $passwort = "";

    $link = mysql_connect($server, $username, $passwort);

    if (!$link)
        {
        die("Konnte die Datenbank nicht öffnen.
             Fehlermeldung: ". mysql_error());
        }

    echo "Erfolgreich zur Datenbank verbunden. Letzter Datensatz geschrieben: ";

    $db = mysql_select_db($datenbank, $link);

    if (!$db)
        {
        echo "Konnte die Datenbank nicht auswählen.";
        }

  $res = mysql_query("SELECT Zeit FROM fritz ORDER BY Indexfritz DESC LIMIT 1");  
  $dsatz = mysql_fetch_assoc($res);
  $ZeitA = $dsatz["Zeit"];
  echo $ZeitA;

  $ZeitF=date("Y-m-d H:i:s");
  echo "  aktuelle Zeit: ";
  echo $ZeitF;

  $diff = strtotime($ZeitF) - strtotime($ZeitA);
  echo "  Unterschied: ";
  echo $diff;
// In Datenbank eintragen ############################################################################

	if ($Schalter!="") {
		$Bussy="0";
	} 
	else {
		$Bussy="0";
	}

und

Code:
						}
						else {
							printf (
									   '<div id="gerschalter">
											<img class="block" src="'.picdesign("aktiv".($GerInfo["Aktiv"]).".png").'" border="0">
										</div>'
							);
						}
					}
				
//2von3 In Datenbank eintragen #######################################################################
  if ($diff < 60) {
  }
  else {
    $AktivF=$GerInfo["Aktiv"];
    $NameF=$GerInfo["Name"];
    $IDF=$GerInfo["ID"];
    $AINF=$GerInfo["AIN"];
    $TempF=$GerInfo["Temp"];
    $WattF=$GerInfo["Watt"];
    $SchalterF=$GerInfo["Schalter"];
    $ModeF=$GerInfo["Mode"];
    $LockfritzF=$GerInfo["Lockfritz"];
    $eintrag = "INSERT INTO `sensoren`.`fritz` (`Aktiv`, `Name`, `ID`, `AIN`, `Temp`, `Watt`, `Schalter`, `Mode`, `Lockfritz`, `Zeit`) VALUES ('$AktivF', '$NameF', '$IDF', '$AINF', '$TempF', '$WattF', '$SchalterF', '$ModeF', '$LockfritzF', '$ZeitF')";
    mysql_query($eintrag);        
	}
// In Datenbank eintragen ############################################################################

					$gername="gername";
					if (strlen($GerInfo["FName"])>12) {$gername="gernameklein";}
					if (strlen($GerInfo["FName"])>13) {$gername="gernamesehrklein";}
					if (strlen($GerInfo["FName"])>17) {$GerInfo["FName"]=substr($GerInfo["FName"],0,17)."…";}
					printf (
									   '<div id="gertyp">'.$GerInfo["Typ"].'</div>
										<div id="'.$gername.'">'.$GerInfo["FName"].'</div>

und

Code:
	printf (
						   '<div id="fuss">
								<img class="block" border="0" src="'.picdesign("fuss.png").'" width="800" height="49">
							</div>'
	);
	HTMLBottom();

//3von3 In Datenbank eintragen #######################################################################
  mysql_close($link);
// In Datenbank eintragen ############################################################################

	return $Status;
}


function GetVBInfo($GerListARR) {
/*****************************/
	$GerWattGes=0;

sensorandswitch.php habe ich wie folgt in cron eingetragen:
PuTTY
-> als 'root' einloggen mit admin Passwort
-> "cd /etc" eingeben
-> "cp crontab crontab.backup"
-> "vi crontab" eingeben
-> ans Ende der letzten Zeile navigieren und "i" drücken (Editiermodus)
-> folgende Zeile eingeben oder kopieren (mit der richtigen IP Adresse)
*/1 * * * * root curl http://192.168.178.37/sensorandswitch/sensorandswitch.php? -O /dev/null >> /dev/null 2>>/dev/null
-> Esc drücken (Viewmodus)
-> Änderungen speichern mit ":wq"
-> Anschließend noch den Cron Daemon neu starten mit "restart crond" (ab DSM 5)
Danke an http://www.dbuschke.de/blog/cronjob-auf-synology-ds214play-unter-dsm5-einrichten/

Für die Anbindung an Excel war http://www.datamensional.com/2011/09/how-to-use-mysql-and-microsoft-powerpivot-together-2/ hilfreich und https://downloads.mariadb.org/connector-odbc/1.0.0/ mit mariadb-connector-odbc-1.0.0-win32.msi

Die Zeitreihe überspringt zwar manchmal einen Datenpunkt infolge der "Interferenzen" aber das ist vernachlässigbar.

Nochmals Danke für sensorandswitch.php! Damit kann ich die Datenbankspeisung jederzeit um neue Sensoren erweitern, ohne in PHP eintauchen zu müssen.
 
Zuletzt bearbeitet:
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.