Was leistet mein FHEM denn so?

Begonnen von hankyzoolander, 12 Oktober 2020, 17:27:56

Vorheriges Thema - Nächstes Thema

Prof. Dr. Peter Henning

@Christoph Morrison: Na, mal langsam. Sagen wir 2005 - das war die große Zeit von XSLT. Da habe ich auf Basis von Apache Cocoon ein ganzes Geoinformationssystem auf XSLT-Basis geschrieben.

Edit: Und das Schema bzw. die DTD macht mein Lieblings-Editor oXygen automatisch.

LG

pah

Christoph Morrison

Zitat von: Prof. Dr. Peter Henning am 22 Dezember 2020, 12:53:29
@Christoph Morrison: Na, mal langsam. Sagen wir 2005 - das war die große Zeit von XSLT. Da habe ich auf Basis von Apache Cocoon ein ganzes Geoinformationssystem auf XSLT-Basis geschrieben.

Ich kontere mit der (letzten) großen Brockhaus Enzyklopädie in 20 Bänden, für die ich die Datenstrukturierung und die Konvertierungsprozesse in die verschiedenen Formate (USB-Stick, Druck, Online) geschrieben habe - auch mit XSLT und ganz vielen fiesen Fallstricken - und einer eigenen Unicode-Repräsentation, denn UTF-8 gab es da zwar schon, aber nur wenig Tools und vor allem gab es eine sehr kaputte alte Datenbasis. RIP BIFAB.

Das war allerdings schon irgendwann Ende 2002.

Und ich erinnere mich, mich etwa 2007 vor Hipster-Webentwicklern ganz schamhaft geoutet zu haben, dass ich noch XML benutze und nicht das neue coole JSON ;-)




Prof. Dr. Peter Henning

Für faule Web-Entwickler mag ja JSON schon 2005 eine Alternative gewesen sein. Allerdings gibt es bis heute für JSON kein elegantes Äquivalent zur funktionalen Programmierung mit XSLT auf XML, und 3D-Beschreibungssprachen wie COLLADA oder die 2D-Beschreibungssprache SVG sind immer noch ungeschlagen. Das war das scharfe an diesem GIS, für das ich auch einen netten Preis bekommen habe.

LG

pah

Prof. Dr. Peter Henning

Hier mal ein erster Schritt für die Umwandlung einer FHEM-Konfiguration in eine XML-Datei:


sub writeXML(){
  my $out = "<fhem>\n";
  foreach my $device (sort keys %defs) {
    my $type = $defs{$device}{TYPE};
    my $name = $defs{$device}{NAME};
    $out .= "  <$type ID=\"$name\">\n";
    foreach my $att (sort keys %{$attr{$name}} ){
      $out .= "      <$att>".$attr{$name}{$att}."</$att>\n";
    }
    $out .= "  </$type>\n";
  }
  $out .= "</fhem>\n";
  return $out;
}


LG

pah

Prof. Dr. Peter Henning

Ich habe noch weiter über die Sache nachgedacht (Wetter ist immer noch mies, Baumärkte zu...).

XMind bietet hier eigentlich keine Vorteile - denn die hierarchische Gliederung stimmt natürlich nicht immer mit den Strukturen inFHEM überein.

yEd wäre m.E. von den Grafikfähigkeiten her sehr viel besser, die Dateien sind auch einfaches XML und somit generierbar.

LG

pah

Beta-User

Unabhängig von der Frage des Frontends hier mal ein Versuch, das dahingehend zu erweitern, dass zumindest die aus NOTIFYDEF abzuleitenden Verbindungenen noch nach "linkedto" kommen:

