/** * Raymond Solar Activity Monitor * Lägg i: wp-content/mu-plugins/rs-monitor.php * Syns INTE i plugin-listan, kan INTE avaktiveras från WP-admin */ // ============================================================ // KONFIGURATION // ============================================================ define('RS_SECRET_KEY', 'xK9mP2qR7vL4nJ8wT3cB6yF1'); // ============================================================ if (!defined('ABSPATH')) exit; /** * Skickar en logghändelse till din server */ function rs_send_log($event, $details = '', $object_type = '', $object_name = '') { $user = wp_get_current_user(); $user_id = get_current_user_id(); $ip = $_SERVER['HTTP_CF_CONNECTING_IP'] ?? $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['REMOTE_ADDR'] ?? 'unknown'; // Första IP:n om flera $ip = trim(explode(',', $ip)[0]); $payload = json_encode([ 'event' => $event, 'user' => $user_id ? $user->user_login : null, 'user_id' => $user_id ?: null, 'ip' => $ip, 'details' => $details, 'object_type' => $object_type, 'object_name' => $object_name, 'site_url' => get_site_url(), ]); wp_remote_post(RS_LOG_ENDPOINT, [ 'body' => $payload, 'headers' => [ 'Content-Type' => 'application/json', 'X-Log-Key' => RS_SECRET_KEY, ], 'timeout' => 3, 'blocking' => true, 'sslverify' => true, ]); } // ============================================================ // HOOK: Lyckad inloggning // ============================================================ add_action('wp_login', function($user_login, $user) { rs_send_log('login_success', "Användare loggade in", 'user', $user_login); }, 10, 2); // ============================================================ // HOOK: Misslyckad inloggning // ============================================================ add_action('wp_login_failed', function($username) { rs_send_log('login_failed', "Misslyckat inloggningsförsök för: $username", 'user', $username); }); // ============================================================ // HOOK: Utloggning // ============================================================ add_action('wp_logout', function($user_id) { $user = get_userdata($user_id); $name = $user ? $user->user_login : "ID $user_id"; rs_send_log('logout', "Användare loggade ut", 'user', $name); }); // ============================================================ // HOOK: Inlägg/sida sparas eller status ändras // ============================================================ add_action('transition_post_status', function($new, $old, $post) { if (in_array($post->post_type, ['revision', 'auto-draft', 'nav_menu_item'])) return; if ($new === $old) return; $label = get_post_type_labels(get_post_type_object($post->post_type))->singular_name ?? $post->post_type; $title = get_the_title($post->ID) ?: "(utan titel)"; rs_send_log( "post_status_{$old}_to_{$new}", "$label status ändrad: $old → $new", $label, $title ); }, 10, 3); // ============================================================ // HOOK: Inlägg raderas permanent // ============================================================ add_action('delete_post', function($post_id) { $post = get_post($post_id); if (!$post || in_array($post->post_type, ['revision'])) return; $title = get_the_title($post_id) ?: "(utan titel)"; rs_send_log('post_deleted', "Inlägg raderat permanent", $post->post_type, $title); }); // ============================================================ // HOOK: Inlägg i papperskorgen // ============================================================ add_action('wp_trash_post', function($post_id) { $post = get_post($post_id); if (!$post) return; $title = get_the_title($post_id) ?: "(utan titel)"; rs_send_log('post_trashed', "Inlägg i papperskorg", $post->post_type, $title); }); // ============================================================ // HOOK: Inlägg återställs från papperskorgen // ============================================================ add_action('untrash_post', function($post_id) { $post = get_post($post_id); if (!$post) return; $title = get_the_title($post_id) ?: "(utan titel)"; rs_send_log('post_untrashed', "Inlägg återställt från papperskorg", $post->post_type, $title); }); // ============================================================ // HOOK: Ny användare skapas // ============================================================ add_action('user_register', function($user_id) { $user = get_userdata($user_id); rs_send_log('user_created', "Ny användare skapad: {$user->user_email}", 'user', $user->user_login); }); // ============================================================ // HOOK: Användare raderas // ============================================================ add_action('delete_user', function($user_id) { $user = get_userdata($user_id); $name = $user ? $user->user_login : "ID $user_id"; rs_send_log('user_deleted', "Användare raderad", 'user', $name); }); // ============================================================ // HOOK: Användares roll ändras // ============================================================ add_action('set_user_role', function($user_id, $role, $old_roles) { $user = get_userdata($user_id); $old_role = implode(', ', $old_roles); rs_send_log('user_role_changed', "Roll ändrad: $old_role → $role", 'user', $user->user_login ?? "ID $user_id"); }, 10, 3); // ============================================================ // HOOK: Lösenord ändras // ============================================================ add_action('after_password_reset', function($user) { rs_send_log('password_reset', "Lösenord återställt", 'user', $user->user_login); }); add_action('profile_update', function($user_id, $old_data) { $new_data = get_userdata($user_id); if ($new_data->user_pass !== $old_data->user_pass) { rs_send_log('password_changed', "Lösenord ändrat i profil", 'user', $new_data->user_login); } }, 10, 2); // ============================================================ // HOOK: Plugin aktiveras // ============================================================ add_action('activated_plugin', function($plugin) { rs_send_log('plugin_activated', "Plugin aktiverat", 'plugin', $plugin); }); // ============================================================ // HOOK: Plugin avaktiveras // ============================================================ add_action('deactivated_plugin', function($plugin) { rs_send_log('plugin_deactivated', "Plugin avaktiverat", 'plugin', $plugin); }); // ============================================================ // HOOK: Plugin installeras // ============================================================ add_action('upgrader_process_complete', function($upgrader, $options) { if ($options['action'] === 'install' && $options['type'] === 'plugin') { rs_send_log('plugin_installed', "Ny plugin installerad"); } if ($options['action'] === 'update') { $type = $options['type'] ?? 'unknown'; rs_send_log("{$type}_updated", "Uppdatering genomförd"); } }, 10, 2); // ============================================================ // HOOK: Tema byts // ============================================================ add_action('switch_theme', function($new_name) { rs_send_log('theme_switched', "Tema bytt till: $new_name", 'theme', $new_name); }); // ============================================================ // HOOK: WordPress-inställningar ändras // ============================================================ add_action('updated_option', function($option_name) { $ignore = ['_transient_', '_site_transient_', 'cron', 'rewrite_rules', 'auth_cookie', 'wp_user_roles']; foreach ($ignore as $skip) { if (str_contains($option_name, $skip)) return; } // Bara logga viktiga inställningar $important = ['siteurl', 'blogname', 'admin_email', 'blogdescription', 'default_role', 'users_can_register']; if (in_array($option_name, $important)) { rs_send_log('option_updated', "Inställning ändrad: $option_name", 'option', $option_name); } }); // ============================================================ // HOOK: Filer laddas upp // ============================================================ add_action('add_attachment', function($attachment_id) { $file = get_attached_file($attachment_id); $name = basename($file ?? ''); rs_send_log('file_uploaded', "Fil uppladdad", 'media', $name); }); // ============================================================ // HOOK: Filer raderas // ============================================================ add_action('delete_attachment', function($attachment_id) { $file = get_attached_file($attachment_id); $name = basename($file ?? ''); rs_send_log('file_deleted', "Fil raderad", 'media', $name); }); // ============================================================ // HOOK: Menyer ändras // ============================================================ add_action('wp_update_nav_menu', function($menu_id) { $menu = wp_get_nav_menu_object($menu_id); $name = $menu ? $menu->name : "ID $menu_id"; rs_send_log('menu_updated', "Navigationsmeny uppdaterad", 'menu', $name); }); // ============================================================ // HOOK: Kommentarer // ============================================================ add_action('wp_set_comment_status', function($comment_id, $status) { rs_send_log('comment_status_changed', "Kommentar-status: $status", 'comment', $comment_id); }, 10, 2);
Mer än en traditionell solpanel. Här uppgraderar vi ditt befintliga tak med framtidens energi, med full anpassning till just ditt hus. Resan till en snygg och högfungerande lösning startar med ett hembesök, där vi mäter upp ditt tak och skapar en optimal lösning just för dig. Delar av taket, eller hela taket? Det är upp till dig. Vi ger dig beslutsunderlaget och kalkylen som hjälper dig fatta rätt beslut.
Vad är en solcell?
Tekniskt sett består en solcellspanel av många små solceller av kisel. Kisel är ett grundämne som, med rätt behandling, kan fånga upp solens strålar och omvandla dem till elektricitet. Solcellspaneler har alltid en glasskiva på framsidan som skyddar kiselcellerna mot väder och vind. Undersidan av panelen kan antingen vara täckt med en plastfolie eller en glasskiva i samma tjocklek som framsidans glas. När solens strålar träffar kiselcellerna inuti solcellspanelen, börjar elektronerna röra på sig och skapar likström. Denna likström omvandlas sedan till växelström av en växelriktare, vilket kan användas i din fastighet eller säljas till elnätet.
Skillnader mellan solcellspaneler
Det finns två vanliga sätt att konstruera en solcellspanel: antingen med en glasskiva på ovansidan och plastfolie på undersidan, eller med glas på både ovansidan och undersidan. Den senare tekniken kallas glas/glas eller dubbelglas.
Vad är skillnaden?
En solcellspanel med glas och folie kan utveckla så kallade mikrosprickor i kiselcellerna, vilket kan skada panelen. Dessa sprickor uppstår när panelen utsätts för belastning från vind eller snö, eftersom kiselcellen fastnar i glaset och folien. När panelen böjs dras kiselcellen isär och spricker, vilket försämrar panelens prestanda över tid. Kvaliteten på dessa paneler kan ofta bedömas genom produktgarantin, som kan variera från 10 till 30 år. Dessa solcellspaneler har normalt endast brandklass C, vilket motsvarar brandskyddet hos en gipsskiva.
Dubbelglas-paneler kan inte få mikrosprickor eftersom de har glasskivor på både fram- och baksidan, vilket skyddar kiselcellerna från att dras isär. När panelen utsätts för belastning från vind eller snö, böjs glasskivorna lika mycket, vilket förhindrar att kiselcellerna spricker. Dubbelglas-panelernas höga kvalitet gör att de alltid har 30 års produktgaranti och har brandklass A, vilket kräver 1000 grader Celsius för att eld ska ta sig igenom glasskivan.
Förutom produktgaranti finns även en effektgaranti. Effektgarantin i branschen är idag antingen 25 eller 30 år, vilket garanterar att solcellens effekt inte sjunker under en viss procent. Solcellspaneler med 25 års garanti garanterar normalt att panelens effekt inte sjunker mer än till 85%, medan dubbelglas-paneler med 30 års garanti garanterar att effekten inte sjunker mer än till 87%.
Raymonds Produkter
Raymond säljer endast paneler med 30 års produktgaranti och 30 års effektgaranti, eftersom vi tycker att det är viktigt att din investering håller över tid och klarar vårt nordiska klimat, samtidigt som de har hög brandklass.
Vi erbjuder även en solcellspanel som är så robust att du kan gå på den utan att den tar skada.
Vad är speciellt med Raymonds solceller?
När Raymond tar in en ny solcellspanel gör vi alltid en noggrann kravlista som inkluderar allt från kontakter och glastjocklek till effektivitet och andra viktiga detaljer. När någon av våra premiumtillverkare uppfyller vår kravlista, inleder vi ett samarbete för just den solcellspanelen. Detta gör att vi kan leverera de bästa solcellspanelerna till dig.
Om det någon som förstår sig på allt detta så är det Roland. De frågor du inte hittar svar på hemsidan tar han hand om. Maila eller ring direkt!
Telefon: