Austausch von Daten - 2 Instanzen - 2 DB

wenn es um andere Software geht
Benutzeravatar
JoachimF
Beiträge: 238
Registriert: 08 Dez 2021 20:29
Wohnort: Carces
Hat sich bedankt: 1 mal
Kontaktdaten:

Austausch von Daten - 2 Instanzen - 2 DB

Beitrag 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?
Gruß Joachim

https://puttkammer.de
Benutzeravatar
Werner
Site Admin
Beiträge: 5885
Registriert: 04 Dez 2001 01:00
Wohnort: Lackenhäuser
Danksagung erhalten: 113 mal
Kontaktdaten:

Re: Austausch von Daten - 2 Instanzen - 2 DB

Beitrag 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.
Benutzeravatar
JoachimF
Beiträge: 238
Registriert: 08 Dez 2021 20:29
Wohnort: Carces
Hat sich bedankt: 1 mal
Kontaktdaten:

Re: Austausch von Daten - 2 Instanzen - 2 DB

Beitrag 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
Gruß Joachim

https://puttkammer.de
Benutzeravatar
JoachimF
Beiträge: 238
Registriert: 08 Dez 2021 20:29
Wohnort: Carces
Hat sich bedankt: 1 mal
Kontaktdaten:

Re: Austausch von Daten - 2 Instanzen - 2 DB

Beitrag von JoachimF »

Error gelöst.
weekuv bis yearuv hatte ich nicht deaktiviert bzw. auf wx_bindung2 umgestellt.
Gruß Joachim

https://puttkammer.de
Benutzeravatar
JoachimF
Beiträge: 238
Registriert: 08 Dez 2021 20:29
Wohnort: Carces
Hat sich bedankt: 1 mal
Kontaktdaten:

Re: Austausch von Daten - 2 Instanzen - 2 DB

Beitrag 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?
Gruß Joachim

https://puttkammer.de
Benutzeravatar
JoachimF
Beiträge: 238
Registriert: 08 Dez 2021 20:29
Wohnort: Carces
Hat sich bedankt: 1 mal
Kontaktdaten:

Re: Austausch von Daten - 2 Instanzen - 2 DB

Beitrag von JoachimF »

Auch verstanden und gelöst :oops:
1x Graphik , 1x Werte

Danke für die Codes Werner
Gruß Joachim

https://puttkammer.de
Benutzeravatar
Werner
Site Admin
Beiträge: 5885
Registriert: 04 Dez 2001 01:00
Wohnort: Lackenhäuser
Danksagung erhalten: 113 mal
Kontaktdaten:

Re: Austausch von Daten - 2 Instanzen - 2 DB

Beitrag 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 ;)
Benutzeravatar
JoachimF
Beiträge: 238
Registriert: 08 Dez 2021 20:29
Wohnort: Carces
Hat sich bedankt: 1 mal
Kontaktdaten:

Re: Austausch von Daten - 2 Instanzen - 2 DB

Beitrag 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?
Gruß Joachim

https://puttkammer.de
Benutzeravatar
Werner
Site Admin
Beiträge: 5885
Registriert: 04 Dez 2001 01:00
Wohnort: Lackenhäuser
Danksagung erhalten: 113 mal
Kontaktdaten:

Re: Austausch von Daten - 2 Instanzen - 2 DB

Beitrag 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.
Benutzeravatar
JoachimF
Beiträge: 238
Registriert: 08 Dez 2021 20:29
Wohnort: Carces
Hat sich bedankt: 1 mal
Kontaktdaten:

Re: Austausch von Daten - 2 Instanzen - 2 DB

Beitrag 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?
Gruß Joachim

https://puttkammer.de
Benutzeravatar
Werner
Site Admin
Beiträge: 5885
Registriert: 04 Dez 2001 01:00
Wohnort: Lackenhäuser
Danksagung erhalten: 113 mal
Kontaktdaten:

Re: Austausch von Daten - 2 Instanzen - 2 DB

Beitrag 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?
Benutzeravatar
JoachimF
Beiträge: 238
Registriert: 08 Dez 2021 20:29
Wohnort: Carces
Hat sich bedankt: 1 mal
Kontaktdaten:

Re: Austausch von Daten - 2 Instanzen - 2 DB

Beitrag von JoachimF »

UV.png
UV.png (19.17 KiB) 12714 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.
Gruß Joachim

https://puttkammer.de
Benutzeravatar
Werner
Site Admin
Beiträge: 5885
Registriert: 04 Dez 2001 01:00
Wohnort: Lackenhäuser
Danksagung erhalten: 113 mal
Kontaktdaten:

Re: Austausch von Daten - 2 Instanzen - 2 DB

Beitrag 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'
Benutzeravatar
JoachimF
Beiträge: 238
Registriert: 08 Dez 2021 20:29
Wohnort: Carces
Hat sich bedankt: 1 mal
Kontaktdaten:

Re: Austausch von Daten - 2 Instanzen - 2 DB

Beitrag 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
Gruß Joachim

https://puttkammer.de
Benutzeravatar
JoachimF
Beiträge: 238
Registriert: 08 Dez 2021 20:29
Wohnort: Carces
Hat sich bedankt: 1 mal
Kontaktdaten:

Re: Austausch von Daten - 2 Instanzen - 2 DB

Beitrag von JoachimF »

Habe den Code für die hilo.inc und statistics.inc eingebaut.
hilo.inc.png
hilo.inc.png (14.65 KiB) 12682 mal betrachtet
statistic.inc.png
statistic.inc.png (16.89 KiB) 12682 mal betrachtet
Obere Zeile ist die 2. Instanz, darunter die Ausgabe der 1. Instanz mit wx_binding2 und MIN/MAX Werten :?:
Gruß Joachim

https://puttkammer.de
Antworten