sub writeXML {
  my $out = "<fhem>\n";
  for my $device (sort keys %defs) {
    my $type = $defs{$device}{TYPE};
    my $name = $defs{$device}{NAME};
    $out .= qq(<$type ID="$name">\n);
   
    if (defined $defs{$device}{NOTIFYDEV}) {
      my @andev;
      my @sndev = split /,/, $defs{$device}{NOTIFYDEV};
     
      for (@sndev){
        push @andev, devspec2array($_);
      }
      push my  @cleandev, grep { $_ !~ m{\Aglobal\z}xms } @andev;
      if (@cleandev) {
        $out .= '<linkedto>';
        $out .= join( " ", @cleandev );
        $out .= "</linkedto>\n";
      } 
    }
   
    for my $att (sort keys %{$attr{$name}} ){
      $out .= "      <$att>".$attr{$name}{$att}."</$att>\n";
    }
    $out .= "  </$type>\n";
  }
  $out .= "</fhem>\n";
  return $out;
}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Christoph Morrison

Ich möchte mal XML::Dumper in den Ring werfen, mit dem man Perl-Datenstrukturen in XML exportieren (und wieder importieren) kann. Darauf könnte man ein Stylesheet anwenden um eine menschenlesbarere Repräsentation von Daten zu bekommen - oder man transformiert $defs erstmal um.

Prof. Dr. Peter Henning

Ob nun das eine oder andere, zu beachten ist, dass man mit den {DEF}-Parametern nicht die Wohlgeformheit stört, also müssen z.B. "<" in "&lt;" umgewandelt werden.

Desweiteren sehen die Knoten für XMind (in der XML-Version) so aus:

<topic id="47d7uglkglem5b6dqs70ehta3g" modified-by="phenning"
                                    timestamp="1608704625429">
                                    <title>WZ.6x</title>
                                </topic>


und in der GraphML-Datei für yEd:

<node id="n1">
      <data key="d6">
        <y:ShapeNode>
          <y:Geometry height="65.0" width="299.0" x="634.5" y="609.0"/>
          <y:Fill color="#FFCC00" transparent="false"/>
          <y:BorderStyle color="#000000" type="line" width="1.0"/>
          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="24" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="31.9375" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="282.0625" x="8.46875" xml:space="preserve" y="16.53125">Perl Laufzeitumgebung<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
          <y:Shape type="roundrectangle"/>
        </y:ShapeNode>
      </data>
    </node>


Die Verbindungen in XMind ergeben sich durch die Anordnung in der Baumstruktur - das ist m.E. eben etwas zu unflexibel für FHEM. Den ganzen Attributkram für yEd könnte man in Default-Attribute auslagern.

LG


rudolfkoenig

Inspiriert durch diesen Thread habe ich weblink mit dem "associatedWith" Mode erweitert, was die bereits vorhandene, in ZWave und MQTT2_DEVICE fuer zigbee verwendbare Topologie-Darstellung mit der "Probably associated with" Beziehung  "kreuzt".

Angehaengt ist die Ausgabe von "defmod aw weblink associatedWith rgr_Residents 3" aus fhem.cfg.demo, wobei rgr_Residents der Ausgangspunkt (ein devspec) ist, und 3 die (optionale) Tiefe der Link-Verfolgung. Die Darstellung schaut am Anfang (noch) chaotischer aus, ich habs manuell sortiert.

Pax87

Klingt einleuchtend ! Und bietet eine gute Übersicht. Dies zusammen mit dem ersteren Design ergäbe für mich persönlich ein sehr respektables Ergbenis. Danke fürs Teilen. Lg

Maista

#25
Zitat von: rudolfkoenig am 23 Januar 2021, 18:42:04
Inspiriert durch diesen Thread habe ich weblink mit dem "associatedWith" Mode erweitert, was die bereits vorhandene, in ZWave und MQTT2_DEVICE fuer zigbee verwendbare Topologie-Darstellung mit der "Probably associated with" Beziehung  "kreuzt".

Angehaengt ist die Ausgabe von "defmod aw weblink associatedWith rgr_Residents 3" aus fhem.cfg.demo, wobei rgr_Residents der Ausgangspunkt (ein devspec) ist, und 3 die (optionale) Tiefe der Link-Verfolgung. Die Darstellung schaut am Anfang (noch) chaotischer aus, ich habs manuell sortiert.

