LoxBerry XL - EXtended Logic

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Christian Fenzl
    Lebende Foren Legende
    • 31.08.2015
    • 11237

    #31
    Das hat überhaupt nichts mit den locales zu tun, und wenn du das änderst, geht wahrscheinlich LoxBerry nicht mehr.

    Du musst zb mit curl deine Sprache im Header mitgeben (das macht der Browser automatisch). Schau dir mit F12 im Browser den Request an, irgendwo steht deine Sprache. Diesen Header musst du zb mit curl mitgeben.
    Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

    Kommentar

    • Christian Fenzl
      Lebende Foren Legende
      • 31.08.2015
      • 11237

      #32
      I need to perform a get request and send headers along with it. What can I use to do this? The main header I need to set is the browser one. Is there an easy way to do this?
      Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

      Kommentar

      • EdiB
        Extension Master
        • 30.12.2015
        • 135

        #33
        Super, Danke! hab es grad irgendwie hinbekommen:-)

        PHP-Code:
        //set URL
        $url = "<APIurl>";
        
        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        $headers = array(
        "Accept-Language: de",
        );
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
        
        $resp = curl_exec($curl);
        curl_close($curl);
        
        // JSON auslesen
        $json_decoded = json_decode($resp); 
        

        Kommentar

        • Witte
          Extension Master
          • 30.12.2019
          • 146

          #34
          Danke EdiB für die Inspiration.
          Wer here verwenden will statt google, hier das Script, abgewandelt auf die REST API von here (kostenlos anmelden: https://developer.here.com/ - Bestätigungsmail anklicken, sonst sind die API Keys nur 60 Minuten gültig)
          PHP-Code:
          <?php
          require_once ("loxberry_XL.php");
          
          // APIKey und Start/End Koordinaten für erste Route festlegen
          $APIKey = "XHuFrumm-32t4784rhweflsdfguea554a868A";
          $From = "49.18375,7.16422"; // Home (Latitude,Longitude)
          $To= "49.33329,7.10057"; // Office (Latitude,Longitude)
          $maxTravelLength = 50 * 1000; //50 km
          
          $requestInfo = array(
          'http' => // The wrapper to be used
          array(
          'method' => 'GET' // Request Method
          )
          );
          $context = stream_context_create($requestInfo);
          
          //set direction api url (Home > Office)
          $url = "https://router.hereapi.com/v8/routes?transportMode=car&origin=$From&destination= $To&routingMode=fast&lang=de-DE&return=polyline,mlDuration,travelSummary,summary,incidents&alternatives=3&apiKey=$APIKey";
          
          
          // JSON auslesen
          $json = file_get_contents($url, false, $context);
          if ($json == false)
          {
          print("Bad content: " . $json);
          }
          else
          {
          $json_decoded = json_decode($json);
          list($route, $re_route_detected) = get_desired_route($json_decoded, $maxTravelLength);
          if (!empty($route))
          {
          $durationMinutes = round($route->sections[0]->travelSummary->baseDuration / 60);
          $durationRealtimeMinutes = round($route->sections[0]->travelSummary->duration / 60);
          $durationDifferenceMinutes = $durationRealtimeMinutes - $durationMinutes;
          print_r("Duration=".$durationMinutes ." Min\nRealTimeDuration=".$durationRealtimeMinutes." Min\nDelay=".$durationDifferenceMinutes." Min");
          
          // Publish to local MQTT broker
          $mqtt->publish("LoxBerryXL/FahrRouten/Home-Office/durationRealtimeMinutes", $durationRealtimeMinutes);
          $mqtt->publish("LoxBerryXL/FahrRouten/Home-Office/durationDifferenceMinutes", $durationDifferenceMinutes);
          $mqtt->publish("LoxBerryXL/FahrRouten/Home-Office/reRoutingDetected", $re_route_detected);
          }
          
          }
          
          /**
          * @param $json_decoded contains the routes
          * @param $maxTravelLength it's the shortest route i usually drive so i know the distance to travel. If it exceeds, the preferred route is not available
          * @return array|null desired route and true if it is a fallback route which exceeds normal length limit due to obstacles and alternative routing
          */
          function get_desired_route($json_decoded, $maxTravelLength): ?array
          {
          $count = 0;
          $fallback_route = null;
          $fallback_section_length = null;
          foreach ($json_decoded->routes as $route)
          {
          //print_r($route);
          $section_length = $route->sections[0]->travelSummary->length;
          if ($section_length <= $maxTravelLength)
          {
          return array($route, 0);
          }
          else
          {
          print_r("Section length on route #".$count." too long. length=".$section_length."\n");
          //maybe the desired route has obstacles
          if($section_length < $fallback_section_length || $fallback_section_length == null )
          {
          $fallback_section_length = $section_length;
          $fallback_route = $route;
          print_r("Current fallback route length=".$section_length."\n");
          }
          }
          $count++;
          }
          return array($fallback_route, 1);
          }
          Zuletzt geändert von Witte; 26.05.2021, 12:26.

          Kommentar

          • EdiB
            Extension Master
            • 30.12.2015
            • 135

            #35
            Witte Müsste ich ja direkt auch noch implementieren um es zu vergleichen
            Mein Inspirator war Christian Fenzl mit Waze Routing!


            Wenn ich es richtig interpretiere fragst du für $durationMinutes und $durationRealtimeMinutes zweimal den selben Wert ab!?

            $durationMinutes = round($route->sections[0]->travelSummary->baseDuration / 60);
            $durationRealtimeMinutes = round($route->sections[0]->travelSummary->baseDuration / 60);
            Zuletzt geändert von EdiB; 26.05.2021, 08:55.

            Kommentar


            • Witte
              Witte kommentierte
              Kommentar bearbeiten
              Du hast Recht, danke für den Hinweis!
              Muss natürlich
              $durationRealtimeMinutes = round($route->sections[0]->travelSummary->duration / 60);
              heißen
          • Sunny
            Smart Home'r
            • 02.12.2015
            • 33

            #36
            Hi @all, ich bin schon ziemlich lange hier dabei und bisher haben sich alle Fragen irgendwie durch das Forum von alleine geklärt. Jetzt habe ich habe ein Problem, wo ich nicht weiter komm.

            Als Beispiel hab ich mal angelegt:

            PHP-Code:
            <?PHP
            require_once "loxberry_XL.php";
            
            $mqtt->set( "judo/test", 123 );
            echo ("mqtt: ".$mqtt->get("judo/test")."\n");
            echo ("keepaliveepoch: ".$mqtt->get( "loxberry/mqttgateway/keepaliveepoch")."\n");
            
            ?>;
            Der Output ist dann leider nur so:

            Code:
            loxberry@loxberry:~/webfrontend/html/XL/user $ /usr/bin/php test.php LoxBerry XL Version 2.2.0.2
            Miniserver 1 (xxxxxxxxxxxxxxxxxxxxxxxx) accessible by $ms1
            MQTT (localhost) accessible by $mqtt
            mqtt:
            keepaliveepoch: 1626270956
            loxberry@loxberry:~/webfrontend/html/XL/user $
            Es fehlt dann der mqtt Wert, den ich rein geschrieben habe. Er ist natürlich im mqtt broker vorhanden.

            Klicke auf die Grafik für eine vergrößerte Ansicht  Name: Screenshot 2021-07-14 160319.png Ansichten: 0 Größe: 9,9 KB ID: 311830

            Ich bin nun nicht der Programmierprofi, aber ich sehe erstmal keinen Fehler. Bitte helft mir mal auf die Sprünge, wo ich den Bock drin habe.

            Gruss Dirk
            Zuletzt geändert von Sunny; 14.07.2021, 16:55.

            Kommentar

            • Christian Fenzl
              Lebende Foren Legende
              • 31.08.2015
              • 11237

              #37
              Servus Dirk!

              Das liegt am Design von MQTT: Ein Publish ist flüchtig - wenn du den Wert danach abfragst, ist er schon wieder weg.
              Verwende bei set das retain-Flag. Der Wert ist dann nicht flüchtig, sondern wird am Broker gespeichert. Dann bekommst du den Wert auch wieder zurück.

              lg, Christian
              Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

              Kommentar

              • Sunny
                Smart Home'r
                • 02.12.2015
                • 33

                #38
                Hallo Christian,

                danke für deine Rückmeldung, aber irgendwie will es auch so nicht:

                PHP-Code:
                $mqtt->retain( "judo/test", 123.456 );
                echo ("mqtt: ".$mqtt->get("judo/test")."\n"); 
                
                PHP-Code:
                $mqtt->set( "judo/test", 123.456, true); 
                
                Ergebnis ist das gleiche wie oben. Hatte ich auch schon vorher so getestet, da aber die Ergebnisse immer die gleichen waren, denke/dachte ich an einen anderen Fehler von mir.

                Die Zeilen sind ja auch nur der Test, eigentlich wollte ich was aus dem Miniserver über MQTT weiterreichen. Im Broker ist es auch da. Aber eben dann nicht im PHP.
                Loxberry und das MQTT-Plugin sind auf dem neuesten Stand.

                Gruß Dirk

                Kommentar

                • Christian Fenzl
                  Lebende Foren Legende
                  • 31.08.2015
                  • 11237

                  #39
                  Achja, ich Depp 😅
                  Update bitte auf LoxBerry 2.2.1 Pre-Release, das Retain-Flag hat nicht funktioniert!

                  Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

                  Kommentar

                  • Sunny
                    Smart Home'r
                    • 02.12.2015
                    • 33

                    #40
                    Hi Christian,

                    super, jetzt klappt es auch so wie gedacht.... Danke!

                    Beste Grüße
                    Dirk

                    Kommentar

                    • orli
                      Lox Guru
                      • 13.11.2016
                      • 2554

                      #41
                      Ich hab seit einigen Monaten über den XL die Corona Zahlen unseres sowie des Nachbarkreises eingebunden.
                      Das ganze sieht so aus:

                      Code:
                      #!/usr/bin/env php
                      <?php
                      require_once "loxberry_XL.php";
                      $mqtt->publish( "Corona-WW", file_get_contents( "https://api.corona-zahlen.org/districts/07143" ) );
                      $mqtt->publish( "Corona-LM", file_get_contents( "https://api.corona-zahlen.org/districts/06533" ) );
                      Nach ein paar Tagen steigt aber die Last meines Loxberrys auf > 20, weil die PHP Prozesse nicht korrekt beendet werden, so zumindest siehts für mich aus:

                      Klicke auf die Grafik für eine vergrößerte Ansicht

Name: 2021-10-14_13-20-23.png
Ansichten: 530
Größe: 371,1 KB
ID: 320979

                      Hat jemand einen Tipp woran das liegen kann?

                      Grüße!

                      Kommentar

                      • Christian Fenzl
                        Lebende Foren Legende
                        • 31.08.2015
                        • 11237

                        #42
                        Wenn du das Script so ausführst wie im Srcreenshot (php /opt/..... ), bleibt es dann evt. am Schluss stehen ohne Prompt-Rückgabe?
                        Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

                        Kommentar

                        • orli
                          Lox Guru
                          • 13.11.2016
                          • 2554

                          #43
                          Hm, sieht soweit gut aus würde ich sagen, sowohl als root wie auch als loxberry:

                          Code:
                          loxberry@loxberry:/root $ php /opt/loxberry/system/cron/cron.10min/corona cron=10min
                          LoxBerry XL Version 2.2.1.2
                          Miniserver 1 (Smarthome-1) accessible by $ms1
                          Miniserver 2 (Smarthome-2) accessible by $ms2
                          Miniserver 3 (Smarthome-3) accessible by $ms3
                          MQTT (localhost) accessible by $mqtt
                          loxberry@loxberry:/root $

                          Kommentar

                          • Christian Fenzl
                            Lebende Foren Legende
                            • 31.08.2015
                            • 11237

                            #44
                            Kannst du mal das hier als loxberry mehrfach ausführen:

                            Code:
                            cd / && for f in /opt/loxberry/system/cron/cron.10min/*; do ($f cron=10min > /dev/null 2>&1 &); done
                            Ich hoff, das lässt sich auch so ausführen.
                            Das ist, was wir alle 10 Minuten von Cron ausführen lassen.

                            https://github.com/mschlenstedt/Loxb...lbdefaults#L10
                            Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

                            Kommentar

                            • orli
                              Lox Guru
                              • 13.11.2016
                              • 2554

                              #45
                              sieht soweit auch gut aus, würde ich sagen:

                              Code:
                              loxberry@loxberry:/ $ cd / && for f in /opt/loxberry/system/cron/cron.10min/*; do ($f cron=10min > /dev/null 2>&1 &); done
                              loxberry@loxberry:/ $ cd / && for f in /opt/loxberry/system/cron/cron.10min/*; do ($f cron=10min > /dev/null 2>&1 &); done
                              loxberry@loxberry:/ $ cd / && for f in /opt/loxberry/system/cron/cron.10min/*; do ($f cron=10min > /dev/null 2>&1 &); done
                              loxberry@loxberry:/ $ cd / && for f in /opt/loxberry/system/cron/cron.10min/*; do ($f cron=10min > /dev/null 2>&1 &); done
                              loxberry@loxberry:/ $ cd / && for f in /opt/loxberry/system/cron/cron.10min/*; do ($f cron=10min > /dev/null 2>&1 &); done
                              loxberry@loxberry:/ $ cd / && for f in /opt/loxberry/system/cron/cron.10min/*; do ($f cron=10min > /dev/null 2>&1 &); done
                              loxberry@loxberry:/ $ cd / && for f in /opt/loxberry/system/cron/cron.10min/*; do ($f cron=10min > /dev/null 2>&1 &); done
                              loxberry@loxberry:/ $ cd / && for f in /opt/loxberry/system/cron/cron.10min/*; do ($f cron=10min > /dev/null 2>&1 &); done
                              loxberry@loxberry:/ $ cd / && for f in /opt/loxberry/system/cron/cron.10min/*; do ($f cron=10min > /dev/null 2>&1 &); done
                              loxberry@loxberry:/ $ cd / && for f in /opt/loxberry/system/cron/cron.10min/*; do ($f cron=10min > /dev/null 2>&1 &); done
                              Wenn ich die Anfragen per Shell mit Ausgabe eingebe, kommen aber Fehler, vermutlich ein Rate Limit des Servers.

                              Code:
                              oxberry@loxberry:/ $ cd / && for f in /opt/loxberry/system/cron/cron.10min/*; do ($f cron=10min &); done
                              loxberry@loxberry:/ $ LoxBerry XL Version 2.2.1.2
                              Miniserver 1 ( accessible by $ms1
                              Miniserver 2 () accessible by $ms2
                              Miniserver 3 () accessible by $ms3
                              MQTT (localhost) accessible by $mqtt
                              
                              loxberry@loxberry:/ $ cd / && for f in /opt/loxberry/system/cron/cron.10min/*; do ($f cron=10min); done
                              LoxBerry XL Version 2.2.1.2
                              Miniserver 1 () accessible by $ms1
                              Miniserver 2 () accessible by $ms2
                              Miniserver 3 () accessible by $ms3
                              MQTT (localhost) accessible by $mqtt
                              PHP Warning: file_get_contents(https://api.corona-zahlen.org/districts/07143): failed to open stream: HTTP request failed! HTTP/1.1 502 Bad Gateway
                              in /opt/loxberry/webfrontend/html/XL/user/corona.php on line 4
                              Warning: file_get_contents(https://api.corona-zahlen.org/districts/07143): failed to open stream: HTTP request failed! HTTP/1.1 502 Bad Gateway
                              in /opt/loxberry/webfrontend/html/XL/user/corona.php on line 4
                              PHP Warning: file_get_contents(https://api.corona-zahlen.org/districts/06533): failed to open stream: HTTP request failed! HTTP/1.1 502 Bad Gateway
                              in /opt/loxberry/webfrontend/html/XL/user/corona.php on line 5
                              Warning: file_get_contents(https://api.corona-zahlen.org/districts/06533): failed to open stream: HTTP request failed! HTTP/1.1 502 Bad Gateway
                              in /opt/loxberry/webfrontend/html/XL/user/corona.php on line 5
                              loxberry@loxberry:/ $ cd / && for f in /opt/loxberry/system/cron/cron.10min/*; do ($f cron=10min); done
                              LoxBerry XL Version 2.2.1.2
                              Miniserver 1 () accessible by $ms1
                              Miniserver 2 () accessible by $ms2
                              Miniserver 3 ( accessible by $ms3
                              MQTT (localhost) accessible by $mqtt
                              /1.1 502 Bad Gateway
                              in /opt/loxberry/webfrontend/html/XL/user/corona.php on line 4
                              Würde ja sagen das könnte der Grund sein, aber der Cron läuft im Normalfall ja nur einmal alle 10 Minuten.
                              Hab das ganze jetzt mal auf stündlich gestellt, vielleicht bringt das ja schon was.

                              Kommentar


                              • Christian Fenzl
                                Christian Fenzl kommentierte
                                Kommentar bearbeiten
                                Das Komische ist, dass der Prozess da bleibt. Wenn ein Fehler kommt, sollte der Prozess sterben und weg sein.
                            Lädt...