Homematic IP Geräte mit CUxD loggen

Anbindung von FS20-Komponenten, ELV-Wetterstationen, EnOcean und DMX an HomeMatic

Moderator: Co-Administratoren

alchy
Beiträge: 9942
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 26 Mal
Danksagung erhalten: 345 Mal

Re: Homematic IP Geräte mit CUxD loggen

Beitrag von alchy » 17.02.2020, 21:09

Ich habe mal ein wenig rum gespielt. Geht doch.
IP Geräte funktionieren schon mal genau so wie die RF Geräte.
uwe111 hat geschrieben:
14.02.2020, 23:00
Das stimmt nicht! Die "invalid date" Meldung hatte ich ich auch schon früher auf meiner CCU1. Aktuell habe ich sie nicht.
Klar stimmt das. Weil ein Datenpunktname automatisch ein . enthält. Hab ich ja geschrieben.
Wenn du das nicht hast, liegt das daran, das du keine . im Namen der geloggten Sachen an der falschen Stelle hast.
Logge einfach mal eine Systemvariabe mit . im Namen und wähle sie aus. invalide Date ist vorprogrammiert.

Unlustigerweise muss ich jetzt trotzdem noch mal schauen, wo jetzt genau der beschriebene Bug drin steckt.


Alchy

.................... full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Benutzeravatar
uwe111
Beiträge: 4187
Registriert: 26.02.2011, 22:22
Danksagung erhalten: 55 Mal
Kontaktdaten:

Re: Homematic IP Geräte mit CUxD loggen

Beitrag von uwe111 » 17.02.2020, 22:35

alchy hat geschrieben:
17.02.2020, 21:09
uwe111 hat geschrieben:
14.02.2020, 23:00
Das stimmt nicht! Die "invalid date" Meldung hatte ich ich auch schon früher auf meiner CCU1. Aktuell habe ich sie nicht.
Klar stimmt das. Weil ein Datenpunktname automatisch ein . enthält. Hab ich ja geschrieben.
Wenn du das nicht hast, liegt das daran, das du keine . im Namen der geloggten Sachen hast.
Also entweder reden wir jetzt aneinander vorbei oder warum stehen dann in meinem DEVLOGFILE die folgenden Einträge mit . und ich habe keine "invalid Date" Meldung im HighCharts?

Code: Alles auswählen

2020-02-17T16:00:12 000A9707A0A204:1.SET_POINT_TEMPERATURE 20.000000
2020-02-17T16:00:12 000A9707A0A204:1.ACTUAL_TEMPERATURE 20.500000
2020-02-17T17:00:10 000A9707A0A204:1.SET_POINT_TEMPERATURE 17.000000
2020-02-17T17:00:10 000A9707A0A204:1.ACTUAL_TEMPERATURE 20.500000
2020-02-17T17:10:24 000A9707A0A204:1.SET_POINT_TEMPERATURE 17.000000
2020-02-17T17:10:24 000A9707A0A204:1.ACTUAL_TEMPERATURE 20.600000
Oder passiert das nur, wenn ich Systemvariablen logge? Das habe ich jetzt nicht probiert.

Viele Grüße

Uwe
Alle sagten: Das geht nicht. Dann kam einer, der wußte das nicht und hat's einfach gemacht.
SPENDEN :wink: Download: CUxD 2.4.4, RFD-Monitor, Vellemann K8055, SSH KeyDir

alpa
Beiträge: 1
Registriert: 10.03.2020, 19:56

Re: Homematic IP Geräte mit CUxD loggen

Beitrag von alpa » 10.03.2020, 21:12

Servus!

Wie bereits andere User, hatte ich leider ähnliche Probleme mit dem Graphen. Nach mehreren Anläufen, hats aber dann irgendwann doch was angezeigt. Ich stand zunächst ein wenig auf dem Schlauch, weil das Device Logging eigentlich von Anfang an solide funktioniert hat, nur irgendwie wollte es mit der Anzeige nicht.

Also bin ich dem ganzen ein wenig hinterher getaucht, und hab mich an dem invalid date erstmal entlang gehangelt und denke auch das Problem mehr oder weniger gefunden zu haben.

