Ankündigung

Einklappen
Keine Ankündigung bisher.

Netatmo | Edomi

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #76
    Hallo,
    war bei mir auch so - ich habe den LBS angepasst und um einen Station Namen erweitert .
    Damit funktioniert es dann .

    Kann den geänderten LBS hier mal posten , vielleicht kann er dann auch als neue Version in den Download Bereich.

    VG
    Dominik

    Kommentar


      #77
      Zitat von Dosim Beitrag anzeigen
      Hallo,
      war bei mir auch so - ich habe den LBS angepasst und um einen Station Namen erweitert .
      Damit funktioniert es dann .

      Kann den geänderten LBS hier mal posten , vielleicht kann er dann auch als neue Version in den Download Bereich.

      VG
      Dominik
      ...ahhh Danke für die Info!!
      Ja wäre schön wenn Du den LBS einstellst oder die Änderungen in den orginalen LBS einfließen
      könnte.
      Gruß Marcus

      Kommentar


        #78
        Hier wäre der geänderte Code für das Basis Modul - Neu ist e6
        Die Änderungen am Code kann man ja mit Winmerge oder ähnlichem leicht herausfinden - ist nicht viel.

        wenn man den StationNamen leer läßt wird die erste Station gelesen

        PHP-Code:
        ###[DEF]###
        [name        =Netatmo Basis Indoor/Outdoor (v1.6)    ]

        [e#1 TRIGGER            = Starten #init=1]
        [e#2 IMPORTANT        = CLIENT_ID ]
        [e#3 IMPORTANT        = CLIENT_SECRET ]
        [e#4 IMPORTANT        = USERNAME ]
        [e#5 IMPORTANT        = PASSWORD ]
        [e#6                = StationName ]
        [e#7                = LogLevel  #init=0]

        [a#1        =Name Station    ]
        [a#2        =Temperature    ]
        [a#3        =min temp    ]
        [a#4        =min time    ]
        [a#5        =max temp    ]
        [a#6        =max time    ]
        [a#7        =temp trend    ]
        [a#8        =Humidity    ]
        [a#9        =Pressure    ]
        [a#10        =Pressure trend    ]
        [a#11        =CO2    ]
        [a#12        =Noise    ]
        [a#13        =Location    ]
        [a#14        =Altitude    ]
        [a#15        =Longitude    ]
        [a#16        =Latitude    ]
        [a#17        =##Modul##    ]
        [a#18        =Name Modul    ]
        [a#19        =Temperature    ]
        [a#20        =min temp    ]
        [a#21        =min time    ]
        [a#22        =max temp    ]
        [a#23        =max time    ]
        [a#24        =temp trend    ]
        [a#25        =Humidity    ]
        [a#26        =Battery    ]
        [a#27        =WiFi    ]
        [a#28        =Join    ]
        [a#29        =Debug    ]

        [v#1        = 0    ]


        [v#100    = 1.6 ]
        [v#101    = 19000290 ]
        [v#102    = Netatmo Basis Indoor/Outdoor ]
        [v#103    = 0 ]

        ###[/DEF]###


        ###[HELP]###
        <h2>NETATMO Basis Baustein für Station Indoor und Modul Outdoor</h2>

        ++++++++++++++++++++++++++++++++++++++++++++++
        ++    !!!!ACHTUNG!!! Ab Version 1.5 neue Classen und Pfade.     ++
        ++++++++++++++++++++++++++++++++++++++++++++++

        Diese Dateien mussen im Ordner /usr/local/edomi/main/include/php liegen.
        -> Ordner /Netatmo-API-PHP/...


        <h2>Ein- und Ausgänge</h2>
        <h3>Eingäne</h3>
        Der NETATMO Baustein wird automatisch gestartet, sobald EDOMI gestartet wird (E1 hat den Initialwert 1).
        E1: Signal 1 = Startet Baustein (Dämon)
        E2: CLIENT ID
        E3: CLIENT SECRET
        E4: Username
        E5: Passwort
        E6: Station Name (wenn nur eine Station im Netatmo Account dann leer lassen)
        E7: LogLevel

        <h3>Ausgänge</h3>    
        A1: Name Station
        A2: Temperatur
        A3: min Temperatur
        A4: min Temperarur Uhrzeit
        A5: max Temperatur
        A6: max Temperarur Uhrzeit
        A7: Temperatur trend (stable / up / down)
        A8: Humidity
        A9: Pressure
        A10: Pressure trend (stable / up / down)
        A11: CO2
        A12: Noise
        A13: Location
        A14: Altitude
        A15: Longitude (Längengrad)
        A16: Latitude (Breitengrad)
        A17: ##Modul##    - ab hier beginnt die Ausgabe für das Aussenmodul
        A18: Name Modul
        A19: Temperatur
        A20: min Temperatur
        A21: min Temperarur Uhrzeit
        A22: max Temperatur
        A23: max Temperarur Uhrzeit
        A24: Temperatur trend (stable / up / down)
        A25: Humidity
        A26: Battery (full, high, medium, low, very low)
        A27: WiFi
        A28: Join (Listenausgabe von A1 - A27 durch | getrennt. KO EIngabe im Visuelement durch {split(0)}, {split(1)} usw..)
        A29: Debug Ausgang

        V1: Dämon


        <h3>Changelog:</h3>
        ==========
        v1.0: Initial version
        v1.1: Anpassungen
        v1.2: Eingang für Namen entfernt. Die Module werden automatisch erkannt.    
        v1.5: LBS Code überabrbeitet. Neue Classen und Pfade
        v1.6: A28 als Join/Liste eingefügt. A29 als Debug (vorher A28) verschoben.


        ###[/HELP]###


        ###[LBS]###
        <?
        function LB_LBSID($id) {
            if ($E=logic_getInputs($id)) {

                if ($E[1]['value']!=0 && $E[1]['refresh']==1) {

                    if (logic_getVar($id,1)==0) {    
                        logic_setVar($id,1,1);
                        logic_callExec(LBSID,$id);
                    }

                }

            }
        }
        ?>
        ###[/LBS]###


        ###[EXEC]###
        <?
        require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php");
        require_once (dirname(__FILE__).'/../../../../main/include/php/Netatmo-API-PHP/src/Netatmo/autoload.php');

        set_time_limit(0);
        sql_connect();




        function LB_LBSID_Debug($id,$message,$LBS_loglevel,$USER_loglevel, $exit = FALSE) {
            setlocale(LC_TIME, "de_DE");
            $E=logic_getInputs($id);
            $version = logic_getVar($id,100);
            $logName = logic_getVar($id,102);
            $a = array("LOG_EMERG","LOG_ALERT","LOG_CRIT","LOG_ERR","LOG_WARNING","LOG_NOTICE","LOG_INFO","LOG_DEBUG");
            $LBS_loglevel<=$USER_loglevel && writeToCustomLog("LBSLBSID" . " - \t[$logName]",$LBS_loglevel,"(ID$id) - " . " " .$a[$LBS_loglevel].": ".$message."\t[v$version]");
            if($LBS_loglevel<=6){
            logic_setOutput($id,29,strftime("%A. %X %Z - %d. %B %Y. - ").$message);  
            }
            if($exit) {
                writeToCustomLog("LBSLBSID" . " - \t[$logName]",$LBS_loglevel,"(ID$id) ".$a[$LBS_loglevel].": LBS wird beendet."."\t[v$version]");
        //        LB_LBSID_Finish($id);
            }
        }







        if ($E=logic_getInputs($id)) {

                $user_log_level = $E[7]['value'];



        $client_id = $E[2]['value'];
        $client_secret = $E[3]['value'];
        $test_username = $E[4]['value'];
        $test_password = $E[5]['value'];
        $station_name = $E[6]['value'];

        LB_LBSID_Debug($id, "Netatmo Basis Indoor/Outdoor EXEC -> gestartet \n",6, $user_log_level, FALSE);
        }

        if (empty($client_id))    {
                LB_LBSID_Debug($id, "Fehler beim Initialisieren - keine Client ID an E[2] vorhanden. \n",3, $user_log_level, TRUE);
            }
        if (empty($client_secret))    {
            LB_LBSID_Debug($id, "Fehler beim Initialisieren - kein Client Secret an E[3] vorhanden. \n",3, $user_log_level, TRUE);
            }
        if (empty($test_username))    {
            LB_LBSID_Debug($id, "Fehler beim Initialisieren - kein Username an E[4] vorhanden. \n",3, $user_log_level, TRUE);
            }
        if (empty($test_password))    {
            LB_LBSID_Debug($id, "Fehler beim Initialisieren - kein Passwort an E[5] vorhanden. \n",3, $user_log_level, TRUE);
            }    

        while(getSysInfo(1)>=1) {

        $scope = Netatmo\Common\NAScopes::SCOPE_READ_STATION;
        $config = array("client_id" => $client_id,
                        "client_secret" => $client_secret,
                        "username" => $test_username,
                        "password" => $test_password);

        $client = new Netatmo\Clients\NAWSApiClient($config);


            try
            {
                    $tokens = $client->getAccessToken();
            }
            catch(Netatmo\Exceptions\NAClientException $ex)
            {
                LB_LBSID_Debug($id, "Fehler beim Aufrufen des Tokens: " .$ex->getMessage()."\n",3, $user_log_level, FALSE);
            }


            try {

                $data = $client->getData(NULL, TRUE);
            }
            catch(Netatmo\Exceptions\NAClientException $ex) {
                LB_LBSID_Debug($id, "Fehler beim holen der Daten: ". $ex->getMessage()."\n",3, $user_log_level, FALSE);      
            }



            foreach($data['devices'] as $device)
            {

                try
               {

                if (  isset( $device['type'] ) && $device['type'] == 'NAMain' && isset( $device['station_name'] ) && ($device['station_name'] == $station_name || $station_name=='') )
                {
                    $l=array($id);
                    if (isset($device['station_name']))     {logic_setOutput($id,1,$l[]=$device['station_name']);}
                    if (isset($device['dashboard_data']["Temperature"]))     {logic_setOutput($id,2,$l[]=$device['dashboard_data']["Temperature"]);}
                    if (isset($device['dashboard_data']["min_temp"]))     {logic_setOutput($id,3,$l[]=$device['dashboard_data']["min_temp"]);}
                    if (isset($device['dashboard_data']['date_min_temp']))     {
                        $date_min_innen = $device['dashboard_data']['date_min_temp'];
                        $date_min_innen =  date('H:i', $date_min_innen);
                        logic_setOutput($id,4,$l[]=$date_min_innen);
                        }
                    if (isset($device['dashboard_data']["max_temp"]))     {logic_setOutput($id,5,$l[]=$device['dashboard_data']["max_temp"]);}    
                    if (isset($device['dashboard_data']['date_max_temp']))     {
                        $date_max_innen = $device['dashboard_data']['date_max_temp'];
                        $date_max_innen =  date('H:i', $date_max_innen);
                        logic_setOutput($id,6,$l[]=@$date_max_innen);
                    }
                    if (isset($device['dashboard_data']["temp_trend"]))     {logic_setOutput($id,7,$l[]=$device['dashboard_data']["temp_trend"]);}    
                    if (isset($device['dashboard_data']["Humidity"]))     {logic_setOutput($id,8,$l[]=$device['dashboard_data']["Humidity"]);}    
                    if (isset($device['dashboard_data']["Pressure"]))     {logic_setOutput($id,9,$l[]=$device['dashboard_data']["Pressure"]);}    
                    if (isset($device['dashboard_data']["pressure_trend"]))     {logic_setOutput($id,10,$l[]=$device['dashboard_data']["pressure_trend"]);}    
                    if (isset($device['dashboard_data']["CO2"]))     {logic_setOutput($id,11,$l[]=$device['dashboard_data']["CO2"]);}        
                    if (isset($device['dashboard_data']["Noise"]))     {logic_setOutput($id,12,$l[]=$device['dashboard_data']["Noise"]);}    
                    if (isset($device['place']['city']))     {logic_setOutput($id,13,$l[]=$device['place']['city']);}    
                    if (isset($device['place']['altitude']))     {logic_setOutput($id,14,$l[]=$device['place']['altitude']);}    
                    if (isset($device['place']['location']['0']))     {logic_setOutput($id,15,$l[]=$device['place']['location']['0']);}    
                    if (isset($device['place']['location']['1']))     {logic_setOutput($id,16,$l[]=$device['place']['location']['1']);}    
        //            logic_setOutput($id,28,join("|",$l));
                    }
                    }
                    catch(Netatmo\Exceptions\NAClientException $ex)
                           {
                            LB_LBSID_Debug($id, "Fehler beim Ermitteln der Tageswerte beim MainDevice (NAMain): " . $ex->getMessage() . "\n",3, $user_log_level, FALSE);
                            }





            foreach($device['modules'] as $module){

                try
               {
                $l[]="Beginn Modul 1";
                if (  isset( $module['type'] ) && $module['type'] == 'NAModule1' ) {

                    if (isset($module['module_name']))     {logic_setOutput($id,18,$l[]=$module['module_name']);}    
                    if (isset($module['dashboard_data']["Temperature"]))     {logic_setOutput($id,19,$l[]=$module['dashboard_data']["Temperature"]);}    
                    if (isset($module['dashboard_data']["min_temp"]))     {logic_setOutput($id,20,$l[]=$module['dashboard_data']["min_temp"]);}    
                    if (isset($module['dashboard_data']['date_max_temp']))     {
                        $date_min_out = $module['dashboard_data']['date_min_temp'];
                        $date_min_out =  date('H:i', $date_min_out);
                        logic_setOutput($id,21,$l[]=$date_min_out);
                    }
                    if (isset($module['dashboard_data']["max_temp"]))     {logic_setOutput($id,22,$l[]=$module['dashboard_data']["max_temp"]);}    
                    if (isset($module['dashboard_data']['date_max_temp']))     {
                        $date_max_out = $module['dashboard_data']['date_max_temp'];
                        $date_max_out =  date('H:i', $date_max_out);
                        logic_setOutput($id,23,$l[]=$date_max_out);
                    }
                    if (isset($module['dashboard_data']["temp_trend"]))     {logic_setOutput($id,24,$l[]=$module['dashboard_data']["temp_trend"]);}    
                    if (isset($module['dashboard_data']["Humidity"]))     {logic_setOutput($id,25,$l[]=$module['dashboard_data']["Humidity"]);}

                            if (isset($module['battery_vp'])){
                                $b=$module['battery_vp'];    
                                switch ($b)
                                {
                                    case ($b >= 5500):
                                    $c= 'full';
                                    break;
                                    case ($b>= 5000):
                                    $c= 'high';
                                    break;
                                    case ($b>= 4500):
                                    $c= 'medium';
                                    break;
                                    case ($b>= 4000):
                                    $c= 'low';
                                    break;
                                    case ($b< 4000):
                                    $c= 'very low';
                                    break;
                                    default:
                                    $c= 'Error';
                                }
                            }
                    logic_setOutput($id,26,$l[]=$c);
                    if (isset($module['rf_status']))      {logic_setOutput($id,27,$l[]=$module['rf_status']);}
                    logic_setOutput($id,28,join("|",$l));
                    }
                    }
                    catch(Netatmo\Exceptions\NAClientException $ex)
                           {
                            LB_LBSID_Debug($id, "Fehler beim holen der Daten: ". $ex->getMessage()."\n",3, $user_log_level, FALSE);
                            }

            }

        }

            usleep(1000000*300);
        }


        sql_disconnect();

        function LB_LBSID_Finish($id) {
            setlocale(LC_TIME, "de_DE");
            logic_setOutput($id,29,strftime("%A. %X %Z - %d. %B %Y. - "));
            LB_LBSID_Debug($id, "Netatmo Module Wind/Regen EXEC -> wurde beendet \n",6, $user_log_level, FALSE);
            logic_setVar($id,1,0);
            sql_disconnect();
            exit();
        }
        ?>
        ###[/EXEC]###
        Zuletzt geändert von Dosim; 17.06.2018, 08:43.

        Kommentar


          #79
          Hier das zugehörige Modul Rain :
          PHP-Code:
          ###[DEF]###
          [name        =Netatmo Module Wind/Regen (v1.6)    ]

          [e#1 TRIGGER        = Starten #init=1]
          [e#2 IMPORTANT        = CLIENT_ID ]
          [e#3 IMPORTANT        = CLIENT_SECRET ]
          [e#4 IMPORTANT        = USERNAME ]
          [e#5 IMPORTANT        = PASSWORD ]
          [e#6                = StationName ]
          [e#7                = LogLevel  #init=0]

          [a#1        =##Wind Sensor##    ]
          [a#2        =Name Modul    ]
          [a#3        =Wind Richtung]
          [a#4        =Wind txt    ]
          [a#5        =Wind Stärke    ]
          [a#6        =Böen Richtung    ]
          [a#7        =Böen Stärke    ]
          [a#8        =maxWind Uhrzeit    ]
          [a#9        =max Wind Richtung    ]
          [a#10        =max Wind Stärke    ]
          [a#11        =Battery    ]
          [a#12        =WiFi    ]
          [a#13        =##Rain Gauger##    ]
          [a#14        =Name Modul    ]
          [a#15        =Regen    ]
          [a#16        =Regen 24    ]
          [a#17        =Regen 1    ]
          [a#18        =Battery    ]
          [a#19        =WiFi    ]
          [a#20        =Listenausgabe Windsensor    ]
          [a#21        =Listenausgabe Regensensor    ]
          [a#22        =Debug    ]



          [v#1        = 0    ]

          [v#100    = 1.6 ]
          [v#101    = 19000291 ]
          [v#102    = Netatmo Module Wind/Regen ]
          [v#103    = 0 ]

          ###[/DEF]###


          ###[HELP]###
          <h2>NETATMO Basis Baustein für Station Indoor und Modul Outdoor</h2>

          ++++++++++++++++++++++++++++++++++++++++++++++
          ++    !!!!ACHTUNG!!! Ab Version 1.5 neue Classen und Pfade.     ++
          ++++++++++++++++++++++++++++++++++++++++++++++

          Diese Dateien mussen im Ordner /usr/local/edomi/main/include/php liegen.
          -> Ordner /Netatmo-API-PHP/...


          <h2>Ein- und Ausgänge</h2>
          <h3>Eingäne</h3>
          Der NETATMO Baustein wird automatisch gestartet, sobald EDOMI gestartet wird (E1 hat den Initialwert 1).
          E1: Signal 1 = Startet Baustein (Dämon)
          E2: CLIENT ID
          E3: CLIENT SECRET
          E4: Username
          E5: Passwort
          E6: Station Name (wenn nur eine Station im Netatmo Account dann leer lassen)
          E7: LogLevel 0-8

          <h3>Ausgänge</h3>        
          A1: ##Wind Sensor##  (Keine Ausgabe)
          A2: Name Modul
          A3: Wind Richtung
          A4: Wind txt   NO (121°)
          A5: Wind Stärke
          A6: Böen Richtung
          A7: Böen Stärke
          A8: max Wind Uhrzeit
          A9: max Wind Richtung
          A10: max Wind Stärke
          A11: Battery (full, high, medium, low, very low)
          A12: WiFi (Signalstärke)
          A13: ##Rain Gauger## (keine Ausgabe)
          A14: Name Modul
          A15: Regen
          A16: Regen /24h
          A17: Regen /1h
          A18: Battery (full, high, medium, low, very low)
          A19: WiFi (Signalstärke)
          A20: Join (Listenausgabe von A1 - A12 durch | getrennt. KO EIngabe im Visuelement durch {split(0)}, {split(1)} usw..) A1 = {split(1)} usw...
          A21: Join (Listenausgabe von A14 - A19 durch | getrennt. KO EIngabe im Visuelement durch {split(0)}, {split(1)} usw..) A14 = {split(1)} usw...
          A22: Debug Ausgang

          V1: Dämon    

          <h3>Changelog:</h3>
          ==========
          v1.0: Initial version
          v1.2: Exeptions und LogLevel hinzugefügt    
          v1.5: LBS Code überabrbeitet. Neue Classen und Pfade
          v1.6: A20/A21 als Join/Liste eingefügt. A22 als Debug (vorher A20) verschoben.

          ###[/HELP]###


          ###[LBS]###
          <?
          function LB_LBSID($id) {
              if ($E=logic_getInputs($id)) {

                  if ($E[1]['value']!=0 && $E[1]['refresh']==1) {

                      if (logic_getVar($id,1)!=1) {    
                          logic_setVar($id,1,1);
                          logic_callExec(LBSID,$id);
                      }

                  }

              }
          }
          ?>
          ###[/LBS]###


          ###[EXEC]###
          <?
          require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php");
          require_once (dirname(__FILE__).'/../../../../main/include/php/Netatmo-API-PHP/src/Netatmo/autoload.php');

          set_time_limit(0);
          sql_connect();



          function LB_LBSID_Debug($id,$message,$LBS_loglevel,$USER_loglevel, $exit = FALSE) {
              setlocale(LC_TIME, "de_DE");
              $E=logic_getInputs($id);
              $version = logic_getVar($id,100);
              $logName = logic_getVar($id,102);
              $a = array("LOG_EMERG","LOG_ALERT","LOG_CRIT","LOG_ERR","LOG_WARNING","LOG_NOTICE","LOG_INFO","LOG_DEBUG");
              $LBS_loglevel<=$USER_loglevel && writeToCustomLog("LBSLBSID" . " - \t[$logName]",$LBS_loglevel,"(ID$id) - " . " " .$a[$LBS_loglevel].": ".$message."\t[v$version]");
              if($LBS_loglevel<=6){
              logic_setOutput($id,22,strftime("%A. %X %Z - %d. %B %Y. - ").$message);     
              }
              if($exit) {
                  writeToCustomLog("LBSLBSID" . " - \t[$logName]",$LBS_loglevel,"(ID$id) ".$a[$LBS_loglevel].": LBS wird beendet."."\t[v$version]");
                  LB_LBSID_Finish($id);
              }
          }

          if ($E=logic_getInputs($id)) {


          logic_setVar($id,103,$E[7]['value']);
          $user_log_level = $E[6]['value'];    
          $client_id = $E[2]['value'];
          $client_secret = $E[3]['value'];
          $test_username = $E[4]['value'];
          $test_password = $E[5]['value'];
          $station_name = $E[6]['value'];

          LB_LBSID_Debug($id, "Netatmo Module Wind/Regen EXEC -> gestartet \n",6, $user_log_level, FALSE);
          }

          if (empty($client_id))    {
                  LB_LBSID_Debug($id, "Fehler beim Initialisieren des LBS - keine Client ID an E[2] vorhanden. \n",3, $user_log_level, TRUE);
              }
          if (empty($client_secret))    {
              LB_LBSID_Debug($id, "Fehler beim Initialisieren des LBS - kein Client Secret an E[3] vorhanden. \n",3, $user_log_level, TRUE);
              }
          if (empty($test_username))    {
              LB_LBSID_Debug($id, "Fehler beim Initialisieren des LBS - kein Username an E[4] vorhanden. \n",3, $user_log_level, TRUE);
              }
          if (empty($test_password))    {
              LB_LBSID_Debug($id, "Fehler beim Initialisieren des LBS - kein Passwort an E[5] vorhanden. \n",3, $user_log_level, TRUE);
          }    

          while(getSysInfo(1)>=1) {

          $scope = Netatmo\Common\NAScopes::SCOPE_READ_STATION;
          $config = array("client_id" => $client_id,
                          "client_secret" => $client_secret,
                         "username" => $test_username,
                          "password" => $test_password);

          $client = new Netatmo\Clients\NAWSApiClient($config);



              try
              {
                      $tokens = $client->getAccessToken();

              }
              catch(Netatmo\Exceptions\NAClientException $ex)
              {
                  LB_LBSID_Debug($id, "Fehler beim Aufrufen des Tokens: " .$ex->getMessage()."\n",3, $user_log_level, FALSE);
              }



              try {

                  $data = $client->getData(NULL, TRUE);

              }
              catch(Netatmo\Exceptions\NAClientException $ex) {
                  LB_LBSID_Debug($id, "Fehler beim Abrufen der Daten: ". $ex->getMessage()."\n",3, $user_log_level, FALSE);
              }


          foreach($data['devices'] as $device)
          {

              if (  isset( $device['type'] ) && $device['type'] == 'NAMain' && isset( $device['station_name'] ) && ($device['station_name'] == $station_name || $station_name=='') )
              foreach($device['modules'] as $module){

              try
                 {

              if (  isset( $module['type'] ) && $module['type'] == 'NAModule2' ) {
                      $l=array($id);
                      $l[]="Windsensor";
                      if (isset($module['module_name'])) {logic_setOutput($id,2,$l[]=$module['module_name']);}
                      if (isset($module['dashboard_data']['WindAngle'])) {logic_setOutput($id,3,$l[]=$module['dashboard_data']['WindAngle']);}        
                      if (array_key_exists('WindAngle', $module['dashboard_data'])){
                                  $v1 = $module['dashboard_data']['WindAngle'];

                              switch ($v1)

                              {    
                                  case ($v1>=348.75 && $v1<11.25):
                                      $ritxtla = 'Nord';
                                      $ritxtku = 'N';
                                      $rinum = '0';
                                      break;
                                  case ($v1>=11.25 && $v1<33.75):
                                      $ritxtla = 'Nord-Nordost';
                                      $ritxtku = 'NNO';
                                      $rinum = '1';
                                      break;
                                  case ($v1>=33.75 && $v1<56.25):
                                      $ritxtla = 'Nord-Ost';
                                      $ritxtku = 'NO';
                                      $rinum = '2';
                                      break;
                                  case ($v1>=56.25 && $v1<78.75):
                                      $ritxtla = 'Ost-Nordost';
                                      $ritxtku = 'ONO';
                                      $rinum = '3';
                                      break;
                                  case ($v1>=78.75 && $v1<101.25):
                                      $ritxtla = 'Ost';
                                      $ritxtku = 'O';
                                      $rinum = '4';
                                      break;
                                  case ($v1>=101.25 && $v1<123.75):
                                      $ritxtla = 'Ost-Südost';
                                      $ritxtku = 'OSO';
                                      $rinum = '5';
                                      break;
                                  case ($v1>=123.75 && $v1<146.25):
                                      $ritxtla = 'Süd-Ost';
                                      $ritxtku = 'SO';
                                      $rinum = '6';
                                      break;
                                  case ($v1>=146.25 && $v1<168.75):
                                      $ritxtla = 'Süd-Südost';
                                      $ritxtku = 'SSO';
                                      $rinum = '7';
                                      break;
                                  case ($v1>=168.75 && $v1<191.25):
                                      $ritxtla = 'Süd';
                                      $ritxtku = 'S';
                                      $rinum = '8';
                                      break;
                                  case ($v1>=191.25 && $v1<213.75):
                                      $ritxtla = 'Süd-Südwest';
                                      $ritxtku = 'SSW';
                                      $rinum = '9';
                                      break;
                                  case ($v1>=213.75 && $v1<=236.25):
                                      $ritxtla = 'Süd-West';
                                      $ritxtku = 'SW';
                                      $rinum = '10';
                                      break;
                                  case ($v1>=236.25 && $v1<=258.75):
                                      $ritxtla = 'West-Südwest';
                                      $ritxtku = 'WSW';
                                      $rinum = '11';
                                      break;
                                  case ($v1>=258.75 && $v1<=281.25):
                                      $ritxtla = 'West';
                                      $ritxtku = 'W';
                                      $rinum = '12';
                                      break;
                                  case ($v1>=281.25 && $v1<=303.75):
                                      $ritxtla = 'West-Nordwest';
                                      $ritxtku = 'WNW';
                                      $rinum = '13';
                                      break;
                                  case ($v1>=303.75 && $v1<=326.25):
                                      $ritxtla = 'Nord-West';
                                      $ritxtku = 'NW';
                                      $rinum = '14';
                                      break;
                                  case ($v1>=326.25 && $v1<=348.75):
                                      $ritxtla = 'Nord-Nordwest';
                                      $ritxtku = 'NNW';
                                      $rinum = '15';
                                      break;
                                  default:
                                  $ritxtku= 'N/A';
                                  $ritxtla= 'N/A';
                                  $rinum= 'N/A';
                              }
                              }

                      logic_setOutput($id,4,$l[]=$ritxtku." (".$module['dashboard_data']['WindAngle']."°)");

                      if (isset($module['dashboard_data']['WindStrength'])) {logic_setOutput($id,5,$l[]=$module['dashboard_data']['WindStrength']);}

                      if (isset($module['dashboard_data']["GustAngle"])) {logic_setOutput($id,6,$l[]=$module['dashboard_data']["GustAngle"]);}

                      if (isset($module['dashboard_data']["GustStrength"])) {logic_setOutput($id,7,$l[]=$module['dashboard_data']["GustStrength"]);}

                      if (isset($module['dashboard_data']['date_max_wind_str'])) {
                          $date_max_wind = $module['dashboard_data']['date_max_wind_str'];
                          $date_max_wind =  date('H:i', $date_max_wind);
                          logic_setOutput($id,8,$l[]=$date_max_wind);
                          }


                      if (isset($module['dashboard_data']["max_wind_angle"])) {logic_setOutput($id,9,$l[]=$module['dashboard_data']["max_wind_angle"]);}

                      if (isset($module['dashboard_data']["max_wind_str"])) {logic_setOutput($id,10,$l[]=$module['dashboard_data']["max_wind_str"]);}

                              if (isset($module['battery_vp'])){

                                  $b=$module['battery_vp'];    
                                  switch ($b)
                                  {
                                      case ($b >= 5590):
                                      $c= 'full';
                                      break;
                                      case ($b>= 5180):
                                      $c= 'high';
                                      break;
                                      case ($b>= 4770):
                                      $c= 'medium';
                                      break;
                                      case ($b>= 4360):
                                      $c= 'low';
                                      break;
                                      case ($b< 4360):
                                      $c= 'very low';
                                      break;
                                      default:
                                      $c= 'Error';
                                  }
                              }
                      logic_setOutput($id,11,$l[]=$c);
                      if (isset($module['rf_status'])) {logic_setOutput($id,12,$l[]=$module['rf_status']);}
                      logic_setOutput($id,20,join("|",$l));

              }
              }

          catch(Netatmo\Exceptions\NAClientException $ex)
                             {
                                      LB_LBSID_Debug($id, "Fehler beim Ermitteln der Werte beim Wind Sensor (NAModule2): " . $ex->getMessage() . "\n",3, $user_log_level, FALSE);
                              }



          try
                 {    

              if (  isset( $module['type'] ) && $module['type'] == 'NAModule3' ) {
                  $m=array();
                  $m=array('Regensensor');
                      if (isset($module['module_name'])) {logic_setOutput($id,14,$m[]=$module['module_name']);}

                      if (isset($module['dashboard_data']['Rain'])) {logic_setOutput($id,15,$m[]=$module['dashboard_data']['Rain']);}

                      if (isset($module['dashboard_data']['sum_rain_24'])) {logic_setOutput($id,16,$m[]=$module['dashboard_data']['sum_rain_24']);}

                      if (isset($module['dashboard_data']["sum_rain_1"])) {logic_setOutput($id,17,$m[]=$module['dashboard_data']["sum_rain_1"]);}

                              if (isset($module['battery_vp'])){

                                  $b=$module['battery_vp'];    
                                  switch ($b)
                                  {
                                      case ($b >= 5500):
                                      $c= 'full';
                                      break;
                                      case ($b>= 5000):
                                      $c= 'high';
                                      break;
                                      case ($b>= 4500):
                                      $c= 'medium';
                                      break;
                                      case ($b>= 4000):
                                      $c= 'low';
                                      break;
                                      case ($b< 4000):
                                      $c= 'very low';
                                      break;
                                      default:
                                      $c= 'Error';
                                  }
                              }
                      logic_setOutput($id,18,$m[]=$c);
                      if (isset($module['rf_status'])) {logic_setOutput($id,19,$m[]=$module['rf_status']);}
                      logic_setOutput($id,21,join("|",$m));


                  }
              }
              catch(Netatmo\Exceptions\NAClientException $ex)
                              {
                                          LB_LBSID_Debug($id, "Fehler beim Ermitteln der Werte beim Regen Sensor (NAModule3): " . $ex->getMessage() . "\n",3, $user_log_level, FALSE);
                              }
          }
          }
              usleep(1000000*359);
          }


          sql_disconnect();

          function LB_LBSID_Finish($id) {
              setlocale(LC_TIME, "de_DE");
              logic_setOutput($id,22,strftime("%A. %X %Z - %d. %B %Y. - "));
              logic_setVar($id,1,0);
              LB_LBSID_Debug($id, "Netatmo Module Wind/Regen EXEC -> wurde beendet \n",6, $user_log_level, FALSE);
              sql_disconnect();
              exit();
          }

          ?>
          ###[/EXEC]###

          Kommentar


            #80
            und das Zusatz Modul :
            PHP-Code:
            ###[DEF]###
            [name        =Netatmo Basis Indoor Zustatzmodul (v1.3)    ]

            [e#1 TRIGGER            = Starten #init=1]
            [e#2 IMPORTANT        = CLIENT_ID ]
            [e#3 IMPORTANT        = CLIENT_SECRET ]
            [e#4 IMPORTANT        = USERNAME ]
            [e#5 IMPORTANT        = PASSWORD ]
            [e#6                = StationName ]
            [e#7 IMPORTANT        = Modulname #init=Badezimmer]
            [e#8                = LogLevel  #init=0]


            [a#1        =Name Modul    ]
            [a#2        =Temperature    ]
            [a#3        =min temp    ]
            [a#4        =min time    ]
            [a#5        =max temp    ]
            [a#6        =max time    ]
            [a#7        =temp trend    ]
            [a#8        =Humidity    ]
            [a#9        =CO2    ]
            [a#10        =Battery    ]
            [a#11        =WiFi    ]
            [a#12        =ID    ]
            [a#13        =Typ    ]
            [a#14        =Firmware    ]
            [a#15        =Join    ]
            [a#16        =Debug    ]

            [v#1        = 0    ]


            [v#100    = 1.3 ]
            [v#101    = 19000299 ]
            [v#102    = Netatmo Basis Indoor Zusatzmodul ]
            [v#103    = 0 ]

            ###[/DEF]###


            ###[HELP]###
            <h2>NETATMO Basis Indoor Zusatzmodul</h2>

            ++++++++++++++++++++++++++++++++++++++++++++++
            ++    !!!!ACHTUNG!!! Ab Version 1.5 neue Classen und Pfade.     ++
            ++++++++++++++++++++++++++++++++++++++++++++++

            Diese Dateien mussen im Ordner /usr/local/edomi/main/include/php liegen.
            -> Ordner /Netatmo-API-PHP/...


            <h2>Ein- und Ausgänge</h2>
            <h3>Eingäne</h3>
            Der NETATMO Baustein wird automatisch gestartet, sobald EDOMI gestartet wird (E1 hat den Initialwert 1).
            E1: Signal 1 = Startet Baustein (Dämon)
            E2: CLIENT ID
            E3: CLIENT SECRET
            E4: Username
            E5: Passwort
            E6: Station Name (wenn nur eine Station im Netatmo Account dann leer lassen)
            E7: Modulname
            E8: LogLevel

            <h3>Ausgänge</h3>            
            A1: Name Modul
            A2: Temperatur
            A3: min Temperatur
            A4: min Temperarur Uhrzeit
            A5: max Temperatur
            A6: max Temperarur Uhrzeit
            A7: Temperatur trend (stable / up / down)
            A8: Humidity
            A9: CO2
            A10: Battery (full, high, medium, low, very low)
            A11: WiFi
            A12: Geräte-ID
            A13: Geräte-Typ
            A14: Firmware
            A15: Join (Listenausgabe von A1 - A14 durch | getrennt. KO EIngabe im Visuelement durch {split(0)}, {split(1)} usw..) A1 = {split(1)}    
            A16: Debug Ausgang

            V1: Dämon


            <h3>Changelog:</h3>
            ==========
            v1.1: Initial version
            v1.2: A12 als Join/Liste eingefügt.
            v1.3: Erweiterung um A6 Modulname. Ausgänge A9,A12,A13,A14 eingefügt (Danke an Klaus Muckelmann)


            ###[/HELP]###


            ###[LBS]###
            <?
            function LB_LBSID($id) {
                if ($E=logic_getInputs($id)) {

                    if ($E[1]['value']!=0 && $E[1]['refresh']==1) {

                        if (logic_getVar($id,1)==0) {    
                            logic_setVar($id,1,1);
                            logic_callExec(LBSID,$id);
                        }

                    }

                }
            }
            ?>
            ###[/LBS]###


            ###[EXEC]###
            <?
            require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php");
            require_once (dirname(__FILE__).'/../../../../main/include/php/Netatmo-API-PHP/src/Netatmo/autoload.php');

            set_time_limit(0);
            sql_connect();




            function LB_LBSID_Debug($id,$message,$LBS_loglevel,$USER_loglevel, $exit = FALSE) {
                setlocale(LC_TIME, "de_DE");
                $E=logic_getInputs($id);
                $version = logic_getVar($id,100);
                $logName = logic_getVar($id,102);
                $a = array("LOG_EMERG","LOG_ALERT","LOG_CRIT","LOG_ERR","LOG_WARNING","LOG_NOTICE","LOG_INFO","LOG_DEBUG");
                $LBS_loglevel<=$USER_loglevel && writeToCustomLog("LBSLBSID" . " - \t[$logName]",$LBS_loglevel,"(ID$id) - " . " " .$a[$LBS_loglevel].": ".$message."\t[v$version]");
                if($LBS_loglevel<=6){
                logic_setOutput($id,12,strftime("%A. %X %Z - %d. %B %Y. - ").$message);   
                }
                if($exit) {
                    writeToCustomLog("LBSLBSID" . " - \t[$logName]",$LBS_loglevel,"(ID$id) ".$a[$LBS_loglevel].": LBS wird beendet."."\t[v$version]");
                    LB_LBSID_Finish($id);
                }
            }







            if ($E=logic_getInputs($id)) {

                    $user_log_level = $E[8]['value'];



            $client_id = $E[2]['value'];
            $client_secret = $E[3]['value'];
            $test_username = $E[4]['value'];
            $test_password = $E[5]['value'];
            $station_name = $E[6]['value'];
            $device_id = $E[7]['value'];

            LB_LBSID_Debug($id, "Netatmo Basis Indoor/Outdoor EXEC -> gestartet \n",6, $user_log_level, FALSE);
            }

            if (empty($client_id))    {
                    LB_LBSID_Debug($id, "Fehler beim Initialisieren - keine Client ID an E[2] vorhanden. \n",3, $user_log_level, TRUE);
                }
            if (empty($client_secret))    {
                LB_LBSID_Debug($id, "Fehler beim Initialisieren - kein Client Secret an E[3] vorhanden. \n",3, $user_log_level, TRUE);
                }
            if (empty($test_username))    {
                LB_LBSID_Debug($id, "Fehler beim Initialisieren - kein Username an E[4] vorhanden. \n",3, $user_log_level, TRUE);
                }
            if (empty($test_password))    {
                LB_LBSID_Debug($id, "Fehler beim Initialisieren - kein Passwort an E[5] vorhanden. \n",3, $user_log_level, TRUE);
                }    

            while(getSysInfo(1)>=1) {

            $scope = Netatmo\Common\NAScopes::SCOPE_READ_STATION;
            $config = array("client_id" => $client_id,
                            "client_secret" => $client_secret,
                            "username" => $test_username,
                            "password" => $test_password);

            $client = new Netatmo\Clients\NAWSApiClient($config);


                try
                {
                        $tokens = $client->getAccessToken();
                }
                catch(Netatmo\Exceptions\NAClientException $ex)
                {
                    LB_LBSID_Debug($id, "Fehler beim Aufrufen des Tokens: " .$ex->getMessage()."\n",3, $user_log_level, FALSE);
                }


                try {

                    $data = $client->getData(NULL, TRUE);
                }
                catch(Netatmo\Exceptions\NAClientException $ex) {
                    LB_LBSID_Debug($id, "Fehler beim holen der Daten: ". $ex->getMessage()."\n",3, $user_log_level, FALSE);      
                }    

                foreach($data['devices'] as $device)
            {    
                if (  isset( $device['type'] ) && $device['type'] == 'NAMain' && isset( $device['station_name'] ) && ($device['station_name'] == $station_name || $station_name=='') )
                foreach($device['modules'] as $module){

                    try
                   {

                    if (  isset( $module['type'] ) && $module['type'] == 'NAModule4' && $module['module_name'] == $device_id ) {
                        $l=array($id);
                        if (isset($module['module_name']))     {logic_setOutput($id,1,$l[]=$module['module_name']);}    
                        if (isset($module['dashboard_data']["Temperature"]))     {logic_setOutput($id,2,$l[]=$module['dashboard_data']["Temperature"]);}    
                        if (isset($module['dashboard_data']["min_temp"]))     {logic_setOutput($id,3,$l[]=$module['dashboard_data']["min_temp"]);}    
                        if (isset($module['dashboard_data']['date_max_temp']))     {
                            $date_min_out = $module['dashboard_data']['date_min_temp'];
                            $date_min_out =  date('H:i', $date_min_out);
                            logic_setOutput($id,4,$l[]=$date_min_out);
                        }
                        if (isset($module['dashboard_data']["max_temp"]))     {logic_setOutput($id,5,$l[]=$module['dashboard_data']["max_temp"]);}    
                        if (isset($module['dashboard_data']['date_max_temp']))     {
                            $date_max_out = $module['dashboard_data']['date_max_temp'];
                            $date_max_out =  date('H:i', $date_max_out);
                            logic_setOutput($id,6,$l[]=$date_max_out);
                        }
                        if (isset($module['dashboard_data']["temp_trend"]))     {logic_setOutput($id,7,$l[]=$module['dashboard_data']["temp_trend"]);}    
                        if (isset($module['dashboard_data']["Humidity"]))     {logic_setOutput($id,8,$l[]=$module['dashboard_data']["Humidity"]);}
                        if (isset($module['dashboard_data']["CO2"]))     {logic_setOutput($id,9,$l[]=$module['dashboard_data']["CO2"]);}

                                if (isset($module['battery_vp'])){
                                    $b=$module['battery_vp'];    
                                    switch ($b)
                                    {
                                        case ($b >= 5500):
                                        $c= 'full';
                                        break;
                                        case ($b>= 5000):
                                        $c= 'high';
                                        break;
                                        case ($b>= 4500):
                                        $c= 'medium';
                                        break;
                                        case ($b>= 4000):
                                        $c= 'low';
                                        break;
                                        case ($b< 4000):
                                        $c= 'very low';
                                        break;
                                        default:
                                        $c= 'Error';
                                    }
                                }
                        logic_setOutput($id,10,$l[]=$c);
                        if (isset($module['rf_status']))      {logic_setOutput($id,11,$l[]=$module['rf_status']);}
                        if (isset($module['_id']))      {logic_setOutput($id,12,$l[]=$module['_id']);}
                        if (isset($module['type']))      {logic_setOutput($id,13,$l[]=$module['type']);}
                        if (isset($module['firmware']))      {logic_setOutput($id,14,$l[]=$module['firmware']);}
                        logic_setOutput($id,15,join("|",$l));
                        }
                        }
                        catch(Netatmo\Exceptions\NAClientException $ex)
                               {
                                LB_LBSID_Debug($id, "Fehler beim holen der Daten: ". $ex->getMessage()."\n",3, $user_log_level, FALSE);
                                }

                }

            }

                usleep(1000000*300);
            }


            sql_disconnect();

            function LB_LBSID_Finish($id) {
                setlocale(LC_TIME, "de_DE");
                logic_setOutput($id,12,strftime("%A. %X %Z - %d. %B %Y. Baustein wurde beendet"));
                LB_LBSID_Debug($id, "Netatmo Module Wind/Regen EXEC -> wurde beendet \n",6, $user_log_level, FALSE);
                logic_setVar($id,1,0);
                sql_disconnect();
                exit();
            }
            ?>
            ###[/EXEC]###

            Kommentar


              #81
              Hallo Dominik,
              vielen DANK dafür!! Klappt alles sehr gut!!!!

              Gruß Marcus

              Kommentar


                #82
                Hallo,
                würde gerne den Netatmo LBS 19000291 verwenden um meinen Regensonsor auszulesen. Kann ich den LBS alleine verwenden oder muss der Basis LBS 19000290 auch in Edomi importiert werden?

                Im Moment habe ich nur den 19000291 importiert und bekomme beim Projekt aktivieren immer folgenden Eintrag im Edomi Fehler Log:
                Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19000291.php | Fehlercode: 8 | Zeile: 310 | Undefined variable: user_log_level

                Es scheint wohl an der function LB_19000291_Finish($id) { ... } zu liegen. Wenn ich dort die Zeile
                PHP-Code:
                LB_LBSID_Debug($id"Netatmo Module Wind/Regen EXEC -> wurde beendet \n",6$user_log_levelFALSE); 
                in
                PHP-Code:
                LB_LBSID_Debug($id"Netatmo Module Wind/Regen EXEC -> wurde beendet \n",60FALSE); 
                ändere kommt der Fehler nicht mehr.

                Kommentar


                  #83
                  Ich kann nur vermuten, dass du in Edomi am LBS-Eingang (für den Loglevel) nichts eingeben hast ...
                  Danke und LG, Dariusz
                  GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                  Kommentar


                    #84
                    Unter CentOS7 und Edomi 2 treten immer mal wieder folgende Fehler auf, hat hierzu jemand eine Lösung....

                    Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19000500.php | Fehlercode: 8 | Zeile: 110 | Undefined index: body ERROR
                    Datei: /usr/local/edomi/www/data/liveproject/lbs/EXE19000500.php | Fehlercode: 2 | Zeile: 110 | Invalid argument supplied for foreach()

                    Kommentar


                      #85
                      Hmm.... EXE19000500 die Nummer von den Netatmo LBS ist aber eine ganz andere ?

                      schau doch mal in die Datei und poste hier die Zeilen rund um Zeile 110

                      VG
                      Dominik

                      Kommentar


                        #86
                        Bei mir hat der LBS die Nummer ...963
                        Danke und LG, Dariusz
                        GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                        Kommentar


                          #87
                          19000500 ist der LBS für den Netatmo Coach...


                          Code:
                              $token=$params['access_token'];
                              $url="https://api.netatmo.com/api/gethomecoachsdata?access_token=$token&device_id=$deviceID";
                              
                              
                              $ch = curl_init();
                              curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
                              curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                              curl_setopt($ch, CURLOPT_URL, $url);
                              $result = curl_exec($ch);
                              curl_close($ch);
                          
                              $data = json_decode($result);
                              
                              
                              $new_array = objectToArray($data);
                              
                              foreach($new_array['body']['devices'] as $device)

                          Kommentar


                            #88
                            Da müßte man mit einen if isset($new_array ..... ) den Fehler abfangen .

                            Vermutlich stimmt etwas mit der Rückmeldung nicht .
                            Das muss aber alles nicht mit den neuen Versionen zusammenhängen.
                            Man könnte die Rückmeldung ggf. mal loggen.

                            Kommentar


                              #89
                              also mit isset prüfen ob $new_array befüllt ist und den folgenden foreach block dann in den if mitaufnehmen oder?

                              VG

                              Kommentar


                                #90
                                Genau so - prüfen mit isset ob der Eintrag body devices im new-array existiert .

                                vg

                                Kommentar

                                Lädt...
                                X