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 :oops:
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
UV.png (19.17 KiB) 2587 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&nbsp;</span><br/>
          $xv.min.format(add_label=False)<br/>
          <span class="timestamp">$xv.mintime&nbsp;</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 :oops: 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
hilo.inc.png (14.65 KiB) 2555 mal betrachtet
statistic.inc.png
statistic.inc.png (16.89 KiB) 2555 mal betrachtet
Obere Zeile ist die 2. Instanz, darunter die Ausgabe der 1. Instanz mit wx_binding2 und MIN/MAX Werten :?: