Ankündigung

Einklappen
Keine Ankündigung bisher.

pbutton / pdisplay tut nicht was es soll

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

    [Webserver] pbutton / pdisplay tut nicht was es soll

    Hallo zusammen.
    Ganz einfache Anforderung: Ich möchte einen pbutton, der mir die aktuelle Raumtemperatur anzeigt.
    Das Problem: es wird immer 0.0 angezeigt, obwohl ich im Monitor sehe das die Temperatur korrekt mit 24.2 empfangen wurde.

    Irgendwelche Ideen?

    Gruß

    Carsten


    Meine Umsetzung:

    [WebServer]
    pbutton(PDisplayTemperaturIstWohnzimmerID)[TEMPERATURE] $Ist-Temperatur$

    [EibPC]
    pdisplay(PDisplayTemperaturIstWohnzimmerID,$Ist: $+convert(convert("EG_Wohnzimmer_Temp_Ist-4/1/28",1f16),$$)+$°C$,TEMPERATURE,DISPLAY,GREY,Temper aturen_EG_PageID,1)

    #2
    [highlight=epc]
    [EibPC]
    if change( "EG_Wohnzimmer_Temp_Ist-4/1/28" ) then {
    pdisplay(PDisplayTemperaturIstWohnzimmerID,$Ist: $+convert(convert("EG_Wohnzimmer_Temp_Ist-4/1/28",1f16),$$)+$°C$,TEMPERATURE,DISPLAY,GREY,Temp er aturen_EG_PageID,1);
    } endif
    [/highlight]

    oder alternativ:
    [highlight=epc]
    if event( "EG_Wohnzimmer_Temp_Ist-4/1/28" ) then {
    pdisplay(PDisplayTemperaturIstWohnzimmerID,$Ist: $+convert(convert("EG_Wohnzimmer_Temp_Ist-4/1/28",1f16),$$)+$°C$,TEMPERATURE,DISPLAY,GREY,Temp er aturen_EG_PageID,1);
    } endif
    [/highlight]

    Gruß,
    Bernd

    Kommentar


      #3
      OK,
      habe ich mal so geändert und gleich in ein Makro gepackt.

      Interessanter Weise funktioniert das genau bei ersten Makroaufruf - und dann nicht mehr. Langsam zweifle ich an mir selber ...



      :begin TemperaturAnzeigeButton(ID, GAStatus)
      :info $Eine Statusanzeige für die aktuelle Werte.$ \\
      :$Zahl zwischen 0 und 39 als ID des Elements$\\
      :$Gruppenadresse Wert (f16)$
      :shortinfo $Statusanzeige für die aktuelle Werte.$

      initGA(GAStatus)
      TemperaturWert_^ID=GAStatus
      if change(TemperaturWert_^ID) or systemstart() then pdisplay(PDisplayTemperaturIstWohnzimmerID,$Ist: $+convert(convert(TemperaturWert_^ID,1f16),$$)+$°C $,TEMPERATURE,DISPLAY,GREY,Temperaturen_EG_PageID, 1) endif

      :end

      Kommentar


        #4
        ohne es ausprobiert zu haben, hast Du Dich glaube ich selbst ausgetrickst.

        Der EibPC bearbeitet nur Zeilen, in denen sich was geändert hat. Drum hat Dein erster Versuch nicht geklappt, da die Zeile nur einmal ausgeführt wurde und da der Wert wohl noch 0 war.

        Drum hat Bernd "change" oder "event" vorgeschlagen, damit die Zeile immer ausgeführt wird, wenn sich der Wert ändert / neu über den Bus geht.

        Jetzt hast Du das aber gleichzeitig mit dieser Änderung in ein Makro gepackt und rufst jetzt das Makro vermutlich auch nur einmalig auf. Dann sind wir wieder am Anfang.
        ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

        Kommentar


          #5
          Zitat von Uwe! Beitrag anzeigen
          ohne es ausprobiert zu haben, hast Du Dich glaube ich selbst ausgetrickst.

          Der EibPC bearbeitet nur Zeilen, in denen sich was geändert hat. Drum hat Dein erster Versuch nicht geklappt, da die Zeile nur einmal ausgeführt wurde und da der Wert wohl noch 0 war.

          Drum hat Bernd "change" oder "event" vorgeschlagen, damit die Zeile immer ausgeführt wird, wenn sich der Wert ändert / neu über den Bus geht.

          Jetzt hast Du das aber gleichzeitig mit dieser Änderung in ein Makro gepackt und rufst jetzt das Makro vermutlich auch nur einmalig auf. Dann sind wir wieder am Anfang.
          Nun, das kann ich kaum glauben. Der EibPC läuft doch in einer Mainloop - und somit werden ALLE Zeilen IMMER ausgeführt.
          Das if change() bewirkt das die betroffene Zeile nur dann ausgeführt wird wenn sich was geändert hat, uns sonst nicht. Das spart Rechenleistung, denn dauernd immer wieder den selben wert auf einen Button zu schreiben wäre ja Blödsinn.


          ich habe den Fehler gefunden - er lag zwischen den Ohren. Zuviel Copy/Paste (Die ObjectID war im Marko noch Hartcodiert - und so wurde immer die selbe ID upgedated).

          Kommentar


            #6
            Zitat von Uwe! Beitrag anzeigen
            Der EibPC bearbeitet nur Zeilen, in denen sich was geändert hat. Drum hat Dein erster Versuch nicht geklappt, da die Zeile nur einmal ausgeführt wurde und da der Wert wohl noch 0 war.
            Daran liegt es wohl eher nicht, da er ja die GA als Teil der pdisplay-Anweisung verwendet. Das sollte so grundsätzlich also funktionieren (auch ohne change bzw. event). Weise doch mal den Wert den du mittels pdisplay übergibst einer Variablen zu und frag diese per Debuger ab, ob sich hier tatsächlich was ändert.

            Also zum Beispiel so:

            Code:
             temp_wert = $Ist: $+convert(convert("EG_Wohnzimmer_Temp_Ist4/1/28",1f16),$$)+$°C$
             pdisplay(PDisplayTemperaturIstWohnzimmerID,temp_wert,TEMPERATURE,DISPLAY,GREY,Temper aturen_EG_PageID,1)

            Kommentar


              #7
              Zitat von cds Beitrag anzeigen
              .... und somit werden ALLE Zeilen IMMER ausgeführt.
              Das if change() bewirkt das die betroffene Zeile nur dann ausgeführt wird wenn sich was geändert hat, uns sonst nicht. Das spart Rechenleistung, denn dauernd immer wieder den selben wert auf einen Button zu schreiben wäre ja Blödsinn.
              Nein! SO ist es definitiv nicht. Stichwort Validierungsschema. Grundsätzlich werden nur die Zeilen ausgeführt, wo sich auch wirklich was geändert hat!

              Zitat von klaus Beitrag anzeigen
              Daran liegt es wohl eher nicht, da er ja die GA als Teil der pdisplay-Anweisung verwendet
              Da hast Du "leider" recht, da bin in ich in die falsche Richtung galoppiert.
              ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

              Kommentar

              Lädt...
              X