Beitragsseiten

windrose v3 - simpel und mit schwankungsbreite (29.03.2017)

jetzt hab ichs!

ganz simpel diesmal nur ein dummy und ein doif. der gag: ich mißbrauche das "knob-widget". die version, die unter fhem-web und dem floorplan funzt. nicht zu verwechseln mit der tablet-ui!

man baue sich einen dummy

defmod wRose dummy

attr wRose webCmd state

und dann ein doif, das die beiden werte für windrichtung und schwankungsbreite einbaut:

defmod wRose_Logik DOIF ([netatmo_forecast:fc0_wind_direction]) \
\
(\
   set wRose [DEVICE:WINDRICHTUNG];;\
   {fhem("attr wRose setList state:knob,thickness:1,readOnly:true,
angleoffset:90,min:0,max:360,step:01,inputColor:black,fgColor:red,
anglearc:360,bgcolor:#eeeeee,width:105,height:105,linecap:butt,
displayPrevious:false,
thickness:".(ReadingsNum("DEVICE","SCHWANKUNGSSBREITE", 0)/360*314)."
,font:Arial")};;\

)\
\
DOELSE

attr wRose_Logik do always

nicht vergessen, die einträge für DEVICE und die beiden readings WINDRICHTUNG und SCHWANKUNGSBREITE für deine anlage anzupassen.

hier ist auch der ganze gag versteckt. ich befülle einfach das attribut "setlist" des dummys immer gleich, nur der wert für "thickness" wird dynamisch befüllt. der ist eigentlich beim knob da, um die dicke des bewegbaren buttons zu bestimmen.

aussehen kann das ganze so:

wrose3

der vollständigkeit halber kommt noch ne readingsgroup für die windstärke dazu. die zeigt nen roten balken mit klartext drüber zur windstärke ...

die readingsgroup dazu::

defmod wStaerke readingsGroup DEVICE:WINDSTÄRKE
 attr wStaerke noheading 1

attr wStaerke nolinks 1
attr wStaerke nonames 1
attr wStaerke nostate 1
attr wStaerke notime 1
attr wStaerke valueFormat {\
return "Windstille" if( $VALUE < 1 );;\
return "leiser Zug" if( $VALUE < 5 );;\
return "leichte Brise" if( $VALUE < 10 );;\
return "schwache Brise" if( $VALUE < 15 );;\
return "schwacher Wind" if( $VALUE < 20 );;\
return "mäßige Brise" if( $VALUE < 25 );;\
return "mäßiger Wind" if( $VALUE < 30 );;\
return "frische Brise" if( $VALUE < 35 );;\
return "frischer Wind" if( $VALUE < 40 );;\
return "starker Wind" if( $VALUE < 45 );;\
return "steifer Wind" if( $VALUE < 65 );;\
return "stürmischer Wind" if( $VALUE < 75 );;\
return "Sturm" if( $VALUE < 90 );;\
return "schwerer Sturm" if( $VALUE < 105 );;\
return "orkanartiger Sturm" if( $VALUE < 112 );;\
return "Orkan"\
}

attr wStaerke valueStyle {wStaerkeBalken($VALUE)}

dazu noch ein bissi myutils für den balken:

sub wStaerkeBalken($)
{
    # Zuweisung der übergebenen Variablen
    my ($val) = @_;

    # Konfiguration des maximal übergebenen Werts
    my $maxValue = 120;

    # Normalisierung auf 100%-Wert
    my $percent = $val / $maxValue * 100;

    # Definition des valueStyles
    my $stylestring = 'style="'.
    'width: 100px; '.
    'text-align:center; '.
    'background-image: -webkit-linear-gradient(left,red '.$percent.'%, rgba(0,0,0,0) '.$percent.'%); '.
    'background-image:    -moz-linear-gradient(left,red '.$percent.'%, rgba(0,0,0,0) '.$percent.'%); '.
    'background-image:     -ms-linear-gradient(left,red '.$percent.'%, rgba(0,0,0,0) '.$percent.'%); '.
    'background-image:      -o-linear-gradient(left,red '.$percent.'%, rgba(0,0,0,0) '.$percent.'%); '.
    'background-image:         linear-gradient(left,red '.$percent.'%, rgba(0,0,0,0) '.$percent.'%);"';

    # Rückgabe des definierten Strings
    return $stylestring;
}

das sieht dann so aus bei mir:

windstaerke

Cookies erleichtern die Bereitstellung unserer Dienste. Mit der Nutzung unserer Dienste erklären Sie sich damit einverstanden, dass wir Cookies verwenden.
Weitere Informationen Ok Ablehnen