Ankündigung

Einklappen
Keine Ankündigung bisher.

Generator für .conf-Files

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

    #46
    Ja klar!

    Ich habe das gleich aufgeteilt in einen State-Teil und einen Rules-Teil. Den State-Teil erzeuge ich immer über ein Template, weil der immer gleich ist und den Rules-Teil dann spezifisch. Erstmal das Template:

    autoblind.json
    Code:
    {
        "$schema": "../schema/ItemSchema.json",
        "autoBlind": {
            "State": {
                "suspended": {
                    "description": "Status: Automatik ist deaktiviert",
                    "type": "bool",
                    "value": false
                },
                "lock": {
                    "description": "Über dieses Item wird die Automatik gesperrt",
                    "type": "bool",
                    "value": false
                },
                "stateId": {
                    "cache": true,
                    "type": "str",
                    "visu_acl": "ro"
                },
                "stateName": {
                    "type": "str",
                    "cache": true,
                    "visu_acl": "ro"
                }
            },
            "Rules": {
                "type": "bool",
                "as_plugin": "active",
                "as_lock_item": "~~.State.lock",
                "as_suspend_item": "~~.State.suspended",
                "as_laststate_item_id": "~~.State.stateId",
                "as_laststate_item_name": "~~.State.stateName"
            }
        }
    }
    Das nutze ich dann im Hauptfile (oder in einem anderen Template) folgendermaßen:
    Code:
            "autoBlind": {
                "$template": { "source": "autoblind" },
                "Rules": {
                    "$templated": true,
                    "as_plugin": "active",
                    "as_startup_delay": 60,
                    "cycle": "300 = 1",
                    "as_item_Pos": "~~~.Pos.Set",
                    "as_item_IstOben": "~~~.IstOben",
                    "as_item_IstUnten": "~~~.IstUnten",
                    "as_item_Windalarm": "~.Wind.Windalarm",
                    "as_item_Regenalarm": "~.Regen",
                    "eval_trigger": [
                        "~.Wind.Windalarm",
                        "~.Regen",
                        "~~~.IstUnten",
                        "~~~.IstOben"
                    ],
                    "Windalarm": {
                        "name": "Gesperrt durch Windalarm",
                        "description": "Sperre durch Windalarm bleibt mindestens 10 Minuten an",
                        "as_set_Pos": "0",
                        "enter_Start": {
                            "as_value_Windalarm": 1
                        },
                        "enter_Stay": {
                            "as_min_age": 600,
                            "as_value_laststate": "~~"
                        }
                    },
                    "Regenalarm": {
                        "name": "Gesperrt durch Regenalarm",
                        "description": "Sperre durch Regenalarm bleibt mindestens 10 Minuten an",
                        "as_set_Pos": "0",
                        "enter_Start": {
                            "as_value_Regenalarm": 1
                        },
                        "enter_Stay": {
                            "as_min_age": 600,
                            "as_value_laststate": "~~"
                        }
                    },
                    "Nachtschaltung": {
                        "name": "Eingefahren - Nachts",
                        "description": "Markise wird nachts immer eingefahren",
                        "as_set_Pos": "0",
                        "enter": {
                            "as_min_time": "06:00",
                            "as_max_time": "22:00",
                            "as_negate_time": true
                        }
                    },
                    "IstUnten": {
                        "name": "Vollständig ausgefahren",
                        "description": "Markise ist jetzt vollstaendig ausgefahren",
                        "enter": {
                            "as_value_IstUnten": 1
                        }
                    },
                    "IstOben": {
                        "name": "Eingefahren",
                        "description": "Markise ist jetzt vollstaendig eingefahren",
                        "enter": {
                            "as_value_IstOben": 1
                        }
                    },
                    "Ausgefahren": {
                        "description": "Markise ist jetzt teilweise ausgefahren",
                        "name": "Ausgefahren"
                    }
                }
            }
    Ist jetzt ein stark vereinfachtes Beispiel. Aber es geht ja erstmal um die Syntax.
    Ich hoffe, es reicht Dir, sonst musst Du konkreter fragen, was Dir Probleme verursacht.

    Gruß, Waldemar
    OpenKNX www.openknx.de

    Kommentar


      #47
      super :-) Danke Dir

      Kommentar


        #48
        Noch eine Anmerkung: Wenn Du für autoblind eine default-Struktur aufbauen möchtest, auf die dann per as_use referenziert wird, so machst Du das mit Schema-Unterstützung genau so wie oben, nur brauchst Du nicht State zu definieren und setzt "as_plugin": "default".

        Ich nutze allerdings hauptsächlich die Templates, so dass as_use nicht wirklich nötig (aber möglich) ist.

        Gruß, Waldemar



        OpenKNX www.openknx.de

        Kommentar


          #49
          Hallo Waldemar,
          mit Templates zu arbeiten macht Spaß und spart natürlich viel Tipparbeit (bei 38 Raffstoren)- suppe Sache. Wie könnte ich in meinem autoplugin-Template folgendes einbauen?

          ich denke dies müsste ich ins autoblind_plugin -Schema einbauen, dies bin ich zur Zeit noch nicht alleine imstande..

          ich möchte damit damit den suspend-Modus realisieren wie von Dir bzw. offline im "Automatische Beschattung"-Thread als Beispiel vorgeschlagen.

          Code:
           
           eval = not sh.Eg.Kueche.Jalousie.Tuer.Manuell_Position() if sh.autoblind.is_changed_by(caller , source, ["Visu:*"]) else sh.Eg.Kueche.Jalousie.Tuer.Manuell_Position()
          und auch dies lässt sich nicht einbauen:

          Code:
           
           [[[[enter_manuell]]]]                 as_value_trigger_source = eval: autoblind_eval.get_item("manuell",1) [FONT=Arial][SIZE=15px][/SIZE][/FONT]
          Gruß und guten Rutsch ins 2016 Ivan

          Kommentar


            #50
            Hallo Ivan,

            auch Dir ein frohes neues Jahr!
            Es freut mich, das jemand meine "geistigen Ergüsse" wirklich nutzen kann! Leider bin ich noch bis zum 11.1. im Urlaub und kann die vielen Neuerungen, die offline im Plugin eingebaut hat, gar nicht ausprobieren geschweige denn in meinen Generator einbauen. Habe ich aber noch vor, nur muss ich erstmal ein funktionierendes Beispiel aufbauen, bevor das sinnvoll ins Schema kann. Ich möchte z.B. das Konzept von offline mit dem neuen Typ AbValue direkt auch vom Schema unterstützt sehen, aber das erfordert einen größeren Umbau, auch im Generator selbst.

            Langer Rede kurzer Sinn: Das wird noch dauern, wahrscheinlich nicht vor Ende Januar (ich kann nur am Wochenende meinem Hobby fröhnen).

            Die gute Nachricht: Der Generator lässt alles durch, was er nicht kennt, sofern man sich an die JSON-Syntax hält. Das betrifft primär die Anführungsstriche (") in den obigen Beispielen, die können so nicht stehen bleiben. Glücklicherweise lässt Python hier auch Hochkommata (') zu. Es muss also folgendermaßen aussehen:
            Code:
            "eval": "not sh.Eg.Kueche.Jalousie.Tuer.Manuell_Position() if sh.autoblind.is_changed_by(caller, source, ['Visu:*']) else sh.Eg.Kueche.Jalousie.Tuer.Manuell_Position()"
            Und das 2. Beispiel:
            Code:
            "enter_Manuell": {
                "as_value_trigger_source": "eval: autoblind_eval.get_item('manuell', 1)"
            }
            Ich kann es leider nicht ausprobieren, aber so sollte es gehen. Wenn nicht, schick mir den JSON-Ausschnitt, den Du notiert hast und den passenden Ausschnitt der conf-Datei, der daraus gemacht wurde, dann sehe ich wahrscheinlich, was da nicht läuft.

            Ich hab hier allerdings keine gute Internet-Verfügbarkeit, ich schaue zwar immer wieder per Handy rein, mit der Antwort kann es schon mal 1-2 Tage dauern, sorry.

            Gruß, Waldemar
            OpenKNX www.openknx.de

            Kommentar


              #51
              Hallo Waldemar,..

              der Tipp mit den Anführungsstrichen war hilfreich,.. DANKE

              auch beim 2.Beispiel habe ich in der conf. Datei bis auf die Anführungsstriche keinen Unterschied gesehen,..

              So eifrig wie offline programmiert, hast Du sicher einiges zu tun seine Neuerungen ins Schema einzubauen :-)

              Gruß + schönen Urlaub
              Ivan

              Kommentar


                #52
                Hallo Waldemar,

                hier mein aktuelles autoblind-Template

                Code:
                {
                    "$schema": "../schema/ItemSchema.json",
                    "autoBlind": {
                        
                        "State": {
                            "$order": 2,
                            "stateId": {
                                "type": "str",
                                "visu_acl": "ro",
                                "cache": true
                            },
                            "stateName": {
                                "type": "str",
                                "visu_acl": "ro",
                                "cache": true
                            },
                            "lock": {
                                "description": "Über dieses Item wird die Automatik eingeschalten",
                                "type": "bool",
                                "visu_acl": "rw",
                                "cache": true
                            },
                            "suspend": {
                                "description": "Status: Automatik ist deaktiviert",
                                "type": "bool",
                                "visu_acl": "ro",
                                "cache": true
                            },
                            "manuell_positionen": {
                                "type": "bool",
                                "name": "Manuelle Bedienung Positionen",
                                "eval": "not ~~.manuell_positionen() if sh.autoblind.is_changed_by(caller, source, ['Visu:*']) else ~~.manuell_positionen()",
                                "eval_trigger": "~~~~.Position | ~~~~.Lamellenposition"
                            },
                            "manuell": {
                                "type": "bool",
                                "name": "Manuelle Bedienung",
                                "eval": "not ~~.manuell()",
                                "eval_trigger": "~~~~.Auf_ab | ~~~~.Lamellenverstellung_stop"
                            },
                            "beschatten": {
                                "type": "bool",
                                "name": "manuelles Beschatten",
                                "visu_acl": "rw",
                                "cache": true
                            }
                        },
                        "Rules": {
                            "$order": 3,
                            "type": "bool",
                            "as_plugin": "active",
                            "eval_trigger": "~~~~~~.Trigger | ~~.State.manuell_positionen | ~~.State.manuell | ~~.State.suspend | ~~.State.lock",
                            //"cycle": "300 = 1",
                            "as_repeat_actions": "false",
                            //"as_lock_item": "~~.State.lock",
                            "as_laststate_item_id": "~~.State.stateId",
                            "as_laststate_item_name": "~~.State.stateName",
                            "as_item_Position": "~~~.Position",
                            "as_item_Lamellenposition": "~~~.Lamellenposition",
                            "as_item_Brightness_ost": "Wetterstation.Helligkeit.Ost",
                            "as_item_Brightness_sued": "Wetterstation.Helligkeit.Sued",
                            "as_item_Brightness_west": "Wetterstation.Helligkeit.West",
                            "as_item_tag": "System.Sonne.Tag",
                            "as_item_Daemmerung": "Wetterstation.Daemmerung",
                            "as_item_lock": "~~.State.lock",
                            "as_item_suspend": "~~.State.suspend",
                            "as_item_manuell": "~~.State.manuell",
                            "as_item_manuell_positionen": "~~.State.manuell_positionen",
                            "as_item_PositionGueltig": "~~~.Position_gueltig",
                            "as_item_ReferenzFahren": "~~~.ReferenzFahren",
                            //"as_item_suspend_end": "~~.State.suspend_end",
                            //"as_item_suspend_end": "~~.State.stateName",
                            "Lock": {
                                "$order": 1,
                                "type": "foo",
                                "name": "Automatik AUS",
                                "as_set_suspend": "False",
                                "enter": {
                                    "as_value_lock": "False"
                                }
                            },
                            "Suspend": {
                                "$order": 2,
                                "type": "foo",
                                "name": "Automatik ausgesetzt",
                                "as_set_suspend": "True",
                                "as_name": "eval: autoblind_eval.insert_suspend_time('..State.suspend', suspend_text='Ausgesetzt bis %X')",
                                //"as_set_suspend_end": "eval: autoblind_eval.insert_suspend_time('..State.suspend', suspend_text='Ausgesetzt bis %X')",
                                "enter_manuell_positionen": {
                                    "$order": 1,
                                    "as_value_trigger_source": "eval: autoblind_eval.get_relative_itemid('~~~~.State.manuell_positionen')"
                                },
                                "enter_manuell": {
                                    "$order": 2,
                                    "as_value_trigger_source": "eval: autoblind_eval.get_relative_itemid('~~~~.State.manuell')"
                                },
                                "enter_stay": {
                                    "$order": 3,
                                    "as_value_laststate": "var:current.state_id",
                                    "as_agemax_manuell": "var:item.suspend_time",
                                    "as_agemax_manuell_positionen": "var:item.suspend_time",
                                    "as_value_suspend": "True"
                                }
                            },
                            //"PositionUngueltig": {
                            //    "$order": 3,
                            //    "type": "foo",
                            //    "name": "Referenzfahrt erforderlich",
                            //    "as_set_ReferenzFahren": "True",
                            //    "enter": {
                            //        "as_value_PositionGueltig": "False"
                            //    }
                            //},
                            //"Referenzfahrt": {
                            //    "$order": 4,
                            //    "type": "foo",
                            //    "name": "Referenz fahren",
                            //    "as_set_ReferenzFahren": "False",
                            //    "enter": {
                            //        "as_value_ReferenzFahren": "True"
                            //    }
                            //},
                            "Morgendaemmerung": {
                                "$order": 10,
                                "type": "foo",
                                "name": "Morgendämmerung",
                                "enter": {
                                    "as_min_sun_altitude": "-5",
                                    "as_max_sun_azimut": "180",
                                    "as_max_Daemmerung": "30"
                                }
                            },
                            "Tag": {
                                "$order": 20,
                                "type": "foo",
                                "name": "Tag (statisch)",
                                "enter": {
                                    "as_min_sun_altitude": "5",
                                    "as_min_Daemmerung": "30"
                                }
                            },
                            "Abenddaemmerung": {
                                "$order": 30,
                                "type": "foo",
                                "name": "Abenddämmerung",
                                "enter": {
                                    "as_max_sun_altitude": "5",
                                    "as_min_sun_altitude": "-5",
                                    "as_min_sun_azimut": "180",
                                    "as_max_Daemmerung": "30"
                                }
                            },
                            "Nacht": {
                                "$order": 40,
                                "type": "foo",
                                "name": "Nacht",
                                "enter": {
                                    "as_max_sun_altitude": "-5",
                                    "as_max_Daemmerung": "30"
                                }
                            },
                            "Sonne_ost": {
                                "$order": 41,
                                "type": "foo",
                                "name": "Sonne im Osten",
                                "enter": {
                                    "as_min_sun_altitude": "11",
                                    "as_max_sun_azimut": "135"
                                }
                            }
                        }
                    }
                }
                das jalousie-Template
                Code:
                {
                  "$schema": "../schema/ItemSchema.json",
                    "Jalousie": {
                        "Auf_ab": {
                            "type": "bool",
                            "visu": "yes",
                            "visu_acl": "rw",
                            "enforce_updates": true,
                            "knx_dpt": "1",
                            "knx_send": "3/-/-"
                        },
                        "Lamellenverstellung_stop": {
                            "type": "bool",
                            "visu": "yes",
                            "visu_acl": "rw",
                            "enforce_updates": true,
                            "knx_dpt": "1",
                            "knx_send": "3/-/+1"
                        },
                        "Position": {
                            "type": "num",
                            "cache": true,
                            "visu": "yes",
                            "visu_acl": "rw",
                            "knx_dpt": "5.001",
                            "knx_send": "9/-/-",
                            "knx_listen": "10/-/-"
                        },
                        "Lamellenposition": {
                            "type": "num",
                            "cache": true,
                            "visu": "yes",
                            "visu_acl": "rw",
                            "knx_dpt": "5.001",
                            "knx_send": "9/-/+1",
                            "knx_listen": "10/-/+1"
                        },
                        "Position_gueltig": {
                            "type": "bool",
                            "cache": true,
                            "visu_acl": "ro",
                            "knx_dpt": "1",
                            "knx_listen": "10/-/+2",
                            "knx_init": "10/-/+2"
                        },
                        "ReferenzFahren": {
                            "type": "bool",
                            "knx_dpt": "1",
                            "knx_send": "3/-/+2"
                        },
                        "Automatik_sperren": {
                            "type": "bool",
                            "cache": true,
                            "visu_acl": "rw"
                        },
                        "autoBlind": {
                            "$template": { "source": "autoblind" },
                            "Rules": {
                                "$templated": true,
                                "as_plugin": "active"
                            }
                        }
                    }
                }
                Auszug aus dem Erdgeschoss json:

                Code:
                {
                    "$schema": "../schema/ItemSchema.json",
                    "Eg": {
                        "Trigger": {
                            "$order": 1,
                            "type": "bool",
                            "enforce_updates": true,
                            "cycle": "300 = 1"
                        },
                        "Kueche": {
                            "Jalousie": {
                                "Alle": {
                                    "name": "Kueche Alle",
                                    "Auf_ab": {
                                        "type": "bool",
                                        "visu": "yes",
                                        "visu_acl": "rw",
                                        "enforce_updates": true,
                                        "knx_dpt": "1",
                                        "knx_send": "3/0/61 | 3/0/64 | 3/0/67"
                                    },
                                    "Lamellenverstellung_stop": {
                                        "type": "bool",
                                        "visu": "yes",
                                        "visu_acl": "rw",
                                        "enforce_updates": true,
                                        "knx_dpt": "1",
                                        "knx_send": "3/0/62 | 3/0/65 | 3/0/68"
                                    },
                                    "Position": {
                                        "type": "num",
                                        "cache": true,
                                        "visu": "yes",
                                        "visu_acl": "rw",
                                        "knx_dpt": "5.001",
                                        "knx_send": "9/0/61 | 9/0/64 | 9/0/67"
                                    },
                                    "Lamellenposition": {
                                        "type": "num",
                                        "cache": true,
                                        "visu": "yes",
                                        "visu_acl": "rw",
                                        "knx_dpt": "5.001",
                                        "knx_send": "9/0/62 | 9/0/65 | 9/0/68"
                                    }
                                },
                                "Tuer": {
                                    "name": "Kueche Tuer",
                                    "$template": {
                                        "source": "jalousie",
                                        "knx": "0/0/61"
                                    },
                                    "autoBlind": {
                                        "Rules": {
                                            "$templated": true,
                                            "as_plugin": "active",
                                            "name": "Raffstore EG Küche Tür",
                                            "Abenddaemmerung": {
                                                "as_set_Position": "50",
                                                "as_set_Lamellenposition": "50"
                                            },
                                            "Morgendaemmerung": {
                                                "as_set_Lamellenposition": "50"
                                            },
                                            "Nachfuehren": {
                                                "type": "foo",
                                                "name": "Tag (nachführen)",
                                                "as_set_Position": "60",
                                                "as_set_Lamellenposition": "eval:int((sh.System.Sonne.Hoehe())*90/45)",
                                                "enter_sonne_ost": {
                                                    "as_min_Brightness_ost": "20000",
                                                    "as_min_sun_altitude": "15",
                                                    "as_min_sun_azimut": "124",
                                                    "as_max_sun_azimut": "233"
                                                },
                                                "enter_sonne_sued": {
                                                    "as_min_Brightness_sued": "20000",
                                                    "as_min_sun_altitude": "15",
                                                    "as_min_sun_azimut": "124",
                                                    "as_max_sun_azimut": "233"
                                                },
                                                "enter_sonne_west": {
                                                    "as_min_Brightness_west": "20000",
                                                    "as_min_sun_altitude": "15",
                                                    "as_min_sun_azimut": "124",
                                                    "as_max_sun_azimut": "233"
                                                },
                                                "leave_todark": {
                                                    "as_max_Brightness_ost": "10000",
                                                    "as_max_Brightness_sued": "10000",
                                                    "as_max_Brightness_west": "10000",
                                                    "as_min_delay": "1200"
                                                },
                                                "leave_sun_azimut": {
                                                    "as_min_sun_azimut": "124",
                                                    "as_max_sun_azimut": "233",
                                                    "as_negate_sun_azimut": true
                                                },
                                                "leave_sun_altitude": {
                                                    "as_max_sun_altitude": "19"
                                                }
                                            },
                                            "Nacht": {
                                                "as_set_Position": "100",
                                                "as_set_Lamellenposition": "70"
                                            },
                
                                            "Tag": {
                                                "as_set_Position": "40",
                                                "as_set_Lamellenposition": "0"
                                            }
                                        }
                                    }
                                },
                als nächstes möchte ich das manuelle Beschatten (Nachführen) realisieren ( über Button in der Visu)

                und die Referenzfahrt, automatisieren,..

                da die Zeit Aufgrund von Family und Bau natürlich recht knapp ist, geht alles recht schleichend voran..


                Gruß Ivan

                Kommentar


                  #53
                  Hi Ivan,

                  ich schau mir das gerne an, aber ich bin noch im Urlaub und erst am 11.1. wieder zu Hause. Und dann muss ich erstmal alle Neuerungen von offline verstanden haben... Sorry, aber da ich nur am WE was machen kann, wird es erst am 16. was mit konkreten Verbesserungsvorschlägen.

                  Was ich im anderen Thread meinte: Deine Zeile

                  Code:
                   
                                       "as_value_trigger_source": "eval: autoblind_eval.get_relative_itemid('~~~~.State.manuell_positionen')"
                  macht einfach keinen Sinn, da schon
                  Code:
                   
                   ~~~~.State.manuell_positionen
                  eine relative Item-Id ist! Die wird vom Generator auf eine absolute ID umgesetzt, und die Funktion von offline macht nichts. Ohne es ausprobiert zu haben sollte an der Stelle normal
                  Code:
                  "as_value_trigger_source": "~~~~.State.manuell_positionen"
                  stehen können, und dann hast Du keine Probleme mehr mit Hochkommata!

                  Gruß, Waldemar
                  OpenKNX www.openknx.de

                  Kommentar


                    #54
                    Hallo Waldemar,

                    wie krieg ich denn die Umlaute vom .json richtig in die .conf.
                    Ich muss sicher im Visual Studio die Codierung richtig einstellen?

                    aus
                    Code:
                    "name": "Abenddämmerung",
                    wird in der .conf

                    Code:
                    name = Abendd�mmerung
                    Gruß Ivan

                    Kommentar


                      #55
                      Hi,

                      sollte eigentlich nicht passieren, bei mir klappt das ohne weiteres... um das rauszufinden, müsstest Du mir bitte ein bei Dir erzeugtes .json- und .conf-File zuschicken (gerne per PN), da File muss nur ein Item enthalten, mit Umlauten im name. Ich schau dann mal, ob es bei mir damit reproduzierbar ist und was ich ändern muss.

                      Gruß, Waldemar
                      OpenKNX www.openknx.de

                      Kommentar


                        #56
                        Hallo Waldemar,

                        ich hab den Tag heute genutzt, um auf deinen Code Generator umzusteigen. Echt klasse Arbeit!!!

                        Das hat eigentlich bis gerade eben auch alles ohne Probleme funktioniert. Jetzt bekomme ich aber plötzlich die gleichen Fehlermeldungen im Debugger wie Ivan sie schon hatte, mit dem Unterschied, dass die Conf Generierung durchläuft soweit ich das sehe.

                        Code:
                        "json2conf.vshost.exe" (CLR v4.0.30319: json2conf.vshost.exe): "C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
                        "json2conf.vshost.exe" (CLR v4.0.30319: json2conf.vshost.exe): "C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.HostingProcess.Utilities\14.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.HostingProcess.Utilities.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
                        "json2conf.vshost.exe" (CLR v4.0.30319: json2conf.vshost.exe): "C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
                        "json2conf.vshost.exe" (CLR v4.0.30319: json2conf.vshost.exe): "C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
                        "json2conf.vshost.exe" (CLR v4.0.30319: json2conf.vshost.exe): "C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Drawing\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
                        "json2conf.vshost.exe" (CLR v4.0.30319: json2conf.vshost.exe): "C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.HostingProcess.Utilities.Sync\14.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.HostingProcess.Utilities.Sync.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
                        "json2conf.vshost.exe" (CLR v4.0.30319: json2conf.vshost.exe): "C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.Debugger.Runtime\14.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.Debugger.Runtime.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
                        "json2conf.vshost.exe" (CLR v4.0.30319: json2conf.vshost.exe): "C:\Users\Thomas\Source\Repos\smarthome-json-2-conf\json2conf\bin\Debug\json2conf.vshost.exe" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
                        "json2conf.vshost.exe" (CLR v4.0.30319: json2conf.vshost.exe): "C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
                        "json2conf.vshost.exe" (CLR v4.0.30319: json2conf.vshost.exe): "C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.IO.Compression\v4.0_4.0.0.0__b77a5c561934e089\System.IO.Compression.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
                        "json2conf.vshost.exe" (CLR v4.0.30319: json2conf.vshost.exe): "C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.IO.Compression.FileSystem\v4.0_4.0.0.0__b77a5c561934e089\System.IO.Compression.FileSystem.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
                        "json2conf.vshost.exe" (CLR v4.0.30319: json2conf.vshost.exe): "C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml.Linq\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.Linq.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
                        "json2conf.vshost.exe" (CLR v4.0.30319: json2conf.vshost.exe): "C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Data.DataSetExtensions\v4.0_4.0.0.0__b77a5c561934e089\System.Data.DataSetExtensions.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
                        "json2conf.vshost.exe" (CLR v4.0.30319: json2conf.vshost.exe): "C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Microsoft.CSharp\v4.0_4.0.0.0__b03f5f7f11d50a3a\Microsoft.CSharp.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
                        "json2conf.vshost.exe" (CLR v4.0.30319: json2conf.vshost.exe): "C:\Windows\Microsoft.Net\assembly\GAC_32\System.Data\v4.0_4.0.0.0__b77a5c561934e089\System.Data.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
                        "json2conf.vshost.exe" (CLR v4.0.30319: json2conf.vshost.exe): "C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
                        Der Thread 0x2f3c hat mit Code 0 (0x0) geendet.
                        Der Thread 0x2fd8 hat mit Code 0 (0x0) geendet.
                        "json2conf.vshost.exe" (CLR v4.0.30319: json2conf.vshost.exe): "C:\Users\Thomas\Source\Repos\smarthome-json-2-conf\json2conf\bin\Debug\json2conf.exe" geladen. Symbole wurden geladen.
                        "json2conf.vshost.exe" (CLR v4.0.30319: json2conf.vshost.exe): "C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Accessibility\v4.0_4.0.0.0__b03f5f7f11d50a3a\Accessibility.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
                        "json2conf.vshost.exe" (CLR v4.0.30319: json2conf.vshost.exe): "C:\Users\Thomas\Source\Repos\smarthome-json-2-conf\json2conf\bin\Debug\Newtonsoft.Json.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
                        "json2conf.vshost.exe" (CLR v4.0.30319: json2conf.vshost.exe): "C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Numerics\v4.0_4.0.0.0__b77a5c561934e089\System.Numerics.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
                        Ausnahme ausgelöst: "Newtonsoft.Json.JsonException" in Newtonsoft.Json.dll
                        Ausnahme ausgelöst: "Newtonsoft.Json.JsonException" in Newtonsoft.Json.dll
                        Ausnahme ausgelöst: "Newtonsoft.Json.JsonException" in Newtonsoft.Json.dll
                        Ausnahme ausgelöst: "Newtonsoft.Json.JsonException" in Newtonsoft.Json.dll
                        "json2conf.vshost.exe" (CLR v4.0.30319: json2conf.vshost.exe): "C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll" geladen. Das Laden von Symbolen wurde übersprungen. Das Modul ist optimiert, und die Debugoption "Nur eigenen Code" ist aktiviert.
                        
                        *** Messages ****************************************
                        AutoBlind reference not found: as_item_Nma, referenced in File: items\EG_states_config.json, Path: EG.Zentral.State.AutoBlind.Rules.Present.as_run_Nma
                        AutoBlind reference not found: as_item_Nma, referenced in File: items\EG_states_config.json, Path: EG.Zentral.State.AutoBlind.Rules.Present_during_night.as_run_Nma
                        AutoBlind reference not found: as_item_Nma, referenced in File: items\EG_states_config.json, Path: EG.Zentral.State.AutoBlind.Rules.Present_after_night.as_run_Nma
                        AutoBlind reference not found: as_item_Nma, referenced in File: items\EG_states_config.json, Path: EG.Zentral.State.AutoBlind.Rules.Absent.as_run_Nma
                        Item not found: ~~~~.Praesenz, referenced in File: items\EG_states_config.json, Path: EG.Zentral.State.AutoBlind.Rules.eval_trigger
                        Item not found: EG.Zentral.Praesenz.allrooms, referenced in File: items\EG_states_config.json, Path: EG.Zentral.State.AutoBlind.Rules.eval_trigger
                        Item not found: EG.Zentral.State.AutoBlind.State.suspend, referenced in File: items\EG_states_config.json, Path: EG.Zentral.State.AutoBlind.Rules.eval_trigger
                        Item not found: ~~~~.Praesenz, referenced in File: items\EG_states_config.json, Path: EG.Zentral.State.AutoBlind.Rules.as_item_PrecenceRooms
                        Item not found: ~~~~.Status.Nacht_Tag, referenced in File: items\EG_states_config.json, Path: EG.Zentral.State.AutoBlind.Rules.as_item_NightDay
                        Item not found: ~~~~.Beleuchtung.Aus, referenced in File: items\EG_states_config.json, Path: EG.Zentral.State.AutoBlind.Rules.as_item_CentralOff
                        Item not found: *.anwesend, referenced in File: items\EG_Zentral.json, Path: EG.Zentral.Praesenz.Allrooms.eval_trigger
                        
                        Der Thread 0x12f8 hat mit Code 0 (0x0) geendet.
                        Der Thread 0x2e60 hat mit Code 0 (0x0) geendet.
                        Das Programm "[7924] json2conf.vshost.exe" wurde mit Code 0 (0x0) beendet.
                        Dann zu den Meldungen noch eine Frage.
                        as_item_Nma ist klar, kann er nicht finden, da noch nicht ins VS Projekt integriert.
                        Die Item not found Meldungen verstehe ich aber nicht. Alle Objekte werden im separaten File EG_Zentral.json generiert. Die Prüfung ob Items vorhanden sind läuft doch bestimmt über das gesamte Projekt oder?

                        Hier noch die EG_states_config.json
                        Code:
                        {
                          "$schema": "../schema/ItemSchema.json",
                          "EG": {
                            "Zentral": {
                              "State": {
                                "autoBlind": {
                                  "$template": { "source": "autoblind_gen" },
                                  "Rules": {
                                    "$templated": true,
                                    "as_plugin": "active",
                                    "as_startup_delay": 60,
                                    "as_repeat_actions": false,
                                    "name": "Zustandsautomat EG",
                                    "eval_trigger": [
                                      "~~~~.Praesenz.allrooms",
                                      "~~.State.lock",
                                      "~~.State.suspend"
                                    ],
                        
                                    "as_item_PrecenceRooms": "~~~~.Praesenz.allrooms",
                                    "as_item_NightDay": "~~~~.Status.Nacht_Tag",
                                    "as_item_CentralOff": "~~~~.Beleuchtung.Aus",
                        
                                    "Present": {
                                      "type": "foo",
                                      "name": "EG Status Anwesend Tag",
                                      "as_run_Nma": "eval:(sh.nma('Präsenz','EG Wohnung Status Anwesend Tag'))",
                                      "enter": {
                                        "as_value_PrecenceRooms": "1"
                                      }
                                    },
                                    "Present_during_night": {
                                      "type": "foo",
                                      "name": "EG Status Anwesend Nacht",
                                      "as_run_Nma": "eval:(sh.nma('Präsenz','EG Status Anwesend Nacht'))",
                                      "enter": {
                                        "as_value_PrecenceRooms": "0",
                                        "as_value_NightDay": "0"
                                      }
                                    },
                                    "Present_after_night": {
                                      "type": "foo",
                                      "name": "EG Status Abwesenheitsverzögerung",
                                      "as_run_Nma": "eval:(sh.nma('Präsenz','EG Status Abwesenheitsverzögerung'))",
                                      "enter": {
                                        "as_value_PrecenceRooms": "0",
                                        "as_value_NightDay": "1",
                                        "as_value_laststate": "~~~.Present_during_night"
                                      }
                                    },
                                    "Absent": {
                                      "type": "foo",
                                      "name": "EG Abwesend",
                                      "as_set_CentralOff": "value:0",
                                      "as_run_Nma": "eval:(sh.nma('Präsenz','EG Wohnung Status Abwesend'))",
                                      "enter": {
                                        "as_value_PrecenceRooms": "0",
                                        "as_value_NightDay": "1",
                                        "as_value_laststate": "~~~.Present_after_night",
                                        "as_negate_laststate": "True"
                                      },
                                      "enter_after_night": {
                                        "as_value_laststate": "~~~.Present_after_night",
                                        "as_value_PrecenceRooms": "0",
                                        "as_value_NightDay": "1",
                                        "as_min_time": "12:00"
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                        Und die EG_Zentral.json

                        Code:
                        {
                          "$schema": "../schema/ItemSchema.json",
                          "EG": {
                            "Zentral": {
                              "Beleuchtung": {
                                "Aus": {
                                  "type": "bool",
                                  "visu_acl": "rw",
                                  "knx_dpt": "1",
                                  "knx_send": "0/2/50",
                                  "knx_cache": "0/2/50",
                                  "enforce_updates": true
                                }
                              },
                              "Status": {
                                "Nacht_Tag": {
                                  "type": "bool",
                                  "visu_acl": "rw",
                                  "knx_dpt": "1",
                                  "knx_send": "0/2/10",
                                  "knx_cache": "0/2/10",
                                  "cache": true,
                                  "crontab": "0 6 * 0,1,2,3,4 = 1 | 0 7 * 5,6 = 1"
                                },
                                "Schlafen": {
                                  "type": "bool",
                                  "visu_acl": "rw",
                                  "knx_dpt": "1",
                                  "knx_send": "0/2/13",
                                  "knx_cache": "0/2/13",
                                  "knx_reply": "0/2/13"
                                }
                              },
                              "Heizung": {
                                "Komfort": {
                                  "type": "bool",
                                  "visu_acl": "rw",
                                  "knx_dpt": "1",
                                  "knx_send": "0/2/58"
                                },
                                "Standby": {
                                  "type": "bool",
                                  "visu_acl": "rw"
                                },
                                "Nacht": {
                                  "type": "bool",
                                  "visu_acl": "rw",
                                  "knx_dpt": "1",
                                  "knx_send": "0/2/59"
                                },
                                "Frostschutz": {
                                  "type": "bool",
                                  "visu_acl": "rw",
                                  "knx_dpt": "1",
                                  "knx_send": "0/2/60"
                                },
                                "Sperren": {
                                  "type": "bool",
                                  "visu_acl": "rw",
                                  "knx_dpt": "1",
                                  "knx_send": "0/2/61"
                                },
                                "Winter_sommer": {
                                  "type": "bool",
                                  "visu_acl": "rw",
                                  "knx_dpt": "1",
                                  "knx_cache": "0/2/64",
                                  "knx_send": "0/2/64",
                                  "cache": true
                                },
                                "Stoerung": {
                                  "type": "bool",
                                  "visu_acl": "ro",
                                  "knx_dpt": "1",
                                  "knx_send": "0/2/66",
                                  "knx_init": "0/2/66",
                                  "knx_listen": "0/2/66"
                                }
                              },
                              "Rollo": {
                                "Move": {
                                  "type": "bool",
                                  "visu_acl": "rw",
                                  "knx_dpt": "1",
                                  "knx_send": "0/2/52",
                                  "enforce_updates": true
                                },
                                "Stop": {
                                  "type": "bool",
                                  "visu_acl": "rw",
                                  "knx_dpt": "1",
                                  "knx_send": "0/2/53",
                                  "enforce_updates": true
                                },
                                "Shade": {
                                  "type": "bool",
                                  "visu_acl": "rw",
                                  "knx_dpt": "1",
                                  "knx_send": "0/2/56",
                                  "enforce_updates": true,
                                  "knx_cache": "0/2/56"
                                },
                                "Night": {
                                  "type": "bool",
                                  "visu_acl": "rw",
                                  "knx_dpt": "1",
                                  "knx_send": "0/2/57",
                                  "enforce_updates": true,
                                  "knx_cache": "0/2/57"
                                },
                                "Auto_lock": {
                                  "type": "bool",
                                  "visu_acl": "rw",
                                  "knx_dpt": "1",
                                  "knx_cache": "0/2/55",
                                  "knx_send": "0/2/55",
                                  "enforce_updates": true,
                                  "cache": true
                                },
                                "Auto_shade": {
                                  "type": "bool",
                                  "visu_acl": "rw",
                                  "enforce_updates": true,
                                  "cache": true
                                }
                              },
                              "Aus": {
                                "type": "bool",
                                "visu_acl": "rw",
                                "knx_dpt": "1",
                                "knx_send": "0/2/3",
                                "knx_listen": "0/2/3",
                                "knx_reply": "0/2/3",
                                "enforce_updates": true
                              },
                              "Praesenz": {
                                "Anwesenheit": {
                                  "type": "bool",
                                  "visu_acl": "rw",
                                  "knx_dpt": "1",
                                  "knx_send": "0/2/2",
                                  "knx_cache": "0/2/2",
                                  "knx_reply": "0/2/2"
                                },
                                "Allrooms": {
                                  "type": "bool",
                                  "visu_acl": "ro",
                                  "enforce_updates": true,
                                  "eval": "or",
                                  "eval_trigger": "*.anwesend",
                                  "cache": true
                                }
                              }
                            }
                          }
                        }

                        Kommentar


                          #57
                          Hi firefox,

                          erstmal Danke für die Blumen. Mir ist nur wichtig, zu betonen, dass es sicherlich kein "End-User-Tool" ist, sondern eher ein komfortabler Editor mit ein paar Zusatzfunktionen (zumidest besser als der Notepad, Vi etc.)

                          Zitat von firefox Beitrag anzeigen
                          Das hat eigentlich bis gerade eben auch alles ohne Probleme funktioniert. Jetzt bekomme ich aber plötzlich die gleichen Fehlermeldungen im Debugger wie Ivan sie schon hatte, mit dem Unterschied, dass die Conf Generierung durchläuft soweit ich das sehe.

                          ...
                          Code:
                          *** Messages ****************************************
                          AutoBlind reference not found: as_item_Nma, referenced in File: items\EG_states_config.json, Path: EG.Zentral.State.AutoBlind.Rules.Present.as_run_Nma
                          AutoBlind reference not found: as_item_Nma, referenced in File: items\EG_states_config.json, Path: EG.Zentral.State.AutoBlind.Rules.Present_during_night.as_run_Nma
                          AutoBlind reference not found: as_item_Nma, referenced in File: items\EG_states_config.json, Path: EG.Zentral.State.AutoBlind.Rules.Present_after_night.as_run_Nma
                          AutoBlind reference not found: as_item_Nma, referenced in File: items\EG_states_config.json, Path: EG.Zentral.State.AutoBlind.Rules.Absent.as_run_Nma
                          Item not found: ~~~~.Praesenz, referenced in File: items\EG_states_config.json, Path: EG.Zentral.State.AutoBlind.Rules.eval_trigger
                          Item not found: EG.Zentral.Praesenz.allrooms, referenced in File: items\EG_states_config.json, Path: EG.Zentral.State.AutoBlind.Rules.eval_trigger
                          Item not found: EG.Zentral.State.AutoBlind.State.suspend, referenced in File: items\EG_states_config.json, Path: EG.Zentral.State.AutoBlind.Rules.eval_trigger
                          Item not found: ~~~~.Praesenz, referenced in File: items\EG_states_config.json, Path: EG.Zentral.State.AutoBlind.Rules.as_item_PrecenceRooms
                          Item not found: ~~~~.Status.Nacht_Tag, referenced in File: items\EG_states_config.json, Path: EG.Zentral.State.AutoBlind.Rules.as_item_NightDay
                          Item not found: ~~~~.Beleuchtung.Aus, referenced in File: items\EG_states_config.json, Path: EG.Zentral.State.AutoBlind.Rules.as_item_CentralOff
                          Item not found: *.anwesend, referenced in File: items\EG_Zentral.json, Path: EG.Zentral.Praesenz.Allrooms.eval_trigger
                          Normalerweise kannst Du alle Meldungen vor "Messages" ignorieren. Der .NET-Debugger informiert da nur über alle geladenen DLLs und ob diese mit oder ohne Source geladen wurden, ob man somit Source-Breakpoints sehen kann. Wenn man kein C# kann, ist das eher uninteressant.
                          Ab "Messages" gebe ich die Infos aus...

                          Zitat von firefox Beitrag anzeigen
                          Die Item not found Meldungen verstehe ich aber nicht. Alle Objekte werden im separaten File EG_Zentral.json generiert. Die Prüfung ob Items vorhanden sind läuft doch bestimmt über das gesamte Projekt oder?
                          Tja - leider nicht. Natürlich ist mir klar, dass ich das machen sollte... allerdings habe ich hier ein Problem. So wie ich das Ganze angefangen habe, wird alles File-by-File abgearbeitet und die relativen Referenzen werden NACH der Konvertierung ins .conf-Format über eine Reguläre Expression ersetzt. Damit leider auch nur File-by-File. Somit ist das ein größerer Umbau. Ich habe zwar eine Idee, wie ich das machen kann, aber da ich es noch nicht brauchte, habe ich es bisher sein gelassen. Bei mir ist es nur an 2 Stellen vorgekommen, da habe ich dann absolute Pfade eingesetzt.

                          Das wäre auch der kurzfristige Workaround, den ich im Augenblick vorschlagen kann. Ich bin derzeit Zeitlich ziemlich unter Druck (in 3 Wochen kommt unser 3. Kind und der Dachboden muss bis dahin fertig sein), deswegen kann ich leider keine kurzfristige Korrektur versprechen (außer in der Bahn auf einer meiner Dienstreisen, das lässt sich aber schlecht planen bzw. versprechen). Ich will das auf jeden Fall noch machen, offen ist nur, wann!

                          Sorry, aber das ist leider Stand der Dinge...

                          Gruß, Waldemar

                          P.S.: Übrigens werden die relativen Adressen durchaus ersetzt (der Pfad nach oben ist ja ermittelbar), was ich nur nicht korrekt mache, ist bei dieser Gelegenheit zu überprüfen, ob das adressierte Item schon da ist! Das muss ich anders implementieren. So gesehen ist nur die Meldung falsch - wenn das Ziel-Item da ist, funktioniert alles.
                          Zuletzt geändert von mumpf; 01.02.2016, 10:16. Grund: P.S. ergänzt
                          OpenKNX www.openknx.de

                          Kommentar


                            #58
                            Hi firefox,

                            bin gerade in der Bahn und hab mal den Debugger angeschmissen - ich habe Unsinn erzählt, ich mache bereits globale Prüfungen (z.B. für Autoblind-Item-Referenzen, da gibt es ja viele) , ich habe nur einen falschen Datensatz in die Liste der zu vergleichenden Objekte reingesteckt.

                            Ich kann aber nicht kurzfristig eine neue Version schnüren, da ich schon seit einiger Zeit an 1-Wire-Erweiterungen in meinem Generator arbeite (die 1-Wire-Adressen sollen in Templates ähnlich den KNX-Adressen ersetzt werden können). Dieser Teil ist nicht fertig und noch recht buggy.

                            Deswegen kommt jetzt die Patch-Anweisung:
                            Suche bitte im File ConvertJson2Conf.cs nach dem String "ItemRefrence(lMatch.ToString()," und mach daraus "ItemRefrence(lPath," (jeweils ohne die Anführungsstriche).

                            Das war es erstmal, damit verschwinden die angemeckerten relativen Referenzen über mehrere Files. Allerdings kommt jetzt manchmal bei wirklich falschen Referenzen die Meldung doppelt - da muss ich noch forschen. Für die Funktionalität ist das aber - soweit ich das hier sehen kann - nicht kritisch.

                            Hoffe das hilft erstmal,
                            Gruß, Waldemar
                            OpenKNX www.openknx.de

                            Kommentar


                              #59
                              Zitat von ivande Beitrag anzeigen
                              wie krieg ich denn die Umlaute vom .json richtig in die .conf.
                              Ich muss sicher im Visual Studio die Codierung richtig einstellen?

                              Gruß Ivan
                              Hallo Ivan,

                              genau richtig, an der Codierung liegt es - ich dachte, dass das .conf-File die falsche Codierung hat, was aber nicht sein kann, da ich das als UTF-8 generiere. Es ist aber das .json-File, das muss wohl auch auf UTF-8 sein. Bei mir werden die automatisch als UTF-8 angelegt, wenn ich "Add New Item" mache, deswegen kann ich Dir nicht sagen, warum das bei Dir nicht so ist.

                              Du musst jetzt jedes .json-File öffnen (per Doppelclick), dann im Menü auf "Save As..." gehen, im Save-Dialog den Dateinamen so lassen und auf den kleinen Dropdown-File neben dem Save-Button clicken. Dann erscheint eine Dropdown mit "Save with encoding", das wählst Du aus, bestätigst, dass Du das existierende File überscheiben willst und anschließend siehst Du einen Dialog, in dem Du das Encoding auswählen kannst. Da nimmst Du bitte "UTF-8 (Unicode without signature) - Codepage 65001" und speicherst das.

                              Für zuküfntige .json-Files würde ich Dir empfehlen, ein existierendes zu kopieren und umzubenennen, dann musst Du am encoding nichts mehr ändern.

                              Gruß, Waldemar
                              OpenKNX www.openknx.de

                              Kommentar


                                #60
                                Hallo Waldemar

                                DANKE

                                mit den Umlauten passt es jetzt :-)

                                Kommentar

                                Lädt...
                                X