Wie alchy bereits erwähnt hat, gibt es wohl einen Bug was die Anzeige von Einträgen mit einem "." im Namen angeht. Es ist nicht ganz wenig Code zum durchsteigen, kenn mich leider mit Highcharts nicht unbedingt gut aus und weiß als blutiger Homematic User auch nicht unbedingt genau wie das mal funktioniert hat bzw. gedacht war.

Soweit ich das bisher verstanden habe, versucht das Script mit Hilfe des "." den String zu spliten um anhand des Teiles nach dem "." den Anzeigetyp für den Graphen zu bestimmen. Jetzt ist es nur irgendwie so, dass noch an anderer Stelle gesplitet wird und dabei u.a. der hintere Teil wieder hinten dran gehängt wird (sieht dann so aus 000123456789AB:1.ACTUAL_TEMPERATURE.ACTUAL_TEMPERATURE), was sich dann im weiteren dann irgendwie verschluckt.

Ich vermute den Übeltäter hier:

Code: Alles auswählen

var tmpArr = [];
for (var dp in cuxchart.dates) {
    var tmp = dp.split(".");
    if (!tmp[1]) { <-- im Fall von "_" true und ergibt einen leeren String
        tmp[1] = "";
    } else {
        tmp[1] = "." + tmp[1];
    }
    tmpArr.push(cuxchart.dpInfos[dp].ChannelName + tmp[1]); <-- hier wird im Fall von "." der Teil danach ein zweites mal an den Channel gehängt
}
tmpArr.sort();
var serie;
for (var i = 0; i < tmpArr.length; i++) {
    if (cuxchart.revDpInfos[tmpArr[i]]) {
        serie = cuxchart.revDpInfos[tmpArr[i]];
    } else {
        serie = tmpArr[i];
    }
    cuxchart.addSeries(serie);
}
Ob cuxchart.dates oder cuxchart.dpInfos[dp].ChannelName evtl. nicht richtig sind so weit bin ich bisher nicht durchgestiegen.

