FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Helmi55 am 17 Dezember 2018, 15:16:56

Titel: [erledigt] Frage zu 99_myUtils.pm
Beitrag von: Helmi55 am 17 Dezember 2018, 15:16:56
Hallo
ich habe von hier etwas "gestohlen" https://forum.fhem.de/index.php/topic,53500.msg472864.html#msg472864.  (Danke dafür)
Nun wird die Windrichtung aber nicht angezeigt (zeigt immer nur Norden)
Nun meine Frage ob ich den Neuen "sub" richtig angelegt habe?

# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.

package main;

use strict;
use warnings;
use POSIX;
use JSON;

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}

# Enter you functions below _this_ line.

sub
replaceJSON ($$) {
   my ($valToReplace, $value) = @_;
   $value = InternalVal("Ofen", "value", $value);
   Log3 ("Ofen", 3, "replaceJSON Internalvalue: $value");
   fhem ("get Ofen revision");
   my $json = ReadingsVal("Ofen", "controlsJSON","");
   Log3 ("Ofen", 3, "replaceJSON configsJSON: $json");
   return if ($json eq "");
   my $decoded = decode_json($json);
   my $result;
   for my $key ( keys %$decoded ) {
      $result .= "$key=";
      if ($key eq $valToReplace) {
         $result .= $value."&";
      } else {
         $result .= $decoded->{$key}."&";
      }
   }
   chop($result);
   Log3("Ofen", 3, "replaceJSON Result: $result");
   return $result;
}
sub Twilight_CompassPoint_T($) {
  my ($azimuth) = @_;

  my $compassPoint = "unknown";

  if ($azimuth      < 22.5) {
     $compassPoint = "N";
  } elsif ($azimuth < 45)   {
     $compassPoint = "N-NO";
  } elsif ($azimuth < 67.5) {
     $compassPoint = "NO";
  } elsif ($azimuth < 90)   {
     $compassPoint = "O-NO";
  } elsif ($azimuth < 112.5){
     $compassPoint = "O";
  } elsif ($azimuth < 135)  {
     $compassPoint = "O-SO";
  } elsif ($azimuth < 157.5){
    $compassPoint = "SO";
  } elsif ($azimuth < 180)  {
    $compassPoint = "S-SO";
  } elsif ($azimuth < 202.5){
    $compassPoint = "S";
  } elsif ($azimuth < 225)  {
    $compassPoint = "S-SW";
  } elsif ($azimuth < 247.5){
    $compassPoint = "SW";
  } elsif ($azimuth < 270)  {
    $compassPoint = "W-SW";
  } elsif ($azimuth < 292.5){
    $compassPoint = "W";
  } elsif ($azimuth < 315)  {
    $compassPoint = "W-NW";
  } elsif ($azimuth < 337.5){
    $compassPoint = "NW";
  } elsif ($azimuth <= 361)  {
    $compassPoint = "N-NW";
  }
  return $compassPoint;
}

1;


Danke für eure Hilfe
Gruß Helmut
Titel: Antw:Frage zu 99_myUtils.pm
Beitrag von: JoWiemann am 17 Dezember 2018, 15:20:51
Hilfreich wäre noch ein List vom Device in dem die sub eingesetzt wird.
Titel: Antw:Frage zu 99_myUtils.pm
Beitrag von: Helmi55 am 17 Dezember 2018, 15:39:07
Sorry hab ich vergessen - ist ein NETATMO Windmesser

