Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Perl - If Statement String Vergleich

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [wiregate] - √ - Perl - If Statement String Vergleich

    Hallo,

    kann mir bitte mal kurz jemand die Augen öffnen? Warum springt Perl niemals beim IF in die erste Klammer. Auch nicht wenn $online wirklich 'true' ist. Jedenfalls sagt das ein print $online.

    Ich hoffe die Antwort ist so einfach, dass ich mich gleich schämen muss...

    Code:
    my $online;
    $online = `curl http://solarlog/base_vars.js?nocache -s --connect-timeout 1 | grep isOnline | sed -e "s/var isOnline=//g"`;
    
    if ($online eq 'true') {
        print "is online: $online";
    }
    else {
        print "is not online: $online";
    }
    Danke Moritz

    #2
    Hoi

    Ist true und false nicht 0 und 1 im Sinne von Binär?
    Grüsse Bodo
    Fragen gehören ins Forum, und nicht in mein Postfach;
    EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

    Kommentar


      #3
      Hi Bodo,

      ich glaubte sowas verstanden zu haben, dass es in Perl kein True und False wie in anderen Sprachen gibt. Alles was nicht undef oder so ist, ist true...

      Das grep, sed Gewurschtel gibt mir den string "true" oder "false" wieder. Der muss doch weiterverarbeitet werden können...?

      Gruß Moritz

      Kommentar


        #4
        Ich würde spontan $online eq "true" probieren.
        Aber ganz klar war mir eq Vs. == und ' Vs. " in perl auch noch nie.

        Lg Robert

        Kommentar


          #5
          das ändert leider nichts.

          Ich dachte bei " werden auch Variablen innerhalb des Strings interpretiert. Bei ' nicht.

          Kommentar


            #6
            Deine Anführungsstriche rund um curl... sehen komisch aus.
            Das hattest Du doch schon beim Nachdimmen Plugin

            Ich glaube das ist es, mach doch mal in der zweiten Zeile ein print oder plugin_log, und check mal was bei $online wirklich raus kommt.

            Gruß
            Umgezogen? Ja! ... Fertig? Nein!
            Baustelle 2.0 !

            Kommentar


              #7
              Hi,

              mein solarlog sagt bei der Abfrage immer false. (auch im Terminal).
              Da sich der Wert in der base_vars.js nicht ändert.
              Da steht immer var isOnline=false.

              Was genau möchtest du vom Solarlog wissen? Vermute ob die WR online sind? Oder nur ob der SL online ist?

              Wenn die Module, wäre es leichter den Wert aus der min_days mit 0 zu vergleichen... (und nebenbei ein rrd zu füllen)

              Gruß

              Edit:
              nebenbei sind die Abfragezeiten sehr lang ( >1,2 sek bei mir??) warum holst du die Daten nicht per cron ins tmp Verzeichniss, und diese dann im Plugin zerlegen. So mache ich das. Laufzeit des Plugins ca 0,1sek.

              Kommentar


                #8
                Zitat von JuMi2006 Beitrag anzeigen
                Deine Anführungsstriche rund um curl... sehen komisch aus.
                Hm, naja - das sind so Anführungsstriche, die in Perl einen Systemaufruf ausführen. Also eine Abkürzung für system(). Von daher sind die schon ok.

                Beim nachdimmen plugin war das halt date aus der Shell. Da das nachher aber durch localtime() in Perl ersetzt wurde, war das dann ja hinfällig.

                Oder verstehe ich Dich falsch?

                Gruß Moritz

                Kommentar


                  #9
                  Schon richtig verstanden und ich hab wieder was über Perl gelernt ... aber was gibt denn $online nun aus ?

                  Gruß Mirko
                  Umgezogen? Ja! ... Fertig? Nein!
                  Baustelle 2.0 !

                  Kommentar


                    #10
                    Zitat von vlamers Beitrag anzeigen
                    mein solarlog sagt bei der Abfrage immer false. (auch im Terminal).
                    Da sich der Wert in der base_vars.js nicht ändert.
                    Da steht immer var isOnline=false.
                    Bei mir kommt da verlässlich true oder bei Dunkelheit false

                    Zitat von vlamers Beitrag anzeigen
                    Was genau möchtest du vom Solarlog wissen? Vermute ob die WR online sind? Oder nur ob der SL online ist?
                    Wenn die Module, wäre es leichter den Wert aus der min_days mit 0 zu vergleichen... (und nebenbei ein rrd zu füllen)
                    An sich will ich wissen ob die Wechselrichter online sind, ja. min_days.js gibt es bei nicht. Du meinst min_days.js, oder? Ok, da könnte ich in der ersten Zeile nach der 0 schauen.

                    Zitat von vlamers Beitrag anzeigen
                    nebenbei sind die Abfragezeiten sehr lang ( >1,2 sek bei mir??) warum holst du die Daten nicht per cron ins tmp Verzeichniss, und diese dann im Plugin zerlegen. So mache ich das. Laufzeit des Plugins ca 0,1sek.
                    Ich hatte gehofft, dass es ganz simpel geht. Ich werde wohl doch auf ein "umständlicheren" Weg zurückgreifen müssen.
                    Bisher hat das Plugin unter 1 Sekunde gebraucht - jedenfalls wenn der SL nicht Nachts den HTTP Server abgeschossen hat.

                    Kommentar


                      #11
                      Zitat von JuMi2006 Beitrag anzeigen
                      ... aber was gibt denn $online nun aus ?
                      $online ist true.

                      Code:
                      moi@vdr:~/src$ perl perl_test.pl 
                      is not online: true
                      Ich blicks nicht...

                      Kommentar


                        #12
                        Hmm sieht ja alles richtig aus ... steckt im true vielleicht noch nen Zeilenumbruch (mit "chomp $online" entfernen) dass er deswegen daran vorbei läuft ... komisch
                        Umgezogen? Ja! ... Fertig? Nein!
                        Baustelle 2.0 !

                        Kommentar


                          #13
                          Gute Idee finde ich.

                          Wen ich chomp $online; einfüge blicke ich das Ergebnis aber erst recht nicht mehr:

                          Code:
                          moi@vdr:~/src$ perl perl_test.pl 
                          moi@vdr:~/src$ true
                          der verschluckt jetzt alle Zeilenumbrüche...

                          Kommentar


                            #14
                            ok, ich hab beim print am Ende noch \n Zeilenumbrüche eingefügt. Leider das gleiche Ergebnis:

                            Code:
                            moi@vdr:~/src$ perl perl_test.pl 
                            is not online: true
                            moi@vdr:~/src$

                            Kommentar


                              #15
                              Und wenn Du "true" vorher nochmal in eine variable $test legst und dann $online per eq mit $test vergleichst ? Ich hab grad nix zum testen hier.
                              Umgezogen? Ja! ... Fertig? Nein!
                              Baustelle 2.0 !

                              Kommentar

                              Lädt...
                              X