Ankündigung

Einklappen
Keine Ankündigung bisher.

EPC code -> Ping Resultat

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

    [EibStudio] EPC code -> Ping Resultat

    Guten Tag

    Ueber einen Schaltaktor schalte ich alle HiFi Geräte ein und wieder aus (reduzierung Standby Energie). Nun um den MediaCenter nicht einfach so abzuwürgen wollte ich den pingen bevor ich dem den Strom unterbreche (der soll vorgängig runtergefahren werden, erstmal manuell). Es scheint als hätte ich ein Timing Problem, das Ping Resultat scheint erst immer korrekt zu sein nach dem zweiten betätigen des 'pbutton(8,MultiMediaPageID)' Button.

    Hat jemand eine Idee wie ich das wohl realisieren könnte? Oder muss ich den MPC zyklisch pingen?

    [highlight=epc]

    MPC = 192.168.178.101
    MPCactive=0b01
    PINGresult=3
    PINGdelay=200u64

    if pbutton(8,MultiMediaPageID)==1 then {
    write ("Standby Sideboard Trigger [EIN/AUS]-10/7/0",!"Standby Sideboard Trigger [EIN/AUS]-10/7/0");
    }endif

    if event("Standby Sideboard Trigger [EIN/AUS]-10/7/0") then {
    PINGresult=ping(MPC)
    }endif

    if PINGresult==0 then MPCactive=1b01 else MPCactive=0b01 endif

    if ("Standby Sideboard Trigger [EIN/AUS]-10/7/0") then {
    write ("Standby Sideboard A [EIN/AUS]-10/7/1", EIN);
    write ("Standby Sideboard B [EIN/AUS]-10/7/3", EIN);
    pdisplay(8,$ON$,SWITCH,ACTIVE,GREY, MultiMediaPageID);
    }endif

    if delay(!"Standby Sideboard Trigger [EIN/AUS]-10/7/0" and !MPCactive, PINGdelay) then {
    write ("Standby Sideboard A [EIN/AUS]-10/7/1", AUS);
    write ("Standby Sideboard B [EIN/AUS]-10/7/3", AUS);
    pdisplay(8,$OFF$,SWITCH,INACTIVE,GREY, MultiMediaPageID)
    }endif

    [/highlight]

    Vielen Dank für Eure Antworten.

    Gruss,

    Martin

    #2
    Martin,

    ping arbeitet asynchron. Also bedeutet dann das die Zuweisung erst irgendwann später kommt. Da Du anfänglich PINGresult auf 3 gesetzt hast,
    wird zunächst Pingresult auf 1 gesetzt werden (sprich er arbeitet noch am Ping) und dann kommt ein positives oder negatives Resultat.

    So etwas könnte helfen:
    [highlight=epc]
    if change(PINGresult) then {
    if PINGresult == 0 then MPCactive=1b01; PINGresult = 3 endif;
    if PINGresult == 2 then MPCactive=0b01; PINGresult = 3 endif;
    /* if PINGresult == 1 then mach nix, arbeitet ja noch */;
    } endif
    [/highlight]


    Gruß,
    Bernd

    Kommentar


      #3
      Hallo Bernd

      Vielen Dank für Deine Antwort. Leider muss ich immer noch mehrmals den pbutton betätigen bis er dann den Status (das Pingresultat) mitkriegt.

      Auch ein zyklisches pingen bringt keine Abhilfe.
      if cycle(0,30) then PINGresult=ping(MPC)endif;

      Gruss,

      Martin

      Kommentar


        #4
        Guten Abend Miteinander

        Mit diesem Code laufe ich wohl Gefahr mein asynchrones Hirn zu 'outen'. Ich war mir so sicher dass dies die Lösung sein müsse. Leider funktioniert es nur Zeitweise.

        [highlight=epc]

        MPCip=192.168.178.101
        SyncPING=0b01
        PingResult=3


        if pbutton(8,MultiMediaPageID)==1 then {
        write ("Standby Sideboard Trigger [EIN/AUS]-10/7/0",!"Standby Sideboard A [s]-10/7/2");
        }endif

        if ("Standby Sideboard Trigger [EIN/AUS]-10/7/0") then {
        write ("Standby Sideboard A [EIN/AUS]-10/7/1", EIN);
        write ("Standby Sideboard B [EIN/AUS]-10/7/3", EIN);
        pdisplay(8,$ON$,SWITCH,ACTIVE,GREY, MultiMediaPageID);
        }endif

        if (!"Standby Sideboard Trigger [EIN/AUS]-10/7/0") then {
        PingResult=ping(MPCip);
        SyncPING=1b01
        }endif

        if (SyncPING and PingResult==2) then {
        write ("Standby Sideboard A [EIN/AUS]-10/7/1", AUS);
        write ("Standby Sideboard B [EIN/AUS]-10/7/3", AUS);
        pdisplay(8,$OFF$,SWITCH,INACTIVE,GREY, MultiMediaPageID);
        SyncPING=0b01;
        PingResult=3
        }endif


        [/highlight]

        Falls jemand den Nerv hat oder/und eine Idee hat, ich bin für jeden Input dankbar.

        Gruss,

        Martin

        P.S. und wie kann den beispielsweise Ping() im Code verwendet werden wenn dieser gar nicht synchron zum Code arbeitet?

        Kommentar


          #5
          Zitat von kropfm Beitrag anzeigen
          Leider funktioniert es nur Zeitweise.
          Kannst Du das zeitweise genauer beschreiben? Wann geht es denn nicht?

          Gruß,
          Bernd

          Kommentar


            #6
            Vielen Dank für Deine Geduld, Bernd.

            Der Aktorausgang ist AUS, (der Host 192.168.178.101 ist aktiv; der Host dient nur als Simulationshost und wird von einer anderen Spannungsquelle gespiesen) wenn ich nun den Button betätige schaltet der Aktorausgang EIN. Bei der nächsten Betätigung schaltet der Aktor wieder AUS, trotzt aktivem Host. Nun beim zweiten Schaltspiel funktioniert es zumindest verhindert er das Ausschalten solange der Host aktiv ist. Nachdem der Host inaktiv ist braucht es 5 bis 6 Buttonbetätigungen bis der Aktor schliesslich ausschaltet. Interessant ist noch das er es dann irgendwie auch nicht schafft das ‚OFF’ in den Button zu schreiben und diesen auf INACTIVE setzt, obwohl er den Ausgang ausschaltet.

            Wenn der Host AUS ist kann ich ohne Probleme ein und ausschalten.

            Wird der Host erst nach dem ersten Einschalten des Aktor eingeschaltet so kann man das Schaltspiel (alles wieder ausschalten und wieder einschalten) mehrere Male ausführen bis er dann endlich das Ausschalten verhindert. Beim Ausschalten des Aktorausganges bei inaktiven Host verhält er sich gleich wie oben. Auch das er am Schluss den Status nicht mehr in den Button schreiben kann.

            Vielleicht sollte ich ja noch einen anderen Host probieren. Obwohl ich beim manuellen Pingen eigentlich nichts Eigenartiges feststellen kann.

            Gruss,
            Martin


            Kommentar


              #7
              Welche Version von Firmware, EibStudio, Patch und EibParser nutzt Du?

              Gruß,
              Bernd

              Kommentar


                #8
                den letzten offiziellen Patch 2.300, inklusive Windows Studio 2_300 und Firmware 2.300.

                Kommentar


                  #9
                  Hm. Eigentlich fällt mir nichts auf. Eventuell mal um event() erweitern oder aber komplett auf Variable umstellen (Ich vermute immer noch einen Bug in der Telegrammverwaltung)

                  [highlight=epc]

                  MPCip=192.168.178.101
                  SyncPING=0b01
                  PingResult=3

                  if pbutton(8,MultiMediaPageID)==1 then {
                  write ("Standby Sideboard Trigger [EIN/AUS]-10/7/0",!"Standby Sideboard A [s]-10/7/2");
                  }endif

                  if event("Standby Sideboard Trigger [EIN/AUS]-10/7/0") and ("Standby Sideboard Trigger [EIN/AUS]-10/7/0" == EIN )then {
                  write ("Standby Sideboard A [EIN/AUS]-10/7/1", EIN);
                  write ("Standby Sideboard B [EIN/AUS]-10/7/3", EIN);
                  pdisplay(8,$ON$,SWITCH,ACTIVE,GREY, MultiMediaPageID);
                  }endif

                  if event("Standby Sideboard Trigger [EIN/AUS]-10/7/0")) and ("Standby Sideboard Trigger [EIN/AUS]-10/7/0" == AUS) then {
                  PingResult=ping(MPCip);
                  SyncPING=1b01
                  }endif

                  if (SyncPING and PingResult==2) then {
                  write ("Standby Sideboard A [EIN/AUS]-10/7/1", AUS);
                  write ("Standby Sideboard B [EIN/AUS]-10/7/3", AUS);
                  pdisplay(8,$OFF$,SWITCH,INACTIVE,GREY, MultiMediaPageID);
                  SyncPING=0b01;
                  PingResult=3
                  }endif


                  [/highlight]

                  nur mit Variable:

                  [highlight=epc]

                  MPCip=192.168.178.101
                  SyncPING=0b01
                  PingResult=3
                  SideBoardTrigger = AUS

                  if pbutton(8,MultiMediaPageID)==1 then {
                  SideBoardTrigger = !SideBoardTrigger
                  }endif

                  if SideBoardTrigger then {
                  write ("Standby Sideboard A [EIN/AUS]-10/7/1", EIN);
                  write ("Standby Sideboard B [EIN/AUS]-10/7/3", EIN);
                  pdisplay(8,$ON$,SWITCH,ACTIVE,GREY, MultiMediaPageID);
                  }endif

                  if !SideBoardTrigger then {
                  PingResult=ping(MPCip);
                  SyncPING=1b01
                  }endif

                  if (SyncPING and PingResult==2) then {
                  write ("Standby Sideboard A [EIN/AUS]-10/7/1", AUS);
                  write ("Standby Sideboard B [EIN/AUS]-10/7/3", AUS);
                  pdisplay(8,$OFF$,SWITCH,INACTIVE,GREY, MultiMediaPageID);
                  SyncPING=0b01;
                  PingResult=3
                  }endif

                  [/highlight]

                  Gruß,
                  Bernd

                  Kommentar


                    #10
                    Vielen Dank Bernd, das werde ich morgen Abend mal testen und wieder Berichten.

                    Wünsche Dir eine gute Nacht!

                    Gruss,

                    Martin

                    Kommentar


                      #11
                      Hallo Bernd

                      Leider funktioniert weder die eine noch die andere Variante.

                      Vielen Dank für Deine Unterstützung und ich wünsche Dir einen schönen Abend.

                      Gruss,

                      Martin

                      Kommentar


                        #12
                        Zitat von kropfm Beitrag anzeigen
                        Hallo Bernd

                        Leider funktioniert weder die eine noch die andere Variante.

                        Vielen Dank für Deine Unterstützung und ich wünsche Dir einen schönen Abend.

                        Gruss,

                        Martin
                        Hallo Martin, ich habe folgendes gestestet:
                        [highlight=epc]
                        [EibPC]
                        Server=192.168.22.100
                        Nix=192.168.20.100
                        res1=100
                        res2=100
                        a=0
                        if a==1 then res1=ping(Server) endif
                        if a==2 then res2=ping(Nix) endif
                        [/highlight]
                        Nach dem Einspielen, geht bei mir res2 auf 2 und res1 auf 0. Das ist normal, da ja ping auch beim Systemstart asynchron und die Nix-IP nicht existent ist. Teste es mal in dieser einfachen Umgebung. Wenn ich per Debugger nun an a und an den Variablen rumspiele, geht alles wie gewollt.
                        EDIT:
                        Ich habe schon den Eibparser 2.306 am laufen, und der könnte hier auch Einfluss haben, da ich da einiges am Codeoptimierer verändert habe. Morgen wirds den wahrscheinlich als Beta geben.
                        offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                        Enertex Produkte kaufen

                        Kommentar


                          #13
                          Hallo Michael

                          Vielen Dank für Deine Antwort. Das ist eine gute Idee, ich werde am Wochenende ein bisschen herumspielen, und berichten.

                          Wünsche Dir schöne und erholsame Ferien.

                          Gruss,

                          Martin

                          Kommentar


                            #14
                            Hi,

                            ich hab das Beispielprogramm von Micha mit dem letzten offiziellen Patch 2.300, inklusive Linux EibStudio 2_300 und Firmware 2.300 getestet und das selbe Resultat wie Micha bekommen.

                            steffi
                            Enertex Bayern GmbH - www.eibpc.com

                            Kommentar


                              #15
                              Zitat von enertegus
                              Nach dem Einspielen, geht bei mir res2 auf 2 und res1 auf 0. Das ist normal, da ja ping auch beim Systemstart asynchron und die Nix-IP nicht existent ist.
                              Ups. Jetzt habe ich ein Brett vorm Kopf: Wieso ändern sich nach dem Start res2 und res1? Du bist doch ohne a zu ändern gar nicht in den then Zweig reingekommen????

                              Ich würde erwarten, das die beide auf 100 bleiben solange nicht jeweils a==1 oder a==2 geworden ist via Debugger ....

                              Gruß,
                              Bernd

                              Kommentar

                              Lädt...
                              X