Internals:
   DEF        MODULE 70:ee:50:36:f1:c2 06:00:00:03:1c:b0
   Device     70:ee:50:36:f1:c2
   IODev      netatmo
   LAST_POLL  2018-12-17 15:34:11
   Module     06:00:00:03:1c:b0
   NAME       netatmo_M06_00_00_03_1c_b0
   NOTIFYDEV  global
   NR         487
   NTFY_ORDER 50-netatmo_M06_00_00_03_1c_b0
   STATE      Wind: 1 km/h (0 bft, N), Böen: 3 km/h (0 bft, N), Max: 11 km/h (0 bft, N)
   SUBTYPE    MODULE
   TYPE       netatmo
   dataTypes  WindStrength,WindAngle,GustStrength,GustAngle
   firmware   19
   last_message 2018-12-17 15:19:14
   last_seen  2018-12-17 15:19:14
   last_setup 2018-12-07 14:41:30
   model      NAModule2
   moduleName Windmesser
   openRequests 0
   rf_status  73
   status     ok
   READINGS:
     2018-12-17 15:34:11   active          ok
     2018-12-17 15:23:42   batteryPercent  100
     2018-12-17 15:23:42   batteryState    ok
     2018-12-17 15:23:42   batteryVoltage  6.115
     2018-12-17 15:29:03   gustangle       115
     2018-12-17 15:34:11   gustdirection   N
     2018-12-17 15:29:03   guststrength    3
     2018-12-17 15:34:11   guststrength_bft 0
     2018-12-17 15:29:03   windangle       90
     2018-12-17 14:13:32   windangle_max   249
     2018-12-17 15:34:11   winddirection   N
     2018-12-17 15:34:11   winddirection_max N
     2018-12-17 15:29:03   windstrength    1
     2018-12-17 15:34:11   windstrength_bft 0
     2018-12-17 14:13:32   windstrength_max 11
     2018-12-17 15:34:11   windstrength_max_bft 0
   helper:
     INTERVAL   300
     NEXT_POLL  1545057551
     last_status_store 1545056943
     readingNames:
       windstrength,windangle,guststrength,gustangle
Attributes:
   IODev      netatmo
   devStateIcon .*:no-icon
   interval   300
   room       netatmo
   stateFormat Wind: windstrength km/h (windstrength_bft bft, winddirection), Böen: guststrength km/h (guststrength_bft bft, gustdirection), Max: windstrength_max km/h (windstrength_max_bft bft, winddirection_max)
   userReadings guststrength_bft { int((ReadingsVal("netatmo_M06_00_00_03_1c_b0
","guststrength",0)*0.33227)**0.666666667+0.5);; },
windstrength_max_bft { int((ReadingsVal("netatmo_M06_00_00_03_1c_b0
","windstrength_max",0)*0.33227)**0.666666667+0.5);; },
windstrength_bft { int((ReadingsVal("netatmo_M06_00_00_03_1c_b0
","windstrength",0)*0.33227)**0.666666667+0.5);; },
winddirection {Twilight_CompassPoint_T(ReadingsVal("netatmo_M06_00_00_03_1c_b0
","windangle",0));; },
gustdirection {Twilight_CompassPoint_T(ReadingsVal("netatmo_M06_00_00_03_1c_b0
","gustangle",0));; }, 
winddirection_max {Twilight_CompassPoint_T(ReadingsVal("netatmo_M06_00_00_03_1c_b0
","windangle_max",0));; }


Danke
Titel: Antw:Frage zu 99_myUtils.pm
Beitrag von: amenomade am 17 Dezember 2018, 22:48:01
Hast Du wirklich jedes Mal einen Zeilenumbruch nach ReadingsVal("netatmo_M06_00_00_03_1c_b0 ?
Titel: Antw:Frage zu 99_myUtils.pm
Beitrag von: Helmi55 am 18 Dezember 2018, 08:44:25
Servus tja leider als "Nichtwissender" hat sich das beim Kopieren eingeschlichen. Werde das heute noch ändern und sehen was dann passiert.
Melde mich am späten Nachmittag wieder
LG
Helmut
P.S. Ofen funktioniert tadellos - Danke
Titel: Antw:Frage zu 99_myUtils.pm
Beitrag von: Helmi55 am 18 Dezember 2018, 08:49:03
Servus
Danke du bist mein Retter - wieder etwas dazu gelernt.
Kaum macht man(n) es richtig funktioniert es.
Wünsche dir schöne Feiertage
LG
Helmut