IPS_SendMediaEvent und Chart Objekt

Ich möchte für meine Chart-Objekte ein zeitliches Blättern hinzufügen.
Dafür lese ich die Mediadatei, ändere den Timeoffset und schreibe die Datei zurück.
Obwohl ich dann IPS_SendMediaEvent aufrufe wird die Chart nicht aktuallisiert.
Ein händisches Aktuallisieren zeigt das erwartete Ergebnis.
Mache ich da einen Denkfehler?

Hier mein Code

<?
 $ID =28216; // Testchart
 $Media = IPS_GetMedia($ID);
 print_r($Media);
 $File = "C:\\IP-Symcon\\".$Media['MediaFile'];
 $s =file_get_contents($File);
 echo $s;
 $js = json_decode($s);
 foreach ($js->datasets as $ds)
 {
   $ds->timeOffset = -2; // Testwert
 } 
 $S = json_encode($js,JSON_PRETTY_PRINT);
 echo $S;
 file_put_contents($File,$S);
 
 echo IPS_SetMediaFile($ID,$Media['MediaFile'],true); 
 echo IPS_SendMediaEvent($ID);
?>

Wenn das Element gecached wird, dann solltest du die Daten nicht von der Platte lesen und zurückschreiben.
Probiere mal ob es mit IPS_GetMediaContent und SetMediaContent funktioniert.
Michael

Die Charts sind wohl standardmässig nicht gecached!
Das Bit Ist zuminest nicht gesetzt!

Array
(
    [MediaID] => 28216
    [MediaType] => 4
    [MediaFile] => media/28216.chart
    [MediaUpdated] => 1484683807
    [MediaIsCached] => 
    [MediaCRC] => A2E297CA
    [MediaSize] => 866
    [MediaIsAvailable] => 1
)

IPS_GetMediaContent und SetMediaContent wollte ich nicht benutzen, da die Daten dann die Daten Base64 kodiert sind.

Das mit dem Ändern der Datei ist ja auch nicht das Problem. Ein händisches Updaten durch neues Laden der Seite bringt ja das richtigen Ergebnis.

Das wird, soweit ich weiß, gar nicht unterstützt. Du hast das Multichart im WebFront über ein Graph Element eingebettet, oder?

paresy

Ob sich das Multichart nennt, kann ich nicht sagen. Ich hab das über „Objekt Hinzufügen/Medien/Diagramm“ realisiert.
Das Objekt hab ich dann im Webfont mit einer Chart verknüpft.

Eingendlich möchte ich nur die Chart im Webfont neu zeichnen lassen.
Ich dachte „IPS_GetMediaContent“ efüllt genau diesen Zweck.

Wie bereits geschrieben führt ein manuelles Update zum Erfolg!

Wo ist denn mein Denkfehler?

Edit: Ich meinte natürlich die Funktion „IPS_SendMediaEvent“

Du hast keinen. Wir unterstützen das so nicht. Du kannst es nur manuell neu laden.

paresy

Schade denn so hätte ich mehrere Charts synchron im Zeitbereich verändern können!
Ich hab immer wieder merere Charts untereinander die man halt nich gleichzeitig im Zeitbereich verändern kann.
Dies ist ein großer Nachteil der mich doch schon sehr stört.
Generell ist es schade, das es keine „Blättern“-Funktion gibt.
Soweit ich dich verstanden habe, soll sich da ja was in der nächsten Version ändern.

Hi…

Ich habe ein ähnliches Problem…

Bin aktuell dabei im Webfront meine Einstellung der FBH pro Raum zu realisieren. Möchte an der Stelle nicht eine Seite pro Raum, sondern eine „dynamische“ Seite mit einer Raumauswahl realisieren.

Aufbau soll dabei wie folgt sein:

  • Auswahl des Raumes (realisiert über eine Integer Variable mit ensprechendem Profil zur Auswahl des Raumes)
  • Anzeige Ist-Temperatur (Link der dynamisch je nach Auswahl des Raumes angepasst wird)
  • Anzeige Soll-Temperatur (Link der dynamisch je nach Auswahl des Raumes angepasst wird)
  • Diagramm mit Ist- und Soll-Temperatur über den Tagesverlauf (auch dynamisch je nach ausgewähltem Raum)

Um das Diagramm zu realisieren, habe ich etwas getestet, wie das über Manipulation des Json Datasets funktioniert und bin bei folgendem Code gelanden:

    SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
    
    $json = '{
        "datasets":[
            {
                "variableID":12224,
                "fillColor":"#fefb00",
                "strokeColor":"#fefb00",
                "timeOffset":0,
                "title":"Ist-Temperatur",
                "axis":0
            },{
                "variableID":29274,
                "fillColor":"clear",
                "strokeColor":"#ff2600",
                "timeOffset":0,
                "title":"Soll-Temperatur",
                "axis":0
            }],
                "type":"line",
                "axes":
            [{
                "profile":"~Temperature.Room",
                "side":"left"
            }]
        }';

    IPS_SetMediaContent(16674, base64_encode($json));
    IPS_SendMediaEvent(16674);

Die Variablen sind hier noch hart gecodet, da ich es bis jetzt nur zum testen verwendet habe. Wird noch über die Integer Variable zur Raumauswahl dynamisiert.

Jetzt habe ich allerdings auch das Problem, dass das Chart einwandfrei aktualisiert wird (im Moment wenn ich manuell am Json Dataset etwas ändere). Die Aktualisierung der entsprechenden Webfront Seite geht aber nur manuell (z.B. Wechsel und wieder zurückspringen).

Gibt es dafür eine Lösung?

Schon mal Danke für Euren Input!

Viele Grüße
Jochen

Hat es einen Grund warum du beim Diagramm nicht auch einfach ein Link benutzt und diesen veränderst?
Michael

Hi Michael…

Idee ist nur ein Diagramm im Webfront zu haben, dass ich dynamisch verändere (um mir die Arbeit zu ersparen für jeden Raum ein Diagramm anzulegen).
Hatte erst die Idee im Diagramm einen Link auf die jeweilige Variable zu verwenden und diesen zu verwenden. Dies lässt Symcon aber nicht zu. Es können im Diagramm nur direkt Variablen verwendet werden.

Wenn ich Deinen Ansatz richtig verstehe, wäre die Idee wie folgt:

  • Für jeden Raum ein Diagramm anlegen.
  • Einen Link der auf das Diagramm verweist im Webfront anzuzeigen.
  • Verweis des Links wird dynamisch auf das richtige Diagramm zugewisen.
    Richtig verstanden?

Danke und Grüße
Jochen

Genau. Wobei ich mir das einfach gemacht habe.
Ich habe einfach die Kategorien für jeden Raum oben im WebFront in der Leiste.
Dann muss man aber für jeden Raum seine Absicht bauen.
Michael

Danke Michael!

Bin jetzt auch den Weg gegangen für jeden Raum eine Seite zu „bauen“. Ist zwar etwas mühsam. Funktioniert aber einwandfrei…

Grüße Jochen