Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate

Developer

Privat

Developer that contributes stuff to the ioBroker project

Beiträge


  • Adapter mihome-vacuum anpassungen
    IssiI Issi

    @Siggi0904
    die eine Zeile sagt nicht viel aus da brauche ich mehr Infos. Hast du den vorherigen Adapter ganz gelöscht und neu über git instaliert ?

    falls du noch mehr Log hast, bitte posten oder beschreiben, wann der Fehler kommt.

    Entwicklung vacuum adapter entwicklung test roborock zeitplan raumreinigung

  • Test Adapter sun2000 v0.1.x - Huawei Wechselrichter
    B bolliy

    bei dem Tageswert muss der "type": "deltaReset" sein; bei dem Gesamtverbrauch sonst "type": "delta"

    Tester adapter emma huawei inverter luna2000 modbus tcp modbus-proxy sdongle smartlogger sun2000

  • [gelöst] VIS2.0 Einstell - Body overflow - Fire HD 10 Tablet
    OliverIOO OliverIO

    @Cyberraph

    Schau mal mit den Web Developer Tools vom Browser mit F12 nach
    Jedes Widget müsste eine einheitliche CSS Klasse haben.
    Damit müsstest du mit einer Anweisung allen Widgets dies zuordnen können.

    Einsteigerfragen

  • ich brauche etwas Nachhilfe mit Node Red und RS232
    OliverIOO OliverIO

    @andibr sagte:

    relativ einfach ein Datenpunkt für den Iobroker

    ist schon fertig. macht es bei mir schon so und ist im obigen flow enthalten.
    habe aber gerade festgestellt, das das mit in neuen flow importieren nicht richtig klappt.
    flow oben heißt
    flow 1
    wenn du den schon hast, dann vorher umbenennen

    Node-Red

  • Test Adapter sun2000 v0.1.x - Huawei Wechselrichter
    B bolliy

    @juggi1962 bei Leistungswerten musst du diesen über den Adapter SourceAnalytix aufsummieren lassen und diesen hier verwenden.

    Tester adapter emma huawei inverter luna2000 modbus tcp modbus-proxy sdongle smartlogger sun2000

  • ich brauche etwas Nachhilfe mit Node Red und RS232
    OliverIOO OliverIO

    @andibr

    habe mir mal aus deinem screenhot oben die daten extrahiert. aber wie gesagt das ist nur annahme und folgenden testflow gemacht

    [
       {
           "id": "593468e.75a0498",
           "type": "tab",
           "label": "Flow 1",
           "disabled": false,
           "info": ""
       },
       {
           "id": "6602913b9103c8e9",
           "type": "function",
           "z": "593468e.75a0498",
           "name": "bereitstellung text",
           "func": "msg.payload = `@\nBattery  Volt     Tempr     Base State   Volt. State  Curr. State  Temp. State  Coulomb\n0        3467     29000     Idle         Normal       Normal       Normal       97%       95988 mAH\n1        3474     29000     Idle         Normal       Normal       Normal       97%       96070 mAH\n2        3463     29000     Idle         Normal       Normal       Normal       96%       95549 mAH\n3        3473     29000     Idle         Normal       Normal       Normal       97%       96070 mAH\n4        3468     29000     Idle         Normal       Normal       Normal       97%       95906 mAH\n5        3465     28000     Idle         Normal       Normal       Normal       96%       95329 mAH\n6        3459     28000     Idle         Normal       Normal       Normal       96%       95220 mAH\n7        3471     28000     Idle         Normal       Normal       Normal       97%       95906 mAH\n`;\n\nreturn msg;",
           "outputs": 1,
           "timeout": 0,
           "noerr": 0,
           "initialize": "",
           "finalize": "",
           "libs": [],
           "x": 130,
           "y": 120,
           "wires": [
               [
                   "2df68931298f6d99"
               ]
           ]
       },
       {
           "id": "2df68931298f6d99",
           "type": "function",
           "z": "593468e.75a0498",
           "name": "convert to msgs",
           "func": "const text = msg.payload;\n\nif (typeof text !== \"string\") {\n    node.error(\"msg.payload ist kein String\", msg);\n    return null;\n}\n\n// In einzelne Zeilen zerlegen\nconst lines = text\n    .split(/\\r?\\n/)\n    .map(line => line.trim())\n    .filter(line => line !== \"\");\n\n// Nur Zeilen berücksichtigen, die mit einer Batterienummer beginnen\nconst dataLines = lines.filter(line => /^\\d+\\s/.test(line));\n\nconst messages = [];\n\nfor (const line of dataLines) {\n\n    // Spalten sind durch mindestens 2 Leerzeichen getrennt\n    const columns = line.split(/\\s{2,}/);\n\n    if (columns.length < 9) {\n        node.warn(\"Zeile konnte nicht verarbeitet werden: \" + line);\n        continue;\n    }\n\n    const battery = {\n        battery: Number(columns[0]),\n        volt: Number(columns[1]),\n        tempr: Number(columns[2]),\n        baseState: columns[3],\n        voltState: columns[4],\n        currState: columns[5],\n        tempState: columns[6],\n        coulomb: Number(columns[7].replace(\"%\", \"\")),\n        capacity: Number(columns[8].replace(/[^\\d]/g, \"\"))\n    };\n\n    messages.push({\n        ...msg,\n        payload: battery\n    });\n}\n\n// Alle Nachrichten nacheinander über denselben Ausgang senden\nreturn [messages];",
           "outputs": 1,
           "timeout": 0,
           "noerr": 0,
           "initialize": "",
           "finalize": "",
           "libs": [],
           "x": 320,
           "y": 120,
           "wires": [
               [
                   "dd25a6c986c48c9a"
               ]
           ]
       },
       {
           "id": "c972ab9ba4b7bebd",
           "type": "debug",
           "z": "593468e.75a0498",
           "name": "debug 1",
           "active": true,
           "tosidebar": true,
           "console": false,
           "tostatus": false,
           "complete": "true",
           "targetType": "full",
           "statusVal": "",
           "statusType": "auto",
           "x": 400,
           "y": 200,
           "wires": []
       },
       {
           "id": "a349e5287a176ccf",
           "type": "inject",
           "z": "593468e.75a0498",
           "name": "Start button",
           "props": [
               {
                   "p": "payload"
               },
               {
                   "p": "topic",
                   "vt": "str"
               }
           ],
           "repeat": "",
           "crontab": "",
           "once": false,
           "onceDelay": 0.1,
           "topic": "",
           "payload": "",
           "payloadType": "date",
           "x": 110,
           "y": 60,
           "wires": [
               [
                   "6602913b9103c8e9"
               ]
           ]
       },
       {
           "id": "941c0f521bd7fa84",
           "type": "ioBroker out",
           "z": "593468e.75a0498",
           "name": "",
           "topic": "",
           "ack": "true",
           "autoCreate": "true",
           "stateName": "",
           "role": "",
           "payloadType": "",
           "readonly": "",
           "stateUnit": "",
           "stateMin": "",
           "stateMax": "",
           "x": 420,
           "y": 240,
           "wires": []
       },
       {
           "id": "dd25a6c986c48c9a",
           "type": "function",
           "z": "593468e.75a0498",
           "name": "function 1",
           "func": "const battery = msg.payload;\n\nif (!battery || battery.battery === undefined) {\n    node.error(\"Ungültiges Battery-Objekt\", msg);\n    return null;\n}\n\nconst batteryId = battery.battery;\n\nconst states = [\n    {\n        id: \"voltage\",\n        value: battery.volt,\n        name: \"Voltage\",\n        role: \"value.voltage\",\n        type: \"number\",\n        readonly: true,\n        unit: \"mV\",\n        min: 0\n    },\n    {\n        id: \"temperature\",\n        value: battery.tempr / 1000,\n        name: \"Temperature\",\n        role: \"value.temperature\",\n        type: \"number\",\n        readonly: true,\n        unit: \"°C\"\n    },\n    {\n        id: \"baseState\",\n        value: battery.baseState,\n        name: \"Base State\",\n        role: \"text\",\n        type: \"string\",\n        readonly: true\n    },\n    {\n        id: \"voltageState\",\n        value: battery.voltState,\n        name: \"Voltage State\",\n        role: \"text\",\n        type: \"string\",\n        readonly: true\n    },\n    {\n        id: \"currentState\",\n        value: battery.currState,\n        name: \"Current State\",\n        role: \"text\",\n        type: \"string\",\n        readonly: true\n    },\n    {\n        id: \"temperatureState\",\n        value: battery.tempState,\n        name: \"Temperature State\",\n        role: \"text\",\n        type: \"string\",\n        readonly: true\n    },\n    {\n        id: \"charge\",\n        value: battery.coulomb,\n        name: \"Charge\",\n        role: \"value.battery\",\n        type: \"number\",\n        readonly: true,\n        unit: \"%\",\n        min: 0,\n        max: 100\n    },\n    {\n        id: \"capacity\",\n        value: battery.capacity,\n        name: \"Capacity\",\n        role: \"value\",\n        type: \"number\",\n        readonly: true,\n        unit: \"mAh\",\n        min: 0\n    }\n];\n\nconst messages = [];\n\nfor (const state of states) {\n    const out = {\n        topic: `0_userdata.0.noderedbattery.${batteryId}.${state.id}`,\n        payload: state.value,\n\n        stateName: state.name,\n        stateRole: state.role,\n        stateType: state.type,\n        stateReadonly: state.readonly\n    };\n\n    if (state.unit !== undefined) {\n        out.stateUnit = state.unit;\n    }\n\n    if (state.min !== undefined) {\n        out.stateMin = state.min;\n    }\n\n    if (state.max !== undefined) {\n        out.stateMax = state.max;\n    }\n\n    messages.push(out);\n}\n\nreturn [messages];",
           "outputs": 1,
           "timeout": 0,
           "noerr": 0,
           "initialize": "",
           "finalize": "",
           "libs": [],
           "x": 160,
           "y": 200,
           "wires": [
               [
                   "941c0f521bd7fa84",
                   "c972ab9ba4b7bebd"
               ]
           ]
       }
    ]
    

    cb1bd8c0-3762-40d6-a8d1-b723eab43c91-image.jpeg

    1.das erste ist ein inject node zum manuellen starten des flows, den brauchst du nicht. bei dir wird aus der rs232 getriggert
    2.diese node stellt den test text bereit, bei dir wäre das dann die rs232 node
    3.hier wird nun aus dem ankommenden text die daten aufbereitet

    • verarbeitet wird nur wenn text kommt
    • text muss mindestens 9 zeichen lang sein
    • text wird dann in einzelne zeilen aufgeteilt evtl leerzeilen werden ausgefiltert
    • jede zeile wird mit regex in spalten aufgeteilt, dabei fliegen die leezeichen raus
    • jeder match wird dann in ein battery objekt in das entsprechende feld gelegt
    • aus jedem zeilen objekt wird dann ein eigenes messag objekt erzeugt
    • wenn alle zeilen verarbeitet sind, werden alle messages an node red zum weiterverarbeiten zurückgegeben
    1. debug node: die gibt dann für jede einzelne message (also jede zeile) eine nachricht im debug fenster (käfer symbol) aus. vgl screenshot

    danach darfst du damit machen was du willst :)
    also bspw ein battery objekt nehmen, aus den daten den datenpunkt ableiten (also das ist eine eigene node, bei dem du den datenpunktnamen und den zu schreibenden inhalt ermittelst) und dann mit der iobroker out node an iobroker senden

    Nachtrag:
    da ich gerade in spiellaune war habe ich dir deinen flow noch zu ende gemacht
    in der zusätzlichen node function 1 (habe sie jetzt nicht benannt)
    wird das battery objekt jetzt so aufbereitet, das es durch iobroker out direkt geschrieben wird
    Ich habe bei mir mal als hauptobjekt
    0_userdata.0.noderedbattery
    genommen.

    in den node red instanz einstellungen musst du dann noch die folgende option aktivieren
    55095627-51ff-4a83-83fb-bf59c2ab5aa8-image.jpeg

    das sieht dann so aus
    f3f93369-7869-4e4d-aaea-64ef8a7061cb-image.jpeg

    versuche aber jede einzelne node zu verstehen was die macht, sonst kannst du die nicht anpassen.

    Node-Red

  • ich brauche etwas Nachhilfe mit Node Red und RS232
    OliverIOO OliverIO

    @andibr sagte:

    Habe das ganze mal in Notepad hineinkopiert

    das ist gefährlich. du weißt nicht was der anzeigeeditor oder notepad da uU automatisch macht.

    @andibr sagte:

    Auch habe ich das ganze mal als csv gespeichert und auch Excell erkennt nicht autmatisch Spalten

    ja, aber excel kann feste breite schon, muss man aber einstellen, automatisch geht da nichts

    de8dd97a-1ffc-4207-9697-c993ad612465-image.jpeg

    aber du willst ja nicht excel, sondern node red

    stell doch mal den exakten output aus deinem rs232 in einer textdatei zur verfügung.
    also nichts editieren.
    dann mach ich dir eine funktionsnode die das ordentlich verarbeitet

    Node-Red

  • Ping Adapter und Iphone
    OliverIOO OliverIO

    @Michael-Schmitt

    Ob es mit iqcontrol zu tun hat weiß ich nicht.
    Aber speziell mit iOS Geräten berichten manche darüber, andere haben wohl kein Problem.
    Es hat wohl damit zu tun das der wlanchip in einen Art schlafmodus geht und dadurch das Gerät für den Router nicht mehr da ist

    Schau mal hier
    Mit hping3 Tool unter Linux, kann man das Gerät wieder aufwecken. Das zusätzliche Ping sorgt dafür das das Gerät in den arp Tabellen des routers wieder eingetragen wird.

    https://forum.iobroker.net/topic/46360/anwesenheitserkennung-mit-hping3/13?_=1786205222390

    Hm sehe gerade das hoing3 schon eingebaut ist.

    Einsteigerfragen

  • ich brauche etwas Nachhilfe mit Node Red und RS232
    OliverIOO OliverIO

    @andibr

    Schau mal in die Daten per hexadezimal rein.
    Sind das wirklich Leerzeichen oder evtl ein tab (hex glaube ich 09)
    Wenn die Daten tatsächlich mit einer unbestimmten Anzahl von Leerzeichen als trennzeichen kommt, dann ist es ein csv mit fester feldgrösse, dann wirst du zählen müssen und das der csv Node konfigurieren wenn sie das kann.

    Alternativ eine funktions Node, bei der man den Text anhand des Zeilenumbrüche in ein Array füllt und dann jede Zeile mit substring die verschiedenen Felder extrahiert.

    Willst du jede Zeile separat weiter verarbeiten oder die Tabelle als Ganzes?
    Das hängt dann davon ab ob die funktionsnode eine Message oder für jede Zeile eine Message erzeugt.

    Node-Red

  • ALEXA Einkaufsliste mit Marktzuordnung und Laufrouten
    mcm1957M mcm1957

    @homoran

    Da da kein Adapter veröffentlicht wird, bitte Beitrag löschen.
    Ohne Repo kann niemand checken was da dahinter steht. Außerdem muss bei allen Adaptern mit kommerzieller Lizenz @Bluefox sein OK geben.

    EDIT:
    Dev hat das Repo nun auf Github freigeschaltet. Mal sehen ob er es auch hier veröffentlicht.

    ...nicht in offiziellem Repo

Mitgliederliste

BluefoxB Bluefox
apollon77A apollon77
DutchmanD Dutchman
StabilostickS Stabilostick
bmuellerB bmueller
B Berto
torben-iometerT torben-iometer
C Creekhail
T tueftler17
SefinaS Sefina
M MatthiasUlrich
T tippy88
EisteeE Eistee
simonf04S simonf04
L Leonie
PischleuderP Pischleuder
reloxx13R reloxx13
C cybertron
L lubepi
K krobi
  • Anmelden

  • Du hast noch kein Konto? Registrieren

  • Anmelden oder registrieren, um zu suchen
  • Erster Beitrag
    Letzter Beitrag
0
  • Home
  • Aktuell
  • Tags
  • Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe