Behaglichkeitsdiagramm als SVG

Begonnen von peterchen89, 27 Januar 2015, 19:00:02

Vorheriges Thema - Nächstes Thema

peterchen89

Hallo zusammen!

ich suche nach einer Möglichkeit einen Plot zu erstellen der mir die aktuelle Temperatur und Luftfeuchtigkeit in einem Behaglichkeitsfeld (http://www.raumluft.org/gesunde-raumluft/raumklima-behaglichkeit/) darstellt. Mit den Polarplots von logProxy habe ich schon ein bisschen rumprobiert, bin aber noch zu keinem sinnvollen Ergebnis gekommen. Hat jemand eine Idee wie man sowas sinnvoll in FHEM umsetzen kann?

Viele Grüße
Peter
FHEM 5.5 auf HP ProLiant MicroServer G7 N54L 8 GB Ubuntu 14.04 LTS.
1x HM-CFG-LAN, 1x HM-CFG-USB, 7x HM-CC-RT-DN, 5x HM-SEC-SC-2, 1x HM-SEC-SCo, 2x HM-TC-IT-WM-W-EU, 2x HM-LC-Sw1-Pl, 2x HM-ES-PMSw1-Pl, 4x HM-PB-2-WM55-2, 1x HM-PB-6-WM55, 1x HM-WDS10-TH-O, 1x CUL433, 6x Pollin Funksteckdose

justme1968

#1
das geht z.b. so:

du brauchst eine sub um die x,y daten ins plot format zu bringen (ist ab morgen teil von logProxy:sub                         
logProxy_xy2Plot($)         
{                           
  my ($array) = @_;         
  my $ret = ";c 0\n";   
                           
  my $min = 999999;         
  my $max = -999999;   
  my $last;                 
                           
  return ($ret,$min,$max,$last) if( !ref($array) eq "ARRAY" );
                           
  foreach my $point ( @{$array} ) {
    $ret .= ";p $point->[0] $point->[1]\n";
  }                         
                           
  return ($ret,$min,$max,$last);
}


dieser routine übergibst du ein array mit x,y koordinaten. mit ein paar hard kodierten werten im plotfile als beispiel:#lp Func:logProxy_xy2Plot([[18,40],[24,33],[22,65],[17,75],[18,40]])
#lp Func:logProxy_xy2Plot([[19,20],[25,18],[27,32],[24,60],[21,80],[17,85],[16,75],[17,35],[19,20]])
#lp Func:logProxy_xy2Plot([[22,40]])
                                 
plot "<IN>" using 1:2 axes x1y1 title 'Behaglich' ls l1fill lw 1 with lines,\
     "<IN>" using 1:2 axes x1y1 title 'Noch Behaglich' ls l5 lw 1 with lines
     "<IN>" using 1:2 axes x1y1 title 'Wert' ls l0 lw 1 with points


bekommst du dann einen plot wie auf dem screenshot in anhang.

die koordinaten für die beiden begrenzungslinien sind pi mal daumen aus deinem link abgelesen. das müsste man genauer machen.

statt dem ebenfalls fest eingetragenen punkt 22,40 musst du natürlich echte readings deiner devices verwenden.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

peterchen89

Sieht super aus! Vielen vielen Dank!  :)
FHEM 5.5 auf HP ProLiant MicroServer G7 N54L 8 GB Ubuntu 14.04 LTS.
1x HM-CFG-LAN, 1x HM-CFG-USB, 7x HM-CC-RT-DN, 5x HM-SEC-SC-2, 1x HM-SEC-SCo, 2x HM-TC-IT-WM-W-EU, 2x HM-LC-Sw1-Pl, 2x HM-ES-PMSw1-Pl, 4x HM-PB-2-WM55-2, 1x HM-PB-6-WM55, 1x HM-WDS10-TH-O, 1x CUL433, 6x Pollin Funksteckdose

TeeVau

Hallo,

habe versucht das ganze einmal auf die schnelle nachzubauen. Leider stürzt meine FBF immer ab, wenn ich das Beispiel aus dem Wiki versuche umzusetzen.
SVG erstellen:
define SVG_Heizung SVG logProxy:SVG_HeizungBequemlichkeit:CURRENT

Inhalt SVG_HeizungBequemlichkeit.gplot

# Created by FHEM/98_SVG.pm, 2015-02-02 11:56:19
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title '<TL>'
set ytics
set y2tics
set grid y2tics
set ylabel "Temperature"
set y2label "Temperature"

#logProxy Func:logProxy_xy2Plot([[18,40],[24,33],[22,65],[17,75],[18,40]])

plot "<IN>" using 1:2 axes x1y2 title 'RL' ls l1fill lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'VL avg' ls l5 lw 1 with lines


Dann erscheint beim Laden folgendes aus der console:

2015.02.02 12:00:14 1: PERL WARNING: Use of uninitialized value $xmin in subtraction (-) at ./FHEM/98_SVG.pm line 1386.
2015.02.02 12:00:14 1: PERL WARNING: Use of uninitialized value $xmax in subtraction (-) at ./FHEM/98_SVG.pm line 1386.

Entferne ich den Aufruf der Funktion logProxy_xy2Plot stürzt nichts ab.

Versionen:

# $Id: fhem.pl 7815 2015-02-01 13:19:39Z rudolfkoenig $
# $Id: 00_CUL.pm 7770 2015-01-30 07:04:52Z rudolfkoenig $
# $Id: 14_CUL_WS.pm 5379 2014-03-30 16:34:01Z rudolfkoenig $
# $Id: 72_FB_CALLMONITOR.pm 7760 2015-01-28 16:39:34Z markusbloch $
# $Id: 93_FHEM2FHEM.pm 7193 2014-12-13 16:12:06Z rudolfkoenig $
# $Id: 01_FHEMWEB.pm 7788 2015-01-31 10:50:27Z rudolfkoenig $
# $Id: 95_FLOORPLAN.pm 7594 2015-01-17 07:51:19Z rudolfkoenig $
# $Id: 10_FS20.pm 7070 2014-11-27 12:45:34Z rudolfkoenig $
# $Id: 92_FileLog.pm 7690 2015-01-24 13:49:08Z rudolfkoenig $
# $Id: 98_GEOFANCY.pm 6985 2014-11-16 00:05:49Z loredo $
# $Id: 98_HTTPMOD.pm 7313 2014-12-23 09:37:35Z ststrobel $
# $Id: 98_Heating_Control.pm 7168 2014-12-08 00:03:37Z dietmar63 $
# $Id: 31_LightScene.pm 7792 2015-01-31 12:26:07Z justme1968 $
# $Id: 99_SUNRISE_EL.pm 6765 2014-10-14 18:24:29Z rudolfkoenig $
# $Id: 98_SVG.pm 7819 2015-02-01 15:24:06Z rudolfkoenig $
# $Id: 34_SWAP.pm 7554 2015-01-13 18:46:28Z justme1968 $
# $Id: 35_SWAP_0000002200000003.pm 6546 2014-09-12 17:48:59Z justme1968 $
# $Id: 98_Text2Speech.pm 7588 2015-01-16 17:32:08Z tobiasfaust $
# $Id: 59_Twilight.pm 7462 2015-01-06 17:13:36Z dietmar63 $
# $Id: 99_Utils.pm 7528 2015-01-11 18:23:31Z rudolfkoenig $
# $Id: 70_VIERA.pm 6347 2014-08-02 16:25:27Z teevau $
# $Id: 59_Weather.pm 6705 2014-10-07 17:41:42Z borisneubert $
# $Id: 98_WeekdayTimer.pm 7168 2014-12-08 00:03:37Z dietmar63 $
# $Id: 90_at.pm 7563 2015-01-14 07:53:50Z rudolfkoenig $
# $Id: 98_autocreate.pm 6505 2014-09-06 12:24:48Z rudolfkoenig $
# $Id: 98_average.pm 5443 2014-04-05 06:37:49Z rudolfkoenig $
# $Id: 98_cmdalias.pm 7218 2014-12-15 08:30:54Z rudolfkoenig $
# $Id: 98_dewpoint.pm 6757 2014-10-12 18:58:57Z joachim09876 $
# $Id: 98_dummy.pm 4934 2014-02-15 08:23:12Z rudolfkoenig $
# $Id: 91_eventTypes.pm 7221 2014-12-15 10:02:49Z rudolfkoenig $
# $Id: 95_holiday.pm 7330 2014-12-27 09:23:04Z rudolfkoenig $
# $Id: 98_logProxy.pm 7775 2015-01-30 12:10:54Z justme1968 $
# $Id: 91_notify.pm 7260 2014-12-19 12:50:49Z rudolfkoenig $
# $Id: 34_panStamp.pm 4756 2014-01-27 21:15:50Z justme1968 $
# $Id: 33_readingsGroup.pm 7735 2015-01-26 15:52:49Z justme1968 $
# $Id: 33_readingsProxy.pm 7737 2015-01-26 16:28:33Z justme1968 $
# $Id: 91_sequence.pm 7257 2014-12-19 09:29:32Z rudolfkoenig $
# $Id: 98_telnet.pm 6611 2014-09-24 07:48:32Z rudolfkoenig $
# $Id: 91_watchdog.pm 7108 2014-12-01 08:11:34Z rudolfkoenig $
# $Id: 98_weblink.pm 5608 2014-04-23 10:57:16Z rudolfkoenig $
# $Id: 32_withings.pm 7757 2015-01-28 13:13:00Z justme1968 $
FHEM 5.8 dev (virtualisiert) / FBF 7390 (CUL 868MHz V 1.51 / panStick (AVR1))
FS20: fs20di,fs20pira,fs20sm8,fs20st2,fs20tfk,fs20ue1,fs20ws1
panStamp (AVR1): RGB Multi von ext23, 1W-DSxxxx, I/O Sketch, Spritzpumpe
Multimedia: Panasonic TV (VIERA), Kodi, Yamaha RX-V781, LMS
Sonstiges: XiaomiFlowerSen

justme1968

dir fehlen die xrange und yrange angaben im gplot file.set xrange [12:28]
set yrange [0:100]


das umschalten von datum/wert auf x/y mode ist an das vorhanden sein der xrange angabe geknüpft.

ich hab es im wiki ergänzt.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

TeeVau

Ah, ok. Damit klappt es. Man darf dann allerdings nicht den gplot Editor von FHEMWEB verwenden, richtig?
Der entfernt nämlich immer xrange (oder xyrange, weis es nicht genau). Und dann stürzt es wieder ab :-)

Ich habe noch ein Problem die Daten dem Sensor an die Funktion LogProxy_xy2Plot() zu übergeben. Es muss ja ein Array sein, also dachte ich, dass ich mit folgender Funktion eine Lösung habe:
sub tempHumAsReading($) {
  my($device) = @_;
  my @Daten = (ReadingsVal("$device","temperature","0"),ReadingsVal("$device","humidity","0"));
  return \@Daten;
}


Und Aufruf dann mit:
#logProxy Func:logProxy_xy2Plot(tempHumAsReading("wz_Temperatur"))

So sieht der preprocessed output aus:
get logProxy CURRENT INT 2015-02-03_00:00:00 2015-02-04_00:00:01 Func:logProxy_xy2Plot([[18,40],[24,33],[22,65],[17,75],[18,40]]) Func:logProxy_xy2Plot([[19,20],[25,18],[27,32],[24,60],[21,80],[17,85],[16,75],[17,35],[19,20]]) Func:logProxy_xy2Plot(tempHumAsReading("wz_Temperatur"))

;c 0
;p 18 40
;p 24 33
;p 22 65
;p 17 75
;p 18 40
#Func:logProxy_xy2Plot([[18,40],[24,33],[22,65],[17,75],[18,40]])
;c 0
;p 19 20
;p 25 18
;p 27 32
;p 24 60
;p 21 80
;p 17 85
;p 16 75
;p 17 35
;p 19 20
#Func:logProxy_xy2Plot([[19,20],[25,18],[27,32],[24,60],[21,80],[17,85],[16,75],[17,35],[19,20]])


Egal ob ich die Referenz auf das Array zurückgebe (\@Daten) oder das Array, (@Daten), es funktioniert nicht. Kann mir jemand mit Perl Wissen aushelfen? :-)
FHEM 5.8 dev (virtualisiert) / FBF 7390 (CUL 868MHz V 1.51 / panStick (AVR1))
FS20: fs20di,fs20pira,fs20sm8,fs20st2,fs20tfk,fs20ue1,fs20ws1
panStamp (AVR1): RGB Multi von ext23, 1W-DSxxxx, I/O Sketch, Spritzpumpe
Multimedia: Panasonic TV (VIERA), Kodi, Yamaha RX-V781, LMS
Sonstiges: XiaomiFlowerSen

justme1968

das speichern von xrange baue ich ein.

du hast nur eine klammer ebene vergessen. es muss eine referenz auf ein array von koordinaten paaren zurück geben werden. jedes paar ist wieder ein kleines array. also so:sub tempHumAsReading($) {
  my($device) = @_;
  my @Daten = ([ReadingsVal("$device","temperature","0"),ReadingsVal("$device","humidity","0")]);
  return \@Daten;
}


gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968