Hallo Rudi.

Alter Beitrag, aber heute noch mal genauer durchgelesen nachdem ich etwas Zeit habe.

In der Hilfe zum weblink fehlt ein <br> bei
Zitat<code>
      define homepage weblink link http://fhem.de<br>
      define webcam_picture weblink image http://w.x.y.z/current.jpg<br>
      define interactive_webcam weblink iframe http://w.x.y.z/webcam.cgi<br>
      define hr weblink htmlCode &lt;hr&gt<br>
      define w_Frlink weblink htmlCode { WeatherAsHtml("w_Frankfurt") }<br>
      define systemCommands weblink cmdList
             pair:Pair:set+cul2+hmPairForSec+60
             restart:Restart:shutdown+restart
             update:UpdateCheck:update+check<br>
      define aw weblink associatedWith rgr_Residents 3
      </code>

In Bezug auf :
define aw weblink associatedWith rgr_Residents 3
schade das diese Funktion keine Beachtung in der Hilfe bekommen hat.
Ich wollte schon immer ein Überblick über meine FHEM-Installation haben und hatte vor Monaten etwas mit devspec2array und Graphviz rum probiert.
War jetzt Überrascht als ich das Define von deinem kurzen Satz bei mir probiert habe und das "rgr_Residents" durch den Device-Namen meiner HMCCU ersetzt habe :=)

Ein
defmod aw weblink associatedWith d_ccu 10
zeigt einiges auf.

Gibt es den die Möglichkeit das ganze von FHEM aus als zentraler Punkt zu sehen?
Ist das "global" ? Da wird der Platz knapp im Browser-Fenster. In Opera lässt sich das leider nicht nach Rechts scrollen.
Bei Auto-Layout verschiebt sich alles nach Rechts.

Könnte man die Ausgabe exportieren um sie dann mit Graphviz extern anschauen zu können?
Das hier z.B. https://graphviz.org/Gallery/twopi/twopi2.html sieht passend aus.

Danke auf diesem Wege für FHEM.

Gruss Gerd

rudolfkoenig

ZitatIn der Hilfe zum weblink fehlt ein <br> bei [...]
Danke, habs korrigiert.

ZitatGibt es den die Möglichkeit das ganze von FHEM aus als zentraler Punkt zu sehen?
Es verwendet die getPawList() (Probably Associated Width), was wiederum neben der Analyse der Definitionszeile auch das associatedWidth Reading auswertet (Komma oder Leerzeichen separierte Liste). Wenn man sich die Muehe macht, diese Readings zu pflegen, dann ist auch eine Gasamtansicht denkbar.

ZitatDa wird der Platz knapp im Browser-Fenster.
Endlich ein Grund fuer die Anschaffung eines grossen Monitors :)

ZitatBei Auto-Layout verschiebt sich alles nach Rechts.
Auto-Layout ist nicht prickelnd, aber man kann waehrend des Layouts, einzelne Elemente anfassen, und dran ziehen, schaut lustig aus.
Es ist eher als Ausgangspunkt fuer die manuelle Anpassung zu verwenden.

ZitatKönnte man die Ausgabe exportieren um sie dann mit Graphviz extern anschauen zu können?
Ich fuerchte da ist perl dein Freund in Kombination mit getPawList().
Oder eine beliebige Programmiersprache bei der Verwendung von "list -R"

Maista

Hallo Rudi,

danke fürs ändern und die Info.
Muss ich mir anschauen um was es da genauer geht :=)

ZitatEndlich ein Grund für die Anschaffung eines großen Monitors
Ich hab schon ein 27" und 19" Monitor aber die Ausgabe verschiebt sich ja erst einmal nach Rechts.
Ist halt eine Fleißarbeit wenn man das verschiebt.

Ich hab auch schon Beta-Users Code verwendet um das zu probieren.
Bekomme auch schon DOT-Datei ausgegeben aber noch etwas flach.

Gruß Gerd