Noch besser wird es mit dem zusätzlichen Einfügen (zwischen function und container) von:
Highcharts.setOptions({
global: {
useUTC: false
}
});
Noch besser wird es mit dem zusätzlichen Einfügen (zwischen function und container) von:
Highcharts.setOptions({
global: {
useUTC: false
}
});
1-Wire Sensor mit Datenbank? Schau mal ob du hier fündig wirst!
Die highcharts wurden nun komplett überarbeitet.
Basis bildet hier ein Script von http://fluuux.de/ - Vielen Dank für die Genehmigung dies hier zu veröffentlichen.
Die Dateien wurde bei github hinterlegt:
https://github.com/ThomasH-W/avrio/tree/master/www/js
/var/www/js/scripts/highcharts.js
/var/www/js/scripts/jquery.min.js
/var/www/js/modules/exporting.js
/var/www/js/includes/common.inc.php
/var/www/js/includes/functions.inc.php
Man kann nun relativ flexibel die Sensor-Namen /DB-Felder in der Datei common.inc.php anpassen.
Hallo Thomas,
kannst Du bitte noch ein Bild von der Ausgabe beifügen und/oder hier posten?
Merci
Neue Version der highcharts auf github und ein Bild dazu:
Unter der Grafik gibt es die Möglichkeit, den Zeitraum für Diagramm zu bestimmen.
Wenn man auf den Sensornamen in der Legende klickt, kann man auch Sensoren an- und abwählen.
Man kann dies auch beim Aufruf der Seite übergeben:
Hallo Thomas,
ich habe eine Frage zu der Zeile:
pointStart: Date.UTC(2006, 0, 01),
Wie passt das zu den aufgezeichneten Daten im Jahr 2014 zusammen? Werden die aufgezeichneten Zeiten für die Y-Achse dann überhaupt ausgewertet?
Hallo!
Ich habe 20 Sensoren am Raspberry Pi angeschlossen.
Wenn ich die Anwendung so starte, dann funktioniert alle.
[font="Menlo"]pi@sps-92 ~/avrio $ sudo python /home/pi/avrio/avrio.py[/font]
[font="Menlo"]Sensor ID | Temperature[/font]
[font="Menlo"]-----------------------------[/font]
[font="Menlo"]28-0000053c7970 | 25.625 ?C[/font]
[font="Menlo"]28-0000053c7198 | 9.937 ?C[/font]
[font="Menlo"]28-0000053c83b4 | 25.187 ?C[/font]
[font="Menlo"]28-0000053c904c | 16.750 ?C[/font]
[font="Menlo"]28-0000053c809c | 24.375 ?C[/font]
[font="Menlo"]28-0000053c893c | 19.187 ?C[/font]
[font="Menlo"]28-0000053c8bc6 | 16.875 ?C[/font]
[font="Menlo"]28-0000053c8a16 | 20.437 ?C[/font]
[font="Menlo"]28-0000053c8ff6 | 16.187 ?C[/font]
[font="Menlo"]28-0000053c8d71 | 24.375 ?C[/font]
[font="Menlo"]28-0000053c7109 | 4.875 ?C[/font]
[font="Menlo"]28-0000053c6f69 | 18.687 ?C[/font]
[font="Menlo"]28-0000053c738d | 19.062 ?C[/font]
[font="Menlo"]28-0000053c827d | 23.812 ?C[/font]
[font="Menlo"]28-0000053c870b | 21.625 ?C[/font]
[font="Menlo"]28-0000053c83cb | 25.312 ?C[/font]
[font="Menlo"]28-0000053c76ab | 23.125 ?C[/font]
[font="Menlo"]28-0000053c9017 | 22.812 ?C[/font]
[font="Menlo"]28-0000053c6dcf | 24.937 ?C[/font]
[font="Menlo"][font="Menlo"]28-0000053c8a9f | 12.875 ?C[/font][/font]
[font="Menlo"]Wenn ich die Anwendung mit dem selben Befehl aus einer anderen Verzeichnisebene starte bekomme ich die nachstehende Meldung - Warum?[/font]
[font="Menlo"]pi@sps-92 / $ sudo python /home/pi/avrio/avrio.py[/font]
[font="Menlo"]Cannot find file: avrio-config.txt[/font]
[font="Menlo"]Error: cannot find config file avrio-config.txt[/font]
[font="Menlo"][font="Menlo"]Please run >avrio.py --setup[/font]
[/font]
[font="Menlo"]In der crontab -e habe ich diese Zeile eingetragen - funktioniert natürlich auch nicht - Warum?[/font]
[font="Menlo"][font="Menlo"]*/5 * * * * sudo python /home/pi/avrio/avrio.py[/font]
[font="Menlo"]*/5 * * * * sudo python /home/pi/avrio/avrio.py -w[/font]
[/font]
Wie bindest du denn deine avio-config.txt im script ein? bestimmt mit relativen anstelle von absoluten Pfadangaben. Ich denke wenn du den kompletten Pfad angibst, hat sich das Problem auch erledigt.
Ich habe alles neu installiert und jetzt funktioniert es.
Man kann die Daten aus einer MySQL-Datenbank direkt in Excel einlesen, ohne eine ODBC-Verbindung in der Systemsteuerung definieren zu müssen.
MySQL-Treiber installieren
Man braucht einen ODBC connector, als “Datenbank-Treiber”.
Bei mir läuft Windows 8 64 bit. Daher hatte ich zuerst den 64-Bit Treiber installiert.
Später habe ich herausgefunden, dass die benötigte Variante abhängig von der Excel-Version ist.
Da mein Excel eine 32-bit Version ist, musste ich den 32-bit connector installieren:
http://dev.mysql.com/downloads/connector/odbc/
Excel-Datei
Es gibt noch ein kleines Problem:
Obowhl ich ClearContents verwende, wird auch die Formatierung gelöscht.
Daher habe ich in Zeile 9 die Formatierung gesichert, um diese auf die Daten zu übertragen.
Für Hinweise, wie man dies korregiert, bin ich dankbar.
VBA-Code
Option Explicit
' Module-level constant
Public dbsource As String
Public dblocation As String
Public dbuser As String
Public dbpassword As String
Public dbname As String
Public dbtable As String
Public dbfields As String
Public Sub LoadButton_Click_10()
InitDbParameter
LoadButton "10"
End Sub
Public Sub LoadButton_Click_Hour()
InitDbParameter
LoadButton "hour"
End Sub
Public Sub LoadButton_Click_Day()
InitDbParameter
LoadButton "day"
End Sub
Public Sub LoadButton_Click_Week()
InitDbParameter
LoadButton "week"
End Sub
Public Sub InitDbParameter()
' Get Parameters from Excel-Sheet
dbsource = Range("dbSource").Value
dblocation = Range("dbLocation").Value
dbuser = TasksSheet.UserInput.Value
dbpassword = TasksSheet.PasswordInput.Value
dbfields = Range("dbFields").Value
dbname = Range("dbname").Value
dbtable = Range("dbtable").Value
End Sub
Private Function OpenConnection() As ADODB.connection
Dim connectionString As String
connectionString = "Driver={MySQL ODBC 5.2 ANSI Driver};Server=" & dblocation & ";Database=" & dbname & ";UID=" & dbuser & ";PWD=" & dbpassword & ";OPTION=3"
' Create and open a new connection to the selected source
Set OpenConnection = New ADODB.connection
' MsgBox connectionString
Call OpenConnection.Open(connectionString)
' MsgBox "db opened"
End Function
Public Sub LoadButton(queryType As String)
Dim dbFieldNo As Long
Dim sqlSelect As String
If queryType = "hour" Then
sqlSelect = "SELECT " & dbfields & " FROM " & dbtable & " WHERE dattim >= Date_Sub(CURRENT_TIMESTAMP(), Interval 1 Hour) ORDER BY dattim ASC "
ElseIf queryType = "day" Then
sqlSelect = "SELECT " & dbfields & " FROM " & dbtable & " WHERE dattim >= Date_Sub(CURRENT_TIMESTAMP(), Interval 1 DAY) ORDER BY dattim ASC "
ElseIf queryType = "week" Then
sqlSelect = "SELECT " & dbfields & " FROM " & dbtable & " WHERE dattim >= Date_Sub(CURRENT_TIMESTAMP(), Interval 7 DAY) GROUP BY YEAR(dattim),MONTH(dattim),DAY(dattim),HOUR(dattim) "
Else
sqlSelect = "SELECT " & dbfields & " FROM " & dbtable & " ORDER BY dattim DESC LIMIT 10"
End If
' sqlSelect = "SELECT id, dattim, Aussen, Wintergarten, Zimmer, Terrasse, Pool, WW_Speicher, Vorlauf, Ruecklauf FROM avrdat LIMIT 10"
' sqlSelect = "SELECT * FROM avrdat LIMIT 10"
Dim output As Range
Dim rgCols, rgRows As Long
rgCols = 10
rgRows = 1000
Set output = Range("Output").Offset(1).Resize(rgRows, rgCols)
output.ClearContents
Dim connection As connection
Set connection = OpenConnection()
'MsgBox "Execute sql >" & sqlSelect
Dim result As ADODB.Recordset
' Load all the tasks from the database
Set result = connection.Execute(sqlSelect)
' Insert them into the dedicated area
Call output.CopyFromRecordset(result)
' Add filters
Range("Output").Worksheet.AutoFilterMode = False
Range("Output").AutoFilter
connection.Close
'MsgBox "Finished - data downloaded to Excel"
End Sub
Alles anzeigen
Guten Morgen,
tolles Projekt. Danke vorab hierfür.
Werde mich heute Abend daransetzen, nachdem ich gestern meine 13 Sensoren am 90m/Bus/Baum endlich ans fliegen bekommen habe.
Mal folgende Idee:
Macht es nicht Sinn, die Datenbank auf einen USB-Speicherstick am Raspi zu installieren und von da zu lesen ? :s
IMO haben SD-Karten nur begrenzte Zahl von Lese/Schreibzugriffen. Somit könnte man die SD-Karte entlasten, und falls diese die Grätsche machst, ist nicht auch noch die Datenbank hinüber.
Habe am Wochenende erst nen Raspi vom Kumpel bekommen, dort war nämlich genau das passiert...
LG
B.
Die beste Lösung wäre, die Datenbank ganz woanders zu halten, da auch USB-Sticks eine begrenzte Lebensdauer haben...
Ich habe noch ein Cubieboard2 am Laufen. Dort ist ein MySQL installiert und die Datenbank liegt auf einer direkt angeschlossenen SATA-SSD.
Alternativ geht es auch, wenn man einen Webhoster hat, der Datenbankzugriffe auch von aussen zulässt.
Natürlich, aber ganz woanders (wie bei Dir) heisst auch ein weiteres "stromfressendes" Gerät.
Dann halt zum Internet-Hoster...
Und der Cubie frisst auch mit SSD unter 10Watt
Bei 24/7 sind das auch 78,84kWh oder 20€/Jahr......
Nabend,
ich bräuchte mal Eure Hilfe. Ich hab alles gem. Anleitung auf erster Seite installiert.
Die config.txt habe ich erstellt und alle 13 Sensoren eingefügt/benamst. Danach starte ich die python.py und die läuft auch sauber durch.
Dann starte ich den Befehl: python avrio.py -w und bekomme folgenden Fehlerhinweis:
Zitat
Error: can't opem file /var/www/avrweb/avr-single.html for writing.
Please check if directory is existing
Verzeichnis existierte nicht, also habe ich es angelegt und den Befehl neu gestartet, bekomme aber denselben Fehlerhinweis.
Any ideas ?
Die Datenbank wird bei mir erstellt, sobald ich python avrio.py starte, soweit ok.
Auch habe ich mit crontab -e einen cronjob erstellt, der auch gespeichert wurde /tmp ****, allerdings startet dieser Job nicht. Muss der in einem bestimmten Verzeichnis liegen ?
EDIT: Es läuft, Juuuunge was für ne Frickelei.....
Mist, einen Sensor hinzugefügt, und schon läuft nichts mehr. Systemseitig wird er erkannt und ausgelesen, nur das neuerliche durchlaufen von avrio.py --setup scheitert.
Ich fände es nett, wenn der Autor sich hierzu nochmal äussern könnte......
Bitte gebe mir die Fehlermeldungen, die Du erhälst.
"Nichts geht mehr" ist für eine Fehlersuche kein guter Startpunkt.
Bitte starte das Script hierfür mit der option -v 2 oder -v 3.
Dann zeigt das Programm, was es gerade macht.
Gruß,
Thomas
Hallo Thomas,
sorry für die unpräzise Fehlermeldung.
ich habe alles nochmal neu aufgesetzt.
Die Sonsoren werden ausgelesen, und die Werte stündlich in die SQL-Db geschrieben. Soweit so gut.
Was auch funktioniert, ist das avr-panel.
Wo es noch hakt ist avr-google.
Du hast in den Skripten Deine Sensoren in LUFT und WASSER getrennt. Ich habe analog auch meine Sensoren so aufgeteilt, jedoch wird mir im GooglePanel nur unter "Luft" was angezeigt, aber auch da stimmen die Zuordnungen der Graphen zu den Werten nicht. Da muss ich nochmal ran.
Aber im Panel "WASSER" habe ich garkeinen Graphen. Auch bewirkt das setzten der Radiobuttons oben links nichts.
Welche Infos brauchst Du noch ?
LG
Hallo,
erst einmal muss ich wirklich sagen das dieses Projekt mit den Temperatursensoren in der Datenbank wirklich toll gelungen ist. Hab es aufgesetzt, angepasst und innerhalb kurzer Zeit lief es auch ohne Fehler, und läuft und läuft und läuft....
Ich möchte das gern etwas weiter verfeinern. Die Weboberfläche mittels einem kleinen Admin Bereich für jeden etwas individueller gestalten..... Alles kein Problem wenn nicht das für mich sehr schwierig zu lesende Pyhton script wäre.
zur Zeit läuft es bei neuen Sensoren ja so, mit sudo python avrio.py --get werden neue (und auch alte) sensoren in die config geschrieben, ich passe diese dann an mit Datenbankfeld und alles passt.
wäre es machbar.... meine Idee, das das Python Script nicht die Werte in die (durch die Config-txt file) vorgegebene Spalte schreibt sondern das das Datenbank wie folgt anssieht:
id // Timestamp // HardwareID // Messwert
also:
1 // 06.02.2014 14:03:02 //28-0000059d9c01 // 29,4
2 // 06.02.2014 14:03:02 //28-0000059d9s02 // 15,2
3 // 06.02.2014 14:03:02 //28-0000059d9s03 // 7,5
4 // 06.02.2014 14:04:02 //28-0000059d9c01 // 29,3
5 // 06.02.2014 14:04:02 //28-0000059d9s02 // 15,5
6 // 06.02.2014 14:04:02 //28-0000059d9s03 // 7,2
und so weiter....
so wäre es schöner eine beliebige Anzahl von Sensoren anzuschließen und diese mittels einem kleinem Adminpanel der Weboberfläche zuzuordnen.
Wie gesagt, meine Stärken liegen nicht im Python aber ich denke mit ein bisschen von Eurer Hilfe könnte das klappen.
LG
Flori
Hallo zusammen,
ich bin am verzweifeln - kann mir bitte jemand helfen? Ich habe einen Temperatursensor "Innen", der im Panel angezeigt wird, jedoch wird in avr-google kein Graph angezeigt.
Danke im Voraus und viele Grüße!
Edit: Hat sich erledigt - habe die avr-google.php auf ein Minimum heruntergestrickt und alles andere kategorisch entfernt...
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!