Das invalid date kommt glaub ich dann zu Stande, wenn man ausschließlich Einträge mit "." in der Devicelog hat, bzw. er dann auch in der Legende nichts anzeigt. Ich hab bisher nur zwei HMIP Geräte an der CCU, da fällt es dann relativ leicht auf wenn es mit dem "." im Programm nicht, aber dafür mit dem "_" funktioniert (wenn man's mal herausgefunden hat woran es liegt).

Zum maintainen wird meine Zeit aktuell leider nicht reichen, aber ich könnte versuchen das gefixt zu bekommen und nen PR zu machen. Vielleicht steckt jemand tiefer drin und kann mir zumindest verraten wie das gedacht war, weil ich da noch was gefunden hab:

Code: Alles auswählen

case "TEMPERATURE":
case "ABS_HUMIDITY":
case "DEW_POINT":
case "TEMP_MAX_24H":
case "TEMP_MIN_24H":
valueDecimals = 1;
type = "spline";
break;
Das würde im Fall von dem Script aus der CUxD Readme:

Code: Alles auswählen

object dp = dom.GetObject("$src$");
if (dp) {
dom.GetObject("CUxD.CUX2801001:1.POSTIT").State((dom.GetObject((dp.Channel()))).Address() #"."# dp.HssType() #";"#dp.Value());
}
auch nicht ganz matchen weil das wäre bei mir z.B. ACTUAL_TEMPERATURE und nicht TEMPERATURE.

Wäre nett wenn sich vielleicht wer melden mag und mir paar Infos dazu stecken kann. Ich wüsste z.B. auch nicht wie das mit den Alias funktioniert (hat) etc.

Kleiner Nachtrag:
Anstatt den zusammen gestampften Code zu debuggen, den originalen zu benutzen hilft ungemein. Allerdings ist mir dabei noch was aufgefallen. Die Backend Schnittstellen bestehen aus tcl/perl(?) Scripts die dann irgendwie auf die Script Ebene von der CCU zugreifen? Mit JS bin ich relativ fit aber damit hab ich jetzt irgendwie bissl meine Probleme.

Grüße,
Alex

Benutzeravatar
uwe111
Beiträge: 4187
Registriert: 26.02.2011, 22:22
Danksagung erhalten: 55 Mal
Kontaktdaten:

Re: Homematic IP Geräte mit CUxD loggen

Beitrag von uwe111 » 11.03.2020, 23:56

Hallo Alex,
alpa hat geschrieben:
10.03.2020, 21:12
Wäre nett wenn sich vielleicht wer melden mag und mir paar Infos dazu stecken kann. Ich wüsste z.B. auch nicht wie das mit den Alias funktioniert (hat) etc.
Den Alias habe ich nur aus historischen Gründen noch drin. Ich denke er wird jetzt ans Ende der Zeile geschrieben und dann vor der Übergabe mittels logfilter weggefiltert. Das müsste man mal prüfen. Ich bin mir da nicht mehr so sicher.
alpa hat geschrieben:
10.03.2020, 21:12
Die Backend Schnittstellen bestehen aus tcl/perl(?) Scripts die dann irgendwie auf die Script Ebene von der CCU zugreifen? Mit JS bin ich relativ fit aber damit hab ich jetzt irgendwie bissl meine Probleme.
Für den Zugriff auf die Logs habe ich dieses kleine Programm geschrieben: https://github.com/jens-maus/cuxd/tree/ ... /logfilter

Du kannst Programm auch direkt von der Kommandozeile aufrufen, falls Du die Ausgabe kontollieren möchtest:

Code: Alles auswählen

/usr/local/addons/cuxd/extra/logfilter
Viele Grüße

Uwe
Alle sagten: Das geht nicht. Dann kam einer, der wußte das nicht und hat's einfach gemacht.
SPENDEN :wink: Download: CUxD 2.4.4, RFD-Monitor, Vellemann K8055, SSH KeyDir

Rosagallica
Beiträge: 53
Registriert: 22.07.2018, 15:54
System: CCU
Hat sich bedankt: 7 Mal
Danksagung erhalten: 2 Mal

Re: Homematic IP Geräte mit CUxD loggen

Beitrag von Rosagallica » 25.08.2020, 18:35

uwe111 hat geschrieben:
15.02.2020, 20:01
Wenn das so ist, dann sollte dieses Problem aber in CUxD Highcharts korrigiert werden. Denn die von mir im DEVLOGFILE definierte Schreibweise ist folgende:
Seriennummer:Kanal.Datenpunkt Wert
alchy hat geschrieben:
14.02.2020, 23:23
Wenn CUxD Highcharts die geloggten IP Seriennummern auch in die Namen wandeln würde wäre das perfekt.
Genau so sehe ich das auch! Wenn dann noch der sporadisch auftretende "invalid Date" Fehler weg ist, wäre es wirklich perfekt.

Ich habe momentan leider nicht die Zeit, mich nebenbei auch noch mit CUxD Highcharts zu beschäftigen und würde es sehr begrüßen, wenn jemand das Projekt weiterführen würde: https://github.com/homematic-community/CUxD-Highcharts
Bis auf kleine Optimierungen, die ich vor 5 Jahren gemacht habe ist hier seit 7 Jahren nichts mehr passiert. :cry:
Dazu muss man auch kein Programmierexperte sein. Mit grundlegendem Programmierverständnis und viel Zeit sollte eigentlich jeder in der Lage sein sich in JavaScript einzuarbeiten. Bei den Schnittstellen-Scripts würde ich natürlich gerne unterstützend zur Verfügung stehen.

Viele Grüße
Uwe
Ich bin jetzt auch nochmal über das Thema gestolpert, nachdem ich den POSTIT-Logger für ein Wrapper-Device ergänzt habe. Ich hatte mich schon länger geärgert, dass HmIP-Kanal-Umbenennungen in den Charts nicht nachgezogen wurden.

Wenn man nicht auf eine der bereits beschrieben Wege "händisch" per DP-Namensauflösung HmIP-Datenpunkte in einen Highcharts-kompatiblen Logeintrag überführen will, ist ja das grundlegende Problem die fehlende Auflösung von HmIP-Geräte-Seriennummern bei Logeinträgen, die mittels POSTIT entstanden sind.
Dies passiert im CUxD-Backend in der Datei ajax/dpinfos.cgi - lokal zu finden unter /www/addons/cuxchart/ajax/dpinfos.cgi:

Code: Alles auswählen

 if { [string equal -length 3 $dp "CUX"] } {
        append hm_script "o = dom.GetObject('CUxD.$dp');\n"
    } else {
        append hm_script "o = dom.GetObject('BidCos-RF.$dp');\nif (!o) \{\n"
        append hm_script "o = dom.GetObject('BidCos-Wired.$dp');\n\}\n"
    }
Hier muss also noch neben der Unterscheidung zwischen CUxD- und HM-Geräten noch eine Abfrage für HmIP rein.
Diese Zeile quick'n'dirty ergänzt...

Code: Alles auswählen

    if { [string equal -length 3 $dp "CUX"] } {
        append hm_script "o = dom.GetObject('CUxD.$dp');\n"
    } else {
        append hm_script "o = dom.GetObject('BidCos-RF.$dp');\nif (!o) \{\n"
        append hm_script "o = dom.GetObject('BidCos-Wired.$dp');\n\}\n"
# NEU >>
        append hm_script "if (!o) \{ o = dom.GetObject('HmIP-RF.$dp'); \}\n";
# NEU <<
    }
...liefern vielversprechende Ergebnisse im Highchart-Diagramm.
Der Datenpunkt mit Unterstrichen sind meine bislang per Skript generierten Logeinträge - der mit Leerzeichen ist jetzt durch diesen Patch dazugekommen.
ergebnis-patch-cuxd-highcharts.png
ergebnis-patch-cuxd-highcharts.png (20.17 KiB) 428 mal betrachtet
Jetzt gilt es eigentlich nur die richtige "Weichenbedingung" zu finden, um den passenden dom.GetObject(...)-Befehl hier je nach ankommender Seriennummer zu generieren. Auf gut Glück - wie oben skizziert - mit allen Präfixen zu probieren, geht sicherlich, ist aber nicht so "schön" und kostet unnötig Performance.
Vielleicht hilft Euch das als Anregung...

SebSchill
Beiträge: 1
Registriert: 10.11.2020, 14:45
System: CCU

Re: Homematic IP Geräte mit CUxD loggen

Beitrag von SebSchill » 11.11.2020, 21:09

Guten Abend,

ich bin ganz neu hier und das auch auf dem Gebiet der Homematic.

Und ich habe auch das problem das mir cuxd Highcharts leider meien Aufgezeichnetenwerte nicht Anzeigt.

hier mal ein auszug aus dem devlog
2020-11-11T06:09:50 CUX-SYSTEM:0.MEMUSED 519880
2020-11-11T06:09:56 00059A498C6E8F:1.STATE false
2020-11-11T06:10:00 CUX-SYSTEM:0.CPU10 4.1
2020-11-11T06:10:00 CUX-SYSTEM:0.LAVG1M 0.44
2020-11-11T06:10:00 CUX-SYSTEM:0.LAVG5M 0.24
2020-11-11T06:10:00 CUX-SYSTEM:0.LAVG15M 0.19
2020-11-11T06:10:00 CUX-SYSTEM:0.PROCS 262
2020-11-11T06:10:00 CUX-SYSTEM:0.CUXDMEM 178504
2020-11-11T06:10:00 CUX-SYSTEM:0.MEMUSED 520512
2020-11-11T06:10:06 000A98A9AB1CE0:1.ACTUAL_TEMPERATURE 21.600000

sieht für mich so ais das die werte schon mal korrekt im devlog landen, ist das korrekt?

Wenn dann die daten über Highcharts ansehen möchte bekomme ich auch leider die anzeige mit invalid date
Gibt es schon eine Lösung dafür?

Wenn ich mit nur reine CUXd geräte logs anzeigen lasse dan funktioniter das einwandfrei


Gruß
Sebastian

Antworten

Zurück zu „CUxD“