Ankündigung

Einklappen
Keine Ankündigung bisher.

EDOMI - LBS - Diskussion

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

    Zitat von coliflower Beitrag anzeigen
    Hättest du eine Idee wie man so etwas abfangen kann ?
    Meinst Du die Fehlermeldung im Error-Log?, Ja, haette ich... mein hostcheck LBS macht das zB.
    Allerdings musst Du Dich dann allein um das Loggen von Fehlern kuemmern - also von Meldungen die eigentlich ins Edomi-Errorlog gehoeren. Ich taete das in Deinem Fall eigentlich nicht empfehlen...

    gruesse :: Michael

    Kommentar


      OK, danke !!
      Ich versuche gerade weg von http zum „Upload“ der Dateien in ein Edomi-Share … In einem anderem Thread ...
      Danke und LG, Dariusz
      GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

      Kommentar


        wintermute

        Hallo Michael,

        vielleicht ersparst du mir vieeeele Stunden des Probierens :-) ?

        Ich habe eine JSON mit Array (das erste Mal ;-)
        Die „standard“ JSON ist mittlerweile kein Problem aber mit dem Array ...

        Hier der Code - was ich tun möchte:

        An einem Eingang des LBS liegt der JSON-String ($json) an, am zweiten gebe ich z.B. den Namen ein „Computeroder „ATV“ oder … D.h., für jeden AirPlayLautsprecher ein LBS ...

        Jetzt soll der LBS den String nach Computer „durchsuchen“ und hier die drei Werte am Ausgang zurückgeben:
        ‚name‘
        ‚selected‘
        ‚sound volume'

        PHP-Code:
        <?php

        function LB_LBSID($id) {
            
            if (
        $E=getLogicEingangDataAll($id)) {
            
                
        $json '{"devices" : [{"selected" : true, "sound volume" : 24, "name" : "Computer"},{"selected" : false,"sound volume" : 24,"name" : "ATV"}]}'

                
        $airplays json_decode($json,true);

                if (
        $E[1]['refresh']) {
                    
                    if (
        array_key_exists('name',$airplays)) {
                        
        setLogicLinkAusgang($id,3,$airplays['name']);
                    }
                }
            }
        }

        ?>
        DANKE !!




        EDIT: hier das original JSON ..
        PHP-Code:
        {
          
        "devices" : [
            {
              
        "active" false,
              
        "available" true,
              
        "network address" "",
              
        "protected" false,
              
        "selected" true,
              
        "supports audio" true,
              
        "sound volume" 24,
              
        "kind" "computer",
              
        "name" "Computer",
              
        "supports video" true
            
        },
            {
              
        "active" false,
              
        "available" true,
              
        "network address" "28:cf:da:2a:a5:35",
              
        "protected" false,
              
        "selected" false,
              
        "supports audio" true,
              
        "sound volume" 24,
              
        "kind" "apple tv",
              
        "name" "ATV",
              
        "supports video" true
            
        }
          ]

        Danke und LG, Dariusz
        GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

        Kommentar


          Zitat von coliflower Beitrag anzeigen
          wintermutevielleicht ersparst du mir vieeeele Stunden des Probierens :-) ?
          Ma sehn

          Der Schnipsel hier ist weder getestet, noch wird er so sauber laufen, aber als Anhaltspunkt sollte er reichen:
          PHP-Code:
          $j=json_decode($json,TRUE);
          $s="Computer";
          foreach (
          $j['devices'] as $device) {
              if (
          $device['name']==$s) break;

          $j ist dein JSON-String, $s ist der Name den Du suchst (also Deine beiden Eingaenge), am Ende liegt in $device das Array, auf das das Suchmuster passt. In $device['sound volume'] also zB die Lautstaerke.
          Wird nix gefunden, liegt am Ende in $device dann nicht das gefundene Device (mehr oder minder logischerweise ), sondern das lezte im JSON. Das musste noch entsprechend abfangen, war ich jetzt zu faul zu

          HTH :: Michael

          Kommentar


            Ich habe bis jetzt folgendes „zusammengebracht“:

            PHP-Code:
                    if ($E[1]['refresh']) {
                        
                        foreach (
            $airplays['devices'] as $p) {
                            if (
            $p['name'] == $E[3]['value']) {
                                
            setLogicLinkAusgang($id,3,1);
                            }
                        }            
                    } 

            Das sieht fast gleich aus wie dein Beispiel (DANKE) …
            Was bewirkt das „Break“ ?

            Ist es auch möglich, wenn ‚Computer‘ gefunden wurde mir auch die dazugehörigen Wert „selected“ und „sound volume“ an die anderen Ausgänge auszugeben ?

            Nochmals danke !!
            Danke und LG, Dariusz
            GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

            Kommentar


              Zitat von coliflower Beitrag anzeigen
              Was bewirkt das „Break“ ?
              Es beendet die foreach Schleife. Das spart nicht nur unnoetige Durchlaeufe, in meiner Version bewirkt es auch, dass am Ende in $device der betreffende Teil des JSON Arrays liegt.

              Zitat von coliflower Beitrag anzeigen
              Ist es auch möglich, wenn ‚Computer‘ gefunden wurde mir auch die dazugehörigen Wert „selected“ und „sound volume“ an die anderen Ausgänge auszugeben ?
              Klar, wie beschrieben. Hier nochmal in PHP:
              PHP-Code:
              $j=json_decode($json,TRUE);
              $s="Computer";
              foreach (
              $j['devices'] as $device) {
                if (
              $device['name']==$s) {
                  
              setLogicLinkAusgang($id,1,$device['name']);
                  
              setLogicLinkAusgang($id,2,$device['selected']);
                  
              setLogicLinkAusgang($id,3,$device['sound volume']);
                  break;
                }

              Kommentar


                DANKE

                Jetzt muss ich’s noch ein wenig verdauen damit’s besser „sitzt“
                Danke und LG, Dariusz
                GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                Kommentar


                  Zitat von coliflower Beitrag anzeigen
                  DANKE
                  buedde... hier nochmal in "sicherer":
                  PHP-Code:
                  $j=json_decode($json,TRUE);
                  $s="Computer";
                  $found=FALSE;
                  foreach (
                  $j['devices'] as $device) {
                    if (
                  $device['name']==$s) {
                      
                  $found=TRUE;
                      break;
                    }
                  }
                  if (
                  $found) {
                    
                  setLogicLinkAusgang($id,1,$device['name']);
                    
                  setLogicLinkAusgang($id,2,$device['selected']);
                    
                  setLogicLinkAusgang($id,3,$device['sound volume']);
                  } else {
                    
                  writeToTraceLog(0,true,"Device $s nicht gefunden");

                  Kommentar


                    Nochmals Danke, werde ich testen :-)

                    Vorläufiges Ergebnis:

                    Bildschirmfoto 2016-03-15 um 00.17.49.png
                    Danke und LG, Dariusz
                    GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                    Kommentar


                      Hallo Michael,

                      wenn man jetzt eine JSON "umgekehrt" auslesen möchte - um eine Art Liste zu haben, z.B. liste mir alle Namen auf die unter 'name' zu finden sind ... ist das auch möglich ?


                      a. wäre das so ein Code (bin derzeit nicht zuhause um zu testen ...) ?
                      b. wie könnte man via PHP jetzt die Einzelergebnise (Computer, ATV, ...) an eine KO á la Temperatur senden um diese in einem Archiv zu speichern ?

                      PHP-Code:
                      foreach ($json AS $key => $name) {
                          if ( 
                      $key == 'name') {
                          
                      setLogicLinkAusgang($id,1,$name['name']);
                          }


                      oder so:
                      PHP-Code:
                      foreach ($json AS $key => $name) {
                          if ( 
                      $key -> name == 'name') {
                          
                      setLogicLinkAusgang($id,1,$name['name']);
                          }


                      JSON:
                      PHP-Code:
                      {
                        
                      "devices" : [
                          {
                            
                      "active" false,
                            
                      "available" true,
                            
                      "network address" "",
                            
                      "protected" false,
                            
                      "selected" true,
                            
                      "supports audio" true,
                            
                      "sound volume" 24,
                            
                      "kind" "computer",
                            
                      "name" "Computer",
                            
                      "supports video" true
                          
                      },
                          {
                            
                      "active" false,
                            
                      "available" true,
                            
                      "network address" "28:cf:da:2a:a5:35",
                            
                      "protected" false,
                            
                      "selected" false,
                            
                      "supports audio" true,
                            
                      "sound volume" 24,
                            
                      "kind" "apple tv",
                            
                      "name" "ATV",
                            
                      "supports video" true
                          
                      }
                        ]

                      Zuletzt geändert von coliflower; 16.03.2016, 12:03.
                      Danke und LG, Dariusz
                      GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                      Kommentar


                        Zitat von coliflower Beitrag anzeigen
                        a. wäre das so ein Code (bin derzeit nicht zuhause um zu testen ...) ?
                        Ich taets so machen:
                        PHP-Code:
                        $devices=json_decode($json,true);
                        $names=array();
                        foreach (
                        $devices['devices'] as $device) {
                                if (
                        array_key_exists('name',$device)) $names[]=$device['name'];

                        Am Ende ist $names ein Array, in dem in der JSON Eingangsreihenfolge alle Namen, liegen, also hier konkret:
                        PHP-Code:
                        Array
                        (
                            [
                        0] => Computer
                            
                        [1] => ATV


                        Zitat von coliflower Beitrag anzeigen
                        b. wie könnte man via PHP jetzt die Einzelergebnise (Computer, ATV, ...) an eine KO á la Temperatur senden um diese in einem Archiv zu speichern ?
                        Einfach mit
                        PHP-Code:
                        setLogicLinkAusgang($id,1,$names[0]); 
                        Das Problem ist eher irgendwie die Namen fest den Ausgaengen zuzuordnen, denke ich...

                        gruesse :: Michael

                        Kommentar


                          Zitat von wintermute Beitrag anzeigen
                          Ich taets so machen:
                          Ich werde mir das zuhause anschauen ...

                          Zitat von wintermute Beitrag anzeigen
                          Einfach mit
                          PHP-Code:
                          setLogicLinkAusgang($id,1,$names[0]); 

                          Zitat von wintermute Beitrag anzeigen
                          Das Problem ist eher irgendwie die Namen fest den Ausgaengen zuzuordnen, denke ich...
                          Na ja, eigentlich sollte es nur einen Ausgang geben, WENN es möglich ist ... der auf ein KO schreibt.
                          Vielleicht mit einer FOR-Schleife die das Array durchgeht mit Pause zwischen jedem Druchlauf ?
                          Danke und LG, Dariusz
                          GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                          Kommentar


                            Zitat von coliflower Beitrag anzeigen
                            Na ja, eigentlich sollte es nur einen Ausgang geben, WENN es möglich ist ... der auf ein KO schreibt.
                            Vielleicht mit einer FOR-Schleife die das Array durchgeht mit Pause zwischen jedem Druchlauf ?
                            Im LBS Teil geht das definitiv nicht (da werden die Ausgaenge nur einmalig am Ende gesetzt, vorherige Werte gehen also verloren, es bleibt nur der letzte uebrig), im EXEC muesste es (nach meinem Verstaendnis) wegen der Asynchronitaet hinhauen, hab ich aber selber noch nicht ausprobiert...

                            Kommentar


                              OK, ich werde mal zuhause TRIAL/ERROR spielen ;-)
                              DANKE mal :-)
                              Danke und LG, Dariusz
                              GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                              Kommentar


                                Könnte das funktionieren ?

                                PHP-Code:
                                $anzahl count $names);
                                for (
                                $x 0$x $anzahl$x++)
                                    
                                setLogicLinkAusgang($id,1,$names[$x]); 
                                Danke und LG, Dariusz
                                GIRA | ENERTEX | MDT | MEANWELL | 24VDC LED | iBEMI | EDOMI | ETS5 | DS214+ | KNX/RS232-GW-ROTEL

                                Kommentar

                                Lädt...
                                X