From 39df1ed0fa7721bf876c8abb156fe8ea2273482f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Bachmann?= Date: Tue, 14 Apr 2026 13:59:19 +0000 Subject: [PATCH] custom_components/whatsapp_bridge_integration/services.py aktualisiert --- .../whatsapp_bridge_integration/services.py | 48 +++++++++++-------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/custom_components/whatsapp_bridge_integration/services.py b/custom_components/whatsapp_bridge_integration/services.py index 7a8e159..b0854b8 100644 --- a/custom_components/whatsapp_bridge_integration/services.py +++ b/custom_components/whatsapp_bridge_integration/services.py @@ -1,43 +1,53 @@ import requests import logging from homeassistant.core import HomeAssistant, ServiceCall -from .const import DOMAIN +from .const import DOMAIN, CONF_PHONE_NUMBER _LOGGER = logging.getLogger(__name__) async def async_setup_services(hass: HomeAssistant): async def handle_send_message(call: ServiceCall): message = call.data.get("message") - target_entity = call.data.get("recipient") + recipient = call.data.get("recipient") targets = [] - # 1. Fall: Broadcast an alle - if target_entity == "all": - entities = hass.states.async_all("sensor") - for entity in entities: - if entity.entity_id.startswith("sensor.whatsapp_"): - targets.append(entity.attributes.get("phone_number")) + # 1. Fall: Broadcast (Wenn "all" getippt wurde) + if recipient == "all": + entries = hass.config_entries.async_entries(DOMAIN) + for e in entries: + targets.append(e.data.get(CONF_PHONE_NUMBER)) - # 2. Fall: Einzelne Entity ausgewählt - else: - state = hass.states.get(target_entity) - if state: - num = state.attributes.get("phone_number") - if num: - targets.append(num) + # 2. Fall: Eine Entity wurde ausgewählt (z.B. sensor.whatsapp_rene) + elif recipient.startswith("sensor."): + state = hass.states.get(recipient) + if state and "phone_number" in state.attributes: + targets.append(state.attributes.get("phone_number")) else: - # Fallback für manuelle Eingabe in YAML - targets.append(target_entity) + _LOGGER.error("Could not find phone number for entity: %s", recipient) + + # 3. Fall: Manuelle Nummer oder Name + else: + # Wir prüfen sicherheitshalber, ob es ein Account-Name ist + entries = hass.config_entries.async_entries(DOMAIN) + account_found = False + for e in entries: + if e.title.lower() == recipient.lower(): + targets.append(e.data.get(CONF_PHONE_NUMBER)) + account_found = True + break + + if not account_found: + targets.append(recipient) + # Senden for num in targets: url = "http://866fd2eb-whatsapp-bridge:3000/send" try: await hass.async_add_executor_job( lambda: requests.post(url, json={"number": num, "message": message}, timeout=10) ) - _LOGGER.info("Sent to %s", num) except Exception as e: - _LOGGER.error("Error: %s", str(e)) + _LOGGER.error("Error sending to %s: %s", num, str(e)) hass.services.async_register(DOMAIN, "send_message", handle_send_message) \ No newline at end of file