Seite 1 von 2
Austausch von Daten - 2 Instanzen - 2 DB
Verfasst: 14 Feb 2023 11:42
von JoachimF
Hallo,,
weewx verarbeitet die beiden Stationen Davis und Ecowitt mit 2 Instanzen und 2 Datenbanken.
Der Davis UV Sensor ist defekt und der Neupreis liegt bei 400€. Mir ist dieser Preis zu hoch und ein UV Sensor hat nur eine begrenzte Lebensdauer.
Vorstellung:
Die Ecowitt UV-Werte in die Davis-Datenbank importieren.
Momentane Lösung:
Exportiere NUR den letzten UV-Wert aus der Ecowitt-Datenbank (csv Datei) und
Update dann den letzten Datensatz der Davis-DB mit dem exportierten UV-Wert.
Idee:
kann die Davis-Instanz neben der Davis-DB noch direkt auf die Ecowitt-DB zugreifen, um deren UV-Wert zu verarbeiten?
Re: Austausch von Daten - 2 Instanzen - 2 DB
Verfasst: 14 Feb 2023 14:02
von Werner
kann die Davis-Instanz neben der Davis-DB noch direkt auf die Ecowitt-DB zugreifen, um deren UV-Wert zu verarbeiten?
Ja das geht:
Du musst die entsprechende weewx.conf Datei erweitern:
Code: Alles auswählen
[DataBindings]
[[wx_binding2]]
database = archive_sqlite2
table_name = archive
#manager = weewx.manager.DaySummaryManager
schema = schemas.wview_ecowitt.schema
[Databases]
[[archive_sqlite2]]
database_name = weewx_ecowitt.sdb
database_type = SQLite
Um dann auf die Daten der zweiten Datenbank nutzen zu können ist so was nötig:
Hier Beispiel für Grafik:
Code: Alles auswählen
[[[dayuv]]]
[[[[UV]]]]
data_binding = wx_binding2
data_type = UV
#color = "#0000ff"
label = UV von Ecowitt
oder in der current.inc:
Code: Alles auswählen
<td class="data">$latest(data_binding='wx_binding2').UV</td>
Wobei hier auch anstatt $latest -> $current möglich ist. Mit $latest ist sichergestellt, dass auch wirklich immer ein Wert angezeigt werde kann.
Re: Austausch von Daten - 2 Instanzen - 2 DB
Verfasst: 18 Feb 2023 11:05
von JoachimF
Hallo Werner,
habe erst heute die Vorschläge ausprobiert und zunächst Variante 1 (skin.conf) getestet.
DayUV Image wird erstellt aber in der LogDatei gibt es eine Fehlermeldung
Code: Alles auswählen
ERROR weewx.reportengine: Caught unrecoverable exception in generator 'weewx.imagegenerator.ImageGenerator'
ERROR weewx.reportengine: **** '<' not supported between instances of 'float' and 'str'
ERROR weewx.reportengine: **** Traceback (most recent call last):
ERROR weewx.reportengine: **** File "/usr/share/weewx/weewx/reportengine.py", line 197, in run
ERROR weewx.reportengine: **** obj.start()
ERROR weewx.reportengine: **** File "/usr/share/weewx/weewx/reportengine.py", line 385, in start
ERROR weewx.reportengine: **** self.run()
ERROR weewx.reportengine: **** File "/usr/share/weewx/weewx/imagegenerator.py", line 42, in run
ERROR weewx.reportengine: **** self.gen_images(self.gen_ts)
ERROR weewx.reportengine: **** File "/usr/share/weewx/weewx/imagegenerator.py", line 114, in gen_images
ERROR weewx.reportengine: **** image = plot.render()
ERROR weewx.reportengine: **** File "/usr/share/weewx/weeplot/genplot.py", line 216, in render
ERROR weewx.reportengine: **** self._calcYScaling()
ERROR weewx.reportengine: **** File "/usr/share/weewx/weeplot/genplot.py", line 533, in _calcYScaling
ERROR weewx.reportengine: **** yline_min = min_with_none(line.y)
ERROR weewx.reportengine: **** File "/usr/share/weewx/weeutil/weeutil.py", line 1621, in min_with_none
ERROR weewx.reportengine: **** xmin = min(x, xmin)
ERROR weewx.reportengine: **** TypeError: '<' not supported between instances of 'float' and 'str'
ERROR weewx.reportengine: **** Generator terminated
INFO weewx.reportengine: Copied 5 files to /var/www/html/weewx/dav
Re: Austausch von Daten - 2 Instanzen - 2 DB
Verfasst: 18 Feb 2023 12:12
von JoachimF
Error gelöst.
weekuv bis yearuv hatte ich nicht deaktiviert bzw. auf wx_bindung2 umgestellt.
Re: Austausch von Daten - 2 Instanzen - 2 DB
Verfasst: 18 Feb 2023 13:00
von JoachimF
Zu current.inc
Code: Alles auswählen
<td class="data">$latest(data_binding='wx_binding2').UV</td>
In welche Zeile ist der Code einzutragen?
und in der Graphik belibt der Eintrag
data_binding = wx_binding2 bestehen?
Re: Austausch von Daten - 2 Instanzen - 2 DB
Verfasst: 18 Feb 2023 14:19
von JoachimF
Auch verstanden und gelöst
1x Graphik , 1x Werte
Danke für die Codes Werner
Re: Austausch von Daten - 2 Instanzen - 2 DB
Verfasst: 18 Feb 2023 14:52
von Werner
Ich würde den UV-Wert in der current.inc so "einbauen"
Code: Alles auswählen
#elif $x[2] == 'aqieea'
<tr>
<td class="label"><span><font color=$color>$obs.label[$x[0]]</font></span></td>
#set $xv = $xt.raw
$compute_pm2_5_aqieea($xv)
</tr>
#else
<tr>
<td class="label"><font color=$color>$obs.label[$x[0]]</font></td>
<td class="data">$xt</td>
</tr>
#if $x[0] == 'radiation' ## ab hier neu
<tr>
<td class="label"><font color=$color>UV</font></td>
<td class="data">$latest(data_binding='wx_binding2').UV</td>
</tr>
#end if
Es wird dann nach dem Solarstrahlungswert gleich der UV-Wert angezeigt.
Wenn kein Solarstrahlungswert (radiation) vorhanden, wird in diesem Fall auch der
UV-Wert nicht angezeigt
Re: Austausch von Daten - 2 Instanzen - 2 DB
Verfasst: 19 Feb 2023 09:39
von JoachimF
Werner hat geschrieben: ↑18 Feb 2023 14:52
Es wird dann nach dem Solarstrahlungswert gleich der UV-Wert angezeigt.
Wenn kein Solarstrahlungswert (radiation) vorhanden, wird in diesem Fall auch der
UV-Wert nicht angezeigt
Ich habe deinen Vorschlag übernommen.
Aber ist diese Abhängigkeit so ok?
Radiation und UV haben je einen eigenen Sensor.
Bei Ausfall des Radiation-Sensors wird der UV Wert (obwohl vorhanden) nicht angezeigt.
Oder liegt hier ein Denkfehler vor?
Re: Austausch von Daten - 2 Instanzen - 2 DB
Verfasst: 19 Feb 2023 18:53
von Werner
Bei Ausfall des Radiation-Sensors wird der UV Wert (obwohl vorhanden) nicht angezeigt.
Das ist richtig.
Ich wollte mit diesem Konstrukt nur den UV-Wert nach dem Solar-Wert anzeigen.
Da in dieser current.inc es so nicht vorgesehen ist, mit einer anderen Datenbank zu arbeiten,
hab ich diese Lösung gewählt.
Re: Austausch von Daten - 2 Instanzen - 2 DB
Verfasst: 20 Feb 2023 10:48
von JoachimF
Kann man auch die Min/Max UV Werte der 2. Datenbank integrieren?
Ist es normal, dass keine Min und Max Wert unter HEUTE ausgegeben werden, wie z.B Temperatur?
Re: Austausch von Daten - 2 Instanzen - 2 DB
Verfasst: 20 Feb 2023 11:54
von Werner
Kann man auch die Min/Max UV Werte der 2. Datenbank integrieren?
Natürlich.
Ist es normal, dass keine Min und Max Wert unter HEUTE ausgegeben werden, wie z.B Temperatur?
Sind doch da?
Re: Austausch von Daten - 2 Instanzen - 2 DB
Verfasst: 20 Feb 2023 12:57
von JoachimF
- UV.png (19.17 KiB) 2599 mal betrachtet
Es wird unter HEUTE nur der UV Max Wert ausgegeben; dto. Woche usw. ebenso
Und brauch ich wieder deine Hilfe bzgl. Integration der UV Min/Max Werte aus der 2. Datenbank.
Re: Austausch von Daten - 2 Instanzen - 2 DB
Verfasst: 20 Feb 2023 16:07
von Werner
Und brauch ich wieder deine Hilfe bzgl. Integration der UV Min/Max Werte
Ein UV Min-Wert ist sinnlos, da täglich immer 0 (sein sollte)
Der neue Wert von anderen Datenbank wird dann im Array eingefügt mit der Unterscheidung welches wx_binding benutzt wird.
Beispiel:
#set $observ = [('outTemp','#e85d0d','','1'),
('outTemp','','wx_binding2','1'),
('heatindex','#b44242','','1'),
Änderung in der
hilo.inc
Diese Zeile öndern:
Code: Alles auswählen
#if $x[3] == '1' and (($getattr($year, $x[0]).has_data) or ('wx_binding' in $x[2] and $getattr($year(data_binding=$x[2]), $x[0]).has_data) or ($year.wind.has_data and ($x[0] == 'windavg' or $x[0] == 'windrms' or $x[0] == 'windrms' or $x[0] == 'windvecavg')))
in:
Code: Alles auswählen
#if $x[3] == '1' and (($getattr($year, $x[0]).has_data) or ('wx_binding' in $x[2] and $getattr($year(data_binding=$x[2]), $x[0]).has_data) or ($year.wind.has_data and ($x[0] == 'windavg' or $x[0] == 'windrms' or $x[0] == 'windrms' or $x[0] == 'windvecavg')))
Neu: or ('wx_binding' in $x[2] and $getattr($year(data_binding=$x[2]), $x[0]).has_data)
Alt:
Code: Alles auswählen
#else
<tr>
<td class="label"><font color=$color>$obs.label[$x[0]]</font></td>
#if $x[2] == 'sum'
Neu:
Code: Alles auswählen
#else
<tr>
<td class="label"><font color=$color>$obs.label[$x[0]]</font></td>
#if 'wx_binding' in $x[2]
#for $archive in $archive_data
<td class="data new_row hilo_$archive[0]">
#set $xv = $getattr($archive[1](data_binding=$x[2]), $x[0])
<span class="timestamp">$xv.maxtime</span>
<span>$xv.max.format(add_label=False)</span><br/>
<span class="timestamp">$xv.mintime</span>
<span>$xv.min.format(add_label=False)</span>
</td>
#end for
#elif $x[2] == 'sum'
Änderung in der
statistics.inc
Diese Zeile öndern:
Code: Alles auswählen
#if $x[3] == '1' and (($getattr($year, $x[0]).has_data) or ($year.wind.has_data and ($x[0] == 'windavg' or $x[0] == 'windrms' or $x[0] == 'windrms' or $x[0] == 'windvecavg')))
in
Code: Alles auswählen
#if $x[3] == '1' and (($getattr($year, $x[0]).has_data) or ('wx_binding' in $x[2] and $getattr($year(data_binding=$x[2]), $x[0]).has_data) or ($year.wind.has_data and ($x[0] == 'windavg' or $x[0] == 'windrms' or $x[0] == 'windrms' or $x[0] == 'windvecavg')))
und
Code: Alles auswählen
#else
<td class="units">$getattr($unit.label, $x[0], '')</td>
#end if
#if 'wx_binding' in $x[2]
#for $archive in $archive_data
<td class="data new_row">
#set $xv = $getattr($archive(data_binding=$x[2]), $x[0])
$xv.max.format(add_label=False)<br/>
<span class="timestamp">$xv.maxtime </span><br/>
$xv.min.format(add_label=False)<br/>
<span class="timestamp">$xv.mintime </span>
</td>
#end for
#elif $x[2] == 'sum'
Zur Unterscheidung ab
#if 'wx_binding' in $x[2] neu
und dann anstatt
#if $x[2] == 'sum'
dann
#elif $x[2] == 'sum'
Re: Austausch von Daten - 2 Instanzen - 2 DB
Verfasst: 20 Feb 2023 18:37
von JoachimF
Ein UV Min-Wert ist sinnlos, da täglich immer 0
Da hast du natürlich Recht
Hab nicht nachgedacht
Den Code schaue ich mir später an
Re: Austausch von Daten - 2 Instanzen - 2 DB
Verfasst: 22 Feb 2023 09:46
von JoachimF
Habe den Code für die hilo.inc und statistics.inc eingebaut.
- hilo.inc.png (14.65 KiB) 2567 mal betrachtet
- statistic.inc.png (16.89 KiB) 2567 mal betrachtet
Obere Zeile ist die 2. Instanz, darunter die Ausgabe der 1. Instanz mit wx_binding2 und MIN/MAX Werten