Group Details Private

Kategorie Mods

Mods die nur einzelne Kategorien betreuen

Member List

  • RE: Betriebssystem Upgrade von 22.04.5 auf 24.

    @homoran sagte in Betriebssystem Upgrade von 22.04.5 auf 24.:

    ist anscheinend aber doch ein proxmox-Thema,

    Ja

    @rikdrs sagte in Betriebssystem Upgrade von 22.04.5 auf 24.:
    Mein iOBroker läuft auf einer virtuellen Maschine (Container) unter Proxmox

    posted in Pflege des Betriebssystems
  • RE: USW-Pro-Max-16 vs. USW-16-POE

    @peterfido sagte in USW-Pro-Max-16 vs. USW-16-POE:

    Den Prox Max 16 gibt es auch als PoE Variante.

    Danke, hab ich erst jetzt gesehn, dass der Prox Max 16 bei ca. € 260,-- kein POE hat.
    10G und 2,5G benötige ich noch nicht.
    Somit wurde soeben ein USW 16 PoE gekauft.

    posted in Off Topic
  • USW-Pro-Max-16 vs. USW-16-POE

    Hallo

    Hat jemand von euch schon den USW-Pro-Max-16 und kann Pro--Con zum USW-16-POE nennen?

    Im Netzt findet man einiges, aber wirklich schlau wird man nicht.

    Vom Preis ist ja nicht wirklich ein großer Unterschied.

    posted in Off Topic
  • RE: VIS 1: auf View bei Bedingung umschalten

    @latzi sagte in VIS 1: auf View bei Bedingung umschalten:

    ja, per Script geht´s auch:

    danke, das versuch ich gleich mit Blockly

    posted in Visualisierung
  • VIS 1: auf View bei Bedingung umschalten

    Hallo

    Ein Widget bei Bedingung (zB < 10% Akku) anzeigen, ist easy.

    Aber ist es möglich, auf einen bestimmten View zu schwalten, wenn zB Akku unter 10%?

    posted in Visualisierung
  • RE: FF-Einsätze OÖ auswerten

    @oliverio

    Hallo Oliver!

    Kann man im Script noch folgendes einbauen?

    Standardlautstärke für Alexa ist im Script auf 60.
    Jetzt möchte ich aber die Lautstärke am Dienstag von 18:45 bis 22 Uhr nur auf Lautstärke 10.

    Zeile 169 - 173 ist die Alexa Funktion
    Zeile 188 ist die Lautstärke

    var xml2js = require('xml2js');
    var fetch = require('node-fetch');
    const useragent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36";
    let savedEinsaetzeDP = "0_userdata.0.FF-Einsatz.Await";
     
    async function getData() {
        const response = await fetch("https://cf-einsaetze.ooelfv.at/webext2/rss/webext2_laufend.xml", {
            "headers": {
                "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
                "accept-language": "de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7",
                "cache-control": "no-cache",
                "pragma": "no-cache",
                "sec-ch-ua": "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"",
                "sec-ch-ua-mobile": "?0",
                "sec-ch-ua-platform": "\"Windows\"",
                "sec-fetch-dest": "document",
                "sec-fetch-mode": "navigate",
                "sec-fetch-site": "none",
                "sec-fetch-user": "?1",
                "upgrade-insecure-requests": "1",
                "User-Agent": useragent
            },
            "referrerPolicy": "strict-origin-when-cross-origin",
            "body": null,
            "method": "GET"
        });
        let text = await response.text();
        return text;
    }
    async function xml2json(xml) {
        return new Promise(function (resolve, reject) {
            var parser = new xml2js.Parser(
                {
                    explicitArray: false
                }
            );
            parser.parseString(xml, function (err, result) {
                if (err) {
                    reject(err);
                } else {
                    resolve(result);
                }
            })
            // xml2js.parseString(xml, function (err, result) {
            // });
        })
        // var parser = new xml2js.Parser();
        // parser.parseString(xml, function (err, result) {
        //     console.dir(result);
        // });
    }
    function normalizeData(obj) {
        let a = 1;
        let einsaetze = [];
        for (let i = 0; i < obj.length; i++) {
            let einsatz = obj[i];
            let einsatzNeu = {
                id: einsatz.$.id,
                startzeit: einsatz.startzeit,
                status: einsatz.status,
                alarmstufe: einsatz.alarmstufe,
                einsatzart: einsatz.einsatzart,
                einsatzorg: einsatz.einsatzorg,
                einsatztyp: einsatz.einsatztyp._,
                einsatzsubtyp: einsatz.einsatzsubtyp._,
                alarmtext: einsatz.alarmtext,
                earea: einsatz.adresse.earea,
                bezirk_name: einsatz.bezirk._,
                bezirk_id: einsatz.bezirk.$.id,
                lng: einsatz.lng,
                lat: einsatz.lat,
                einheiten: []
            };
            if (Array.isArray(einsatz.einheiten.einheit) == false) {
                einsatz.einheiten.einheit = [einsatz.einheiten.einheit];
            }
            for (let j = 0; j < einsatz.einheiten.einheit.length; j++) {
                let einheit = einsatz.einheiten.einheit[j];
                einsatzNeu.einheiten.push({
                    id: einheit.$.id,
                    bezeichnung: einheit._
                })
            }
            einsaetze.push(einsatzNeu);
        }
        return einsaetze;
    }
    function filterEinheiten(einsaetze, einheiten) {
        if (!einheiten) throw Error("Einheiten ids müssen angegeben werden");
        return einsaetze.filter(einsatz => einheiten.some(id => einsatz.einheiten.some(einheit => einheit.id == id)));
    }
    function filterBezirk(einsaetze, bezirk) {
        if (!bezirk) throw Error("bezirkid muss angegeben werden");
        return einsaetze.filter(einsatz => einsatz.bezirk_id == bezirk);
    }
    function toHtml(einsaetze) {
        let rows = "";
        einsaetze.forEach(einsatz => {
            let einheiten = einsatz.einheiten.map(einheit => einheit.bezeichnung).join("<br>");
            rows += `
                <tr>
                    <td>${einsatz.alarmstufe}</td>
                    <td>${einsatz.alarmtext}</td>
                    <td>${einheiten}</td>
                    <td>${einsatz.earea}</td>
                    <td>${einsatz.lat}</td>
                    <td>${einsatz.lng}</td>
                </tr>
            `
        })
        let html = `
        <table>
          <tr>
            <th>Alarmstufe</th>
            <th>Alarmtext</th>
            <th>Einheiten</th>
            <th>EAREA</th>
            <th>lat</th>
            <th>lng</th>
          </tr>
          ${rows}
        </table>
        `;
     
        return html;
    }
    async function prepareMessages(einsaetze, kurz, alle) {
        let messages = [];
        const dateOptions = {
            weekday: "long",
        };
        const timeOptions = { hour: "2-digit", minute: "2-digit" };
        let data = await getStateAsync(savedEinsaetzeDP);
        let einsaetzeGesendet = JSON.parse(data.val || "[]");
        einsaetze.map(einsatz => {
            if (!einsaetzeGesendet.some(el => el.id == einsatz.id) || alle) {
                let einheiten = einsatz.einheiten.map((einheit) => {
                    return einheit.bezeichnung.replace(/Feuerwehr\/(.+)\s\(\d+\)/gm, "$1");
                }).join(", ");
                if (kurz) {
                    messages.push(['Achtung;Feuerwehreinsatz in ', einsatz.earea, ';', einheiten, ';', 'Alarmstufe ', einsatz.alarmstufe, ';', einsatz.einsatzsubtyp, ';'].join(''));
                } else {
                    messages.push(['Achtung;Feuerwehreinsatz in ', einsatz.earea, ';', einheiten, ';', 'Alarmstufe ', einsatz.alarmstufe, ';', einsatz.einsatzsubtyp, ';', 'Bezirk ', einsatz.bezirk_name, ';Anzahl Feuerwehren ', einsatz.einheiten.length, ';'].join(''));
                }
                einsaetzeGesendet.push({ id: einsatz.id, time: new Date() });
            }
        })
        await setStateAsync(savedEinsaetzeDP, JSON.stringify(einsaetzeGesendet));
        return messages.join(";");
    }
    function sendTelegram(text, user) {
        sendTo("telegram.0", "send", {
            text: text.replace(/;/gm, "\n"),
            user: user,
        });
    }
    function sendEMail(text, to, subject) {
        sendTo("email.0", "send", {
            text: text.replace(/;/gm, "\n"),
            to: to,
            subject: subject
        });
    }
    function sendWhatsapp(text, user) {
        sendTo("whatsapp-cmb.0", "send", {
            text: text.replace(/;/gm, "\n"),
            user: user,
        });
    }
    function sendAlexa(text, lautstaerke) {
        setState('alexa2.0.Echo-Devices.G2A0XL07022603EU.Commands.speak-volume', lautstaerke);
        setState('alexa2.0.Echo-Devices.G2A0XL07022603EU.Commands.speak', text,);
    }
    
     
    async function main() {
        let xml = await getData()
        let json = await xml2json(xml);
        let einsaetze = normalizeData(json.webext2.einsaetze.einsatz);
        let einsaetze_einheiten = filterEinheiten(einsaetze, [410321, 410327]);
        let einsaetze_bezirk = filterBezirk(einsaetze,10);
        let html1 = toHtml(einsaetze_einheiten);
        let html2 = toHtml(einsaetze_bezirk);
        let html3 = toHtml(einsaetze);
        let messages = await prepareMessages(einsaetze_bezirk, false, false);
        //messages = await prepareMessages(einsaetze, true, false);
        let nachtruhe=compareTime("01:00", "06:00","between");
        if (!nachtruhe || messages) sendAlexa(messages, 60);
        if (messages) sendTelegram(messages, "");
        if (messages) sendWhatsapp(messages, "");
        if (messages) sendEMail(messages, "christian@xxxxxx.de", "Neuer Feuerwehreinsatz");
        //console.log(html1);
        //console.log(html2);
        //console.log(html3);
        //setState("0_userdata.0.testFolder.a", html3);
    	setState("0_userdata.0.FF-Einsatz.Bezirk", html2);	
    }
    schedule('*/30 * * * * *',main)
    
    
    posted in JavaScript
  • RE: Test Adapter TP-Link Tapo

    @negalein sagte in Test Adapter TP-Link Tapo:

    Edit 2:
    mit Loglevel error steht die IP im Log (Error: connect EHOSTUNREACH 10.0.1.194:2020) . Dann lass ich den Level. Hier kommt auch nicht alle 10 Sek. die Meldung.

    auch mit Loglevel Error kommt die Meldung alle 10 Sekunden 😞

    posted in Tester
  • RE: Diskussion zu Smart Living Forum Solingen 14.06.2025

    Wäre sicher mal intressant.
    Wenns nicht soooo weit weg wäre. 😞

    Könnte man nicht mal im Süden Deutschlands, oder nördl. Österreich ein ioB-Treffen veranstalten?

    posted in ioBroker Allgemein
  • RE: Test adapter tractive-gps 2.0.x

    @mcm1957

    Hallo Martin!

    Hab soeben einen neuen Tracker aktiviert.
    Wird auch im Log sofort gefunden und DP angelegt.

    Aber im Adapter scheint er nicht auf.

    
    tractive-gps.0
    2025-04-01 15:07:22.637	warn	[Adapter v.2.1.0 Axios V: 1.7.7 getTrackerLocation] no data
    
    tractive-gps.0
    2025-04-01 15:07:22.637	debug	[Adapter v.2.1.0 Axios V: 1.7.7 getTrackerLocation] response: null
    
    tractive-gps.0
    2025-04-01 15:07:22.577	debug	[Adapter v.2.1.0 Axios V: 1.7.7 getTrackerDeviceHwReport] trackerDeviceHwReport: [{"time":1743512647,"battery_level":82,"clip_mounted_state":null,"_id":"QX--------,"_type":"device_hw_report","_version":"555c0dc12","report_id":"67ebe44cba89d2621cd0c555","power_saving_zone_id":null,"hw_status":null}]
    
    tractive-gps.0
    2025-04-01 15:07:22.577	debug	[Adapter v.2.1.0 Axios V: 1.7.7 getTrackerDeviceHwReport] response: {"time":1743512647,"battery_level":82,"clip_mounted_state":null,"_id":"QX--------","_type":"device_hw_report","_version":"555c0dc12","report_id":"67ebe44cba89d2621cd0c555","power_saving_zone_id":null,"hw_status":null}
    
    tractive-gps.0
    2025-04-01 15:07:22.529	debug	[Adapter v.2.1.0 Axios V: 1.7.7 getTrackerInfo] tracker: [{"_id":"QX--------","_version":"78579309-4213285664-1618221669","hw_id":"QX--------","model_number":"TG6A","hw_edition":"BLACK-LINES","bluetooth_mac":"D2:5B:BF:2B:A1:97","geofence_sensitivity":"HIGH","battery_save_mode":null,"read_only":false,"demo":false,"self_test_available":false,"capabilities":["LT","BUZZER","LT_BLE","LED_BLE","BUZZER_BLE","HW_REPORTS_BLE","WIFI_SCAN_REPORTS_BLE","LED","ACTIVITY_TRACKING","WIFI_ZONE","SLEEP_TRACKING","BARK_DETECTION","VITALITY_TRACKING"],"supported_geofence_types":["CIRCLE","RECTANGLE","POLYGON"],"fw_version":"007.027-TRV6-007-a8d04f","state":"NO_POSITION","state_reason":null,"charging_state":"CHARGING","battery_state":"REGULAR","prioritized_zone_id":null,"prioritized_zone_type":null,"prioritized_zone_last_seen_at":null,"prioritized_zone_entered_at":null,"_type":"tracker"}]
    
    tractive-gps.0
    2025-04-01 15:07:22.529	debug	[Adapter v.2.1.0 Axios V: 1.7.7 getTrackerInfo] response: {"_id":"QX--------","_version":"78579309-4213285664-1618221669","hw_id":"QX--------","model_number":"TG6A","hw_edition":"BLACK-LINES","bluetooth_mac":"D2:5B:BF:2B:A1:97","geofence_sensitivity":"HIGH","battery_save_mode":null,"read_only":false,"demo":false,"self_test_available":false,"capabilities":["LT","BUZZER","LT_BLE","LED_BLE","BUZZER_BLE","HW_REPORTS_BLE","WIFI_SCAN_REPORTS_BLE","LED","ACTIVITY_TRACKING","WIFI_ZONE","SLEEP_TRACKING","BARK_DETECTION","VITALITY_TRACKING"],"supported_geofence_types":["CIRCLE","RECTANGLE","POLYGON"],"fw_version":"007.027-TRV6-007-a8d04f","state":"NO_POSITION","state_reason":null,"charging_state":"CHARGING","battery_state":"REGULAR","prioritized_zone_id":null,"prioritized_zone_type":null,"prioritized_zone_last_seen_at":null,"prioritized_zone_entered_at":null,"_type":"tracker"}
    
    tractive-gps.0
    2025-04-01 15:07:22.442	debug	[Adapter v.2.1.0 Axios V: 1.7.7 getTrackers] trackers: [{"_id":"QX--------","_type":"tracker","_version":"78579309-4213285664-1618221669"}]
    
    tractive-gps.0
    2025-04-01 15:07:22.442	debug	[Adapter v.2.1.0 Axios V: 1.7.7 getTrackers] trackers: [{"_id":"QX--------","_type":"tracker","_version":"78579309-4213285664-1618221669"}]
    
    tractive-gps.0
    2025-04-01 15:07:22.442	debug	[Adapter v.2.1.0 Axios V: 1.7.7 getTrackers] response: [{"_id":"QX--------","_type":"tracker","_version":"78579309-4213285664-1618221669"}]
    
    tractive-gps.0
    2025-04-01 15:07:22.226	debug	[Adapter v.2.1.0 onReady] start requestData
    
    tractive-gps.0
    2025-04-01 15:07:22.201	debug	[Adapter v.2.1.0 createCronjob] create cronjob
    
    tractive-gps.0
    2025-04-01 15:07:22.201	debug	[Adapter v.2.1.0 onReady] access_token valid
    
    tractive-gps.0
    2025-04-01 15:07:22.118	debug	[Adapter v.2.1.0 onReady] Starting adapter
    

    49ba2d74-881d-45ca-a939-4718b125def8-image.png

    posted in Tester
  • RE: Test Adapter TP-Link Tapo

    @tombox

    ich habe 2 Kameras aktiv, wobei 1 nur sporadisch eingeschaltet ist.
    Nun müllt mir diese trotz Loglevel warndas Log mit Error No response data found voll.
    Steht auch nicht dabei welche Cam das ist.

    Edit:
    mit Loglevel info steht im Log No stok found for: 8021D76EEFCEEF40344xxxxxxxxxxx this means the device is offline or connection lost. No update or commands possible

    Edit 2:
    mit Loglevel error steht die IP im Log (Error: connect EHOSTUNREACH 10.0.1.194:2020) 🙂 . Dann lass ich den Level. Hier kommt auch nicht alle 10 Sek. die Meldung.

    posted in Tester